[原]struct IP 中定义疑惑

转载请注明出处
先看linux中ip.h中ip结构体的定义

struct ip
  {
#if __BYTE_ORDER == __LITTLE_ENDIAN
    unsigned int ip_hl:4; /* header length */
    unsigned int ip_v:4; /* version */
#endif
#if __BYTE_ORDER == __BIG_ENDIAN
    unsigned int ip_v:4; /* version */
    unsigned int ip_hl:4; /* header length */
#endif
    u_int8_t ip_tos; /* type of service */
    u_short ip_len; /* total length */
    u_short ip_id; /* identification */
    u_short ip_off; /* fragment offset field */
#define IP_RF 0x8000 /* reserved fragment flag */
#define IP_DF 0x4000 /* dont fragment flag */
#define IP_MF 0x2000 /* more fragments flag */
#define IP_OFFMASK 0x1fff /* mask for fragmenting bits */
    u_int8_t ip_ttl; /* time to live */
    u_int8_t ip_p; /* protocol */
    u_short ip_sum; /* checksum */
    struct in_addr ip_src, ip_dst; /* source and dest address */
  }; 


其中有两个不同的分支:

    当主机字节序为大端 ver字段位于首字节四位;

    当主机字节序为小端 ver字段位于首字节四位。

这个分支的出现来源于主机比特序(bit order)——为兼容不同处理器架构的主机

    首先要了解两点:

    1.大端机器中字节序与位序:

       字节序列里最高有效字节(MSB)位于起始地址(低地址),最低有效字节(LSB)位于末地址(高地址);

       位序列里最高有效位位于起始地址,最低有效位末地址

[原]struct <wbr>IP <wbr>中定义疑惑


[原]struct <wbr>IP <wbr>中定义疑惑
    2.小端机器中的字节序与位序:
        字节序列里 最低有效字节(LSB) 位于 起始地址(低地址) , 最高有效字节(MSB) 位于 末地址(高地址) ;

          位序列里最低有效位位于起始地址,最高有效位末地址。


[原]struct <wbr>IP <wbr>中定义疑惑[原]struct <wbr>IP <wbr>中定义疑惑

    由此可以发现一个特点,机器中字节序与位序是统一的。

    

    基于上面两个重要的知识点,下面再来观察ip头部结构定义中的两个分支

    1.当主机机器为小端:

      首字节中0~3位为ip_hl,4~7位为ip_v;当发送到大端系统中,大端机器根据ip头部结构编排,首字节中       首部长度位于字节的后四位,于是在相应内存单元中的0~3位获取hl。(问题:小端位序是大端位序的轴       对称?是的话这段论述便不成立)

    2.当主机机器为大端:同理,对于网络字节序(大端)能得出正确的数据。


未完待续

1.数据包字节以及字节内位在物理层上的发送顺序?

2.字节序由什么决定?

3.假想的数据读过程:

  小端机器中,cpu从内存中最低地址找到最低有效字节,然后从最低位中找到最低有效位,拼装数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值