Skip to content

TCP中Seq的初始化

在之前的博客HTTP与TCP协议-GET与POST请求抓包分析中,其提到了通信双方在握手、通信时发送的数据包中的Seq及其相关的Ack。

如下图所示:

文中指出序列号码Seq为随机生成。那么Seq是如何随机生成的?如何保证不重复?

Seq的生成

在TCP协议文件RFC 793, page 27中给出了Seq的初始化方法,如下图:

截屏2023-03-28 21.04.46

可以看到,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/