TCP中Seq的初始化
在之前的博客HTTP与TCP协议-GET与POST请求抓包分析中,其提到了通信双方在握手、通信时发送的数据包中的Seq及其相关的Ack。
如下图所示:
文中指出序列号码Seq为随机生成。那么Seq是如何随机生成的?如何保证不重复?
Seq的生成
在TCP协议文件RFC 793, page 27中给出了Seq的初始化方法,如下图:
可以看到,Seq由ISN(Initial sequence number)生成器生成。
当创建新连接时,都会使用ISN生成器生成新的Seq用于此次连接。生成器绑定在一个32位时钟,时钟大约每4ms递增一次,大约每4.55小时会循环一次。
不同的TCP连接通过四元组**<源IP、源Port、目的IP、目的Port>**进行标识。所以,四元组不同的Seq即使相同也不会混淆,只需要保证同一个四元组的不同连接不会使用相似的Seq即可,
记录一个TCP滑动窗口回退N帧和选择性重传的动画演示网站:https://www2.tkn.tu-berlin.de/teaching/rn/animations/gbn_sr/