2012-01-11 26 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字节以下。