2017-05-04 94 views
1

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

回答

1

TCP段的大小限制为MSS(Maximum Segment Size,最大段大小),它基本上是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"

+0

有意义。所以这基本上意味着在接收端,由于MTU的原因,该特定段将被分割成3个更小的数据包,其有效数据长度为1460? –

+0

没错。发送方实际上正在发送大小为1500字节(1518字节,如果您计算成帧字节本身)的以太网帧,并且每帧有效的TCP有效载荷为1460字节。这是服务器收到的。另见:https://en.wikipedia.org/wiki/Ethernet_frame#Structure –

1

TCP默认使用路径MTU发现:

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

执行此过程可降低网络的总体负载并提高每个数据包传输的可能性。

这就是为什么你看到1460包。

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

TCP保留跟踪窗口,定义“您可以发送多少字节的数据而无需确认”。其目的是提供流量控制机制(发送方不能发送太多无法处理的数据)和拥塞控制机制(发送方不能发送太多数据给超载网络)。窗口由接收端定义,并且在TCP估计实际信道带宽时连接期间可能会增加。所以你可能会看到一个确认几个数据包的ACK。