本帖最后由 网语者 于 2015-7-1 17:34 编辑
2.8.2 路由转发
有了路由表这个“交通路标牌“,还需要我们按一定的规则来使用它。一个基本的规则是”最长匹配原则“,即报文到达路由器后如何选取路由表项的基本匹配原则。查找路由表时,将报文目的地址与路由表中各条路由表项的掩码Mask按位“与”操作,如果结果与路由表项的目标地址Destination相同,则说明匹配;然后从匹配的路由表项中选取掩码最长的一个用于转发——这个表项是对目标网络了解得最精确的一个表项。
Destination/Mask Proto Pre Cost NextHop Interface
0.0.0.0/0 Static 50 18 192.169.81.1 Vlan101
192.169.0.0/16 OSPF 100 10 192.169.81.18 Vlan105
192.169.1.0/24 RIP 60 20 192.169.85.1 Vlan2081
以上图路由表为例,目的IP为192.169.1.100的报文进入后匹配路由表的过程如下。
表项0.0.0.0/0的匹配过程:
表项中掩码转换为二进制“00000000. 00000000.00000000.00000000”,
目的IP “192.169.1.100”转换为二进制“11000000. 10101000.00000001.00001010”,
按位“与”操作后的结果为“00000000. 00000000.00000000.00000000“,即点分十进制”0.0.0.0“,与目的地址Destination值相匹配,其中匹配的掩码长度为0位。
表项192.169.0.0/16匹配过程:
表项中掩码转换为二进制“11111111. 11111111.00000000.00000000”,
目的IP “192.169.1.100”转换为二进制“11000000. 10101000.00000001.00001010”,
按位“与”操作后的结果为“11000000. 10101000.00000000.00000000“,即点分十进制” 192.169.0.0“,与表项中的目的网络Destination值相匹配,其中匹配的掩码长度为16位。
条目192.169.0.0/24匹配过程:
表项中掩码转换为二进制“11111111. 11111111.11111111.00000000”,
目的IP “192.169.1.100”转换为二进制“11000000. 10101000.00000001.00001010”,
按位“与”操作后的结果为“11000000. 10101000.00000001.00000000“,即点分十进制” 192.169.1.0“,与表项中的目的地址Destination值相匹配,其中匹配的掩码长度为24位。
以上三项都匹配,则按“最长匹配原则”选择使用192.169.1.0/24的RIP路由条目,从Vlan2081接口转发。其中表项0.0.0.0/0称为缺省路由或默认路由,它能匹配任何单播IP地址。当一个IP地址匹配不上其他表项时,如果有缺省路由存在,都会匹配缺省路由。
说明:
实际路由匹配处理时,不会真的像例子一样一条条从上往下匹配,而会根据特殊的数据结构组织路由表,然后进行高效的路由匹配。
路由器R1配置指向PC所在网段的静态路由 ip route-static 1.1.2.0 24 8.8.8.1
路由器R2配置指向IPC所在网段的静态路由 ip route-static 1.1.1.0 24 8.8.8.254
图21路由器路由转发示例
有了路由的理论知识,我们再以上图的网络为例看看PC访问IPC时报文转发的全过程:
第一步:PC需配置自己的网关为1.1.2.1,IPC也需配置自己的网关为1.1.1.1,网关即为上图中的各自连接的路由器。
第二步:PC向网关发送目的地址为IPC的IP报文之前,以“IP与ARP解析”一节中的方法检查报文的目的IP 地址1.1.1.100,发现其与PC自身的IP地址不在同一网段,需将报文发往PC的网关;然后查找自身的ARP表中是否有网关1.1.2.1的MAC地址,如果没有则通过ARP解析获取网关的MAC地址,建立ARP表项;然后向网关发送报文,报文目的MAC是网关连接PC的接口E2/1的MAC地址,源MAC是PC的MAC,目的IP是 IPC地址1.1.1.100,源IP是PC的地址1.1.2.100。
Destination/Mask Proto Pre Cost NextHop Interface
1.1.1.0/24 Static 10 20 8.8.8.254 E2/8
1.1.2.0/24 Direct 0 0 1.1.2.1 E2/1
1.1.2.1/32 Direct 0 0 127.0.0.1 InLoop0
8.8.8.0/24 Direct 0 0 8.8.8.1 E2/8
8.8.8.1/32 Direct 0 0 127.0.0.1 InLoop0
图22 R2的路由表
第三步: R2从接口E2/1收到报文后,通过匹配路由表(如上图)中的条目,按照最长匹配原则选取第一个条目,获得下一跳的IP地址为8.8.8.254。R2通过ARP地址表获取8.8.8.254的MAC(即R1接口E1/8的MAC),然后R2将报文的源MAC修改为R2接口E2/8的MAC,目的MAC修改为R1 接口E1/8的MAC,源和目的IP没有变化,将报文从E2/8发出——为什么要修改源和目的MAC呢?因为前面提过:链路层地址MAC只在局域网有效。
Destination/Mask Proto Pre Cost NextHop Interface
1.1.2.0/24 Static 10 20 8.8.8.1 E1/8
1.1.1.0/24 Direct 0 0 1.1.1.1 E1/1
1.1.1.1/32 Direct 0 0 127.0.0.1 InLoop0
8.8.8.0/24 Direct 0 0 8.8.8.254 E1/8
8.8.8.254/32 Direct 0 0 127.0.0.1 InLoop0
图23 R1的路由表
第四步:R1从接口E1/8收到报文后,发现目的IP地址是自己的直连网段,则ARP请求获取目的IP地址IPC的MAC,然后将报文的源MAC修改为R1 接口E1/1的MAC,目的MAC修改为IPC的MAC,源IP和目的IP不变,将报文从E1/1发送给IPC,这样IPC就收到了PC的访问报文。
IPC回复给PC的报文转发流程也类似。 |