通过 UDP 使用 netcat 发送文件:Wireshark 输出异常

通过 UDP 使用 netcat 发送文件:Wireshark 输出异常

为了演示 TCP 和 UDP 之间的差异,我通过网络连接传输文件内容,并记录与 Wireshark 的交互。在 TCP 中一切看起来都很正常,但在 UDP 中事情变得有点奇怪。

我正在机器 A 上设置监听

netcat -ul 5000

然后从机器 B 发送文件:

netcat -u <ip address> 5000 < file.txt

当我查看 Wireshark 日志时,我发现一半的消息是通过 UDP 数据包获得的,另一半显然是通过 IPv4 获得的,根本没有数据报(见下面的截图)。

Wireshark 输出

这是 Wireshark 显示数据的方式有点奇怪吗?还是说实际上有一半的消息没有通过 UDP 传输?为什么?

答案1

您将获得一个 UDP 数据包,其大小与要发送的文件大小相同。然后,​​IP 堆栈会将 UDP 数据包分割成多个 IP 数据包。

Wireshark 同时显示原始 IPv4 碎片数据包和碎片整理后的 UDP 数据包碎片。

如果上层发送的数据包大于 L2 协议允许的 MTU,则这是 IP 层的标准操作行为。

在 TCP 协议中,协议会找出主机之间最大的不可分片路径 MTU,并使用该大小发送正确大小的数据包,这样就不需要进行 IP 级别分片。这对协议操作有好处。

更新:

IPv4 是处理网络操作路由部分的 L3(互联网层)协议。UDP 是在 IPv4 上运行的 L4(传输层)协议。

对你的问题有一个具体的回答:

这是 Wireshark 显示碎片数据的正常方式,显示两个协议层。如果您有 HTTP 请求,那么您将在 Wireshark 中看到 IPv4 + TCP + HTTP 解码的请求,这也是正常的。

一半的消息不是来自其他地方,而是协议栈不同级别上的相同数据。

相关内容