2012-01-11 81 views
0

我正在在C#應用程序。在該應用程序我要廣播使用UDP protocol.I一些數據想提出套接字錯誤零碎的IP協議

IPEndPoint ipep = new IPEndPoint(IPAddress.Broadcast, Convert.ToInt32(ServerPort)); 
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); 
EndPoint ep = (EndPoint)ipep; 
socket.SendTo(m_SendBuffer, ep); 

這裏m_SendBuffer包含我要發送的數據。 但是,無論何時我通過wireshark觀察流量,它顯示協議IPV4並顯示信息爲「分段IP協議」。請幫助我爲什麼會發生這種情況?提前致謝。

回答

0

Wikipedia

的因特網協議(IP)實現數據報分段,以便可以形成信息包可穿過具有較小的最大傳輸單元(MTU)比原來的數據報大小的鏈接。

這意味着你發送的數據包太大。

+0

如果我在套接字創建時使用UDP協議,那麼它是如何顯示IPV4協議的?而我的數據包大小是90. – Dany 2012-01-11 11:42:55

+0

如果您不知道UDP和IP協議之間的區別,那麼您可能不應該寫網絡代碼並閱讀它們。 UDP在另一個「級別」上,而IP通常在IP下運行。 – svick 2012-01-11 11:51:27

+0

@svick:我知道,「UDP通常IP下運行」,但我只想說,在每當我捕獲數據wirehsark它顯示UDP packet.In我的應用程序的一些數據包我甚至之後,它顯示IPV4採用UDP協議。怎麼樣? – Dany 2012-01-11 12:05:35

0

任何給定的網絡鏈接都會在每個IP數據報上實施最大大小。最常見的是1500字節。 UDP和IP有28個字節的標題,所以你剩下1472字節的有效載荷。

如果您發送的數量多於此數量,則每個數據包將被分解爲多個碎片。這些在網絡中通過在IP報頭中添加片段ID來區分。如果所有片段到達目的地,它們將在它們到達接收應用程序之前被重新組裝成完整的數據包。

片段普遍不好有幾個原因:

  • 如果只是一個片段被丟棄,整個分組丟失。
  • 接收器不得不花費內存和CPU時間緩衝和重新組裝片段。
  • 很多在網絡中的東西不喜歡的片段,並可能會降低他們半任意原因。

但是避免碎片是棘手的。網絡中的其他功能(如MPLS,PPPoE或VPN)可能會添加更多標頭,從而減少可安全發送每個數據包的數據量。爲了安全起見,請將數據包保持在1400字節以內。爲了確保安全,請將其保持在500字節以下。