编辑
2023-03-02
TCPUDP
00

目录

2022-11-15
tcp和udp区别
为什么不能设计成两次握手,四次握手?
如何处理丢包、乱序问题
四次挥手
总结区别
http1.0与https1.1有什么区别
get和post区别
session,token,cookies 区别
请求一个网址发生的完整过程
常见网络状态响应码
2023-2-9
nginx

2022-11-15

tcp和udp区别

tcp:三次握手,传输确认,四次挥手

三次握手:

2022-11-15_16-01-45.jpg

  1. 客户端想要与服务端建立连接,初始化一个tcp的init状态,并发送一个syn包给server询问能否建立连接,并将状态改为syn-send
  2. 服务器收到syn包后初始化一个新的tcp状态listen,并发送syn+ack包给客户端,并将状态改为syn-rcvd
  3. 客户端收到syn+ack包后,回复ack包,并将状态改为established
  4. 服务端收到ack包后,将状态改为established
  5. 双方建立连接

中间互相发送的数据包共三次,所以称之为三次握手

为什么不能设计成两次握手,四次握手?

如果两次握手:服务端发送syn+ack后就建立连接的话,对于已失效的数据包送达到服务端,它会认为是新的连接回复完syn+ack后等待传输数据,但是此数据包对于客户端来说已失效,不再传输数据,导致两端的状态不一致,浪费了服务端的资源

syn包可能在传输过程中阻塞了,导致客户端认为超时,会重发syn包

这时服务端收到并建立连接,但是第一个syn包又送到了服务端,这时候两端的状态就不一致了,服务端认为有两个连接,客户端认为只有一个,

在三次握手机制下,服务端收不到ack包就不会建立连接,自然不会产生上述问题,这种机制本质上是在网络信道不可靠的情况下建立可靠的连接

如果是四次握手,会造成资源浪费,因为第四次握手和第二次等价,无需做第四次握手

如何处理丢包、乱序问题

两端都有一个缓冲区概念,第一个数据包的序列号为0,第二个为1,

那么任何一段发出去的数据序列号n,接收到的数据序列号都是n+1

如果不是n+1,是n-1或n+1都会触发重传机制,就是重传序列号为n的数据包

四次挥手

2022-11-15_16-56-05.jpg

客户端和服务端都可以发起关闭连接请求

例:

客户端主动发起关闭连接请求,发送一个FIN包给服务端,将状态由established改为FIN-WAIT-1状态,此时客户端不再请求server数据

服务端收到FIN包,回复ACK包,将将状态由established改为CLOSE-WAIT状态,

客户端收到ACK后,将状态改为FIN-WAIT-2,此时服务端还可发送未完成的数据,客户端也可接收数据

服务端发送数据完毕,发送最后一包FIN包,将状态改为LAST-ACK

客户端接收到FIN,回复ACK,将状态改为TIME-WAIT状态,超过超时时间后,状态改为closed状态

服务端收到ACK,将状态改为CLOSED状态

为什么要由超时等待时间

最后的ACK包种种原因没有到达服务端,它的状态一直停留在LAST-ACK,连接无法释放

有了这种机制,ACK没到服务端,会重发FIN包,并刷新超时时间,客户端重发ACK包4

总结区别

tcp:稳定可靠准确

udp:速度快,性能开销小

http1.0与https1.1有什么区别

  1. http1.0为短连接;http1.1请求头携带connetion
    ,建立长链接
  2. http1.0一个连接对应一个请求一个响应;1.1连接过程中可实现多个请求多个响应,且不需等待响应可发送下一个请求
  3. http1.1增加了100状态码,允许客户端向服务端发送请求头待确认后再发送请求体内容,节省了带宽
  4. http1.0认为一个主机拥有唯一IP;http1.1中一个IP对应多个主机,增加了host指明主机名
  5. http1.1增加更多新请求头,错误响应状态码与缓存机制

get和post区别

  • GET 请求参数在 URL 中;POST 请求参数放在请求正文中
  • GET 请求参数有限制(例如浏览器对 URL 长度限制);POST 无限制
  • GET 参数存放在链接中直接保存在浏览器历史记录中,较不安全
  • GET 大多数用于信息获取,POST 用于信息修改,对服务器安全影响程度不同

session,token,cookies 区别

  • Cookie:由服务器生成,保存在客户端中
  • Session:一般通过Cookie传输,用于区分用户,存储在服务器中(容易占用服务器资源,且服务器故障,负载均衡等容易丢失或请求到其他服务器中)
  • Token:一般通过Cookie传输,将用户数据进行签名(加密),并将签名和用户数据整合成token发送给客户端,客户端携带token请求时,将token中用户数据再次签名,与token中的签名进行对比,一致认为用户已认证登录,不需要存储在服务器中

请求一个网址发生的完整过程

  1. DNS解析:通过浏览器缓存->操作系统缓存->路由器缓存->DNS缓存(运营商)->根域名服务器
  2. 建立TCP连接,发起三次握手
  3. 发送HTTP请求
  4. 服务器处理请求
  5. 浏览器解析渲染页面:
    • 浏览器读取响应加载 HTML
    • 静态资源加载
    • 动态资源加载
  6. 释放TCP连接,四次挥手

常见网络状态响应码

  • 1XX 指示信息,请求已接受,等待继续处理
  • 2XX 请求接受
  • 3XX 重定向
  • 4XX 客户端错误
  • 5XX 服务端错误
  • 301 永久性转移,302 暂时性转移,400 客户端请求有错(安全拦截),401 请求未授权,403 禁止访问,404 资源未找到
  • 501 服务器内部错误,502 错误网关,503 服务器不可用,504 网关超时

2023-2-9

nginx

nginx是一款http服务器和反向代理服务器。

image-20230209162739592.png

正向代理:如翻墙的软件起到正向代理,个人电脑访问youtube的内容用到的clash

image-20230209162752226.png

反向代理:如我是youtube后台管理员手上有n台服务器,随便给一台让别人访问,这个过程叫反向代理

负载均衡算法:

  1. 轮询法:按请求顺序轮流分配流量到后台服务器,不关心服务器实际的连接数和系统负载,适用于所有硬件都相同的场景
  2. 加权轮询法:按照配置的权重将流量分发到服务器。适用于硬件性能规格不同的场景
  3. 源地址散列法:根据来源ip地址进行hash计算得到应用服务器,这样在单位时间内来自于同一个ip地址的请求都在一个服务器上处理,请求的会话信息上下文都在上面实现会话粘滞session sticky
  4. 最小连接数法:记录每个应用服务器正在处理的连接数,将新的请求分发到最少连接的服务器上

负载均衡应用场景:

  • HTTP重定向
  • DNS域名解析
  • 反向代理(应用层HTTP负载均衡)
  • IP负载均衡(网络层负载均衡)
  • 直接路由(数据链路层负载均衡)