wireshark中数据包的TCP ACK

时间:2017-05-04 09:10:54

标签: http tcp wireshark tcp-ip

我在wireshark中注意到我能够将4096字节的数据发送到HTTP网络服务器(从上传文件)但是服务器似乎一次只能确认1460字节的数据。为什么会这样?

2 个答案:

答案 0 :(得分:1)

TCP段的大小限制为MSS(最大段大小),其基本上是MTU(最大传输单元)减去包含IP和TCP开销的字节。在典型的以太网链路上,MTU为1500字节,基本IP和TCP报头各占20字节,因此MSS为1460(1500 - 20 - 20)。

如果您看到长度为4096字节的数据包,则几乎可以肯定意味着您正在传输主机上捕获并且Wireshark正在传输大数据包之前它已被分段分成1460个字节的块。如果你要在接收端捕获,你会看到各个1460字节段到达而不是一个大的4096字节数据包。

如需进一步阅读,我建议您阅读Jasper Bongertz的博客,标题为"The drawbacks of local packet captures"

答案 1 :(得分:1)

TCP默认使用路径MTU发现:

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

执行此过程是为了减少网络上的总体负载,并增加每个数据包传送的可能性。

这就是你看到1460个数据包的原因。

关于你的问题:服务器似乎一次只能确认1460字节的数据。为什么会这样?

TCP保持跟踪窗口,定义"您可以在没有确认的情况下发送多少字节的数据"。其目的是提供流量控制机制(发送方不能发送太多无法处理的数据)和拥塞控制机制(发送方不能向网络过载发送过多数据)。窗口由接收器侧定义,并且当TCP将估计实际信道带宽时,可以在连接期间增加窗口。因此,您可能会看到一个确认多个数据包的ACK。