问题:
当syn报文发送出去,对方一直没有响应syn ack会怎样?
发生这种情况一般是网络出现问题,或者对方服务器还没有处于正常状态。
这种情况下,协议栈重传syn报文来试图重新建立链接。
如下图是伯克利syn超时重传。
Tcp协议栈每发送一个Syn报文,就会启动一个syn超时定时器,当定时器超时,协议栈重传syn报文,并重重置这个定时器。但是设置都比上一次设置的大,即时间间隔增大,不同版本设置时间不同。
伯克利版本,发送第一个syn报文,设置定时器超时时间为6秒,如果超时重传第二个syn报文,并重新设置定时器为24秒。伯克利系统超时76秒后放弃建链。
如上图第一次间隔为5.8秒,第二次间隔24秒。
第一次超时为啥不是准确的6秒?
伯克利版本中,tcp软件采用500ms定时器
超时时间设置6秒,需要12个定时滴答,
而设置syn报文超时的时刻,会处于系统定时器500ms内。定时精度11.0~11.9个500ms,所以6秒定时器的时间精准度会在5.5秒~6秒之间。
Win10协议栈的重传:
Windows抓包获取syn报文重传
三个syn报文的时刻如下:
T1=84.402331
T2=87.404228 间隔3.002秒
T3=93.411370 间隔6.007秒
Windows的超时,定时器的两个超时时间分别是3秒和6秒。
领取专属 10元无门槛券
私享最新 技术干货