我想了解 TCP header 的序列号是如何生成的。
在某些地方,我读到它是“数据包中第一个字节的索引”(link here),在其他一些网站上,它是一个随机生成的 32 位数字,然后递增。
我真的不知道哪个是哪个,所以这里有一些问题:
- 初始序列号是如何生成的? (如果有,请提供 RFC 编号)
- 它是如何递增的?
- key 是如何生成的?
我阅读了一些 RFC,例如 RFC 6528 , RFC 793 , 和 RFC 1948但我似乎无法理解实际实现了哪一个。
我读到了“std”状态,但仍然...
提前致谢!
最佳答案
TCP 连接的每个端点为其发送的数据包建立一个起始序列号,并在它作为建立连接的一部分发送的 SYN 数据包中发送此编号。
没有要求任何一端在选择起始序列号时都遵循特定的程序。操作系统可以自由使用它喜欢的任何机制,但通常最好选择随机数,因为这样更安全。
从该起点开始,任一端发送的每个数据包都包含两个序列号 - 一个用于指定数据包在流中的位置,一个 ACK 序列号表示收到的字节数。两个数字都被起始序列号偏移。
在 Wikipedia 中阅读所有相关信息当然 - 在该页面中查找“序列号”以获得所有详细信息。
关于TCP序列号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10452855/