第四章 路由
4.1 路由函数表结构及关系图
a. 图: 略
b. 从图可看出,路由函数表fib_table是路由的总根, 从此出发可找到各个路由区结构fn_zone, 也可以找到路由节点结构fib_node或者路由信息结构fib_info
4.2 路由函数表的初始化
......
4.3 通过路由函数表查找路由信息
......前一篇
4.4 路由设置及相关结构的初始化
......前一篇
4.5 基于输出方向的路由表查找与创建
以tcp_v4_connect()函数调用ip_route_connect()的过程分析输出方向的路由表查找与创建. tcp_v4_connect()函数在客户端向服务器发出连接请求的过程中被调用
sys_socketcall()-->sys_connect()-->inet_stream_connect()-->tcp_v4_connect()-->ip_route_connect()-->__ip_route_output_key()-->ip_route_output_slow()
-->ip_route_output_flow()
ip_route_output_slow()的后续调用关系如下:
ip_route_output_slow()-->ip_dev_find()
-->inet_select_addr()
-->fib_select_multipath()
-->fib_select_default()-->fn_hash_select_default()-->fib_detect_death()
-->ip_mkroute_output()-->__mkroute_output()-->rt_set_nexthop()
-->rt_intern_hash()
带参数如此: ip_route_connect(&rt, nexthop, inet->saddr,
RT_CONN_FLAGS(sk), sk->sk_bound_dev_if,
IPPROTO_TCP,
inet->sport, usin_port, sk, 1)
此中: rt是路由表,用来返回给tcp_v4_connect()使用
nexthop是跳转地址(也可能是服务器地址)
inet->saddr是源地址(即发送方的IP地址)
RT_CONN_FLAGS(sk)是服务类类型
sk->sk_bound_dev_if是socket所使用的网络设备的ID
IPPROTO_TCP指定使用TCP传输控制协议
inet->sport是客户端的端口
usin->sin_port是服务器端口, 即目标端口.
!!!!!!!!!!!!!!!!!!!!!理解待续
4.6 基于输入方向的路由表查找与创建
......
阅读(1009) | 评论(0) | 转发(0) |