计算机网络复习笔记(第四章 2 )

 

4.3.3,第141-146页(不含“3.使用二叉线索查找路由表”)

第4章 网络层

4.3.3 无分类编址CIDR(构造超网)

4.3.3 无分类编址CIDR

无分类编址CIDR的由来

我们在4.2.2节曾经介绍过“分类的IP地址”,其内容主要包括两个方面:

  1. IP地址以“网络号+主机号”的形式分为两部分。这样做的目的有两个:

    1. 允许以“IP网络”为单位为需要IP地址的组织、机构、单位分配IP地址块,这里的“IP网络”指的是一个给定网络号所包括的所有主机号。例如,如果为一个单位分配了一个C类IP网络,200.1.1.0,则该IP网络中的所有IP地址,即范围在200.1.1.0~200.1.1.255之间的IP地址,就均为该单位所拥有。

    2. 路由器的路由表中,可以只包括到某个IP网络的路由表项,这样比起要包括到所有IP地址的路由表来说,可以大大减小路由表的规模,从而大大提高路由表的查找效率。例如,对于上面的例子,路由表中只需要包括到“200.1.1.0”这个网络的一个表项就可以了,不需要包括到全部200.1.1.1~200.1.1.254共254个有效IP地址的表项。
      :一个IP网络中有效的IP地址,即可以分配给主机的IP地址的个数,是其地址范围中的地址数-2,因为主机号为0的地址用来表示该网络,主机号二进制全1的地址为对该网络的广播地址。例如,对于C类网络200.1.1.0,其地址范围为200.1.1.0~200.1.1.255,共有256个IP地址,其中的主机号为0的地址,即200.1.1.0,用以标识该网络,而主机号二进制位全1的地址,即200.1.1.255,将用作到该网络的广播地址,即目的IP地址为200.1.1.255的IP数据报,将会被该网络中的所有主机接收。

  2. IP地址的基本分类是使用地址的最高位进行区分的(详细的A、B、C分类参见4.2.2节)。

IP地址ABC分类法的问题

随着Internet的迅猛发展,人们发现这种固定的ABC分类法很不灵活,例如,一个A类网络所包括的主机数为个,即约为16,000,000个,即使是一个B类的网络,它包括的主机数也为个,即约为65,534个。这样一下为一个组织分配一个A类或B类的网络号,会浪费很多IP地址。

解决IP地址ABC分类不灵活的问题—无分类编址CIDR

为解决IP地址ABC分类不灵活的问题,人们提出了无分类域间路由(CIDR,Classless InterDomain Routing)的解决方案。其主要思想是使用任意长的二进制位数作为IP网络的“网络号”,这也就意味着使用任意长的二进制位数作为主机号。要点包括如下三个方面:

  1. 将IP地址分为“网络前缀+主机号”两个组成部分。其中网络前缀(network-prefix)用来标识一个网络,相当于此前的网络号,很多时候人们也直接将其称为网络号,本课程也将遵循这一习惯。一个网络前缀所包含的全部IP地址称为一个CIDR地址块。

  2. CIDR使用“斜线记法”(slash notation), 或称为CIDR记法,来表示地址前缀所占的二进制位数,继续使用主机号为0的IP地址作为网络号。
    例如,200.1.1.1/24即表示前24位(即前3个字节)为网络前缀,也就是该网络与原来的C类网络等同,仍然是200.1.1.0。

  3. 为了获得CIDR中一个IP地址的前缀,可以使用地址掩码(address mask)与IP地址取与运算地址掩码是一个32位的数字,其前n位(其中n为前缀的二进制位数)每一位都是1,后面的32-n位每一位都是0,也就是说对应网络前缀的位都是1,而对应主机号的位都是0。

对于给定的一个斜线记法的CIDR意义上的IP地址,我们很容易就能获得它的地址范围:即主机号全0到全1的二进制范围。

例如:200.1.1.1/24对应的CIDR地址块的主机号范围是8个0到8个1:00000000~11111111,共256()个地址。

注:在CIDR中,主机号全0的地址依然用来表示网络,主机号全1的地址依然是对本网络的广播地址,因而有效的IP地址数仍然是总的IP地址数减-2。

