Wireshark中数据包的TCP ACK



我已经在Wireshark中注意到我能够将4096字节数据发送到HTTP WebServer(通过上传文件(,但是服务器似乎仅确认数据1460字节。时间。为什么是这种情况?

TCP片段的大小仅限于MSS(最大段尺寸(,这基本上是MTU(最大传输单元(少的字节,该字节包含IP和TCP开销。在典型的以太网链接上,MTU为1500字节,基本IP和TCP标头每个都包含20个字节,因此MSS为1460(1500-20-20-20(。

如果您看到的数据包指示了4096字节的长度字段,则几乎可以肯定意味着您正在捕获传输主机上,而Wireshark则在之前将大数据包交给了它。进入1460字节块。如果您要在接收方捕获,您会看到单个1460字节段到达,而不是一个大的4096字节包。

要进一步阅读,我鼓励您阅读Jasper Bongertz的博客,标题为"本地数据包捕获的缺点"。

tcp默认使用路径mtu发现:

  • 当系统将数据包发送到网络时,它设置了IP标头中的片段标志(DF(
  • 当IP路由器或本地计算机查看应分散的DF数据包时,该数据包匹配下一个Hop链接的MTU,它会发送反馈(RTCP片段需要(,其中包含新的MTU
  • 当系统收到碎片需要ICMP时,它会调整MSS并再次发送数据。

执行此过程以减少网络上的整体负载并增加每个数据包的概率。

这就是为什么您会看到1460个数据包。

关于您的问题:服务器似乎一次仅确认数据1460字节。为什么是这样?

TCP保留轨道窗口,该窗口定义了"您可以在未经确认的情况下发送的数据来发送多少个字节"。它的目的是提供流控制机制(发送者无法发送太多无法处理的数据(和拥塞控制机制(发送者无法将太多数据发送到过载网络(。窗口是由接收器侧定义的,并且在连接期间TCP估计真实通道带宽时可能会增加。因此,您可能会看到一个确认多个数据包的ACK。

最新更新