6

(如果我不能正确提出问题,请原谅。英语不是我的主要语言。)

我正在尝试解析 SyncE ESMC 数据包。它是以太网慢速协议包。

方法 1:为了解析这个数据包,我使用了类似于这里所做的逐字节方法。

方法 2:解析数据包的其他方法是定义一个“结构”来表示整个数据包并访问各个字段以检索特定偏移处的值。然而,在这种方法中,结构填充和对齐可能会出现(我不确定),但在 Linux 上,各种数据包头以结构的形式定义,例如 ip.h 中的 iphdr。IP 数据包(缓冲区)可以类型转换为“iphdr”以检索 ip 标头字段,因此它必须正常工作。

哪种方法更好地解析 C 中的网络数据包?

通过方法 2 解析数据包时,结构填充和对齐是否有任何区别?如果是,Linux 头文件是如何克服这个问题的?

4

1 回答 1

1

方法 1 最适合可移植性。例如,它允许您安全地避免未对齐的访问。特别是,如果您的机器是 little-endian,这种方法可以让您非常轻松地处理字节交换。

方法 2 有时很方便,而且通常可以更快地编写代码。如果结构填充妨碍您,您的编译器可能会提供一个标志或属性(如__attribute__((__packed__))or #pragma pack)来解决它。但是,如果您有一台 little-endian 机器,您仍然需要在各处进行字节交换字段。

于 2013-01-31T19:58:59.150 回答