为了演示TCP和UDP之间的差异,我通过networking连接传输文件的内容,并logging与Wireshark的交互。 在TCP中一切看起来很正常,但是在UDP中有些奇怪。
我正在和A机一起听
netcat -ul 5000
然后从机器B发送文件:
netcat -u <ip address> 5000 < file.txt
当我查看Wireshark日志时,通过UDP数据包得到了一半的信息,显然有一半通过IPv4,没有数据报(见下面的截图)。
难道这只是Wireshark在显示数据的方式上很怪异,或者是UDP中没有任何东西的信息的一半? 为什么?
你得到一个UDP数据包,它有你正在发送的文件的大小。 然后,UDP数据包被IP堆栈分割成几个IP数据包。
Wireshark显示原始IPv4碎片数据包和碎片整理的UDP数据包碎片。
如果上层发送比L2协议的MTU允许的更大的数据包,则这是在IP层上的标准操作行为。
在TCP协议中,协议找出主机之间最大的不可分片pathMTU,并使用该大小发送正确大小的数据包,从而不需要完成IP级别的分片。 这对协议操作有好处。
更新:
IPv4是处理networking操作的路由部分的L3(互联网层)协议。 UDP是在IPv4之上运行的L4(传输级别)协议。
对于你的问题具体回答:
这是Wireshark显示碎片数据的正常方式,显示了两个协议层。 如果您有HTTP请求,那么您将在Wireshark中看到IPv4 + TCP + HTTP解码的请求,这也是正常的。
一半的消息不是来自其他地方,而是在不同层次的协议栈上的相同数据。