TCP序列号

m_v*_*eek 28 tcp numbers rfc sequence

我试图了解如何生成TCP标头的序列号.

在某些地方,我读到它是"数据包中第一个字节的索引"(此处链接),在其他一些站点上,它是一个随机的32位生成数,然后递增.

我真的不知道哪个是哪个,所以这里有一些问题:

  • 如何生成初始序列号?(rfc编号,如果有的话)
  • 它是如何递增的?
  • 秘密密钥是如何生成的?

我读了一些rfc,比如RFC 6528,RFC 793RFC 1948,但我似乎无法理解哪一个实际实现了.我读到了关于"std"状态的信息,但是......

先感谢您 !

Mic*_*ade 38

TCP连接的每个端点为其发送的数据包建立起始序列号,并在作为建立连接的一部分发送的SYN数据包中发送此数字.

在选择起始序列号时,不要求任何一端遵循特定程序.操作系统可以自由使用它喜欢的任何机制,但通常最好选择随机数,因为这样更安全.

从该起点开始,任一端发送的每个数据包都包含两个序列号 - 一个用于指定数据包在流中的位置,一个ACK序列号表示接收的字节数.两个数字都被起始序列号抵消.

当然,请阅读维基百科中的所有内容- 在该页面中查找"序列号"以获取所有血腥细节.

  • @AwakeZoldiek解释说,初始序列号可以通过_any_方法选择,虽然为了最好的安全性,应该使用一个好的随机数生成器来选择它.SYN和ACK序列号的内容全部在核心RFC 793文档中. (2认同)