TCP中的序列号

时间:2015-10-09 18:13:19

标签: networking tcp tcp-ip

为什么我们需要TCP头中的序列号和下一个序列号字段?

以下是使用wireshark捕获的数据包的TCP标头。

TCP Header from a packet captured using wireshark

2 个答案:

答案 0 :(得分:3)

首先,由[括号]括起来的Wireshark中的字段是计算字段 - 它们不在数据包中。 Wireshark显示的下一个序列号字段就是这样一个字段。 Wireshark通过获取“序列号”字段并将其添加到数据包的有效负载大小来计算。毫不奇怪,这两个数字之间的差异是1430 - 一个常见的TCP有效载荷大小。

TCP中的序列号以字节为单位 - 它们基本上是说,TCP数据包的有效负载插入的TCP流中的字节位置。

'确认'序列号显示我确认收到的字节数。

由于TCP是双向的,每一端都必须声明

  1. 其传输的字节应该在流中并且
  2. 你收到了我收到的字节数。
  3. 因此,每个TCP数据包都有两个引用序列号的字段 - “序列号”字段和“确认号”字段。

    如果没有'序列号'字段,接收端将无法判断数据包是否无序接收。如果没有“确认号码”字段,发送端将不知道他的某些数据包是否已被丢弃且接收者是否从未收到过。

答案 1 :(得分:2)

因为TCP是可靠的管道。这意味着数据包按顺序传递(并且只传输一次),即使较低层不提供该保证。为了做到这一点,TCP需要管家数据,ack,nacks,....

https://en.wikipedia.org/wiki/Transmission_Control_Protocol

'下一个序列'是wireshark的工件,它实际上不在TCP头中,ws只是告诉你捕获文件中的下一个数据包