《TCP/IP详解卷2:实现》笔记--选路请求和选路消息

本文详细介绍了Linux内核中的路由实现,包括rtalloc和rtalloc1路由查询函数、rtrequest路由添加删除函数、rtinit接口初始化以及rtredirct重定向处理。还探讨了选路消息的结构和相关函数,如rt_missmsg、rt_ifmsg和rt_newaddrmsg,展示了内核如何处理路由表的动态更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

内核的各种协议并不直接使用前面提供的函数来访问选路树,而是调用几个函数:rtalloc和rtallocl是完成路由表查询的两个

函数;rtrequest函数用于添加和删除路由表项;另外大多数接口在接口连接或断开时都会调用函数rtinit。

选路消息在两个方向上传递信息。进程(route命令)或守护进程(routed或gated)把选路消息写入选路插口,以使内核添加

路由、删除路由或者修改现有的路由。当有时间发生时,如接口断开、收到重定向等,内核也会发送选路消息。进程通过选路

插口来读取它们感兴趣的内容。

内核还提供了另一种访问路由表的接口,即系统的sysctl调用。


1.rtalloc和rtalloc1函数

通常,路由表的查找通过调查rtalloc和rtalloc1函数来实现的。rtalloc调用rtalloc1,rtalloc1调用rnh_matchaddr函数,对于

Internet地址来说,该函数就是rn_match函数。

rtalloc1的大概处理流程如下:

调用rn_match,如果符合下列三个条件,则查找成功。

1)存在该协议族的路由表。

2)rn_match返回一个非空指针;并且

3)匹配的radix_node结构没有设置RNF_ROOT标志。

如果查找成功,则指向匹配的radix_node结构的指针保存在rt中。如果调用的第二个参数非0,而且匹配的路由表设有

RTF_CLONING标志,则调用rtrequest函数发送RTM_RESOLVE命令来创建一个新的rtentry结构,该结构是查询结果的

克隆。


2.宏RTFREE和rtfree函数

宏RTFREE,仅在引用计数小于等于1时才调用rtfree函数;否则,它仅完成引用计数的递减。


3.rtrequest函数

rtrequest函数是添加和删除路由表项的关键点。下图给出了调用它的一些其他函数。


rtrequest是一个switch语句,每个case对应一个命令:RTM_ADD、RTM_DELE

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值