Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 错误分段IP协议_C#_Sockets_Udp_Protocols_Wireshark - Fatal编程技术网

C# 错误分段IP协议

C# 错误分段IP协议,c#,sockets,udp,protocols,wireshark,C#,Sockets,Udp,Protocols,Wireshark,我正在用c#制作应用程序。在该应用程序中,我想使用UDP协议广播一些数据。我正在制作套接字作为 IPEndPoint ipep = new IPEndPoint(IPAddress.Broadcast, Convert.ToInt32(ServerPort)); Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); EndPoint ep = (EndPoint)i

我正在用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)实现数据报分段,以便可以形成能够通过具有比原始数据报大小更小的最大传输单元(MTU)的链路的分组


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

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

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

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

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

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

如果我在创建套接字时使用UDP协议,那么它是如何显示IPV4协议的?我的数据包大小是90。如果你不知道UDP协议和IP协议之间的区别,你可能不应该编写网络代码并阅读它们。UDP位于IP之外的另一个“级别”,UDP通常在IP下运行。@斯维克:我知道“UDP通常在IP下运行”,但我只想说,在wirehsark中,每当我捕获数据时,它都会显示UDP数据包的一些数据包。在我的应用程序中,我使用UDP协议,即使在它显示IPV4之后。如何决定?@svick:要决定UDP和IPV4协议,有什么标准吗?@Dany这不是在IP和UDP之间做出选择,有效的选项是UDP和TCP。看看TCP/IP协议栈。