路由过程分析
路由过程分析
路由过程分析
重要数据构造
struct fib_config {
u8
fc_dst_len;
// 目的地点的掩码
u8
fc_tos;
v4/] dev_add_pack(&ip_packet_type) 中已经将 ip_rcv 函数增添到 ptype_base 列表中
最后抵达本机网络三层 ip_rcv
-> skb_dst(skb)!=NULL,故不再经过 ip_route_input* 函数 -> ip_rcv_finish
-> dst_input = [skb_dst(skb)->input] =ip_local_deliver
本机发往本机的数据包是不经过任何 ip_route_input* 函数的,因此 ip_route_input_slow 函数中已经将全部目的地点为 loopback 的报文标记为 martian_destination
其实 ip_route_input_slow 的函数说明已经描绘的很清楚了:
/*
NOTE. We drop all the packets that has local source
addresses, because every properly looped back packet
must have correct destination already attached by output routine.
Such approach solves two big problems:
1. Not simplex devices are handled properly.
2. IP spoofing attempts are filtered with 100% of guarantee.
*/
非本机发往本机
与本机发往本机的流程对比,非本机发往本机的流程显得比较简单
路由过程分析
路由过程分析
路由过程分析
第一 netif_recveive_skb 从网卡接收到 IP 报文,遍历 ptype_base 列表,调用 ip_rcv 进入网络三层
ip_rcv
-> ip_rcv_finish
-> skb_dst (skb) == NULL,故需要走 ip_route_input 进行目的路由查找
-> ip_route_input
-> ip_route_input_slow
-> fib_lookup
-> ip_mkroute_input (转发 )
-> dst_input
校验函数 fib_lookup 返回结果,若结果 == RTN_LOCAL表示是发往本机的报文,不然需要转发 .
若发往本机:
net->loopback_dev
ip_local_deliver
若需要转发:
第一检测能否开启了 ip_forward ( 经过 echo 1 > /proc/sys/net/ipv4/ip_forward 开启 ) ip_mkrou
路由过程分析 来自淘豆网m.daumloan.com转载请标明出处.