我在wireshark中注意到我能够将4096字节的数据发送到HTTP网络服务器(从上传文件)但是服务器似乎一次只能确认1460字节的数据。为什么会这样?
答案 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发现:
执行此过程是为了减少网络上的总体负载,并增加每个数据包传送的可能性。
这就是你看到1460个数据包的原因。
关于你的问题:服务器似乎一次只能确认1460字节的数据。为什么会这样?
TCP保持跟踪窗口,定义"您可以在没有确认的情况下发送多少字节的数据"。其目的是提供流量控制机制(发送方不能发送太多无法处理的数据)和拥塞控制机制(发送方不能向网络过载发送过多数据)。窗口由接收器侧定义,并且当TCP将估计实际信道带宽时,可以在连接期间增加窗口。因此,您可能会看到一个确认多个数据包的ACK。