购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

路由表与路由转发

在“互联网与分层”一节我们知道,网络层位于TCP/IP协议分层模型的第三层,提供发送端到目的端之间的信息传输服务,网络层的数据以IP信息数据报文的形式传输,网络层打包时会添加IP首部信息,包含该IP数据报文的发送者的源IP信息和接收者的目的IP信息,而路由器就是通过IP数据报文的目的IP(有些情况也会需要源IP)匹配路由表来控制数据报文的转发,所以称为“三层转发”。其路由拓扑图如图1-25所示。

图1-25 路由拓扑图

以太网的“转发设备”就像在交叉路口指挥交通的“交警”一样,需要依据一定的规则来指挥车辆的通行。之前讲过的二层转发是依据“MAC表项”来指挥以太帧转发,三层转发则是依据“路由表”来指挥跨网段的IP数据报文转发。路由表是三层转发设备最核心的表项,就像“交通路标牌”一样指导报文的转发。IP报文的三层转发其实是报文经过一个个“交叉路口”时被不断转发的过程。

路由表

路由表一般由动态路由协议负责生成——当然也可以通过管理员手工静态配置来完成。路由协议负责收集信息,构建报文转发的“地图”,然后在路由表中生成相关表项。路由表其实并不知道报文的完整转发路径,只知道到达目的地的最近的下一个“交叉路口”。路由器负责把报文送到下一个“交叉路口”,即下一个路由器,然后由下一个路由器再负责送到下下个路由器,不断往复,直到目的地址。

路由表中的路由表项一般包含如下内容:目的网段和掩码、路由来源、优先级、开销、下一跳地址、出接口,如图1-26所示。

Destination/Mask:目的网络或主机地址/掩码。

图1-26 路由表示例

Proto:发现该路由表项的路由协议(即路由来源),Direct表示设备直连的网段路由,Static表示手工配置的静态路由,OSPF和RIP表示由动态路由协议OSPF和RIP发现的路由。

Pre:路由的优先级,标识不同路由协议的特权数值。当不同的路由协议学习到相同的路由时(目的网段和掩码都相同),数值较小的生效;若数值相同,则同时生效,这就是等价路由,即两条路由表项都可以用,按照一定的策略进行选择。

Cost或Metric:标识出了到达路由所指目的地的花费,即IP包的“旅途”费用。该花费值只在同一种路由协议内比较同一目的地时才有意义,不同的路由协议之间的路由花费值没有可比性。

NextHop:下一跳IP地址,即下一个转发报文的路由器的地址。

Interface:出接口,去往目的网段的数据包将从本设备的该接口发出。

说明

直连路由:链路层协议发现的路由,开销小,配置简单,无须人工维护,只能发现本接口所属网段的路由或协商到的对端的路由。

静态路由:利用网络管理员手工配置的路由,不能适应网络变化,应用广泛,尤其是默认路由。

动态路由协议:动态路由协议动态发现的路由,能自动调整并适应网络的变化,在大型网络中不可或缺,如RIP和OSPF。

路由转发

有了路由表这个“交通路标牌”,还需要我们按一定的规则来使用它。一个基本的规则是“最长匹配原则”,即报文到达路由器后如何选取路由表项的基本匹配原则。查找路由表时,将报文目的地址与路由表中各条路由表项的掩码Mask按位“与”操作,如果结果与路由表项的目标地址的Destination相同,则说明匹配;然后从匹配的路由表项中选取掩码最长的一个用于转发——这个表项是对目标网络了解得最精确的一个表项。

下面以表1-1的路由表为例,说明目的IP为192.169.1.100的报文进入后匹配路由表的过程。

表1-1 路由表及配置

表项0.0.0.0/0的匹配过程:

表项中掩码转换为二进制“00000000.00000000.00000000.00000000”;

目的IP“192.169.1.100”转换为二进制“11000000.10101001.00000001.01100100”;

按位“与”操作后的结果为“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.10101001.00000001.01100100”;

按位“与”操作后的结果为“11000000.10101001.00000000.00000000”,即点分十进制“192.169.0.0”,与表项中的目的网络的Destination值相匹配,其中匹配的掩码长度为16位。

表项192.169.0.1/24匹配过程:

