【Linux 驱动】Netfilter/Iptables (七) 内核协议栈skb封装分析(续六)

上文介绍了netfilter机制下,如何重造并发送一个skb,涉及到内核协议栈编程,而不是我们平时所说的用户层socket网络编程。

我们先来介绍下上面skb重构程序涉及到的几个函数:
首先,有必要说下,也是后面每段程序中都有说道的,就是开发源码树版本是3.13的,这个版本的skb_buff和我们常见的2.4、2.6有很大的不同。

一、主要看一下四个字段:

//typedef unsigned int sk_buff_data_t;
    sk_buff_data_t      tail;
    sk_buff_data_t      end;
    unsigned char       *head,
                *data;

其表示含义如下图所示《深入理解linux网络技术内幕》
这里写图片描述

head和end指向缓冲区的头部和尾部,而data和tail指向实际数据的头部和尾部,每一层会在head和data之间填充协议头,或者在tail和end之间添加新的协议数据。

所以根据上面的分析,head和data之间是协议头和有效负载,比如传输层、网络层、以太网帧头。

重点:sk_buff 中的数据部分包含协议层头部和有效负载!

下面就是sk_buff中各个头部的长度字段:

//局部
    __u16           transport_header;
    __u16           network_header;
    __u16           mac_header;

//sk_buff取消了在该数据结构内放置联合体union字段,
//所以编程的时候不能直接调用sk_buff中的联合体成员定位到对应的传输层头部、网络层头部等。
//但是却提供给我们更为便捷的方式:

//举网络层为例
static inline struct iphdr *ip_hdr(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值