Chinaunix首页 | 论坛 | 博客
  • 博客访问: 416977
  • 博文数量: 124
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 872
  • 用 户 组: 普通用户
  • 注册时间: 2018-03-29 14:38
个人简介

默默的一块石头

文章分类

全部博文(124)

文章存档

2022年(26)

2021年(10)

2020年(28)

2019年(60)

我的朋友

分类: LINUX

2019-08-13 15:47:39

1.IPv4报头成员
struct iphdr {
#if defined(__LITTLE_ENDIAN_BITFIELD)
__u8 ihl:4,
version:4;
#elif defined (__BIG_ENDIAN_BITFIELD)
__u8 version:4,
//ihl:表示Internet报头长度。IPv4报头的长度以4字节为单位。IPv6报头的长度固定为40字节,
//而IPv4报头的长度不固定。这是因为IPv4报头可包含可选的变长选项。IPv4报头最短为20字
//节(不包含任何选项时,对应的ihl值为5),最长为60字节(对应的ihl值为15)。IPv4报头的长度
//必须是4字节的整数倍。
  ihl:4;
#else
#error "Please fix "
#endif
__u8 tos;
__be16 tot_len;
//id: IPv4报头标识。对于分段来说,id字样很重要。对SKB进行分段时,所有分段的id值都必须相同;
// 对于分段后的数据包,则要根据各个分段的id对其进行重组。
__be16 id; 
__be16 frag_off;
__u8 ttl;
__u8 protocol;
__sum16 check;
__be32 saddr;
__be32 daddr;
/*The options start here. */
};
2.IPv4初始化
   IPv4数据包的以太类型为0x0800(以太类型存储在14字节的以太网报头的开头的两个字节中)。每种协议都必须指定一个协议处理程序并进行初始化,以便让网络栈能够处理归属于该协议的数据包。
3.接收IPv4数据包

 
阅读(949) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~