Router的运作原理:

一、路由器接到数据后对数据的判断步聚:

1目标MAC,判断数据帧是不是给自已接口的(PC和路由器一样)

·         如果是,则交给上层处理。例:IPARP

·         如果不是则丢弃数据帧,注:二层帧只停留在一个链路上(即:本地链路),MAC地址只在本地链路发生变化(源MAC、目地MAC),当数据从一个链路跨过另一个链路后,其源MAC和目地MAC地址都发生改变。但,源IP和目地IP地址从始至终都不发生改变。

·         OSI模型:下层为上层提供服务,上层是下层的负载。

2、目标IP判断是不是自已的接口IPPC、路由器不一样)

·         如果是,交给上层处理。例:ICMPTCP

·         如果不是,PCIP包丢弃,而路由器则把IP包路由出去。 

3、如果IP包是给自已的则判断数据应该给那个应用(PC和路由器一样)。

·         路由器中的IP进程(IP_Input)会根据协议号判断数据应该交给上层的哪个进程。

·         例:ICMPTCPUDP

·         TCPUDP进程根据端口号判断数据应该给上层哪个应用进程。例:TelnetTftp

二、IP包能被转发的三个条件:

·         确定IP包的目标地址(目标网段)是可达的

·         确定目标网段的下一跳,下一跳的出口是可达的

·         重写介质访问控制头部(即:改写源/目地MAC地址)使它成功到达下一跳(需要二层ARP进行映射),最后再把二层的数据帧转变成一层的Bit流通过信号(光/电信号)传递出去这个过程叫串行化。

·         解析:当数据进来后,首先要分析从本路由器的哪个接口出去,但这个选路一定是最优的(通过DB表)

·         注:目的网段同接口的对应关系叫路由,多个路由产生的表项叫路由表,凡是放入路由表中的路由都是选择最优的。

·         路由器与路由器之间传输数据的过程就是封装---->解封装的过程。

·         RIB表: 

D(目地网段)

接口

1.0.0.0

S0/1

…..

……

 

·         IP_INPUT运行后:

1、首先在RIB中查找到下一跳和output interface(出接口)通过ARP cache映射。2IP_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才算查找完毕。出就是通常所说的“落叶归根”,一定要找到路由出来的最终根源,最终完毕。这就是用递归查询进行路由的查找。