【发布时间】:2013-01-31 19:54:41
【问题描述】:
(如果我不能正确提出问题,请原谅。英语不是我的主要语言。)
我正在尝试解析 SyncE ESMC 数据包。是以太网慢速协议包。
方法一: 为了解析这个数据包,我使用了类似于 here 的逐字节方法。
方法 2: 解析数据包的其他方法是定义一个“结构”来表示整个数据包并访问各个字段以检索特定偏移处的值。 然而,在这种方法中,结构填充和对齐可能会出现(我不确定),但在 Linux 上,各种数据包头以结构形式定义,例如ip.h 中的 iphdr IP 数据包(缓冲区)可以强制转换为“iphdr”以检索 ip 标头字段,因此它必须正常工作。
用 C 语言解析网络数据包哪种方法更好?
在通过方法 2 解析数据包时,结构填充和对齐是否有任何区别?如果是,Linux 头文件是如何解决这个问题的?
【问题讨论】:
-
所有编译器都具有不填充结构或对齐成员字段的功能,您还可以将位字段用于短一个字节的字段。
-
@JoachimPileborg - 哪种方法更好、便携且高效?
-
可在编译器、操作系统、硬件或它们的组合之间移植?效率更高,速度更快,使用更少的内存,还是其他一些标准?这两种方法都有优点,哪一种“最好”取决于你的目标。
-
我正在尝试编写一个协议栈,它可以移植到不同类型的操作系统(例如 Linux、qnx、vxworks),因此必须跨操作系统和编译器进行移植。根据上述描述,您有什么建议?
标签: c network-programming