我们来看CIDR地址200.1.1.1/23,它表示网络前缀占23位,主机号占9位,也就是说第3个字节中的前7位为网络前缀,第3个字节的最后1位和第4个字节的8个位合起来9个位为主机号,因而主机号的范围是二进制的9个0到9个1,共个地址,去掉全0和全1的地址,该地址块中有效的IP地址个数为

这个例子有挑战性的地方是它的网络前缀即网络号的值,我们将第3个字节写成二进制表示:00000001,因为十进制是1,因而二进制就是7个0和1个1,由于第3个字节只有前7位是网络前缀部分,因而表示网络号时,要将最后1位设为0,于是该地址对应的网络号的第3个字节就是0,而第4个字节一定是全0,因而200.1.1.1/23对应的网络号是200.1.0.0/23。

再来看200.1.1.1/25,它的网络前缀是25位,即前3个字节和最后一个字节的最高位为网络号,主机号共有7个位,即二进制的7个0到7个1,该地址块中共有个地址。要获得该地址块对应的网络号,我们将最后一个字节表示为二进制数00000001,它的最高位是0,而网络号需要将主机号对应的位全部置0,因而该地址块网络号的最后一个字节是0,因而200.1.1.1/25对应的网络号是200.1.1.0/25,除了斜杠后的部分与200.1.1.1/24相同,但并不矛盾。

再来看200.1.1.129/25,我们将最后一个字节展开,得10000001,因为,因而它对应的8位二进制位的最高位(第7位)和最低位(第0位)是1,其它位都是0。该地址对应的网络号的最后一个字节最高位为1其余位为0,其值为128,因而200.1.1.129/25的网络号是200.1.1.128/25。

再来看200.1.1.129/25地址块的地址范围。由于主机号只有7位,我们就只考虑最后一个字节。而最后一个字节的最高位是1,因而主机号的范围是10000000~11111111(十进制的128~255),即1后面7个0到1后面7个1,由于主机号全0和全1的地址有特殊用途,因而该地址块中有效IP地址的最小值为129,最大值为254。

再来看200.1.1.200/26,即网络前缀为26位,主机号为6位。我们还是要获得该地址块的地址范围和网络号。

首先将最后一个字节200表示为二进制数,这里我们将上面的方法推广到一般情况(我们只考虑一个字节范围内的数即0~255之间的数):要将一个十进制数表示成二进制数,我们将该十进制数表示为2的幂次的和,这样只要将和中含有的2的幂次值对应的位写为1,其余位写为0,则如此就可得到十进制数对应的二进制数。将十进制数表示为2的幂次的和的技巧是依次找到最大的2的幂次。

对于200来说,我们有:,于是我们就可以写出200对应的二进制数为11001000。

:上述转换技巧需要对一个字节范围内2的幂次对应的十进制值要很熟悉,我们将该对应列到下面的表中:(其实就是十进制转二进制)

位号 7 6 5 4 3 2 1 0
2的幂
十进制值 128 64 32 16 8 4 2 1

 

再回到200.1.1.200/26,由于第4个字节对应的二进制值是11001000,而其高二位为网络号,因而该字节的网络号的值为11000000,即十进制的192,也就是说200.1.1.200/26对应的网络号是200.1.1.192/26。

再看200.1.1.192/26地址块的IP地址范围,它的最后一个字节的范围应该是11000000~11111111,即十进制的192~255,去掉特殊的主机号全0和全1的地址后,主机号范围是193~254。(1是固定的 剩下7位变化)

上面,我们用一个CIDR地址200.1.1.200/26推出了其网络号和地址范围,这证实了此前的断言,即给定任何一个CIDR地址,我们就能获得它的网络前缀(即网络号)和地址范围。
这个方法归根结底 怎么求网络号其实就是地址掩码和ip地址取与运算就是网络号

注意:表达一个CIDR地址块的标准方法是网络前缀的斜杠表示,如200.1.1.200/26所在的地址块的标准表示是200.1.1.192/26。

使用地址掩码可以使从CIDR地址获取前缀的过程更加专业和通用。

前已述及,地址掩码就是CIDR地址中网络前缀部分对应的二进制位为1,主机号部分对应的二进制位为0的一个4字节32位的数。

如:200.1.1.192/26对应的地址掩码为:11111111 11111111 11111111 11000000,它所对应的十进制值是255.255.255.192。实际上所有26位网络前缀的地址掩码都是255.255.255.192。

有了地址掩码后,获取一个CIDR地址的网络前缀可以用地址掩码与CIDR地址取二进制的逻辑与运算(AND)获得。

