TCP 三次握手和四次挥手
2021-04-18 本文已影响0人
my木子
网络模型
网络模型三次握手
三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换
通信是双工的,双方都要确保自己可以发送和接收对方的数据,客户端和服务端要确认双方的 发送 和 接收 能力是否正常,最少三次握手
- 服务端:客户端的 发送 能力正常
- 客户端:服务端的 接收、发送 能力正常
- 服务端:客户端的 接收 能力正常
标志位:SYN(发起一个新连接) ACK(确认序号有效) RST(重置连接) FIN(释放一个连接)
- 客户端:我要建立连接,你是服务端么?(客户端 给 服务端 发送SYN报文)
- 服务端:我是服务端,你是客户端么?(服务端 收到 SYN 报文之后,应答客户端 SYN+ACK 报文,等待 2MSL)
- 客户端:我是客户端,可以建立连接。(客户端 收到 SYN+ACK 报文之后,回应 ACK 报文,服务端 收到 ACK 报文之后,建立连接)
四次挥手(可以使客户端发起,也可以是服务器端发起)
为什么 TCP 握手只要三次,而分手却要四次呢?因为当客户端提出断开时,可能服务端还在传输数据,所以服务器在返回给客户端 ACK 后等待 2MSL,再返回FIN。
- 服务端(主动):我要断开了。( 服务端 给 客户端 发送 FIN+ACK 报文)
- 客户端:知道了,你断开吧。( 客户端 发送 ACK 报文)
- 客户端:我也要断开了。( 客户端 发送 FIN+ACK 报文)
- 服务端:好的。( 服务端 发送 ACK 报文,同时断开连接,客户端 收到报文后也断开连接)
TCP 滑动窗口(发送窗口和接收窗口)
- 发送端发送过多,而接收端无法消化的时候,通过接收缓存区的大小控制发送端的发送,进行流量控制。如果对方的接收缓存区满了,就不能再继续发送了。而这种流量控制的过程就需要在发送端维护一个发送窗口,在接收端维持一个接收窗口。