TCP的socket通信过程

本文详细解析了TCP协议中的三次握手建立连接及四次挥手断开连接的过程。阐述了Ack与Seq号的作用,解释了超时重传机制,包括RTO值的计算与调整,以及最大重传次数的设定。同时,介绍了TIME_WAIT状态及其存在的原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

三次握手的过程

Ack=seq+1

数据传输过程

Ack= Seq+ 传递的字节数

超时

当发送数据包丢失(也就是数据超时)

重传机制

决定报文是否有必要重传的主要机制是重传计时器(retransmission timer),它的主要功能是维护重传超时(RTO)值。当报文使用TCP传输时,重传计时器启动,收到ACK时计时器停止。报文发送至接收到ACK的时间称为往返时间(RTT)。对若干次时间取平均值,该值用于确定最终RTO值。在最终RTO值确定之前,确定每一次报文传输是否有丢包发生使用重传计时器,下图说明了TCP重传过程

当报文发送之后,但接收方尚未发送TCP ACK报文,发送方假设源报文丢失并将其重传。重传之后,RTO值加倍;如果在2RTO值到达之前还是没有收到ACK报文,就再次重传。如果仍然没有收到ACK,那么RTO值再次加倍。如此持续下去,每次重传RTO都翻倍,直到收到ACK报文或发送方达到配置的最大重传次数。

最大重传次数取决于发送操作系统的配置值。默认情况下,Windows主机默认重传5次。大多数Linux系统默认最大15次。两种操作系统都可配置。

四次挥手的过程

TIME_WAIT状态要等待 2MSL(报最大生存时间)才会进入 CLOSED 状态。在这段时间内,此端口是不可用的。

只有主动断开连接(即调用close/closesocket)时,才会发送FIN包。断开连接后,将套接字描述符(或句柄)从内存清除,之后再也不能使用该套接字。

程序退出时,会进行socket的清理工作。此时如果socket没有关闭的话,会直接发送RST包(标识重置不再接收任何包。)

当向对方发送包时,对方如果处于CLOSED状态,则会收到RST

Ack=seq+1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值