1
计算机网络技术理论与实践
1.6.1.2 5.1.2 IP网络中分组的转发机制

5.1.2 IP网络中分组的转发机制

Internet上的每台主机都有一个唯一的IP地址作为主机标识符。IP协议就是使用这个地址在主机之间传递信息。当前常用IPv4地址的长度为32位,分为4段,每段8位,用十进制数字表示,每段数字范围为0~255,段与段之间用句点隔开。

IP地址分为网络号和主机号两部分,网络号的位数决定了可以分配的网络数,主机号的位数则决定了网络中最大的主机数。由于整个Internet网络中有非常多的网络,各种网络的规模不同,有的非常庞大,有的包含主机非常少,为了适应不同网络规模的需求,将IP地址空间划分成5种类别:A、B、C、D、E,每一类具有不同的网络号位数和主机号位数。

随着网络的发展,IP地址空间逐渐短缺,而按照类别的方法划分网络和主机地址,只是粗略地按照网络规模分配IP地址空间,会造成很大的浪费,这就产生了无分类的网络和主机地址划分方法。在无分类的IP地址结构中引入了子网掩码的概念。子网掩码是一个32位地址,与IP地址结合使用,它的主要作用是指出IP地址中哪部分是网络地址,哪部分是主机地址。子网掩码一旦设置好,网络地址和主机地址就固定了。这种方法可以根据需要调整子网掩码中1的个数,从而灵活地分配网络地址和主机地址的长度,以便更精细地适应网络的规模,可以更有效地分配IP地址。

通常IP地址中的网络号与物理网络有一定的对应关系。网络之间通过路由器互相连接起来,一个网络号只能分配给一个物理网络,不能分配到不同网络中,而一个物理网络中是可以分配到多个不同的网络号,但是具有不同网络号的主机在这个物理网络中是不能够直接通信的,必须要通过路由器才能互相通信。

TCP/IP网络中的数据发送方式分为两种:

(1)直接交付,当目的主机与源主机的IP地址在同一个子网中时,源主机利用物理网络的数据发送机制将数据包直接交付给目的主机,不需要通过路由器;

(2)间接交付,当目的主机与源主机的IP地址不在同一个子网中时,源主机需要将数据包发送到与其相连的路由器,该路由器按照路由转发表指出的路由将数据包转发给下一个路由器,就这样一跳一跳地转发下去,直到转发到目的主机所在物理网络相连的路由器,然后由该路由器通过目的物理网络的数据发送方式将数据包发送给目的主机。在路由器将数据包发送给下一跳路由器时,也是通过路由器间的物理网络的数据发送方式来完成数据的传输。

Internet网络中各个IP子网间的数据转发是由路由器完成的,也就是说路由器互联的是IP地址中的网络,只有当IP地址中的网络号映射到真正的物理网络上,路由器才能够起到互联物理网络的作用。路由器是一种具有多个输入和输出端口的网络设备,如图5-2所示。路由器从功能上可以划分为两大部分:路由选择部分和分组转发部分。

img132

图5-2 路由器结构示意图

(1)路由选择部分

路由选择部分的任务是根据路由协议构造路由表,并定期更新和维护路由表。在Internet的路由策略中,每个路由器并不知道网络之间数据传输的完整路径,它只知道局部的路径,即要到达目的网络应该向哪个路由器转发,当每个都只知道局部路径的路由器联合在一起工作时,就可以找到这条完整的路径,这种方式的好处是只维护局部的路径可以降低维护开销、计算开销,提高网络的稳定性,并且可以减少网络的变化引起的开销。

(2)分组转发部分

分组转发部分由3部分组成:交换机构、输入端口和输出端口,各部分功能如图5-3所示。

img133

图5-3 路由器端口示意图

①交换机构可以是软件也可以是硬件,其功能是根据转发表对分组进行处理,将某个输入端口进入的分组从一个合适的输出端口转发出去,交换机构只对IP报文的网络地址部分进行处理,因此,路由器只能在IP地址所标识的网络间转发报文。交换机构所使用的转发表是由路由选择部分根据路由协议所构造的。

