【问题标题】:how can i decoding to UDP fragmentation packages header ?我如何解码为 UDP 分片包头?
【发布时间】:2015-03-25 19:28:55
【问题描述】:

我的应用程序正在监听一些 UDP 多播。 此多播是发送消息 - 此消息大小非常大(~9500000 字节)。

我不知道 UDP 发送器是如何工作的,因为这不是我控制的代码。
但是发件人使用分片来发送所有的包裹。

我使用 wireshark 查看包,在任何消息的标题上我看到标志告诉我这个包是最后一个还是在这个包之后是否还有更多包。

我尝试使用我的代码来解码消息头 - 但我每次都失败了。

我尝试使用 Encoding.ASCII 和 Encoding.Unicode - 但这不起作用,我不知道何时完成从碎片中收集所有包。

请帮忙...

wireshark 是如何看到它并且可以解码 header 的?

【问题讨论】:

  • 各种分层协议的标头由您的网卡和设备驱动程序处理。在套接字级别上,您只能获得传输的数据。不包括 udp 和 ip 标头。碎片和碎片整理应该由这个较低的层处理,因此您不必担心。使用 Tcp,您可以获得连接的流抽象。使用 Udp 我不确定。
  • 此消息超过 64k 的人 IP 最多只能处理 64k 的碎片。
  • @xanatos 仅在数据包小于 64k 的情况下,因为那时分段是在 IP 层完成的。
  • 除了 OP 必须显示一些代码。
  • @PhilipStuyck 你是对的(在所有三个 cmets 上)

标签: c# sockets network-programming


【解决方案1】:

找到答案

我无法直接从“普通”套接字或 UdpClient 访问 IP 或 UDP 标头(除了远程主机的 IP 地址),只能访问正在传输的数据(“有效负载”)。底层网络机制负责处理。

https://social.msdn.microsoft.com/Forums/en-US/8723498d-c276-4bb4-9d2d-9211ce5d7487/parse-udp-headers

所以我不知道碎片包是否完成。

【讨论】:

    猜你喜欢
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    • 2013-09-02
    • 1970-01-01
    • 1970-01-01
    • 2015-08-20
    • 2015-08-10
    • 1970-01-01
    相关资源
    最近更新 更多