表项中掩码转换为二进制“11111111.11111111.11111111.00000000”;

目的IP“192.169.1.100”转换为二进制“11000000.10101001.00000001.01100100”;

按位“与”操作后的结果为“11000000.10101001.00000001.00000000”,即点分十进制“192.169.1.0”,与表项中的目的地址的Destination值相匹配,其中匹配的掩码长度为24位。

以上三项都匹配,则按“最长匹配原则”选择使用192.169.1.0/24的RIP路由条目,从VLAN2081接口转发。其中表项0.0.0.0/0称为默认路由,它能匹配任何单播IP地址。当一个IP地址匹配不上其他表项时,如果有默认路由存在,都会匹配默认路由。

说明

实际路由匹配处理时,不会真的像表1-1的例子一样一条条从上往下匹配,而会根据特殊的数据结构组织路由表,然后进行高效的路由匹配。

图1-27 路由器路由转发示例

路由器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

ip route-static命令用来配置静态单播路由,如图1-27中命令:ip route-static 1.1.2.0 24 8.8.8.1,其中1.1.2.0为目的地址网段,24为目的地址掩码,8.8.8.1为下一跳地址。此命令将在R1生成到达PC所在网段的如下静态路由条目:

即目的地址为PC网段1.1.2.0的报文的下一跳地址为R2的8.8.8.1,报文将从R1的E1/8发送出去。

有了路由的理论知识,我们再以图1-27的网络为例看看PC访问IPC时报文转发的全过程:

第一步:PC需配置自己的网关为1.1.2.1,IPC也需要配置自己的网关为1.1.1.1,网关即为图1-27中的各自连接的路由器。

第二步: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。

第三步:R2从接口E2/1收到报文后,通过匹配路由表(见表1-2)中的条目,按照最长匹配原则选取第一个条目,获得下一跳的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只在二层局域网有效。R1的路由表见表1-3。

表1-2 R2的路由表

表1-3 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的报文转发流程也类似。

三层交换

网管推荐老U采用路由器或三层交换机来解决问题。我们先看看路由器一般是怎么解决老U想在办公网VLAN内看监控网VLAN里的摄像头图像的问题的,其组网拓扑以及流量走向图如图1-28所示。

图1-28 采用路由器互联的拓扑以及流量走向图

从图1-28可知,网络摄像机在圆形接口所在的监控VLAN里,而桌面计算机都在方形接口所在的办公VLAN里,两个VLAN内的终端设备互访时流量都需经过路由器转发。问题是解决了,但这个拓扑图让老U看起来觉得怪怪的,二层交换机上的数据报文跑到路由器上,然后又从路由器上跑下来,这样来回折腾着实让人看起来别扭。能否让交换机具有三层转发的功能,流量不通过上面的路由器绕行?答案是可行的。这种兼具二层交换机和路由转发功能的设备称为三层交换机。

三层交换机可是个很棒的设计,其功能特点不仅仅是路由转发加二层交换那么简单,它还具有三层交换的功能——前面的文字为了简单起见,我们将二、三层转发统称为转发。在数据通信界,我们通常将路由器转发过程中的按照路由表项最长匹配而转发的行为称为“路由转发”或“三层转发”,而把表项直接匹配、免除较复杂的最长匹配而转发的行为称为“交换(Switch)”,例如二层交换机根据MAC表匹配进行转发,通常称为“二层交换”——“交换”一词来源于工业时代的人工电话交换机系统。在老影片中经常看到有人在电话机旁狂摇几下(注意不是拨号),然后就说:给我接XXX;话务员接到要求后就会把相应线头插在要接的端子上,即可通话。个人认为翻译成“切换”更加贴切,在网络领域,“交换”一词的含义与“转发”基本相同。