如,对于200.1.1.200/26可以用如下的运算获得网络前缀

IP地址的二进制表示:              11001000 00000001 00000001 11001000
26位网络前缀对应的地址掩码:11111111 11111111 11111111 11000000
——————————————————————————————————
取逻辑AND运算获得网络前缀:11001000 00000001 00000001 11000000
网络前缀的十进制数:                     200            1               1             192

我们用此方法来计算200.1.1.82/26的网络前缀。首先我们有,即82对应的二进制值为01010010,于是我们可以用下面的运算求取200.1.1.82/26的网络前缀:

IP地址的二进制表示:              11001000 00000001 00000001 01010010
26位网络前缀对应的地址掩码:11111111 11111111 11111111 11000000
——————————————————————————————————
取逻辑AND运算获得网络前缀:11001000 00000001 00000001 01000000
网络前缀的十进制数:                     200            1               1             64

即200.1.1.82/26对应的地址网络前缀为200.1.1.64/26,该地址块最后一个字节的范围是:01000000~01111111,对应的十进制范围是64~127,其有效的IP地址范围是200.1.1.65~200.1.1.126。

我们看到并不是每一个CIDR地址块的最大IP地址的最后一个字节都是255的。

对于人力计算,我们可以根据CIDR地址块中网络前缀的位数,判断出只需要重点考虑的4个字节中的一个字节,这对于简洁地理解CIDR是很有意义的。地址掩码使得CIDR地址块的运算看起来有些啰嗦,但是地址掩码方法可以由计算机自动计算,因而意义极其重大。

4.3.3 无分类编址CIDR(构造超网)(续)



说明:这里以一个综合性的例子说明如何使用CIDR分配IP网络和地址,同时也将说明IP路由表的基本结构并给出典型路由表项示例。

下图示出了一个综合性的使用CIDR分配IP网络和地址的例子。

图1 CIDR网络示例

我们将围绕这个例子展开本次课程的内容。

CIDR网络示例(图1)介绍

图中用R1~R5共5个路由器连接了LAN1~LAN4和N1~N3共7个网络和Internet。

7个网络分别用CIDR分配了IP网络和地址,分配情况如下表所示。

 

表1 图1中的IP地址分配
网络CIDR地址范围掩码
LAN1 200.100.1.0/24

200.100.1.0~200.100.1.255

200.100.1.1~200.100.1.254

255.255.255.0
LAN2 11.1.3.0/25

11.1.3.0~11.1.3.127

11.1.3.1~11.1.3.126

255.255.255.128
LAN3 11.1.3.128/26

11.1.3.128~11.1.3.191

11.1.3.129~11.1.3.190

255.255.255.192
LAN4 150.10.9.128/25

150.10.9.128~150.10.9.255

150.10.9.129~150.10.9.254

255.255.255.128
N1

11.1.3.224/27

11.1.3.224~11.1.3.255

11.1.3.225~11.1.3.254

255.255.255.224
N2 11.1.3.192/27

11.1.3.192~11.1.3.223

11.1.3.193~11.1.3.222

255.255.255.224
N3 150.10.8.0/23

150.10.8.0~150.10.9.255

150.10.8.1~150.10.9.254

255.255.254.0

:表中的“掩码”就是CIDR的地址掩码,也称为网络掩码

下一站路由

Internet路由器采用了“下一站路由”(next-hop routing)的机制转发收到的报文:即路由器收到一个报文后,从报文首部提取出目的IP地址,然后从路由表中查出该IP地址要转发的接口(如果是直接交付)或下一站路由器(如果是间接交付),Internet的单个路由器不决定报文到达目的站的路径,仅决定路径上当前路由器的下一个路由器。

路由表

Internet路由器的路由表所包括的表项如下所示:

表2 Internet路由表(空表)
目的网络网络掩码下一站接口
       
       

 

下面对路由表的表项给出解释:

  1. “目的网络”就是CIDR中的网络前缀;

  2. “网络掩码”就是CIDR对应的地址掩码;

  3. “下一站”

    1. 对于间接交付“下一站”就是要送往的下一站路由器的IP地址,该路由器一定与当前路由器属于同一个网络,

    2. 对于直接交付“下一站”就是要送出的接口的IP地址;

  4. “接口”用路由器在对应网络上接口的IP地址来标识。