②输入端口由物理层、数据链路层和网络层三个处理模块组成。物理层进行比特接收。数据链路层按照链路层协议接收传送分组的帧,剥去帧首部和尾部后,将分组送到网络层。网络层根据分组的目的IP地址进行判断,若收到的分组是到本路由器的,则交给路由器相应的模块处理;若收到的分组不是到本路由器的,则交给交换机构,由其按照分组中目的IP地址查找转发表,根据查询的结果,选择合适端口转发出去。分组在交换队列中排队等待处理,会产生一定的时延,尽量减少时延是提高路由器性能的关键。

③输出端口将交换机构传送过来的分组先进行缓存,然后由数据链路层处理模块给分组加上数据链路层的首部和尾部,发送给物理层处理模块,由其发送到外部线路。

路由器的端口一般都是全双工的,即一个物理端口既可以接收数据也可以发送数据。通常路由器的每个端口连接的是一个不同的IP网络。

下面对IP网络分组转发中最为重要的路由表、路由选择方法和分组转发机制进行简单介绍。

1.路由表

路由器中交换机构利用路由表完成分组转发。在路由表中采用所谓下一跳的方法来表示路由,例如RouterA的一个端口连接网络1.0.0.0/8,RouterF的一个端口连接网络2.0.0.0/8,从网络1.0.0.0/8到网络2.0.0.0/8要经过RouterA、RouterB、RouterD。在RouterA中并不会记录一条从RouterA经过RouterB、RouterD到RouterF的路由,而是在每个路由器上都指出到RouterF应该经过的下一个路由器,如下所示。

RouterA中:到网络2.0.0.0/8经过的下一个路由器是Router B。

RouterB中:到网络2.0.0.0/8经过的下一个路由器是Router D。

RouterD中:到网络2.0.0.0/8经过的下一个路由器是Router F。

RouterF中:到网络2.0.0.0/8直接走与网络2.0.0.0/8相连的端口。

采用下一跳表示方法还有一个好处是路由表的长度固定,便于计算机存储和处理。

在大型网络中路由器通常连接成为网状结构,因而,从一个网络到达另一个网络的路由通常会有多条,这就需要路由协议能够选择代价最小的路由,也就是最优的路径。在Cisco路由器中,路由的代价用管理距离和费用(Cost)来表示。一条路由是否优化首先看管理距离,当管理距离一样时,才通过费用进行比较。

管理距离是根据路由的来源(直连的、静态的、动态的)确定路由的优先级。从不同来源获得的路由的可靠性不一样,管理距离就是为了能够区分开这些不同来源路由的可靠性,这样当从不同来源获得到达同一网络的多条路径时,可以选出较为可靠的路径。直连的路由是到达直接相连的网络,该网络与路由器的某个端口直接相连,这种路由可靠性非常高,具有高的优先级;静态路由是由网络维护人员经过精心计算和规划后添加的路由,相对来说可靠性也较高;动态路由是通过搜集网络信息,根据路由协议计算出来的,可能会受到各种因素的影响,其计算过程的复杂程度也较高,不如直连路由和静态路由可靠,优先级较低。

费用是在相同的管理距离下进一步区分路由的优先级,优先级越高的路径通常认为越优化,应该优先选择。

路由表中的路由还有精度的问题。子网掩码中网络位数越长(1的个数越多),相应的网络中可以包含的主机的个数越少,精度就越高,越容易定位到一台主机,极端情况是子网掩码有32个“1”(即主机地址,或者说该网络中只有一个主机),它的精度是最高的,可以直接定位到一个主机。通常路由的精度越高,越容易找到目的主机,应该优先选择。路由的精度可以直接从目的网段地址中获取,比如1.1.0.0/16的精度比1.0.0.0/8高。

下面是一个在Cisco路由器上的用命令show ip route显示出来的路由表中的内容。

router#sh ip route

