TCP 序列号
sequence number in TCP
为什么我们需要TCP中的序列号和下一个序列号字段header?
下面是使用 wireshark 捕获的数据包中的 TCP header。
因为TCP是可靠的管道。这意味着即使较低层不提供这种保证,数据包也会按顺序传递(并且只传递一次)。为了做到这一点,TCP 需要内务处理数据、acks、nacks,....
https://en.wikipedia.org/wiki/Transmission_Control_Protocol
'next sequence' 是 wireshark 的产物,它实际上不在 TCP 中 header,ws 只是在它的捕获文件中告诉你下一个数据包
首先,Wireshark 中 [方括号] 中的字段是计算字段 - 它们不在数据包中。 Wireshark 显示的下一个序列号字段就是这样一个字段。 Wireshark 通过获取 'sequence number' 字段并将其添加到数据包的有效负载大小来计算。毫不奇怪,这两个数字之间的差异是 1430——一个常见的 TCP 负载大小。
TCP 中的序列号以字节为单位 - 它们基本上表示此数据包的有效负载插入 TCP 流中的哪个字节位置。
'acknowledged' 序列号显示我确认已收到多少字节。
由于 TCP 是双向的,每一端都必须声明
- 它传输的字节应该在流中的什么地方并且
- 我收到了你发送给我的字节数。
因此,每个 TCP 数据包都有两个引用序列号的字段 - 'sequence number' 字段和 'acknowledgment number' 字段。
如果没有'sequence number'字段,接收端将无法判断数据包是否乱序接收。如果没有 'acknowledgment number' 字段,发送端将不知道他的某些数据包是否被丢弃并且接收方从未收到它们。
为什么我们需要TCP中的序列号和下一个序列号字段header?
下面是使用 wireshark 捕获的数据包中的 TCP header。
因为TCP是可靠的管道。这意味着即使较低层不提供这种保证,数据包也会按顺序传递(并且只传递一次)。为了做到这一点,TCP 需要内务处理数据、acks、nacks,....
https://en.wikipedia.org/wiki/Transmission_Control_Protocol
'next sequence' 是 wireshark 的产物,它实际上不在 TCP 中 header,ws 只是在它的捕获文件中告诉你下一个数据包
首先,Wireshark 中 [方括号] 中的字段是计算字段 - 它们不在数据包中。 Wireshark 显示的下一个序列号字段就是这样一个字段。 Wireshark 通过获取 'sequence number' 字段并将其添加到数据包的有效负载大小来计算。毫不奇怪,这两个数字之间的差异是 1430——一个常见的 TCP 负载大小。
TCP 中的序列号以字节为单位 - 它们基本上表示此数据包的有效负载插入 TCP 流中的哪个字节位置。
'acknowledged' 序列号显示我确认已收到多少字节。
由于 TCP 是双向的,每一端都必须声明
- 它传输的字节应该在流中的什么地方并且
- 我收到了你发送给我的字节数。
因此,每个 TCP 数据包都有两个引用序列号的字段 - 'sequence number' 字段和 'acknowledgment number' 字段。
如果没有'sequence number'字段,接收端将无法判断数据包是否乱序接收。如果没有 'acknowledgment number' 字段,发送端将不知道他的某些数据包是否被丢弃并且接收方从未收到它们。