在C中解析网络数据包的正确方法

Abh*_*rav 6 c network-programming

(对不起,如果我无法正确提出问题.英语不是我的主要语言.)

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

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

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

哪种方法更好用C解析网络数据包?

通过方法2解析数据包时,结构填充和对齐会有什么不同吗?如果是的话,Linux标头是如何克服这个问题的?

Car*_*rum 1

方法 1 是最佳的可移植性。例如,它可以让您安全地避免未对齐的访问。特别是,如果您的机器是小尾数法,这种方法可以让您轻松处理字节交换。

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