Codes:C-connected,S-static,I-IGRP,R-RIP,M-mobile,B-BGP

  D-EIGRP,EX-EIGRP external,O-OSPF,IA-OSPF inter area

  N1-OSPF NSSA external type 1,N2-OSPF NSSA external type 2

  E1-OSPF external type 1,E2-OSPF external type 2,E-EGP

  i-IS-IS,L1-IS-IS level-1,L2-IS-IS level-2,ia-IS-IS inter area

  *-candidate default,U-per-user static route,o-ODR

  P-periodic downloaded static route

  [Distance/Metric]

C 1.0.0.0/8[0/1]is directly connected Fastethernet0/0*active

C 2.0.0.0/8[0/1]is directly connected Fastethernet0/1*active

O IA 3.0.0.0/8[110/1795]via 1.0.0.2Fastethernet0/0*active

          <Group 0>3routes displayed.

          All Group 3routes displayed.

可以看出,路由表项主要包含5个字段:

第1个字段是路由的属性,表示本路由的种类,例如C表示直连路由;O表示OSPF路由,对于OSPF路由还有进一步的分类,其中O IA表示是OSPF自治域的内部路由等。

第2个字段表示路由的目的地址,即经过本路由可以到达的目的网络地址。

第3个字段包括方括号中的两个参数,它们分别表示管理距离和路由的费用值。管理距离用来指定路由种类的优先级。由于获得路由的途径不同,对这些路由的信任程度是不一样的,直连路由优先级最高,管理距离为0;静态路由信任度也较高,管理距离是1;动态路由可靠性不如直连路由和静态路由,它们的管理距离比较大。不同路由协议所产生的动态路由的管理距离是不一样的,例如,OSPF协议的管理距离是110,RIP协议的管理距离是120,EIGRP协议的管理距离分两种,内部路由是90,外部路由是170等。当管理距离相同时,需要利用费用值来决定使用哪条路由,费用值越小的路由应该优先选择。因此,由管理距离和费用共同为路由器确定路由的优先级。

第4个字段是文字说明,指出经过的下一跳路由器的IP地址和本路由器的输出端口。

第5个字段是本路由的当前状态,指出本路由当前是否可用。

例如:

上述路由表中的第一个表项C 1.0.0.0/8[0/1]is directly connected Fastethernet0/0*active中的各个字段的含义如下:

·C表示是直连路由;

·1.0.0.0/8表示目的网络地址;

·[0/1]表示管理距离是0(直连路由),费用值是1;

·is directly connected Fastethernet0/0表明是直连路由,经过端口Fastethernet0/0进行转发。

·active表示此路由当前状态是可用的。

对于非直连路由来说,文字中描述的是此路由下一跳路由器的IP地址和转发端口,如上面路由表中的第三条路由,via 1.0.0.2Fastethernet0/0*表示此路由的下一跳路由器的IP地址是1.0.0.2,经过本路由器的端口Fastethernet0/0进行转发。这里的下一跳路由器的IP地址,是指下一跳路由器与端口Fastethernet0/0相连的那个端口的IP地址。

2.路由选择方法

路由器在选择路由时先按目的网段地址进行选择,如果有多条路由满足条件,则按路由的精度再进行筛选,如果结果仍然不是唯一的,则要用管理距离和费用选择最好的路由,最后仍然可能出现多条路由,这时路由器认为这些路由的优先级是一样的,会按照一定的策略(选第一条、轮流使用等)选出一条。下面是一个路由选择的例子。

假设一个路由器的路由表中有5条路由如下:

C  1.0.0.0/16[0/1]is directly connected Fastethernet0/0*active

O IA 3.0.0.0/24[110/1795]via 1.0.0.2Fastethernet0/0*active

O IA 3.0.0.192/26[110/1805]via 1.0.0.2Fastethernet0/0*active

O IA 3.0.0.200/29[110/21785]via 1.0.0.2Fastethernet0/0*active

D  3.0.0.200/29[90/210]via 1.0.0.2Fastethernet0/0*active

如果需要将一个报文转发到3.0.0.200/29,上面的路由表中有4条路由满足要求:

