Networking 有哪些方法/语言用于描述网络协议/数据包结构?

Networking 有哪些方法/语言用于描述网络协议/数据包结构?,networking,network-programming,protocol-buffers,wireshark,ddl,Networking,Network Programming,Protocol Buffers,Wireshark,Ddl,有一些简单的网络协议结构(例如,ipv4,tcp,udp,…),可以通过限制用任何语言轻松描述。但是,有更多具有可选字段/块和动态块/字段大小的困难结构(TVL,LT,等等)-例如ipv6,sctp,PROFINET-IO(分散外围设备) 我的问题是-如何正确描述协议数据结构并存储以备将来使用?例如,生成不同语言的结构,或获取所有树(例如,在ipv6Wireshark ipv6.opt.pdm.delta_last_recv中),或获取协议特定块/扩展/选项的所有字段 我希望描述清楚。谢谢。创建

有一些简单的网络协议结构(例如,ipv4tcpudp,…),可以通过限制用任何语言轻松描述。但是,有更多具有可选字段/块和动态块/字段大小的困难结构(TVLLT,等等)-例如ipv6sctpPROFINET-IO(分散外围设备)

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


我希望描述清楚。谢谢。

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

通常,您看到的不是ASN1,而是数据包的C结构定义,或者只是RFC数据包图(您可以使用该工具生成一个),带有一些标记(如
)以指示可变长度


我想从技术上讲,它也可以作为一种描述二进制消息的语言,尽管我不认为它是一种可以描述任何消息的通用语言,并且可以被其他支持protobuf的应用程序使用。

实际上,IPv4报头的大小是可变的(20到60),但IPv6报头的大小始终是固定的40,而且它在IPv4报头上大大简化了。我错过了。非常感谢你的来信。但据我所知,IPv6有扩展,扩展了IPv6层。因此,IPv6解析器需要对扩展进行解析循环。然而,关于描述方式的问题是开放的。也许你知道描述网络协议的方法(用抽象语言)。“IPv6有扩展,扩展了IPv6层。”不完全是这样。IPv6扩展标头被视为有效负载,而不是IPv6数据包标头的一部分。。中间设备(例如路由器)必须忽略所有扩展头,但逐跳选项除外,而这些选项在现实世界中基本上被忽略。扩展头有自己的协议号,就像TCP和UDP一样,IPv6头指向它们的方式与传输协议完全相同。它们更类似于ICMP,ICMP被视为传输协议,但它是IP不可分割的一部分。