错误IP协议碎片

本文关键字:碎片 协议 IP 错误 | 更新日期: 2023-09-27 18:20:04

我正在c#中制作应用程序。在该应用程序中,我想使用UDP协议广播一些数据。我正在制作插座

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协议"的形式显示信息。请帮助我为什么会发生这种情况?提前谢谢。

错误IP协议碎片

来自维基百科:

互联网协议(IP)实现数据报分段,从而可以形成可以通过最大传输单元(MTU)小于原始数据报大小的链路的分组。

这意味着您发送的数据包太大。

任何给定的网络链路都将在每个IP数据报上强制执行最大大小。最常见的是1500字节。UDP和IP有28个字节的头,所以剩下1472个字节作为有效负载。

如果你发送的超过这个数量,那么每个数据包都会被分解成碎片。这些在网络中通过在IP报头中添加片段id来区分。如果所有片段都到达目的地,那么在到达接收应用程序之前,它们将被重新组装成一个完整的数据包。

碎片通常是坏的,原因有几个:

  • 如果只有一个片段被丢弃,那么整个数据包就会丢失
  • 接收器必须花费内存和CPU时间来缓冲和重新组装碎片
  • 网络中的很多东西都不喜欢碎片,可能会因为半任意的原因而丢弃它们

但避免分裂是很棘手的。网络中的其他东西,如MPLS、PPPoE或VPN,可能会添加更多的报头,从而减少每个数据包可以安全发送的数据量。为了安全起见,请将数据包控制在1400字节以下。为了真正安全,请将其控制在500字节以下。