使用路由表转发分组的基本流程为:对于收到的一个IP报文,路由器将其目的IP地址取出,并依次与路由表中各项的网络掩码取与运算,如果运算的结果与该路由表项的目的网络相同,则从IP地址描述的接口送到下一站。

主机的路由表

尽管说到路由表一般指的都是路由器的路由表,但是Internet上的主机也是有路由表的,只是大部分时候主机的路由表比较简单而已。表3给出了H11的路由表。

 

表3 H11的路由表
序号目的网络网络掩码下一站接口
1 150.10.8.8 255.255.255.255 200.100.1.254 200.100.1.1
2 200.100.1.0 255.255.255.0 200.100.1.1 200.100.1.1
3 0.0.0.0 0.0.0.0 200.100.1.254 200.100.1.1

注1:为了叙述方便增加了序号列。
注2:对于主机由于只有一个网络接口,其路由表中的接口列只有一个值,即主机的IP地址。

H11的路由表只有3项

  1. 第1项的目的网络是一个完整的主机IP地址,对应图1中的S主机,它不是一个CIDR表示的网络号,这种路由称为到特定主机的路由。当着需要对一些特殊的主机(一般是服务器)指定专门的路由以确保访问速度时,就需要在路由表中配置到特定主机的路由。
    注1:到特定主机的路由的网络掩码为255.255.255.255,这可以使对任何IP地址的与运算结果都是那个IP地址。
    注2:到特定主机的路由通常需要人为配置,而常规的路由表项(通常指的是路由器中的)都是通过路由选择协议(将在4.5节中介绍)自动建立的。

  2. 第2项为到H11所在网络的直接交付路由,它的下一站和接口都是H11自身的IP地址200.100.1.1。

  3. 第3项为默认路由,其目的网络和网络掩码的值都是0.0.0.0,而下一站为路由器R1在网络LAN1上接口的IP地址。
    注1:默认路由的网络掩码是0.0.0.0,这样可以确保对任何IP地址的与运算结果都是0.0.0.0,即都相同,这样相应的报文就都可以送到同一个下一站。
    注2:Internet上主机的默认路由器(也称为默认网关)地址可以人工配置或自动获取,以Win10为例,人工配置默认网关的操作如下:

    1. 打开“控制面板”窗口,点击“网络和共享中心”:

    2. 点击当前活动的网络连接,本例为“以太网”,打开“以太网状态”对话框:

    3. 点击“详细信息”按钮,可以打开“网络连接详细信息”对话框,可以看到其中显示了物理地址,即16进制表示的以太网6字节地址;已启用DHCP说明启动了自动获取IP地址等网络配置的功能(下面有IPv4 DHCP服务器地址,DHCP将在6.6节介绍);IPv4地址说明了当前机器的IPv4地址;IPv4子网掩码指的就是CIDR中的地址掩码;IPv4默认网关指的就是当前机器的默认路由器地址。

    4. 点击“以太网状态”对话框中的“属性”按钮,可以打开“以太网属性”对话框:

    5. 双击“以太网属性”对话框中的“Internet协议版本4(TCP/IPv4)”可以打开“Internet协议版本4(TCP/IPv4)属性”对话框,选择其中的“使用下面的IP地址(S)”可以人工设置当前主机的IP地址、子网掩码(即地址掩码)和“默认网关”(即默认路由器的IP地址)。

H11转发分组的流程为

  1. 它先根据第1行,将一个IP地址与255.255.255.255取与运算,如果结果是150.10.8.8,则将其转交到在LAN1上接口的IP地址为200.100.1.254的路由器R1。

  2. 再根据第2行,将一个IP地址与255.255.255.0取与运算,如果结果为200.100.1.0,则为直接交付到本网络某个主机的报文,于是就按第2条路由施行直接交付操作。

  3. 最后,将IP地址与第3行默认路由的掩码即0.0.0.0取与运算,此时不论目的IP地址是什么,结果都会是0.0.0.0,因此报文会按第3条路由送到R1路由器。

主机S的路由表就属于表项比较多了,如下表所示。

表4 S的路由表
序号目的网络网络掩码下一站接口
1 150.10.9.128 255.255.255.128

150.10.8.255

150.10.8.8
2 150.10.8.0 255.255.254.0 150.10.8.8 150.10.8.8
3 200.100.1.0 255.255.255.0