那么,三层交换机既然叫“交换机”,顾名思义自然就该有“三层交换”的功能特点。三层交换机的转发过程查找的不是路由表,而是三层转发信息表(L3FDB表),它使得交换机不仅支持最长匹配,还支持精确匹配。L3FDB表的转发表项包含生效的路由信息表(Routing Information Base,RIB)和转发信息表(Forwarding Information Base,FIB),其中FIB表项源自ARP表项的信息。如图1-29所示,IP地址为2.2.2.10的PC按照最长匹配原则访问了IP地址为1.1.1.10的NVR之后,三层交换机就获得了关于2.2.2.10和1.1.1.10的两条ARP表项。这样三层交换机就可以生成2.2.2.10/32和1.1.1.10/32两条主机路由。这有什么好处呢?通常的路由表项数据结构中,掩码较长的表项会首先获得匹配,掩码较短的表项需要迭代查找才能命中。有了这两条32位掩码的主机路由,后续互访时就可以一次命中,直接转发,这就是“三层交换”的由来。从上述过程可以看出,在32位掩码的主机路由表项生成之前,需要一次正常的路由转发过程,但只需要“一次路由转发”,就可以生成后续三层交换所需的主机路由,所以这个特点也称为“一次路由,多次交换”,是三层交换机最本质的特征。所谓的精确匹配,就是指一次性命中32位掩码的主机路由的行为,它是最长匹配的一个特例。

图1-29 三层交换机转发实例

由于FIB表项来自于ARP表项,那么一次命中的“三层交换”过程就比较适合于与交换机直连的两个设备间的互访。如果待访问的目的设备与交换机隔了一个路由器,则交换机依旧只能采用路由转发的匹配过程。所以,三层交换机的优势只有在两台与交换机直连的设备之间互访时才体现出来。

三层交换机即使练就了路由转发和三层交换的功力,它原有的二层交换的老本领也不能丢。当三层交换机收到一个IP报文,究竟是走路由转发(或三层交换)还是二层交换,主要看收到的报文的目的MAC地址是否为交换机自身的接口MAC地址,如果是则走路由转发(或三层交换),如果不是就走二层交换。

三层交换机基本配置典型实例

三层交换机各接口及主机的IP地址和掩码如图1-30所示。要求采用静态路由,使图1-30中IPC、NVR、PC机任意两者之间都能互通。

图1-30 三层交换机各接口及主机的IP地址和掩码示意图

相关配置如下:

(1)配置交换机各个接口的IP地址(略)

(2)配置静态路由

(3)配置主机

配置IPC的默认网关为1.1.2.3,NVR的默认网关为1.1.6.1,PC的默认网关为1.1.3.1,具体配置过程略。

(4)查看配置结果

家园网友互动

Q:一只小鱼 发表于 2015-8-13 15:48:24

中间经过其他多个三层交换机的情况下,为什么无法进行三层交换,只能进行路由转发呢??

A:网语者 发表于2015-8-13 17:09:25

因为中间的三层交换机没有直连源或目的设备,无法通过ARP获取源或目的设备的ARP表项,就无法生成 32 位的主机路由。

Q:一只小鱼 发表于 2015-8-13 15:46:19

精确匹配都在什么场合下使用呢?

A:网语者 发表于2015-8-13 17:07:29

三层交换机的转发过程查找的不是路由表,而是L3FDB表,它使得交换机不仅支持最长匹配,还支持精确匹配。L3FDB表的转发表项包含生效的路由信息表(Routing Information Base,RIB)和转发信息表(Forwarding Information Base,FIB),其中FIB表项源自 ARP 表项的信息。例如:IP地址为 2.2.2.10 的 PC 按照最长匹配原则访问了IP地址为1.1.1.10的 NVR 之后,三层交换机就获得了关于 2.2.2.10 和 1.1.1.10 的两条 ARP 表项。这样三层交换机就可以生成 2.2.2.10/32 和 1.1.1.10/32 两条主机路由。这有什么好处呢?通常的路由表项数据结构中,掩码较长的表项会首先获得匹配,掩码较短的表项需要迭代查找才能命中。有了这两条 32 位掩码的主机路由,后续互访时就可以一次命中,直接转发,这就是“三层交换”的由来。

看来三层交换机最适合老U的需求了。

既然有这么好的东西,老U决定索性再多加几台摄像机。但增加之后却出现了一个奇怪的现象:监控图像开始卡顿了,算了算带宽,分明足够了啊,这是怎么回事呢? y8gfeUnrAxpvKKtnXY7Rtwa5V3c11fAG4dQvirxKMtQqmRbseDv/GjlwXNYOAa3b

点击中间区域
呼出菜单
上一章
目录
下一章
×