【问题标题】:sequence number in TCPTCP中的序列号
【发布时间】:2015-10-10 02:35:03
【问题描述】:

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

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

【问题讨论】:

    标签: networking tcp tcp-ip


    【解决方案1】:

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

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

    “已确认”序列号显示我确认已收到多少字节。

    由于TCP是双向的,所以每一端都要声明

    1. 其传输的字节应该在流中的什么位置和
    2. 你发送给我的字节我收到了。

    因此,每个 TCP 数据包都有两个引用序列号的字段——“序列号”字段和“确认号”字段。

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

    【讨论】:

      【解决方案2】:

      因为 TCP 是可靠的管道。这意味着即使较低层不提供该保证,数据包也会按顺序传递(并且仅一次)。为了做到这一点,TCP 需要管理数据、acks、nacks……

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

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

      【讨论】:

        猜你喜欢
        • 2015-06-16
        • 2017-08-21
        • 2018-05-18
        • 2011-02-09
        • 2016-01-18
        • 2013-03-20
        • 1970-01-01
        • 2011-01-11
        • 1970-01-01
        相关资源
        最近更新 更多