没有合适的资源?快使用搜索试试~ 我知道了~
Linux 内核IPSec(xfrm)协议栈源码分析
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 22 下载量 142 浏览量
2022-06-21
18:47:07
上传
评论 9
收藏 948KB DOCX 举报
温馨提示
试读
64页
该文档从源码分析上入手分析了linux 内核收发数据包流程,内核路由查询流程。很清楚的分析了一个数据包如何通过查询路由进入内核ipsec协议栈的处理、Linux 内核ipsec协议栈详细的加解密流程以及加解密完后如何将数据包发送出去。 文档中前半部分主要介绍一些关键的数据结构,及其相互之间的关系。后半部分介绍了各个函数的调用层级关系。文档主要以ipsec 隧道模式下的ESP协议为例来分析。文档中关键部分的源码都标有中文注释。
资源推荐
资源详情
资源评论
《linux 内核 ipsec 协议栈源码分析》
目录
《LINUX 内核 IPSEC 协议栈源码分析》......................................................................1
LINUX 内核 IPSEC 协议栈分析......................................................................................1
1 前言...................................................................................................................................1
2 相关数据结构类型...........................................................................................................1
2.1 XFRM_STATE (SA).......................................................................................................1
2.2 协议类型结构(XFRM_TYPE).................................................................................4
2.2.1 ah_type..................................................................................................................4
2.2.2 esp_type................................................................................................................5
2.2.3 ipcomp_type..........................................................................................................5
2.3 XFRM 协议结构..........................................................................................................5
2.3.1 ah 协议..................................................................................................................6
2.3.2 esp 协议................................................................................................................6
2.3.3 ipcomp 协议..........................................................................................................6
2.4 模式结构.....................................................................................................................7
2.4.1 隧道模式数据结构...............................................................................................9
2.4.2 传输模式数据结构...............................................................................................9
2.5 SA 协议处理结构(SA_AFINFO)...................................................................................9
2.5.1 xfrm4_state_afinfo..............................................................................................10
2.5.2 xfrm6_state_afinfo..............................................................................................11
2.6 XFRM 策略数据结构................................................................................................12
2.7 XFRM 策略选择器数据结构.....................................................................................12
2.8 XFRM 模板数据结构................................................................................................13
2.9 NETNS_XFRM.............................................................................................................14
2.10 常见 IPSEC 数据包在不通协议及模式下的封装结构图......................................17
3 重要数据结构的初始化.................................................................................................18
3.1 SA_AFINFO 结构注册。............................................................................................18
3.2 协议类型结构(XFRM_TYPE)和 XFRM 协议结构的注册..........................................19
3.2.1 esp4_init..............................................................................................................19
3.2.1.1 xfrm_register_type............................................................................................................19
3.2.1.2 xfrm4_protocol_register....................................................................................................20
3.2.1.2.1 inet_add_protocol.......................................................................................................21
3.2.1.2.2 proto_handlers............................................................................................................22
3.2.1.2.3 netproto.......................................................................................................................22
3.3 模式结构的注册.......................................................................................................23
3.3.1 xfrm4_mode_tunnel_init.....................................................................................24
3.3.1.1 xfrm_register_mode..........................................................................................................24
3.4 (XFRM_STATE)SA 存储结构初始化....................................................................25
3.5 XFRM_STATE(SA)的添加....................................................................................26
3.5.1 pfkey_add............................................................................................................26
3.5.1.1 pfkey_msg2xfrm_state......................................................................................................27
3.5.1.1.1 xfrm_init_state............................................................................................................33
3.5.1.1.1.1 __xfrm_init_state.................................................................................................33
3.5.1.1.1.1.1 esp_init_state.................................................................................................35
3.5.1.2 xfrm_state_add..................................................................................................................36
3.6 XFRM 策略存储结构初始化....................................................................................38
3.7 策略的添加...............................................................................................................39
3.7.1 pfkey_spdadd......................................................................................................40
3.7.1.1 parse_ipsecrequests...........................................................................................................43
3.7.1.1.1 parse_ipsecrequest......................................................................................................43
3.7.1.2 xfrm_policy_insert............................................................................................................45
3.7.1.2.1.1 policy_hash_bysel................................................................................................46
4 LINUX 内核收包处理过程...........................................................................................47
4.1 描述路由信息的结构...............................................................................................47
4.1.1 rtable...................................................................................................................47
4.1.2 dst_entry..............................................................................................................48
4.2 IP_RCV.......................................................................................................................50
4.2.1 ip_rcv_finish.......................................................................................................52
4.2.1.1 ip_route_input_slow..........................................................................................................55
4.2.1.1.1 rt_dst_alloc.................................................................................................................60
4.2.1.1.1.1 dst_alloc................................................................................................................61
4.2.1.1.1.1.1 dst_init............................................................................................................62
4.2.1.1.2 ip_mkroute_input........................................................................................................63
4.2.1.1.2.1 __mkroute_input..................................................................................................63
4.2.1.1.3
总结
.............................................................................................................................65
4.2.1.2 dst_input............................................................................................................................66
4.2.1.2.1 ip_local_deliver..........................................................................................................66
4.2.1.2.1.1 ip_local_deliver_finish.........................................................................................67
4.2.1.3 ip_forward.........................................................................................................................68
4.2.1.3.1 __xfrm_route_forward................................................................................................70
4.2.1.3.1.1 xfrm_lookup.........................................................................................................71
4.2.1.3.1.1.1 xfrm_bundle_lookup......................................................................................74
4.2.1.3.1.1.1.1 xfrm_policy_lookup................................................................................76
4.2.1.3.1.1.1.1.1 xfrm_policy_match...........................................................................78
4.2.1.3.1.1.1.2 xfrm_resolve_and_create_bundle...........................................................78
4.2.1.3.1.1.1.2.1 xfrm_tmpl_resolve............................................................................80
4.2.1.3.1.1.1.2.2 xfrm_bundle_create..........................................................................81
4.2.1.3.2
总结
.............................................................................................................................84
4.2.1.3.3 ip_forward_finish........................................................................................................85
4.2.1.3.3.1 dst_output.............................................................................................................85
5 LINUX 内核本机外出包处理.......................................................................................86
5.1 IP_QUEUE_XMIT.........................................................................................................86
5.1.1 ip_route_output_ports.........................................................................................88
5.1.1.1 ip_route_output_flow........................................................................................................88
5.1.2 ip_local_out.........................................................................................................89
5.1.2.1 __ip_local_out...................................................................................................................89
5.1.2.1.1 dst_output....................................................................................................................90
6 LINUX 内核 IPSEC 协议栈解密处理.........................................................................90
6.1 XFRM4_ESP_RCV.......................................................................................................91
6.1.1 xfrm4_rcv............................................................................................................91
6.1.1.1 xfrm4_rcv_spi...................................................................................................................91
6.1.1.1.1 xfrm_input...................................................................................................................92
6.1.1.1.1.1 esp_input..............................................................................................................98
6.1.1.1.1.1.1 esp_input_done2..........................................................................................101
6.1.1.1.1.2 xfrm_prepare_input............................................................................................103
6.1.1.1.1.2.1 xfrm4_extract_header..................................................................................103
6.1.1.1.1.2.2 xfrm4_mode_tunnel_input..........................................................................104
6.1.1.1.1.3 gro_cells_receive................................................................................................105
7 LINUX 内核 IPSEC 协议栈加密处理.......................................................................105
7.1 XFRM4_OUTPUT.......................................................................................................105
7.1.1 __xfrm4_output.................................................................................................106
7.1.1.1 xfrm4_output_finish........................................................................................................106
7.1.1.1.1 xfrm_output2.............................................................................................................106
7.1.1.1.1.1 xfrm_output_resume..........................................................................................107
7.1.1.1.1.1.1 xfrm_output_one..........................................................................................107
7.1.1.1.1.1.1.1 xfrm4_prepare_output...........................................................................110
7.1.1.1.1.1.1.1.1 xfrm4_mode_tunnel_output...........................................................110
7.1.1.1.1.1.1.2 esp_output..............................................................................................111
7.1.1.1.1.1.1.2.1 esp_output_head.............................................................................112
7.1.1.1.1.1.1.2.2 esp_output_tail................................................................................115
8 LINUX 内核秘钥管理套接字.....................................................................................118
8.1 秘钥管理消息头部结构.........................................................................................118
8.2 秘钥管理套接字初始化.........................................................................................120
8.3 PFKEY_SENDMSG.....................................................................................................122
8.3.1 pfkey_process...................................................................................................124
linux 内核 ipsec 协议栈分析
1 前言
Linux 内核的 ipsec 实现是基于内核的 xfrm 框架。Xfrm 是 linux2.6 内核为安全处理引入的
一个可扩展的功能框架。Xfrm 具有很大的灵活性,许多安全协议都可以依靠这个框架来完
成,比如 AH/ESP/IPCOMP 等等。
2 相关数据结构类型
2.1 Xfrm_state (SA)
Xfrm_state 状态结构用来描述 SA 在内核中的具体实现。
struct xfrm_state {
possible_net_t xs_net;
union {
struct hlist_node gclist;
struct hlist_node bydst; //按目的 HASH
};
struct hlist_node bysrc;//按源地址 HASH
struct hlist_node byspi;//按 spi HASH
/* 以上几个哈希链表主要用来存储 sa 的 */
refcount_t refcnt;//sa 引用计数
spinlock_t lock;
struct xfrm_id id;//sa id 包含 sa 的三元组
struct xfrm_selector sel;
struct xfrm_mark mark;
u32 tfcpad;
u32 genid;
/* Key manager bits */
struct xfrm_state_walk km;
/* Parameters of this state. */
struct {
1
剩余63页未读,继续阅读
一叶知秋yyds
- 粉丝: 692
- 资源: 45
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
- 5
前往页