定义网络数据报文--字节对齐

来源:互联网 发布:庄子·胠箧 知乎 编辑:程序博客网 时间:2024/06/10 23:11

     在用户层实现ARP协议的时候

 

     定义ARP协议的报文:

 

 

但是在eth0上捕获的arp数据包,按照上面定义的arp协议报文格式解析的时候,发现

解析报文的 arp_hrd、arp_pro、arp_hlen、arp_plen、arp_op的没有任何错误,

但解析下面地址时候却解析不出来。

 

难道是报文字段定义有错误,自己重新查看了下arp报文的各个字段:

 

比对了下,报文的各个字段定义都没有错误,自己又纠结了半天,不知道哪里出问题了,上网查资料,也是没找到相关的

没办法,自己反复删除arp缓存表,反复做实验,慢慢地注意到解析错误的地址跟预想解析出来的值也不是完全不相关的,

解析出来的错误值相对于正确的值发生了移位。

 

重新仔细地看自己定义的arp报文,差不多猜到是字节对齐的问题。

sizeof(struct _arp)  下, 得到的结果是 32 bytes,arp报文是28 bytes, 的确是字节对齐出了问题。

 

现在大多机器都是以4字节对齐

 

所以以这个struct _arp解析网络上捕获的arp包才会出错

 

下面修改了成以2字节(或1字节)对齐

这样就可以正确解析出arp协议报文。

 

定义其他的网络数据报文时也应该注意到字节对齐的问题…………

 

以上只是个人理解,如有错误欢迎指出!

 

 

 

 

原创粉丝点击