TCP序列号

标签 tcp numbers sequence rfc

我想了解 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/

相关文章:

Python - 将字符串拆分为参数

performance - 代码的递归求幂

c - 如何在 C 中使用逗号作为千位分隔符来格式化数字?

Postgresql - SQL 查询列出数据库中的所有序列

Java 程序不干净地存在。创造僵尸

boost::asio 发送数据比通过 TCP 接收数据更快。或者如何禁用缓冲

c - 转义序列差异

timeout - rxjs 超时到第一个值

networking - 客户端违反了握手期间商定的 MSS 值

c++ - 套接字配置中的 TCP 重传