当前位置:   article > 正文

Linux内核之XFRM框架_xfrm的seq计数会打满

xfrm的seq计数会打满

概述:什么是XFRM框架

XFRM的正确读音是transform(转换), 这表示内核协议栈收到的IPsec报文需要经过转换才能还原为原始报文;

同样地,要发送的原始报文也需要转换为IPsec报文才能发送出去。

IPsec(Internet协议安全)应该很多人都听过,IPsec是一组协议,他们通过对通信会话中的每个数据包进行身份验证和加密,以确保IP流量的安全。

XFRM框架是IPsec的“基础设施”,IPsec通过XFRM框架实现的。XFRM源自USAGI项目,该项目旨在提供适用于生产环境的IPv6和IPsec协议栈。自内核2.5之后引入了XFRM框架,这个“基础设施”独立于协议簇,包含可同时应用于IPv4和IPv6的通用部分,位于源代码的net/xfrm/目录下。

XFRM框架支持网络命名空间。这是一种轻型的进程虚拟化,它可以使得一个或者一组进程有属于自己的网络栈。每个网络命名空间都含有一个名为xfrm的成员——一个netns_xfrm结构实例。这个对象包含着许多的数据结构和变量,例如:XFRM策略散列表、XFRM状态散列表、sysctl参数、XFRM状态垃圾收集器、计数器等。

netns_xfrm结构体定义,文件路径include/net/netns/xfrm.h

  1. struct netns_xfrm {
  2. struct hlist_head *state_bydst;
  3. struct hlist_head *state_bysrc;
  4. struct hlist_head *state_byspi;
  5. . . .
  6. unsigned int state_num;
  7. . . .
  8. struct work_struct state_gc_work;
  9. . . .
  10. u32 sysctl_aevent_etime;
  11. u32 sysctl_aevent_rseqth;
  12. int sysctl_larval_drop;
  13. u32 sysctl_acq_expires;
  14. };

XFRM初始:XFRM Init

在IPv4中,XFRM初始化是通过在ip_rt_init()函数(位于net/ipv4/route.c文件)调用相关函数完成,函数调用结构为:ip_rt_init()->xfrm4_init()->xfrm_init()。

而在IPv6中,在ipv6_route_init()函数中调用xfrm6_init()方法实现了XFRM的初始化。

用户空间和内核之间的通信创建NETLINK_XFRM类型netlink套接字(so

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号