O IA 3.0.0.0/24[110/1795]via 1.0.0.2Fastethernet0/0*active

O IA 3.0.0.192/26[110/1805]via 1.0.0.2Fastethernet0/0*active

O IA 3.0.0.200/29[110/21785]via 1.0.0.2Fastethernet0/0*active

D  3.0.0.200/29[90/210]via 1.0.0.2Fastethernet0/0*active

我们将这4条路由中的IP地址变换成二进制,以便于分析,如表5-1所示,前两行为目的主机地址及其子网掩码,后面8行分别为4条路由中的目的地址及其子网掩码。

表5-1 IP地址变换成二进制

img134

在这4条路由中,从路由的精度上看,29位掩码的路由精度最高,分别由OSPF和EIGRP产生(种类是O IA和D),即:

O IA 3.0.0.200/29[110/21785]via 1.0.0.2Fastethernet0/0*active

D  3.0.0.200/29[90/210]via 1.0.0.2Fastethernet0/0*active

在这两条路由中,OSPF产生的路由的管理距离是110,EIGRP产生的路由的管理距离是90,因此应该选择EIGRP产生的路由,相同管理距离的路由只有一条,即:

D  3.0.0.200/29[90/210]via 1.0.0.2Fastethernet0/0*active

这样就可以使用该路由发送报文。

路由器IP层所执行路由转发过程如下:

(1)从IP数据包的首部提取目的主机的IP地址。

(2)若目的主机的IP地址属于与该路由器直接相连的某一个网络,则不需要再经过其他的路由器,直接通过该网络将数据包交付给目的主机。这需要将IP报文根据该网络的传输方式进行封装。例如该网络是以太网,则将数据包封装成为以太网帧,这就需要将目的主机地址转换为目的主机的MAC地址,填入以太网帧头,再发送此帧;否则,执行(3)。

(3)若路由表中有到达目的主机的路由,则将数据包传送给路由中所指明的下一跳路由器,数据包也要根据两个路由器之间网络的传输方式进行传送;否则,执行(4)。

(4)报告路由选择出错,并丢弃该数据包。

当路由选择算法用路由表得出下一跳路由器的IP地址后,不是将此IP地址填入IP数据包,而是送交下层的网络接口软件。网络接口软件根据下一跳路由器的IP地址对IP报文进行数据链路层封装后发送。例如,在以太网中,下一跳路由器的IP地址被转换成MAC地址,并将此MAC地址放在以太网帧首部的目标MAC地址部分,IP报文放在以太网帧的数据部分后发送,在IP数据包的源IP地址和目的IP地址不会在转发过程中发生变化。

3.网络内数据包的转发过程

在Internet网络中,任何相邻设备之间真正的数据包传输过程都是由这两个设备之间的物理网络的传输机制来完成的。

同一IP网络内部的主机之间的数据交互、目的主机向相连路由器发送数据、相邻路由器之间的数据发送以及与目的主机相连的路由器到目的主机的数据发送过程都是由具体物理网络的传输机制完成的。

下面采用以太网为例来说明数据包在物理网络中的传输过程。

通常如果仅仅在以太网内部进行数据传输的话,是不需要网络层协议的,但是为了能够实现网络间的互通,基本上所有的以太网中都承载了网络层的协议。使用以太网来发送IP数据包需要解决两个问题:一是如何将IP数据包在以太网中传送,另一个是如何将IP地址转化为以太网内部地址。

网络协议都规定了自己的报文格式,只有符合协议规定的报文,网络中的设备才能够处理,但是IP报文和以太网的报文格式完全不一样,以太网的设备无法识别,当然也无法处理和收发。在TCP/IP协议体系中采用分层的概念,将高层的协议封装在下层的协议中,即把IP报文当成以太网帧中的数据部分,放进一个以太网帧的数据字段中,这样以太网的设备就不会处理这部分内容了,从而实现了在以太网上发送IP数据包。如图5-4所示。

img135

图5-4 以太网帧的层次结构