150.10.8.1

150.10.8.8
4 11.1.3.0 255.255.255.0 150.10.8.2 150.10.8.8
5 0.0.0.0 0.0.0.0

150.10.9.254

150.10.8.8

 

S转发分组的流程与H11基本相似,不同的地方有

  1. 最长前缀匹配优先
    仔细观察N3(150.10.8.0/23)和LAN4(150.10.9.128/25)网络,我们看到LAN4的IP地址块实际上是N3的IP地址块中的一部分,我们将它们的后两个字节以二进制方式写出来,并将网络号部分加粗,这样会看得更清楚一些,因为LAN4的前23位与N3是相同的:
    N3:    150.10.00001000.00000000
    LAN4:150.10.00001001.10000000
    这种情况在实际的网络IP地址分配中是允许和存在的。
    然而,这种情况会带来一个问题:即当对较小规模的地址块用较大规模地址块的掩码取与运算时,其结果是较大规模的网络前缀
    对于本例来说,用N3的地址掩码255.255.254.0对LAN4上的任意一个IP地址,如150.10.9.254,施行与运算,结果都会得到N3的网络前缀,即150.10.8.0。
    由于此问题的存在,当路由表中较大范围的网络对应的表项在较小范围的网络对应的表项的前面时,将导致目的地址为较小范围IP地址的数据报被转发到较大范围的网络上。
    为解决此问题,IP路由表采用了“最长前缀匹配优先原则”(longest-prefix matching first),即将网络前缀位数较长的表项排在前面。以上述的N3和LAN4为例,我们将LAN4的表项(前缀长度为25)排在N3的表项(前缀长度为23)前面,这样就可以解决上述问题。

  2. 路由聚合(route aggregation)
    直观地看图1,应该会得到一个结论:S的路由表中应该包括到LAN2(11.1.3.0/25)、LAN3(11.1.3.128/26)和N1(11.1.3.224/27)、N2(11.1.3.192/27)的路由表项。
    但仔细地研究这些网络对应的地址块可以发现,它们可以聚合为一个较大的地址块:11.1.3.0/24。
    我们将这些网络前缀的最后一个字节以二进制方式表示出来会看得很清楚:
    LAN2:11.1.3.00000000
    LAN3:11.1.3.10000000
    N2:    11.1.3.11000000
    N1:    11.1.3.11100000
    从表1的IP地址范围也可以看出,这四个网络合起来的十进制地址范围正好是11.1.3.0~11.1.3.255,即对应地址块11.1.3.0/24。
    同时,这4个地址块都是经过R3路由器访问的。于是,为缩小S的路由表的规模,将上述4个表项合并为一个表项,如表4的第4行所示。
    :为方便本部分的学习,我们硬性地对访问一个网络需要通过哪个路由器做了硬性的规定,即人工地给出路由表,实际运行的路由器的路由表是通过路由选择协议自动生成和更新的。
    这种方法被称为路由聚合(route aggregation),也称为构成超网(supernetting),用以形象地表达这种用一个范围较大的超级地址块取代多个范围较小的地址块的方法

路由器的路由表

下表给出了R1的路由表。

表5 R1的路由表
序号目的网络网络掩码下一站接口
1 150.10.8.8 255.255.255.255 150.10.8.1 150.10.8.1
2 150.10.9.128 255.255.255.128

150.10.8.255

150.10.8.1
3 150.10.8.0 255.255.254.0 150.10.8.1 150.10.8.1
4

200.100.1.0

255.255.255.0

200.100.1.254

200.100.1.254
5 11.1.3.224 255.255.255.224 11.1.3.225 11.1.3.225
6 11.1.3.0 255.255.255.0 11.1.3.254 11.1.3.225
7 0.0.0.0 0.0.0.0

150.10.9.254

150.10.8.1

 

对R1的路由表简要解释如下:

    1. 表中的第1行为到特定主机的路由,同时也是直接交付的路由。

    2. 表中的第3、4、5行分别是到N3、LAN1和N1的直接交付

    3. 表中的第2、3行使用了最长前缀匹配优先原则

    4. 表中的第6行使用了路由聚合方法。

    5. 表中的第5、6行使用了最长前缀匹配优先原则

      表中的第7行为默认路由







posted @ 2020-06-03 14:43  然终酒肆  阅读(579)  评论(0编辑  收藏  举报