IP层转发分组的流程
-
-
上图是一个路由器怎么进行分组转发的例子:有四个A类网络通过三个路由器连接在一起,每一个网络上都可能会有成千上万台主机。若路由表指出每一台主机该进行怎样的转发。则要维护的路由表是非常的庞大。如果路由表指定到某一个网络如何转发,则路由表中只有4行,每一行对应一个网络。以路由器2的路由表为例:由于R2同时连接在网络2和网络3上,因此只要目标主机在网络2或者网络3上,都可以通过接口0或者1或者路由器R2直接交付(当然还有使用ARP协议找到这些主机相应的MAC地址)。若目标主机在网络1中,则下一跳路由器为R1,其IP地址为20.0.0.7。路由器R2和R1由于同时连接在网络2上,因此从路由器2把转发分组給R1是很容易的。我们应当注意到:每一个路由器至少都要拥有两个不同的IP地址。总之,在路由表中,对每一条路由最主要的是以下两条信息:(目的网络,下一跳地址)我们根据目的网络地址来确定下一跳路由器,这样可以得到以下结论:
- IP数据包最终一定可以找到目的主机所在目的网络上的路由器(可能会经过多次间接交付)。
- 只有到达最后一个路由器时,才试图向目的主机进行间接交付。
-
虽然互联网上所有的分组转发都是经过基于目的主机所在的网络,但是在大多数情况下都允许这样的实例:对特定的主机指明一个路由,这种路路由叫特定路由。采用特定路由可以使网络人员方便管理控制网络和测试网络
-
路由器还可以采用默认路由以减少路由表所占用的空间和搜索路由表所使用的时间。
-
当路由器接收到一个待转发的数据报,在从路由表中得出下一跳路由器的IP地址后,不是把这个地址写入IP数据报,而是送交数据链路层的网络接口软件,网络接口软件复杂把下一跳的路由器IP地址转化为硬件地址(必须使用ARP),将硬件地址写入MAC帧的首部,然后根据这个硬件地址找到下一跳路由器。
-
根据以上几点,我们提出分组转发算法:
- 从数据报的首部提取目的主机IP地址D,得出目的网络N。
- 若N就是与此路由器直接相连的某个网络地址,则进行直接交付,不需要再经过其他的路由器。直接把数据报交付给目的主机(这里包括把目的主机D转化为MAC地址,把数据报封装成MAC帧,再发送该帧);否则就是间接交付,执行3。
- 若路由表有目的主机的特定主机路由,则把数据报传给路由表中所指明的下一跳路由器。否则进行4。
- 若路由表中有到达网络N的路由,则把数据报传给路由表中所指明的下一跳路由地址;否则,执行5。
- 若路由表中有一个默认路由,则把数据报传递给路由表中所指明的默认路由。否则,执行6。
- 报告转发分组出错。
划分子网
-
为什么划分子网?
-
IP地址空间利用率很低:每一个A类地址可连接的主机数超过1000万,每一个B类地址可连接的主机数也超过6万个。
-
给每一个物理网络分配的网络号会使得路由表变得太大导致网络性能变差。
-
两级IP地址不够灵活。
-
未解决上述问题,从1985年引出子网络号字段,使得两级IP地址变为三级IP地址,这种做法叫做划分子网【RFC950】。
-
划分子网的基本思路:
- 一个拥有许多物理网络的单位,可将所属的物理网络划分为若干字子网。划分子网属于单位内部的事情。本单位以外的网络看不见这个网络是由多少个子网组成,因此这个单位对外仍然表现一个网络。
- 划分子网的方法是从网络的主机号借用若干位当做子网络号,当然主机号也就减少了同样的位数,于是二级IP地址就变成了三级IP地址:网络号,子网络号,主机号。
- 凡是从其他网咯发送给本单位的某一台主机的IP数据报,仍然是根据IP数据报的目的网络号找到连接在本单位的路由器,但是此路由器在收到IP数据报之后,再按照网络号和子网络号找到目的子网,把IP数据报交付给目标主机。
-
划分子网的用例
1.
- 如图为某单位拥有一个B类IP地址,网络地址为145.13.0.0(网络号为145.13),凡是目的网络为145.13.x.x的数据报都会送到这个网络上路由器R1上。
- 现在把该网络划分为三个字网,这里假设子网络号占用8位,因此主机号就只剩下16-8=8位了,所划分的三个字网为145.13.3.0,145.13.7.0,145.3.21.0。路由器在接受到145.13.0.0上的路由器数据后,再根据数据报的目的地址把它转化到相应的子网。
-
子网掩码的提出
-
假定有一个IP数据报(其目的地址为145.13.3.10)已经到达了路由器R1,那么这个路由器如何把它转发倒子网145.13.3.0呢?
-
-
把三级IP地址的子网掩码和收到的目的地址的IP地址逐位进行与(AND)运算,就可以立即得到网络地址,剩下的步骤就交给路由器处理分组。
-
常见的子网掩码
- 例:
- 一直IP地址是141.14.72.24,子网掩码是255.255.192.0,求网络地址:
- 255.255.192.0的二进制:11111111 11111111 11000000 00000000
- IP 141.14.72.24二进制: 11111111 11111111 01001000 00000000
- 互与为 : 11111111 11111111 11000000 00000000
- IP为: 141.14.64.0
-
使用子网是时分组转发
-
在划分子网的情况下,分组转发的算法必须作出改动。在使用子网划分后,路由表应该包含以下内容:
- 目的网络地址
- 子网掩码
- 下一跳
-
在划分子网的情况下,路由器转发分组的算法如下:
- 从收到的数据包的首部提取目的IP地址D。
- 先判断是否为直接交付。对路由器直相连的网络逐个进行排查:用各个网络的子网掩码和D逐位相与(AND),看结果是否和对用的网络地址匹配上。若匹配,则把分组进行直接交付,转发结束,否则就是间接交付,执行(3)。
- 若路由表有目的地址为D的特定主机路由,则把数据报传给路由表中所指明的下一跳路由器;否则进行(4)。
- 对路由表中每一行(目的网络地址,子网掩码,下一跳地址),用其中的子网掩码和D进行逐位相与(AND),其结果为N。若N与该行的目的网络地址匹配,则把数据报传给该行所指明的下一跳路由器;否则,执行(5)。
- 如果有表中有一个默认路由,传送给路由表中所指明的默认路由;否则执行(6)。
- 报告转发分组错误。
-
例如:
-
如图有三个字网,两个路由器,以及路由器R1的部分路由表。现在源主机H1向目的主机H2发送分组。试讨论R1收到H1向H2发送的分组后查路由表的过程。
-
-
解:
- 源主机H1向目标主机H2发送的分组的目的地址为128.30.33.138。
- 源主机H1的本子网的子网掩码255.255.255.128与H2的IP地址128.30.33.128相与得到128.30.33.128,他不等于H1的网络地址(128.30.33.0)。这说明主机H2与主机H1不在同一个网段上,因此H1不能把数据包直接交付给H2。必须交给子网上的默认路由R1,由R1转发。
- 路由表在接受到这个分组之后,就在其路由表中逐行匹配寻找。
- 首先看R1路由表的第一行:用这一行的子网掩码255.255.255.128与H2IP地址进行互与,得到128.30.33.128,然后和这一行的给出的目的地址128.30.33.0进行比较,但是不匹配。
- 用样的方法进行第二行,结果发现相与出来的结果和目的网络地址匹配,则说明这个网络(子网2)就是收到的分组所要寻找的目的网络。于是就不用继续找了。R1把分组从接口1直接交付给主机H2(他们都在一个子网上)。
- 源主机H1向目标主机H2发送的分组的目的地址为128.30.33.138。
-
-
-
-
无分类编址CIDR(构造超网)
- 在一个划分子网的网络中可使用几个不同的子网掩码。使用变长子网掩码VLSM可进一步提高IP地址资源的利用率。在VLSM的基础上又进一步研究出无分类编制方法。它的全名是无分类域间路由选择CIDR。
- CIDR最主要的特点有两个:
- CIDR消除了传统的A类地址,B类地址,C类地址和划分子网的概念。因此能更加有效的分配IPV4的地址空间。
- CIDR把32位IP地址划分为前后两部分,前面部分是网络前缀,后面部分是主机,CIDR还使用斜线记法,就是在IP地址后面加上斜线/,然后写上网络前缀所占的位数。例如IP地址为128.14.35.7/20是某CIDR地址快中的一个地址,其中的前20就是网络前缀二前缀后面的14位是主机位。如图所示:
- 当然以上地址的主机号全为0和全为1的地址,一般并不使用,这个地址块共有2^12个地址,我们可以使用地址块中最小的地址和网络前缀来指明这个地址快。例如,上述的地址块可以用来表示128.14.32.0/20。
- 为了更方便的进行路由选择,CIDR使用了32位的地址掩码。地址掩码是由一串1和一串0组成,而1的个数就是网络前缀的个数。虽然CIDR不使用子网了,但是出于某些原因,CIDR使用的地址掩码也可以继续称为子网掩码,斜线记法中,斜线后面的数字就是1的个数。
- 由于CIDR地址块中有很多地址,所以在路由表中就利用CIDR地址块来查找目的网络,这种地址的聚合称之为路由聚合。它使得路由表中的一个项目可以表示传统分类的的很多个路由,路由聚合也称作构建超网,路由聚合有利于较少路由器之间的路由选择信息的交换,从而提高了整个互联网的性能。