另外一个问题是,在物理网络中主机间只能通过物理网络的内部地址进行通信,例如在以太网中只能通过MAC地址进行通信。但是在发送IP数据包时,目的地址是IP地址,并没有携带目的设备的物理网络内部地址。所以必须实现IP地址到物理网络内部地址之间的转换,TCP/IP协议体系中采用ARP地址解析协议,对于所有支持广播的网络完成IP地址到物理网络内部地址的转换。

采用以太网为例,每台主机和路由器中都有一张IP地址和以太网MAC地址的映射表,一开始该表是空的。当主机(或路由器)A要向以太网中的主机(或路由器)B发送IP数据包时,先在自己的ARP表中查看是否有目的主机(或路由器)B的IP地址。如果有,就可查出其对应的以太网MAC地址,再将此MAC地址写入以太网帧头的目的MAC地址字段,并将本机的MAC地址填入源MAC地址字段,然后将该以太网帧发送到网络上。如果查不到目的主机的IP地址,则执行ARP解析过程,如图5-5所示。

img136

图5-5 以太网ARP解析过程

(1)主机A的ARP进程在本以太网上广播一个ARP请求分组,询问哪个主机具有ARP请求中的IP地址(目标IP地址),该以太网上所有主机的ARP进程都会收到此ARP请求分组。

(2)主机B的ARP进程收到ARP请求后,发现其中的所请求的IP地址是自己的IP地址,就发送ARP响应分组,在响应分组中写入自己的IP地址和MAC地址。其余主机的ARP进程不理睬这个ARP请求分组。

(3)主机A收到主机B的ARP响应分组后,就在其ARP表中写入主机B的IP地址与MAC地址的映射关系。

(4)使用新得到的主机B的MAC地址来封装发往B的以太网帧。

为了减少网络上的通信量,主机A在发送ARP请求分组时,将自己的IP地址和MAC地址写入ARP请求分组。当主机B收到A的ARP请求分组时,就将主机A的IP地址与MAC地址的映射写入主机B自己的ARP表中。当主机B以后需要向A发送数据包时,就不用再进行ARP解析了。

从IP地址到MAC地址的ARP解析过程是自动进行的,主机用户是感觉不到这种地址解析过程的。只要以太网的两个设备需要进行通信,ARP协议就会自动地将目的IP地址解析为MAC地址。在不支持广播的网络中无法使用ARP完成IP地址到物理网络地址的转换,这就需要采用其他的转换方法。

4.网络间数据包的转发过程

物理网络内部传送数据时需要使用物理网络的内部地址,而在网络间要传送数据时就必须通过网络层的地址来实现,在Internet网络中就需要使用IP地址。从层次上看,物理网络内部地址是数据链路层使用的地址,而IP地址是网络层和以上各层使用的地址。IP地址放在IP数据包的首部,而物理网络内部地址放在物理网络中帧格式的首部。

Internet网络上不同物理网络中的主机间传输数据时需要采用IP数据包,并利用IP地址进行寻址。不同物理网络中的主机间传输数据时需要跨越多个物理网络,每经过一个物理网络就需要按照该物理网络中的传输方式和内部地址进行传输,所以说一个网络中的主机向另外一个网络中的主机发送的IP数据包的传输过程是由路径上一个个物理网络中的传输来共同完成的。

不同网络间数据包的传输过程如图5-6所示。在图中,两个路由器R1和R2将两台主机所在的以太网互联在一起,R1和R2之间也是通过以太网相连。数据包传输时,在同一个局域网内的两台设备间通过MAC地址(物理地址)采用以太网帧进行传送,两个局域网之间的数据包传送,是在路由器上通过的IP地址中的网络地址部分查找转发表,找到转发接口来完成的。

img137

图5-6 网络间数据包发送过程示意图

例如,当主机PC1需要向PC2发送数据时,它需要发送IP数据包,在IP包头中填入PC2的IP地址为目的IP地址,由于PC1和PC2不在一个网络中,所以PC1需要将IP数据包发送给与自己网络相连的路由器R1,这个过程中PC1通过本地的以太网将IP数据包封装在以太网帧中发送给R1,以太网帧头的R1的MAC地址MAC3是通过ARP协议获取的。这个以太网帧中的源MAC地址是MAC1,目的MAC地址是MAC3,源IP地址是IP1,目的IP地址是IP2。

