wireshark中数据包的TCP ACK
TCP ACK of packets in wireshark
我注意到在 wireshark 中我能够将 4096 字节的数据发送到 HTTP 网络服务器(通过上传文件),但是服务器似乎一次只确认 1460 字节的数据。为什么会这样?
TCP 段的大小限于 MSS(最大段大小),基本上是 MTU(最大传输单元)减去包含 IP 和 TCP 开销的字节。在典型的以太网 link 上,MTU 为 1500 字节,基本 IP 和 TCP headers 各包含 20 字节,因此 MSS 为 1460 (1500 - 20 - 20)。
如果您看到数据包的长度字段为 4096 字节,那么这几乎可以肯定意味着您正在传输主机上进行捕获,并且 Wireshark 在 之前 它被分割成 1460 字节的块。如果您要在接收端进行捕获,您会看到到达的是单独的 1460 字节段,而不是单个 4096 字节的大数据包。
如需进一步阅读,我建议您阅读 Jasper Bongertz 的博客 "The drawbacks of local packet captures"。
TCP 默认使用路径 MTU 发现:
- 当系统向网络发送数据包时,它会在 IP 中设置不分段标志 (DF) header
- 当 IP 路由器或您的本地计算机看到应该分段以匹配下一跳的 MTU 的 DF 数据包时 link 它发送包含新 MTU 的反馈(RTCP 分段需要)
- 当系统接收到需要分片的ICMP时,它会调整MSS并再次发送数据。
执行此过程是为了减少网络的总体负载并增加每个数据包传送的概率。
这就是您看到 1460 个数据包的原因。
关于您的问题:服务器似乎一次只确认 1460 字节的数据。为什么会这样?
TCP 跟踪定义 "how many bytes of data you can send without acknowledge" 的 window。它的目的是提供流量控制机制(发送方不能发送太多无法处理的数据)和拥塞控制机制(发送方不能发送太多数据使网络过载)。 Window 由接收方定义,当 TCP 估计实际信道带宽时,可能会在连接期间增加。所以你可能会看到一个确认多个数据包的 ACK。
我注意到在 wireshark 中我能够将 4096 字节的数据发送到 HTTP 网络服务器(通过上传文件),但是服务器似乎一次只确认 1460 字节的数据。为什么会这样?
TCP 段的大小限于 MSS(最大段大小),基本上是 MTU(最大传输单元)减去包含 IP 和 TCP 开销的字节。在典型的以太网 link 上,MTU 为 1500 字节,基本 IP 和 TCP headers 各包含 20 字节,因此 MSS 为 1460 (1500 - 20 - 20)。
如果您看到数据包的长度字段为 4096 字节,那么这几乎可以肯定意味着您正在传输主机上进行捕获,并且 Wireshark 在 之前 它被分割成 1460 字节的块。如果您要在接收端进行捕获,您会看到到达的是单独的 1460 字节段,而不是单个 4096 字节的大数据包。
如需进一步阅读,我建议您阅读 Jasper Bongertz 的博客 "The drawbacks of local packet captures"。
TCP 默认使用路径 MTU 发现:
- 当系统向网络发送数据包时,它会在 IP 中设置不分段标志 (DF) header
- 当 IP 路由器或您的本地计算机看到应该分段以匹配下一跳的 MTU 的 DF 数据包时 link 它发送包含新 MTU 的反馈(RTCP 分段需要)
- 当系统接收到需要分片的ICMP时,它会调整MSS并再次发送数据。
执行此过程是为了减少网络的总体负载并增加每个数据包传送的概率。
这就是您看到 1460 个数据包的原因。
关于您的问题:服务器似乎一次只确认 1460 字节的数据。为什么会这样?
TCP 跟踪定义 "how many bytes of data you can send without acknowledge" 的 window。它的目的是提供流量控制机制(发送方不能发送太多无法处理的数据)和拥塞控制机制(发送方不能发送太多数据使网络过载)。 Window 由接收方定义,当 TCP 估计实际信道带宽时,可能会在连接期间增加。所以你可能会看到一个确认多个数据包的 ACK。