深入理解Linux网络技术内幕——L4层协议与Raw IP的处理

我们简单了解下L4层协议和Raw IP是如何与IP层进行交互的。

L4层协议

L4层协议可以通过静态编译和模块配置两种方式加入内核。

比较重要的协议如TCP、UDP、ICMP通常是静态编译至内核。

一些不常用的或者比较特殊的协议,则是通过内核配置加入内核。如IGMP,SCTP,IPIP等等。

L4层协议的注册

L4层协议有net_protocol结构定义:

/* This is used to register protocols. */
struct net_protocol {
    int         (*handler)(struct sk_buff *skb); //由协议注册的,用于处理入口封包的函数
    //由ICMP协议处理函数所用的函数,当收到ICMP UNREACHABLE 时,通知L4层
    void            (*err_handler)(struct sk_buff *skb, u32 info);
    int         (*gso_send_check)(struct sk_buff *skb);
    struct sk_buff         *(*gso_segment)(struct sk_buff *skb,
                           int features);
    struct sk_buff        **(*gro_receive)(struct sk_buff **head,
                           struct sk_buff *skb);
    int         (*gro_complete)(struct sk_buff *skb);
    unsigned int        no_policy:1, //使协议免于IPsec检查
                netns_ok:1;
};


协议会以inet_add_protocol进行注册,如果协议是以模块形式存在,可以通过inet_del_protocol进行除名(模块才有除名函数)

/*
 *  Add a protocol handler to the hash tables
 */

int inet_add_protocol(const struct net_protoc
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值