当路由器R1收到PC1的以太网帧后,将其中的IP数据包取出来,并按照IP数据包中PC2的IP地址来查找转发表,完成从PC1和R1间的以太网转发到R1和R2之间的以太网,R1根据路由表找到下一跳的路由器为R2后,需要通过R1与R2之间的以太网把数据包从R1发送到R2。这时就需要用到以太网帧来发送IP数据包,并且以太网帧头部的目的MAC地址是通过ARP协议解析出的R2与R1相连端口的MAC地址MAC5,这样就完成了R1的数据包到R2的发送。这个以太网帧中的源MAC地址是MAC4,目的MAC地址是MAC5,源IP地址是IP1,目的IP地址是IP2。

R2收到R1发送的以太网帧后,将其中的IP数据包解析出来,并根据其中的目的IP地址,查询R2的转发表,完成数据包从R1和R2之间的以太网到R2与PC2之间的以太网的转发。最后R2需要通过R2与PC2之间的以太网将数据包发送给PC2,这就需要将IP数据包封装在以太网帧结构中,并通过ARP协议解析出PC2的MAC地址MAC2,并将其填入以太网帧头中,然后将以太网帧发送出去。这个以太网帧中的源MAC地址是MAC6,目的MAC地址是MAC2,源和目的IP地址仍然是IP1和IP2。

PC2接收到R2发送的以太网帧后,将其中的IP数据包解析出来,并交给高层处理,就完成了PC1到PC2的数据发送过程。

从这个发送过程可以看出,在发送的整个过程中IP数据包并没有变化,也就是源IP地址和目的IP地址不会在发送过程中被修改,而数据链路层的帧要根据所经过的物理网络类型进行封装,同样数据链路层的源地址和目的地址在每个物理网络中传送时,都需要按照物理网络中的数据传送的实际收、发双方进行设置。

下面对数据发送过程进行总结,当一个主机要发送IP数据包时,首先产生这个数据包,数据包中包含有源IP地址和目的IP地址。该主机要从路由表中选择一个路由来发送该数据包。主机的每一个网络接口在主机的路由表中都有一个到该接口所连接网段的直连路由。一般的主机只有一个以太网接口,例如PC,而有的主机会有多个网络接口,例如有多个网络接口的服务器。路由器是用来互联网络的,通常都会有多个网络接口。

直连路由具有最高的优先级,因此,如果IP数据包是到这些路由指定的网段,就会从相应的接口中发出直接到达目的主机。如果没有直连路由能够到达目的网络,主机就会找其他的路由发送该数据包,如果没有任何路由到达目的网络,该数据包就无法发送,会导致发送失败。

如果找到可以发送IP数据包的路由,就确定了发送该数据包的网络接口,需要根据该接口所连接网络的类型对IP数据包进行封装,并完成IP地址到该物理网络地址的转换,将转换后的源物理地址和目的物理地址写入该物理网络所封装数据帧的头部。然后将数据帧从该接口发送出去,传输到路由所指定的下一跳路由器。

当数据帧到达下一跳路由器或目的主机后,该设备要解封装,从网络发来的数据帧中取出IP数据包,如果此设备发现IP数据包的目的地址是本机的IP地址,整个发送过程结束,否则还要继续查找到目的网段的路由,并根据转发接口物理网络的类型重新封装,并完成地址转换,然后继续将数据帧转发出去,直到到达目的主机,或找不到路由导致发送失败。

路由器主要功能包括网络间的路径选择和数据转发。网络间的路径选择需要能够找到到达目的网络的最佳路径。路径的选择可以通过人工配置完成,也可以通过动态的路由协议来完成。路由协议根据作用的区域不同,分为域内的内部网关路由协议和域间的外部网关路由协议,后面章节会分别进行介绍。