【问题标题】:What approaches/languages exist for describing network-protocols/packet-structures?有哪些描述网络协议/数据包结构的方法/语言?
【发布时间】:2020-10-13 05:20:29
【问题描述】:

网络协议结构简单(如ipv4tcpudp、...)通过限制用任何语言描述。但是还有更难的结构,可选字段/块和动态块/字段大小(TVLLT 等) - 例如ipv6sctpPROFINET-IO去中心化外围)、...

我的问题是 - 如何正确描述协议数据结构并将其存储以供将来使用?例如。为不同语言生成结构,或获取所有树(例如在 ipv6 Wireshark ipv6.opt.pdm.delta_last_recv 中),或获取特定块/扩展/选项的所有字段协议。

我希望描述清楚。谢谢。

【问题讨论】:

  • 其实IPv4头是可变大小的(20到60),但IPv6头总是固定大小40,比IPv4头大大简化。
  • 哇。我错过了。非常感谢这个笔记。但据我所知,IPv6 有扩展,扩展了 IPv6 层。这样一来,IPv6 解析器需要对扩展进行解析循环。然而,关于描述方式的问题被打开了。也许你知道描述网络协议的方式(用抽象语言)。
  • "IPv6 有扩展,扩展了 IPv6 层。" 不完全是。 IPv6 扩展头被视为有效负载,而不是 IPv6 数据包头的一部分。所有扩展头都必须被中间设备忽略,例如路由器,除了逐跳选项,而这些在现实世界中很大程度上被忽略了。扩展标头有自己的协议号,就像 TCP 和 UDP 一样,IPv6 标头指向它们,就像它对传输协议所做的一样。它们更类似于 ICMP,被视为传输协议,但它是 IP 的组成部分。

标签: networking network-programming protocol-buffers wireshark ddl


【解决方案1】:

创建 ASN1 语言是为了解决这个问题和其他类似问题。恕我直言,您不经常看到它使用的原因是该语言变得非常复杂,并且不同派系开始以不同的方式(SNMP MIB、Crypto X509 等)使用它,这导致 ASN1 编译器是专门的而不是通用的。

通常,您会看到数据包的 C-Struct 定义而不是 ASN1,或者只是一个 RFC 数据包图(您可以使用 protocol 工具生成一个),其中带有一些标记(如 ...)来指示可变长度。

我猜protobuf 在技术上也有资格作为一种描述二进制消息的语言,尽管我不认为它是一种可以描述任何消息并且旨在被其他 protobuf 使用的通用语言- 启用的应用程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-24
    • 2015-05-07
    • 1970-01-01
    • 2016-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多