Networking

通過 UDP 使用 netcat 發送文件:異常的 Wireshark 輸出

  • July 17, 2015

為了展示 TCP 和 UDP 之間的差異,我通過網路連接傳輸文件的內容,並記錄與 Wireshark 的互動。在 TCP 中一切看起來都很正常,但在 UDP 中,事情變得有點奇怪。

我正在設置在機器 A 上收聽

netcat -ul 5000

然後從機器 B 發送文件:

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

當我查看 Wireshark 日誌時,我收到一半的消息是通過 UDP 數據包獲得的,而另一半顯然是通過 IPv4 獲得的,根本沒有數據報(見下面的截圖)。

Wireshark 輸出

這只是 Wireshark 顯示數據的方式很奇怪,還是真的有一半的消息沒有來自 UDP 的任何東西?為什麼?

您會得到一個 UDP 數據包,該數據包具有您要發送的文件的大小。然後,UDP 數據包被 IP 堆棧分段為多個 IP 數據包。

Wireshark 顯示原始的 IPv4 碎片數據包和碎片整理的 UDP 數據包碎片。

如果上層發送的數據包比 L2 協議的 MTU 允許的大,這是 IP 層的標準操作行為。

在 TCP 協議中,該協議找出主機之間最大的不可分片 Path MTU,並使用該大小發送正確大小的數據包,因此不需要進行 IP 級別的分片。這對協議操作有好處。

更新:

IPv4 是處理網路操作的路由部分的 L3(網際網路層)協議。UDP 是在 IPv4 之上執行的 L4(傳輸級)協議。

並具體回答您的問題:

這是 Wireshark 顯示碎片數據的正常方式,顯示兩個協議層。如果你有 HTTP 請求,那麼你會在 Wireshark 中看到 IPv4 + TCP + HTTP 解碼請求,這也是正常的。

一半的消息不是來自其他任何地方,它是協議棧不同級別上的相同數據。

引用自:https://serverfault.com/questions/706645