Router的运作原理:
一、路由器接到数据后对数据的判断步聚:
1、目标MAC,判断数据帧是不是给自已接口的(PC和路由器一样)
· 如果是,则交给上层处理。例:IP、ARP
· 如果不是则丢弃数据帧,注:二层帧只停留在一个链路上(即:本地链路),MAC地址只在本地链路发生变化(源MAC、目地MAC),当数据从一个链路跨过另一个链路后,其源MAC和目地MAC地址都发生改变。但,源IP和目地IP地址从始至终都不发生改变。
· OSI模型:下层为上层提供服务,上层是下层的负载。
2、目标IP判断是不是自已的接口IP(PC、路由器不一样)
· 如果是,交给上层处理。例:ICMP、TCP
· 如果不是,PC把IP包丢弃,而路由器则把IP包路由出去。
3、如果IP包是给自已的则判断数据应该给那个应用(PC和路由器一样)。
· 路由器中的IP进程(IP_Input)会根据协议号判断数据应该交给上层的哪个进程。
· 例:ICMP、TCP、UDP
· TCP、UDP进程根据端口号判断数据应该给上层哪个应用进程。例:Telnet、Tftp
二、IP包能被转发的三个条件:
· 确定IP包的目标地址(目标网段)是可达的
· 确定目标网段的下一跳,下一跳的出口是可达的
· 重写介质访问控制头部(即:改写源/目地MAC地址)使它成功到达下一跳(需要二层ARP进行映射),最后再把二层的数据帧转变成一层的Bit流通过信号(光/电信号)传递出去这个过程叫串行化。
· 解析:当数据进来后,首先要分析从本路由器的哪个接口出去,但这个选路一定是最优的(通过DB表)
· 注:目的网段同接口的对应关系叫路由,多个路由产生的表项叫路由表,凡是放入路由表中的路由都是选择最优的。
· 路由器与路由器之间传输数据的过程就是封装---->解封装的过程。
· 例RIB表:
D(目地网段) |
接口 |
1.0.0.0 |
S0/1 |
….. |
…… |
· 当IP_INPUT运行后:
1、首先在RIB中查找到下一跳和output interface(出接口)通过ARP cache映射。2、IP_INPUT开始重写MAC_HEADER,并且把包丢到相应的出接口。
· LOOP _BACK0是一个虚拟接口,永远都为UP状态。
· 静态路由(S):优点:高效、简单,适用于小型网络。
· 例:R1(config)# ip router x.x.x.x [z1] s0/1[z2] 或 192.168.34.4[z3]
· R3# debug ip packet [z4]
三、RIB(路由表)的递归算法:
例下面的一段RIB:
5.0.0.0/24 is subneted 1 subnets.
s 5.5.5.0[1/0] via 192.168.34.4 [z5]
c 192.168.34.0/24 is directly connected seriale 0[z6]
· 因为路由是目的网段与出接口的对应关系,所以它会一直查到它的出接口(用递归查询)。
· 即:5.5.5.0通过192.168.34.4走,而192.168.34.4又通过与其直连的192.168.34.0/serial0出接口走,当查到出接口后,才查找完毕,否则会依次往下递归找,直到找出它的出接口。
· 当网络中各路由器对其所有路由都认知的时候,此时被称为收敛。
[z1]表示目的网段
[z2]表示本路由器的出接口
[z3]表示下一跳接口的IP地址(非本地路由器的接口)
[z4]表示查看数据包转发过程
[z5]解析:目的网段 5.5.5.0通过192.168.34.4的接口转发出去。但192.168.34.0的出接口没有,则继续往下查找192.168.34.0路由的出接口(此时RIB并没有查完毕,需进一步查找它的出接口才算查完)
[z6]当再往下查 找的时候 192.168.34.0路由所对应的出接口找到,即:Serial0是它的出接口,此时RIB才算查找完毕。出就是通常所说的“落叶归根”,一定要找到路由出来的最终根源,最终完毕。这就是用递归查询进行路由的查找。