TCP四次挥手的过程

那么四次挥手的过程呢?

  1. client端向server发送FIN包,进入FIN_WAIT_1状态,这代表client端已经没有数据要发送了
  2. server端收到之后,返回一个ACK,进入CLOSE_WAIT等待关闭的状态,因为server端可能还有没有发送完成的数据
  3. 等到server端数据都发送完毕之后,server端就向client发送FIN,进入LAST_ACK状态
  4. client端收到ACK之后,进入TIME_WAIT的状态,同时回复ACK,server收到之后直接进入CLOSED状态,连接关闭。但是client要等待2MSL(报文最大生存时间)的时间,才会进入CLOSED状态。

为什么要等待2MSL的时间才关闭?

为了保证连接的可靠关闭。如果server没有收到最后一个ACK,那么就会重发FIN。
为了避免端口重用带来的数据混淆。如果client直接进入CLOSED状态,又用相同端口号向server建立一个连接,上一次连接的部分数据在网络中延迟到达server,数据就可能发生混淆了。

TCP怎么保证传输过程的可靠性?

校验和: 发送方在发送数据之前计算校验和,接收方收到数据后同样计算,如果不一致,那么传输有误。
确认应答,序列号:TCP进行传输时数据都进行了编号,每次接收方返回ACK都有确认序列号。
超时重传: 如果发送方发送数据一段时间后没有收到ACK,那么就重发数据。
连接管理: 三次握手和四次挥手的过程。
流量控制: TCP协议报头包含16位的窗口大小,接收方会在返回ACK时同时把自己的即时窗口填入,发送方就根据报文中窗口的大小控制发送速度。
拥塞控制: 刚开始发送数据的时候,拥塞窗口是1,以后每次收到ACK,则拥塞窗口+1,然后将拥塞窗口和收到的窗口取较小值作为实际发送的窗口,如果发生超时重传,拥塞窗口重置为1。这样做的目的就是为了保证传输过程的高效性和可靠性。

版权声明:本文为作者原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原创文章,作者:老C,如若转载,请注明出处:https://www.code404.icu/759.html

发表评论

登录后才能评论