第四章 网络层
# 第四章 网络层
如何将数据传送到另一个计算机?
# 4.1 网络层概述
从本节课开始,我们进入第4章网络层的学习。本节课我们对网络层进行概述。
网络层的主要任务是实现网络互连,进而实现数据包在各网络之间的传输,如图所示。
这些异构型网络,如果只是需要各自内部通信,他们只要实现各自的物理层和数据链入层即可,但是如果需要将这些异构型网络互连起来,形成一个更大的互联网,就需要使用网络层互联设备路由器。
需要说明的是为了简单起见,有时我们可以不用画出这些网络,而将他们看作是一条链路即可。
对于互联网而言,仅实现计算机网络体系结构中的物理层和数据链路层,是不能实现数据包在互联网中各网络之间传输的,要实现该功能,就要必须实现网络层,网络层需要解决以下主要问题:
首要问题是网络层应该向其上面的运输层提供怎样的服务,是可靠传输服务,还是不可靠传输服务?我们在之前的课程中曾介绍过,数据包在传输过程中可能会出现误码,也有可能由于路由器繁忙而被路由器丢弃,还有可能出现按序发送的数据包,不能按序到达接收方。
- 如果网络层对于上述传输错误不采取任何措施,则提供的是不可靠传输服务。
- 如果网络层对于上述传输错误采取措施,并使得接收方能正确接收发送方所发送的数据包,则提供的是可靠传输服务。
- 不同网络体系结构所提供的服务可能是不同的。例如因特网使用的tcpip协议体系的网际层,提供的是无连接的不可靠的数据报服务,而ATM,帧中继和X.25的网络层提供的都是面向连接的可靠的虚电路服务。
网络层需要解决的第二个主要问题是寻址问题,例如TCP/IP协议体系的网际层使用IP地址,我们来举例说明,
- 这是网络N1上两个路由器接口各自所分配的IP地址,它们的前三个数是相同的,可以看作是他们所在网络的网络编号,而第4个数各不相同,用于区分这两个不同的路由器接口,
- 这是网络N3上两个路由器接口各自所分配的IP地址,它们的前两个数是相同的,可以看作是他们所在网络的网络编号,而后两个数不完全相同,用于区分这两个不同的路由器接口,
- 这是网络N7上两个路由器接口各自所分配的IP地址,它们的第一个数是相同的,可以看作是他们所在网络的网络编号,而后三个数不完全相同,用于区分这两个不同的路由器接口。
网络层需要解决的第三个主要问题是路由选择问题。我们来举例说明,如图所示,数据包从原站到达目的站,可以走这样一条路径,也可以走这样一条路径。对于本例还有其他路径可走,我们就要不一一演示了。
那么路由器收到数据包后,是依据什么来决定将数据包从自己的哪个接口转发出去的呢?这个问题在我们之前的课程中曾简单介绍过,不知大家是否还记得。没错,依据的是数据包中的目的地址和路由器中的路由表。
- 例如这是路由器R1的路由表,里面记录着路由器、R1所知道的网络以及数据包要到达这些网络,应该从自己的哪个接口转发。
- 假设R1知道数据包要到达网络N7,下一跳,应将其转发给路由器R4,则路由表中应该有这样一条记录,
- 而数据包要到达网络N6,下一跳,应将其转发给路由器R2,则路由表装应该有这样一条记录。
请大家想想看,刚才是我们假设而已,知道这些路由记录,但在实践当中路由器是如何得出这样的路由记录呢?有两种方法,
- 一种是由用户或网络管理员进行人工配置,这种方法只适用于规模较小,且网络拓扑不改变的小型互联网。
- 另一种是实现各种路由选择协议,由路由器执行路由选择协议中所规定的路由选择算法,而自动得出路由表中的路由记录。这种方法更适用于规模较大,且网络拓扑经常改变的大型互联网。
因特网是目前全世界用户数量最多的互联网,它使用4层协议体系的TCPIP协议站,如图所示,由于TCPIP协议站的网络层需要网际协议IP,它是整个协议站的核心协议。因此在TCP IP协议战中,网络层常称为网际层。由于TCP IP协议站在全世界被广泛使用,因此在本章节的教学中,我们主要基于TCPIP协议站的网际层,来学习计算机网络体系结构中的网络层的理论知识和实践技术。
另外需要说明的是 TCPIP协议站的网际层中除网际协议IP外,还包含有我们之前课程中已经介绍过的地址解析协议ARP,以及在本章后续课程中将要介绍的网际控制报文协议ICMP和网际组管理协议IGMP等
本节课的内容小结如下
# 4.2 网络层提供的两种服务
本节课我们介绍网络层提供的两种服务,一种是面向连接的虚电路服务,另一种是无连接的数据报服务。
我们首先来看面向连接的蓄电路服务,如图所示,这是一个小型的互联网,这是主机中的5层原理体系结构。
虚电路服务的核心思想是
- 可靠通信,应由网络自身来保证。
- 当两台计算机进行通信时,应当首先建立网络层的连接,也就是建立一条虚电路VC(Virtual Circuit),也保证通信双方所需的一切网络资源,然后双方就要沿着已建立的虚电路发送分组,需要说明的是虚电路表示这是一条逻辑上的连接,分组都沿着这条逻辑连接,按照存储转发方式传送,而不是真正建立了一条物理连接。
- 而采用电路交换的电话通信,则是先建立一条真正的连接。因此分组交换的虚连接与电路交换的连接只是类似,但并不完全一样。
- 分组的首部仅在连接建立阶段使用完整的目的主机地址,之后每个分组的首部只需携带一条虚电路编号即可。
- 这种通信方式如果在使用可靠传输的网络协议,就可使所发送的分组最终正确到达接收方。
- 通信结束后,需要释放之前所建立的虚电路
- 很多广域分组交换网,都使用这种面向连接的虚电路服务,例如曾经的X.25和逐渐过时的帧中继,异步传输模式等。
然而因特网的先驱者并没有采用这种设计思路,而是采用了无连接的数据报服务。
数据报服务的核心思想是:
- 可靠通信,应当由用户主机来保证。
- 当两台计算机进行通信时,他们的网络层不需要先建立连接,
- 每个分组可走不同的路径。
- 因此分组的首部必须携带目的主机的完整地址,
- 这种通信方式所传送的分组,可能误码、丢失、重复和失序。这些传输差错。我们在之前的课程中已经介绍过了,就不再赘述了。
- 由于网络本身不提供端到端的可靠传输服务,这就使得网络中的路由器可以做到比较简单,比电信网交换机价格低廉,
- 因特网就采用了这种设计思想,将复杂的网络处理功能置于因特网的边缘,也就是用户主机和其内部的运输层,而将相对简单的尽最大努力的分组交付功能,置于因特网核心。
采用这种设计思想的好处是网络的造价大大降低,运行方式灵活,能够适应多种应用,因特网能够发展到今日的规模,充分证明了当初采用这种设计思想的正确性。
将本节课的内容小结如下,需要说明的是由于TCP体系结构的因特网的网系层提供的是简单灵活的无连接的,尽最大努力交付的数据报服务。因此本章主要围绕网际层如何传送IP数据报这个主题进行讨论。
# 4.3 IPv4地址
# 4.3.1 IPv4地址概述
本节课我们介绍IPv4地址的基本概念,
- 在TCPIP体系中,IP地址是一个最基本的概念,我们必须把它弄清楚。
- IPv4地址就是给因特网上的一台主机或路由器的每一个接口,分配一个在全世界范围内是唯一的32比特的标识符。
- IP地址,由因特网名字和数字分配机构ICANN(The Internet Corporation for Assigned Names and Numbers))进行分配。
- 我国用户可向亚太网络信息中心(Asia-Pacific Network Information Center,APNIC)申请IP地址,这需要缴纳费用,一般并不接受个人申请。
- 2011年2月3日,因特网号码分配管理局宣布,IPv4地址已经分配完毕
- 我国在2014~2015年也逐步停止了向新用户和应用分配IPV4、地址,同时全面开展商用部署IPV6
IPV4地址的编制方法,经历了如下三个历史阶段,依次是分类编制的IP地址,划分子网的IP地址,无分类编制的IP地址,我们将在后续课程中对IPVC地址的这三种编制方法进行详细讨论。
为了能够更好的掌握IPVC地址的编制方法,我们首先应该掌握IPv4地址的表示方法。由于32比特的IPV4地址不方便阅读记录以及输入等,因此IPV地址采用点分十进制表示方法,以方便用户使用。
我们来举例说明,这是某个32比特的IPV4地址,将每8个比特分为一组,共4组,写出每组8比特所对应的10进制数,每个10进制数之间用点来分隔,这就是IPv4地址的点分10进制表示方法。
接下来请同学们参照我们所举的例子来做几个练习,这些练习题的答案如下所示,要正确做出这些练习题,关键在于掌握8位无符号二进制整数转十进制数的方法,这是8位无符号二进制整数的一般形式。
B0是8位无符号二进制整数的最低位,B7是其最高位,括号外面的2表示这是一个二进制数,将8位无符号2进制整数的个位乘以其权值后再相加,就可以得出相应的十进制数。我们应该熟悉8位无符号二进制整数,各位的权值,由高到低依次为128,64,32,16,8,4,2,1。接下来我们来举例说明该方法。
- 将8位无符号二进制整数10101010转换为10进制数,就是将它的个位乘以其权值后再相加,最后可以计算出10进制数为170
- 将8位无符号二进制整数1111 1100转换为10进制数。 对于这种比特0在整个8位无符号二进制整数中数量不多的情况,我们可以用10进制数255减去这些比特0位的权值,这样计算更简单,例如本例用255减去最低两位各自的权值2和1,得到10进制数252,
- 请将8位无符号二进制整数11110000转换为10进制数,
- 将8位无符号二进制整数10000001转换为10进制数。对于这种比特1在整个8位无符号二进制整数中数量不多的情况,我们可以直接将这些比特1位的权值相加,而不用写出整个转换表达式,这样计算更简单。例如本例最高位和最低位都为1,其他位为0,最高位的权值为128,最低位的权值为1,因此用128+1得到10进制数129。
在进行IPV4地址的相关计算时,将点分十进制的IPV4地址中的十进制正整数转换为8位无符号二进制数,也是经常需要用到的。
将十进制正整数转换为二进制数的常用方法,是除二取余法。我们来举例说明,将10进制数130转换为二进制数,
用130÷2得商65余0,用65÷2得商32余1,用32÷2得36余0,用16÷2得商8余0,用8÷2得34余0,用4÷2得商2余0,用2÷2得商1余0,用1÷2得商0余1,做到商为0时结束,从下往上将余数写成比特串,就可得到所转换出的二进制数。
除二取余法是十进制正整数转二进制数的一般方法。对于IPv4地址的点分十进制数转换为8位无符号二进制整数这种特定应用,我们可以采用更快速的凑值法来进行,这需要大家熟悉8位二进制无符号整数各位的权值。我们来举例说明,将10进制数171转换为二进制数,只要我们熟悉8位二进制无符号整数各位的权值,就不难写出这样的凑值表达式,这些就是8位二进制无符号整数各位的权值,而这些就是8位二进制无符号整数的各个位。
本节课的内容小结如下
# 4.3.2 分类编址的IPv4地址
本节课我们介绍IPv4地址编制方法的第一个历史阶段,也就是分类编制的IPv4地址,
分类编制的IPv4地址分为ABCDE 5类
- A类地址的网络号部分占8比特,主机号部分占24比特,网络号的最高位固定为零。
- B类地址的网络号部分和主机号部分各占16比特,网络号的最高两位,固定为10,
- C类地址的网络号部分占24个比特,主机号部分占8个比特,网络号的最高3位固定为110,
- D类地址是多播地址,其最高4位固定为1110
- E类地址是保留地址,及最高4位固定为1111,
- 需要注意的是只有A类,B类和C类地址可分配给网络中的主机或路由器的各接口。
- 主机号为全0的地址是网络地址,不能分配给主机或路由器的各接口,
- 主机号为全1的地址是广播地址,不能分配给主机或路由器的各接口。
我们首先来看A类地址的细节
8位网络号的最高位固定为0,第7位全部取0时,就是A类网络的最小网络号,其十进制值为0,该网络号被保留,不能指派。
因此A类网络第一个可指派的网络号为最高位固定为0,低7位为000 0001,其十进制值为1,将24位的主机号全部取0,就可以得到该网络的网络地址,且点分十进制为1.0.0.0,
当8位网络号的第7位全部取1时,就是A类网络的最大网络号,其十进制值为127,该网络号被用于本地软件环回测试,不能指派
将127开头的IPv4地址的主机号部分的最低位取1,其他位取0,就可得到最小的本地软件环回测试地址,且点分十进制为127.0.0.1,
将127开头的IPv4地址的主机号部分的最低位取0,其他位取1,就可得到最大的本地软件环回测试地址,且点分十进制为127.255.255.254
因此A类网络最后一个可指派的网络号为最高为固定为0,低7位为1111 110,10进制值为126,将24位的主机号全部取0,就可以得到该网络的网络地址,且点分10进制为126.0.0.0。
可指派的A类网络的数量是多少?我们可以写出这样的表达式,由于网络号占8位,并且其最高位固定为0,因此网络号有2的8减一次的组合,-2的原因需要去掉最小网络号0和最大网络号127,他们不能指派
每个A类网络中可分配的IP地址数量是多少呢?我们可以写出这样的表达式,由于主机号占24位,因此主机号有2~24次方个组合,-2的原因是要去掉主机号为全0的网络地址 和主机号为全1的广播地址。
也就是说,一个IP地址的第一个数如果是1~126,就是A类地址
再来看B类地址的细节,16位网络号的最高两位固定为10,
- 低14位全部取0时,就是B类网络的最小网络号,且点分时进制为128.0。该网络号是B类网第一个可指派的网络号,将16位的主机号全部取0,就可以得到该网络的网络地址,且点分十进制为128.0.0.0
- 16位网络号的最高两位固定为10,低14位全部取一时,就是B类网络的最大网络号,且点分时进制为191.255,该网络号是B类网最后一个可指派的网络号,将16位的主机号全部取0,就可以得到该网络的网络地址,且点分时进制为191.255.0.0。
- 可指派的B类网络的数量是多少,我们可以写出这样的表达式。由于网络号占16位,并且其最高两位固定为10,因此,网络号有2~16-2次个组合
- 每个B类网络中可分配的IP地址数量又是多少,我们可以写出这样的表达式。由于主机号占16位,因此主机号有2的16 次个组合,-2的原因是要去掉主机号为全0的网络地址,和主机号为全一的广播地址。
- 需要说明的是有些教材中指出128.0是保留网络号,B类第一个可指派的网络号为128.1,但根据2002年9月发表的RFC3330文档,128.0网络号已经可以分配了,有兴趣的同学可以自行查询,以128.0开头的IP地址,看看他们属于哪些国家。
- 也就是说,IP地址第一个开头的如果是128~191,就是B类地址
再来看C类地址的细节,24位网络号的最高三位固定为110,
- 低21位全部取0时,就是C类网络的最小网络号,且点分时进制为192.0.0,该网络号是C类网第一个可指派的网络号,将8位的主机号全部取0,就可以得到该网络的网络地址,且点分十进制为192.0.0.0
- 24位网络号的最高三位固定为110,低21位全部取1是,就是C类网络的最大网络号,写点分十进制为223.255.255,该网络号是C类网最后一个可指派的网络号,将8位的主机号全部取0,就可以得到该网络的网络地址,其点十时进制为223.255.255.0。
- 可指派的C类网络的数量是多少呢?我们可以写出这样的表达式,由于网络号占24位,并且其最高三位固定为110,因此网络号有2的24减3次个组合。
- 每个C类网络中可分配的IP地址数量是多少,我们可以写出这样的表达式。由于主机号占8位,因此主机号有2的8次方个组合,减2的原因是要去掉主机号为全名的网络地址和主机号为全1的广播地址。
- 需要注意的是有些教材中指出,192.0.0是保留网络号,C类第一个可指派的网络号为192.0.1,但根据2002年9月发表的RFC3330文档,192.0.0网络号已经可以分配了,只不过目前还没有分配出去。
- 也就是说,IP地址第一个开头的如果是192~223,就是C类地址
接下来我们来做一些练习,判断这些IPv4地址属于哪个类别,是否可以分配给主机或路由器的各接口。
- 根据地址左起第一个10进制数的值,可以判断出网络类别:小于127的为A类,128~191的为B类,192~223的为C类,
- 根据网络类别就可找出地址中的网络号部分和主机号部分,A类地址的网络号为左起第一个字节,B类地址的网络号为左起前两个字节,C类地址的网络号为左起前三个字节,
- 以下三种情况的地址不能指派给主机或路由器接口,A类网络号0和127不能指派,主机号为全0的地址不能指派,因为这是网络地址
- 主机号为全1的地址不能指派,因为这是广播地址。
请同学们根据我们所做的分析,填写两个表格的内容
这是计算机专业考研全国统考计算机网络部分2017年的题36,答案是选项A
我们来一起分析一下,地址0.0.0.0是一个特殊的IPv4地址,只能作为源地址使用,表示在本网络上的本主机。封装有DHCP发现报文的IP分组的源地址,使用0.0.0.0。 以127开头,且后面三个字节非全0或全1的IP地址,是一类特殊的IPv4地址,既可以作为源地址使用,也可以作为目的地址使用,用于本地软件环回测试。例如常用的环回测试地址127.0.0.1,
地址255.255.255.255是一个特殊的IPv4,地址只能作为目的地址使用,表示只在本网络上进行广播,各路由器均不转发。
综上所述,选项A正确,这些是一般不使用的特殊IP地址,希望大家记住
再来看这道练习题,请根据本节课所学内容,给出下图各网络的IPv4、地址分配方案,请按照节约IP地址的原则进行分配。
我们来一起分析一下,首先应该找出图中都有哪些网络,
这是一个网络,这也是一个网络。三台交换机互联起来的交换式以太网也是一个网络,
不要忘记两台路由器通过一段链路直连,他们的直连接口也属于同一个网络,
- 之后可以根据各网络中主机和路由器接口总数量,来决定给各网络分配哪个类别的网络号。该网络的主机数量为65534加上一个路由器接口,需要可分配的IP地址数量为65535,只能给该网络分配一个A类网络号,
- 该网络的主机数量为254,加上一个路由器接口,需要可分配的IP地址数量为255,可以给该网络分配一个A类或B类网络号。本着节约IP地址的原则,给该网络分配一个B类网络号,
- 该网络的主机数量为40,再加上一个路由器接口,需要可分配的IP地址数量为41,给该网络分配一个A类B类或C类网络号都可以,本着节约IP地址的原则,给该网络分配一个C类网络号,
- 该网络没有主机,只有两个路由器接口,需要可分配的IP地址数量为2,给该网络分配一个A类B类或C类网络号都可以。本着节约IP地址的原则,给该网络分配一个C类网络号,
- 依据所确定的网络号类别,为每个网络挑选一个网络号,A类网络号的取值范围是1~126,可在该范围内挑选一个网络号,分配给网络
- B类网络号的取值范围是128.0~191.255可在该范围内选一个网络号分配给网络,
- C类网络号的取值范围是192.0.0~223.255.255,可在该范围内挑选一个网络号分配给网络,
- 在挑选另一个分配给网络,不同网络的网络号不能相同,
- 网络号分配完毕后,就可给各网络中的各主机和路由器的各接口,分配IP地址了。
- 需要注意的是所分配的IP地址应该互不相同,并且其主机号部分不能出现全0,因为这是网络地址,也不能出现全1,因为这是广播地址,网络地址或广播地址都不能分配给主机或路由器的各接口,因为他们无法唯一标识一台主机或路由器的某个接口,
小结:
# 4.3.3 划分子网的IPv4地址
本节课我们介绍IPv4地址编制方法的第二个历史阶段,也就是划分子网的IPv4地址。我们首先来举例说明,为什么会出现划分子网这样的需求,如图所示某单位有一个大型的局域网,需要连接到因特网,如果申请一个C类网络地址,其可分配的IP地址数量只有254个,不够使用。因此该单位申请了一个B类网络地址,其可分配的IP地址数量达到了65,534个,给每台计算机和路由器的接口,分配一个IP地址后,还有大量的IP地址剩余。
这些剩余的IP地址只能由该单位的同一个网络使用,而其他单位的网络不能使用。随着该单位计算机网络的发展和建设,该单位又新增了一些计算机,并且需要将原来的网络划分成三个独立的网络,我们称其为子网一、子网二和子网三。假设子网一仍然使用原先申请到的B类网络地址,那么就需要为子网二和子网三各自申请一个网络地址,但这样会存在一些弊端,申请新的网络地址,需要等待很长的时间,并且要花费更多的费用。
即便申请到了两个新的网络地址,这也会使其他路由器的路由表新增针对这两个新的网络的路由记录。另外这样还会浪费原有网络中剩余的大量IP地址。
如果可以从IP地址的主机号部分借用一些位作为子网号来区分不同的子网,就可以利用原有网络中剩余的大量IP地址,而不用申请新的网络地址。
例如对于本例,我们可以借用16位主机号中的8位作为子网号,假设我们给子网一分配的子网号为0,给子网二分配的子网号为1,给子网三分配的子网号为2,之后就可以给各子网中的主机和路由器接口分配IP地址了。
现在请大家思考这样一个问题,如果我们未在图中标记子网号部分,那么我们和计算机又是如何知道分类地址中主机号有多少位被用作了子网号?
这样我们就引出了一个划分子网的工具,他就是子网掩码,32比特的子网掩码,可以表明分类IP地址的主机号部分,被借用了几位作为子网号。
如图所示,这是32比特的分类IPv4地址,它有网络号和主机号两部分构成。
当我们从主机号部分借用一些位作为子网号时,IP地址从两级结构的分类IP地址变成了三级结构的划分子网的IP地址,我们用连续的比特一来对应网络号和子网号,用连续的比特0来对应主机号,这样就构成了划分子网的IP地址的32比特的子网掩码,
将划分子网的IP地址与相应的子网掩码进行逻辑与运算,也就是逐比特相与,就可得到IP地址所在子网的网络地址,如图所示这样网络号和子网号被保留,而主机号被清零,结果为IP地址所在子网的网络地址。
接下来我们来举例说明划分子网的细节,已知某个网络的地址为218.75.230.0,使用子网掩码255.255.255.128,对其进行子网划分,请给出划分细节。
我们一起来分析,这是题目给定的网络地址,从它的左起第一个十进制数可知,这是一个C类网络地址,因此网络号占三个字节,主机号占一个字节。
这是题目给定的子网掩码,这3个10进制数255,其二进制为24个连续的比特1,他们对应IP地址中的网络号部分,而该子网掩码中的十进值数128,用来表示从IP地址的主机号部分借用多少比特来作为子网号,我们将其转换为8个二进制比特,其中只有1个比特1,这叫表明从主机号部分借用一个比特作为子网号,因此可划分出的子网数量为二的一次,也就是两个,每个子网可分配的地址数量为2的8-1次,然后再减去2,也就是126个。
由于原来的8位主机号被借走一位作为子网号,因此主机号还剩7位,这就是表达式装8-1的原因,可有2的7次方个组合,但是我们还要去掉主机号为全0的网络地址和全1的广播地址,这就是表达式中-2的原因。
我们先来看看题目所给的C类网地址,218.75.230.0的细节,218.75.230.0是该网络上的第一个地址,由于这是一个C类网地址,因此网络号占三个字节,主机号占一个字节,将网络号保持不变,而主机号取最大值255,这就是该网络上的最后一个地址。该C类网共有256个地址,其中第一个地址作为该网络的网络地址,也就是主机号全0的地址,最后一个地址作为该网络的广播地址,也就是主机号全1的地址,
这是比网络地址大一的地址,也就是该网络可分配给主机或路由器接口的最小地址,
这是比广播地址小一的地址,也就是该网络可分配给主机或路由器接口的最大地址
因此。该网络可分配给主机或路由器接口的地址数量为254个,之前我们已经分析过了
题目所给的子网掩码表明从主机号部分借用一个比特作为子网号,也就是将该C类网均分为两个子网,我们将主机号写成8比特的形式,
- 从主机号借用1个比特作为子网号,子网号只能是0或1,这就是子网0的网络地址,我们将其写成点分10进制形式。
- 保持网络号和子网号不变,主机号从7个比特0增加到7个比特1,这就是子网0的广播地址,我们将其写成点分十进制形式,
- 这是比子网0的网络地址大一的地址,也就是子网0可分配给主机或路由器接口的最小地址,我们将其写成点分10进制形式,
- 这是比子网0的广播地址,小一的地址,也就是子网0可分配给主机或路由器接口的最大地址,我们将其写成点分10进制形式,
- 这是比子网0广播地址大一的地址。请注意它的子网号部分为1个比特1,主机号部分为7个比特0,也就是说这是子网一的网络地址,我们将其写成点分10进制形式,
- 保持网络号和子网号不变,主机号从7个比特0增加到7个比特1,这就是子网一的广播地址,我们将其写成点分10进制形式,
- 这是比子网一的网络地址大一的地址,也就是子网一可分配给主机或路由器接口的最小地址,我们将其写成点分10进制形式,
- 这是比子网一的广播地址,小一的地址,也就是子网一可分配给主机或路由器接口的最大地址,我们将其写成点分10进制形式,
可见使用子网掩码255.255.255.128,可将C类网218.75.230.0均分为两个子网。
接下来请同学们参照我们所举的例子,完成这道练习题。本题的解答如下所示,希望同学们都能正确完成。
我们再来练习一道考研题,这是计算机专业考研全国统考计算机网络部分2012年的题39,答案是选项D
这是题目所给的IP地址。从它的左起第1个十进制数可知,这是一个B类网络地址,因此网络号占两个字节,主机号也占两个字节,
这是题目所给定的子网掩码,这两个10进制数255,其二进制为16个连续的比特1,他们对应IP地址中的网络号部分,而该子网掩码中后面两个10进制数,252和0,用来表示从IP地址的主机号部分借用多少个比特来作为子网号。我们将其转换为16个二进制比特,其中有连续6个比特1,这就表明从主机号部分借用6个比特作为子网号,
我们将IP地址的主机号部分转换成二进制形式,然后将子网掩码中连续6个比特一所对应的主机号部分作为子网号,
将网络号和子网号保持不变,而将主机号的10个比特全部取零就可以得到该主机所在子网的网络地址。写成点分十进制形式为180.80.76.0,
将网络号和子网号保持不变,而将主机号的10个比特全部取1,就可以得到该主机所在子网的广播地址,写成点分10进制形式为180.80.79.255。因此本题的答案为选项D
最后我们介绍默认子网掩码的概念,默认子网掩码是指在未划分子网的情况下使用的子网掩码:
- 这是A类地址,由8位网络号和24位主机号构成。根据子网掩码的构成规则,我们用8个连续的比特1对应IP地址中的8位网络号,用24个连续的比特0对应IP地址中的24位主机号,这样就要构成了A类地址的默认子网掩码,且点分十进制形式为255.0.0.0,
- 这是B类地址,由16位网络号和16位主机号构成。根据子网掩码的构成规则,我们用16个连续的比特1对应IP地址中的16位网络号,用16个连续的比特0对应IP地址中的16位主机号,这样就构成了B类地址的默认子网掩码,且点分时十制形式为255.255.0.0
- 这是C类地址,由24位网络号和8位主机号构成。根据子网掩码的构成规则,我们用24个连续的比特1对应IP地址中的24位网络号,用8个连续的比特0对应IP地址中的8位主机号,这样就构成了C类地址的默认子网掩码,写点分10进制形式为255.255.255.0
本节课的内容小结如下,希望大家能重点掌握这部分内容
# 4.3.4 无分类编址的IPv4地址
我们介绍IPv4地址编制方法的第三个历史阶段,也就是无分类编制的IPv4地址,尽管我们上次课所介绍的划分子网的IPv4、地址,在一定程度上缓解了因特网在发展中遇到的困难,但是数量巨大的C类网,因为其地址空间太小,并没有得到充分使用,而因特网的IP地址仍在加速消耗,整个IPv4地址空间面临全部耗尽的威胁。
为此因特网工程任务组又提出了采用无分类编制的方法来解决IPv4地址紧张的问题,同时还专门成立了IPv6工作组,负责研究新版本IP,以彻底解决IP地址耗尽的问题。
1993年因特网工程任务组发布了无分类域间路由选择的相关RFC文档,无分类域间路由选择的英文缩写词为CIDR可以读作sider,CIDR消除了传统A类B类和C类地址,以及划分子网的概念,因此可以更加有效的分配IPv4的地址空间,并且可以在新的IPv6使用之前,允许因特网的规模继续增长。
CIDR使用斜线记法或称为CIDR记法,也就是在IPv4地址后面加上斜线,在斜线后面写上网络前缀所占的比特数量。我们来举例说明,这是一个IPv4地址,在其后面写上斜线,斜线后面写上数字20,这就表明在32位IPv4地址的前20个比特为网络前缀,剩余12个比特为主机号。
实际上 CIDR将网络前缀都相同的连续的IP地址组成一个CIDR地址块,我们只要知道CIDR地址块中的任何一个地址,就可以知道该地址块的全部细节,包括最小地址,最大地址,地址块中的地址数量,地址块聚合某类网络的数量以及地址掩码。
我们来举例说明,请给出CIDR地址块128.14.35.7/20的全部细节,斜线后面的数字为20,表明该IPv4地址的前20个比特为网络前缀,也就是说所给地址左起第一个字节,第二个字节以及第三个字节的前4个比特构成20比特的网络前缀,剩余12个比特为主机号,因此我们需要将该地址的第3个字节和第4个字节转换成二进制的形式,这样我们就可以很容易看出20比特的网络前缀和12比特的主机号。
将20比特的网络前缀保持不变,12比特的主机号全部取0,就可以得到该地址块的最小地址,点分10进制为128.14.32.0,将20比特的网络前缀保持不变,12比特的主机号全部取一,就可以得到该地址块的最大地址。点分10进制为128.14.47.255,该地址块中的地址数量为2的32-20次方个,因为32比特的IPv4地址中,前20个比特为网络前缀,剩余12比特为主机号,因此主机号可有2的12次方个组合,
聚合C类网的数量,用该地址块中地址数量除以一个C类网的地址数量2的8次方个,即可得出为2的4次方,即可以划分为16个C类网。聚合路由的作用:可以减少路由表的数量。例如将所有C类网的路由记录,聚合成一个。
地址掩码为20个连续的比特1和12个连续的比特0。20个连续的比特一用来对应网络前缀,12个连续的比特0用来对应主机号,将其写成点分时进制为255.255.240.0。
接下来请同学们参照我们所举的例子来完成这道习题
接下来我们介绍CIDR中有关路由聚合的概念,路由聚合也称为构造超网。我们来举例说明,如图所示路由器R1与5个网络以及路由器R2直接相连,路由器R1和R2互为相邻路由器,它们周期性的通告自己所知道的路由信息给对方。请大家思考一下,R1应该将怎样的路由信息通告给R2
如果R1将自己直连的这5个网络的路由记录都通告给R则R的路由表会增加5条路由记录,为了减少路由记录对路由表的占用,能否将这5条路由记录聚合成1条?
答案是肯定的,其方法是找共同前缀,也就是找出这5个目的网络地址的共同前缀,这5个目的网络地址的左起前2个字节都是相同的,从第三个字节开始不同,因此只需将第三个字节转换成二进制形式,这样就可以很容易找出这5个目的网络地址的共同前缀,共22个比特,我们将其记为斜线22,将共同前缀保持不变,而剩余的10个比特全部取0,然后写成点分10进制形式放在斜线22的前面,这就是聚合后的地址块,也可以称为超网。
通过本地我们还可以看出网络前缀越长,地址块越小,路由就越具体。需要说明的是若路由器查表转发分组时,发现有多条路由可选则选择网络前缀最长的那条,这称为最长前缀匹配,因为这样的路由更具体。
这是计算机专业考研全国统考,计算机网络部分2011年的题38,答案是选项C
这是题目所给的网络地址,斜线后面的数字为30,表明该IPv4地址的前30个比特为网络前缀,也就是说所给地址,左起第1个字节,第2个字节,第3个字节以及第4个字节的前6个比特构成30比特的网络前缀,剩余两个比特为主机号,因此我们需要将该地址的第4个字节转换成二进制的形式,这样我们就可以很容易看出30比特的网络前缀和两比特的主机号。将30比特的网络前缀保持不变,两比特的主机号全部取0,就可以得到该网络的最小地址,这也是该网络的网络地址,且点分十进制为192.168.4.0,
将30比特的网络前缀保持不变,两比特的主机号全部取一,就可以得到该网络的最大地址。这也是该网络的广播地址,其点分10进制为192.168.4.3,这是比网络地址大1的地址,也就是该网络中可分配给主机或路由器接口的最小地址,且点分10进制为192.168.4.1,这是比广播地址小1的地址,也就是该网络中和分配给主机或路由器接口的最大地址,其点分时进制为192.168.4.2。
题目中给定IP分组的目的地址为192.168.4.3,这是该网络的广播地址,因此该网络上的所有主机都能收到,由于该网络只有两个可分配的IP地址,因此网络中的主机数量最大为2,那么可以收到该IP分组的最大主机数就是2。
再来看2018年的提38,答案是选项C
路由聚合的方法是找共同前缀,也就是找出题目所给的这4个目的网络地址的共同前缀。这4个目的网络地址的左起前2个字节都是相同的,从第三个字节开始不同,因此只需将第三个字节转换成二进制形式,这样就可以很容易找出这4个目的网络地址的共同前缀,共19个比特,我们将其记为斜线19,将共同前缀保持不变,而剩余的13个比特全部取0,然后写成点分10进制形式放在斜线19的前面,这就是聚合后的目的网络地址
本节课的内容小结如下,希望大家能重点掌握这部分内容。
# 4.3.5 IPv4地址的应用规划
本节课我们介绍IPv4地址的应用规划,也就是给定一个IPv4地址块,如何将其划分成几个更小的地址块,并将这些地址块分配给互联网中的不同网络,进而可以给各网络中的主机和路由器接口分配IPv4地址,一般有以下两种方法:
- 一种是采用定长的子网掩码进行划分。就是使用同一个子网掩码来划分子网
- 另一种是采用变长的子网掩码进行划分。就是使用不同的子网掩码来划分子网
采用定长的子网掩码来划分子网,每个子网所分配的IP地址数量相同,容易造成IP地址浪费
而采用变长的子网掩码来划分子网,每个子网所分配的IP地址数量可以不相同,尽可能减少了对IP地址的浪费。
接下来我们举例说明,采用定长的子网掩码划分子网的方法,假设我们申请到了一个C类网络,218.75.230.0,要使用定长的子网掩码,给图中所示的小型互联网中的各设备分配IP地址。我们首先来统计一下图中各网络所需的IP地址数量。来看网络N1的IP地址需求,N1中有6台主机,因此主机需要的地址数量为6个,有1个路由器接口,因此路由器接口需要的地址数量为1个,再加上N1自身的网络地址1个和广播地址1个,总共需要9个IP地址。
再来看网络N2的IP地址需求,N2装有25台主机,因此主机需要的地址数量为25个,有1个路由器接口,因此路由器接口需要的地址数量为一个,再加上N2自身的网络地址一个和广播地址1个,总共需要28个IP地址,
相信同学们可以很容易的统计出网络N3和N4各自所需的IP地址数量
请注意我们可将途中两个路由器之间的这段链路看成是网络N5,其中没有主机,因此主机需要的地址数量为0,有两个路由器接口,因此路由器接口需要的地址数量为2个,再加上N5自身的网络地址一个和广播地址一个,总共需要4个IP地址,这样我们就可得到本例的应用需求,也就是将C类网218.75.230.0划分成5个子网,每个子网上可分配的IP地址数量不得少于各自的需求
这是所申请到的C类网地址218.75.230.0,这是它的3字节网络号,这是它的1字节主机号,我们需要从主机号部分借用3个比特作为子网号,这样可划分出的子网数量为2的3次方个,也就是8个,可以满足我们对子网数量的要求,而每个子网上的地址数量为2的8-3次个,也就是32个,可以满足我们对子网上IP地址数量的要求。这样我们就可以得出划分子网所需的子网掩码,用3个10进制数255来对应网络号部分,也就是用24个连续的比特1来对应网络号,而最后8个比特为1110 0000,其中3个连续的比特1表示,从主机号部分借用三个比特作为子网号,将这8比特写成10进制数为224。
接下来我们来看划分子网的细节:
- 这是24比特网络号部分,这是从主机号部分借用的3比特作为子网号部分,这是剩余的5比特主机号部分,
- 这是子网1的网络地址,这是它的点分十进制形式,
- 将网络号和子网号保持不变,主机号从5个比特0增长到5个比特1,就可得到子网一的广播地址,这是它的点分十进制形式。
- 这是比子网1的网络地址大1的地址,它是子网1上个分配给主机或路由器接口的最小地址,这是他的点分时进制形式
- 这是比子网1的广播地址小1的地址,它是子网1上可分配给主机或路由器接口的最大地址,这是它的点分十进制形式,
- 这是比子网1的广播地址大1的地址,它是子网2的网络地址,这是它的点分10进制形式,
- 将网络号和子网号保持不变,主机号从5个比特0增长到5个比特1,就可得到子网2的广播地址,这是它的点分10进制形式,
- 这是比子网2的网络地址大1的地址,它是子网2上可分配给主机或路由器接口的最小地址,这是它的点分十进制形式,
- 这是比子网2的广播地址小1的地址,它是子网2上可分配给主机或路由器接口的最大地址,这是它的点分十进制形式,
- 这是比子网2的广播地址大1的地址,它是子网3的网络地址,这是它的点分十进制形式,
- 以此类推,我们可以得到划分子网的全部细节
现在我们就可以从子网1~8中任选5个,分配给图中的网络N1到N5。通过本地可以看出采用定长的子网掩码进行子网划分,只能划分出二的N次方个子网,其中N是从主机号部分借用的用来作为子网号的比特数量,每个子网所分配的IP地址数量相同,容易造成IP地址的浪费。
例如图中的网络5只需要4个IP地址,但是我们只能给他分配32个IP地址,这样就造成了IP地址的严重浪费。
接下来我们举例说明,他用变成的子网掩码划分子网的方法,本例与之前的例子基本一样,只是划分子网的方法,改为采用变长的子网掩码,这是我们之前就统计过的各网络所需IP地址的数量。既然网络N1需要9个地址,那么分配给网络N1的地址的主机号应为4个比特,因为2的4次方等于16,这样网络N1就可有16个地址。由于使用4个比特作为主机号,因此剩余28个比特可作为网络前缀。
既然网络N2需要28个地址,那么分配给网络N2的地址的主机号应该为5个比特,因为2的5次方等于32,这样网络N2就可有32个地址,由于使用5个比特作为主机号,因此剩余27个比特可作为网络前缀,
相信同学们可以很容易的得出分配给网络N3 N4 N5的地址中的主机号所占比特数量和网络前缀所占比特数量。
我们将所得出的各网络所需地址块的大小标注在它们各自的旁边,这样我们就可得到本利的应用需求,
也就是从地址块218.75.230.0/24中,取出5个地址块,按需分配给图中所示的5个网络,218.75.230.0/24地址块所包含的全部地址如下所示,我们需要在该地址块中给图中所示的网络N1到N5分配子块,分配的原则是每个子块的起点位置不能随意选取,只能选取块大小整数倍的地址作为起点,建议大家先给大的子块进行分配。
- 例如将这32个地址作为一个地址块,分配给网络N2,地址块中最小的地址就是N2的网络地址,最大的地址就是N2的广播地址,网络地址和广播地址之间的这些地址,可分配给N2中的主机或路由器接口。我们将网络N2所分配到的地址块标注在它的旁边,
- 将这16个地址作为一个地址块分配给网络N1,地址块装最小的地址就是N1的网络地址,最大的地址就是N1的广播地址,网络地址和广播地址之间的这些地址,可分配给N1中的主机或路由器接口。我们将网络N1所分配到的地址块标注在它的旁边,
- 将这16个地址作为一个地址块分配给网络N3。地址块中最小的地址就是N3的网络地址,最大的地址就是N3的广播地址,网络地址和广播地址之间的这些地址,可分配给N三中的主机或路由器接口。我们将网络N三所分配到的地址块标注在它的旁边
- 将这16个地址作为1个地址块分配给网络N4,地址块装最小的地址就是N4的网络地址,最大的地址就是N4的广播地址,网络地址和广播地址之间的这些地址,可分配给N4中的主机或路由器接口。我们将网络N4所分配到的地址块标注在它的旁边,
- 将这4个地址作为1个地址块分配给网络N5。地址块中最小的地址就是N5的网络地址,最大的地址就是N5的广播地址,网络地址和广播地址之间的这些地址,可分配给N5中的主机或路由器接口。我们将网络N5所分配到的地址块标注在它的旁边,
- 原地址块装还剩余这些地址可以留作今后分配。通过本例可以看出采用变长的子网掩码进行子网划分,可以按需划分出相应数量的子网,每个子网所分配到的IP地址数量可以不相同,尽可能减少了对IP地址的浪费。
- 例如图中的网络5只需要4个IP地址,我们也非常精确的给他分配了4个IP地址,没有造成IP地址的浪费。
最后请同学们参照本节课所介绍的两个例子,完成下面这道习题。本题的答案并不唯一
本节课的内容小结如下
# 4.4 IP数据报的发送和转发过程
本节课我们介绍IP数据报的发送和转发过程,IP数据报的发送和转发过程包含以下两部分,一部分是主机发送IP数据报,另一部分是路由器转发IP数据报。
需要说明的是为了将重点放在TCP协议站的网际层,发送和转发IP数据报的过程上,在本节课的举例中,我们将忽略使用ARP协议来获取目的主机或路由器接口的MAC地址的过程,以及以太网交换机自学习和转发帧的过程。下面我们就来举例说明,IP数据报的发送和转发过程。
在下图所示的小型互联网中,路由器的接口0直连了1个交换式以太网,接口1也直连了一个交换式以太网,我们给该网络分配了这样的网络地址和子网掩码,给网络中的各主机和路由器的接口,配置了相应的IP地址和子网掩码。如图所示,
我们给另一个网络分配了这样的网络地址和子网掩码,给网络中的各主机和路由器的接口,配置了相应的IP地址和子网掩码,如图所示。
我们知道从一个网络中的主机之间可以直接通信,这属于直接交付。不同网络中的主机之间的通信,需要通过路由器来中转,这属于间接交付。
那么源主机如何判断出目的主机是否与自己在同一个网络中?我们来举例说明,假设主机C要给主机F发送IP数据报,主机C将自己的IP地址和子网掩码相与,就可以得到主机C所在网络的网络地址。
既然主机C要给主机F发送IP数据报,主机C肯定知道主机F的IP地址,否则就没法发送了。主机C将主机F的IP地址与自己的子网掩码相遇,就可得到目的网络地址,
该地址与主机C的网络地址不相等,因此主机C就知道了主机F与自己不在同一个网络,他们之间的通信属于间接交付,主机C需要将IP数据报传输给路由器,由路由器将IP数据报转发给主机F。
那么主机C又是如何知道应该把IP数据报交给哪个路由器进行转发,实际上用户为了让本网络中的主机能和其他网络中的主机进行通信,就要必须给其指定本网络中的一个路由器,由该路由器帮忙进行转发,所指定的路由器也被称为默认网关。
对于本例我们可以将路由器接口0的IP地址指定给该接口所直连网络中的各个主机作为默认网关。
同理可将路由器接口1的IP地址指定给该接口所直连网络中的各个主机作为默认网关,这样当本网络中的主机要和其他网络中的主机进行通信时,会将IP数据报传输给默认网关,由默认网关帮主机将IP数据报转发出去,
假设本例中的主机A要给主机D发送IP数据报,这属于间接交付,主机A会将该IP数据报传输给自己的默认网关,也就是图中所示的路由器。那么当路由器收到IP数据报后,又是如何转发的呢?路由器首先会检查IP数据报的首部是否出错,若出错则丢弃该IP数据报,并通告源主机,若没有出错则进行转发。
路由器根据IP数据报首部中的目的地址,在自己的路由表中查找匹配的路由条目,若找到匹配的路由条目,则转发给路由条目中指示的下一跳,若找不到则丢弃该IP数据报,并通告源主机。
为了简单起见,我们假设本地中的IP数据报首部没有出现差错,路由器取出IP数据报首部各地址字段的值,源地址字段的值为主机A的IP地址,目的地址字段的值为主机D的IP地址,接下来路由器就要对该IP数据报进行查表转发了,这是路由器的路由表。
当我们给路由器的接口配置IP地址和子网掩码时,路由器就知道了自己的该接口与哪个网络是直连的。例如在本例中接口0所直连的网络是192.168.0.0,相应的地址源码为255.255.255.128,不需要下一跳路由器,因为接口0与该网络是直连的,接口1所直连的网络是192.168.0.128,相应的地址源码为255.255.255.128,不需要下一跳路由器,因为接口1与该网络是直连的,
需要说明的是路由表中可能还会有其他路由条目,这可以是用户或网络管理员手工配置的静态路由,也可以是路由器使用路由协议自动获取到的动态路由。我们将在后续课程中详细介绍这部分内容,本节课就不再赘述了。
接下来路由器根据IP数据报的目的地址,在自己的路由表中查找匹配的路由条目,逐条检查路由条目,将目的地址与路由条目中的地址掩码相与得到目的网络地址,该目的网络地址与路由条目中的目的网络地址不相同,则这条路有条目不匹配。
再检查下一条路由条目,将目的地址与下一条路由条目中的地址源码相遇,得到目的网络地址,该目的网络地址与路由条目中的目的网络地址相同,则这条路由条目就是匹配的路由条目,按照他的下一跳指示,也就是从接口1转发该IP数据报,这样主机D就可以收到路由器转发来的该IP数据报。
需要说明的是我们这里所介绍的路由器查表转发IP数据报的过程,只是为了让同学们理解其最基本的工作原理,在路由器的实际研发过程中,需要设计很好的数据结构,以便提高查找速度。
再来看这种情况,假设主机A给本网络上的各设备发送了一个广播IP数据报,在数据报首部中的目的地址字段,可以填写的目的地址为192.168.0.127,这是本网络的广播地址,也可以填写255.255.255.255,这是受限的广播地址。该网络中的各设备都会收到该广播IP数据报,但是路由器收到后并不会转发该数据报,也就是说路由器是隔离广播域的,这是很有必要的。
试想一下,如果因特网中数量巨大的路由器,收到广播IP数据报后都进行转发,则会造成巨大的广播风暴,严重浪费因特网资源。同理,主机A给另一个网络发送广播IP数据报,在数据报首部中的目的地址字段,填写的目的地址为192.168.0.255,这是网络192.168.0.128的广播地址。主机A将该广播IP数据报传输给路由器,希望由路由器帮其转发,但路由器判断出这是广播IP数据报,不会转发。
接下来我们来做几个相关的练习题,这是计算机专业考研全国统考,计算机网络部分2010年的提38,
答案是选项D。中继器和集线器工作在物理层,既不隔离冲突域,也不隔离广播域。
网桥和交换机工作在数据链路层可以隔离冲突域,不能隔离广播域。
路由器工作在网络层即隔离冲突域,也隔离广播域。
因此本题的答案是选项D
再来看2012年的题37,
答案是选项C。IP路由器工作在TCPIP体系结构的网际层,TCPIP体系结构的网际层,并不负责可靠传输,也就是不能确保传输的IP分组不丢失。
IP路由器对收到的IP分组头进行差错校验,当发现错误时会丢弃该IP分组,并向原主机发送ICMP差错报告报文。
综上所述,题目中的描述三是错误的,利用排除法可知选项C正确,题目中的其他描述项都是正确的。
再来看2015年的题47的第三问,我们将题目所给的主机一的配置信息标注在它的旁边,从子、网掩码和主机一的IP地址的CIDR表示方法都可以看出网络前缀为24个比特,而3W服务器的IP地址的网络前缀也是24个比特,并且与主机一的网络前缀相同,因此主机一可以访问3W服务器,因为从IP地址配置以及物理连接方面看,主机1和WWW服务器在统一网络中,
但是主机一不能访问INTERNET,因为他的默认网关错误的配置成了DHCP服务器的IP地址。
DHCP服务器不具备路由器的功能,无法将IP分组转发到INTERNET,
如图所示主题一的默认网关,错误的指定为了DHCP服务器的IP地址,正确的配置应该指定为路由器该接口的IP地址。
将本节课的内容小结如下
# 4.5 静态路由配置及其可能产生的路由环路问题
本节课我们介绍静态路由配置及其可能产生的路由环路问题,静态路由配置是指用户或网络管理员使用路由器的相关命令,给路由器人工配置路由表,这种人工配置方式简单,开销小,但不能及时适应网络状态(流量、拓扑等)的变化,一般只在小规模网络中
采用使用静态路由配置,可能出现以下导致产生路由环路的错误,一个是配置错误,另一个是聚合了不存在的网络,还有一个是网络故障。
接下来我们首先举例说明静态路由配置,我们采用如图所示的网络拓扑和相应的IP地址配置,这是路由器R1的路由表,路由器R1通过自己的接口0所配置的IP地址和地址掩码,可以自动得出接口0所在的网络。由于接口0与该网络直连,则下一跳不是路由器地址,而是通过接口0转发IP数据报给该网络中的某个主机,这属于直接交付。这条自动得出的路由条目的类型属于直连路由。同理,R1还可自行得出接口1的直连网络路由条目,
这是路由器R2的路由表,这是其接口0的直连网络路由条目,这是其接口1的直连网络路由条目。
假设R1要转发1个IP数据报给该网络中的某个主机,从图中可以看出,R1应该将该IP数据报转发给路由器R2的接口0,
但R1的路由表中并没有关于该目的网络的路由条目,换句话说,R1并不知道目的网络的存在。因此我们可以使用路由器的相关配置命令,给R1添加1条到达该目的网络的路由条目,这是该目的网络的地址,下1跳为路由器R2的接口0的地址,该路由条目是我们人工配置的静态路由,
假设R2要转发1个IP数据报给该网络中的某个主机,从图中可以看出,R2应该将该IP数据报转发给路由器R1的接口1,但R2的路由表中并没有关于该目的网络的路由条目,因此我们可以给R2添加1条到达该目的网络的路由条目,这是该目的网络的地址。下1跳为路由器R1的接口1的地址,类型为静态。以上就是我们举例说明的静态路由配置。
接下来我们举例说明默认路由的概念,假设路由器R的接口2连接到了因特网,这是路由器R1的路由表,这是其接口0的直连网络路由条目,这是其接口1的直连网络路由条目,这是我们人工配置的到达该目的网络的静态路由。假设R1要转发1个IP数据报给因特网中某个网络中的某个主机,从图中可以看出,R1应该将该IP数据报转发给路由器R的接口0。由于因特网中包含了众多的网络,如果我们给R1添加针对这些网络的每1条路由条目,则会给人工配置带来巨大的工作量,并且使R1的路由表变得非常大,降低了查表转发的速度。
实际上对于具有相同下一跳的不同目的网络的路由条目,我们可以用一条默认路由条目来替代。默认路由条目中的目的网络地址为0.0.0.0,地址掩码也为0.0.0.0,其CIDR形式为0.0.0.0/0。对于本例默认路由条目中的下一跳,是路由器R2的接口0的地址。
由于默认路由也是由我们人工配置的,因此其类型也是静态。在配置了默认路由条目后,我们甚至可以删除这条路由条目。
接下来我们举例说明特定主机路由的概念,有时候我们可以给路由器添加针对某个主机的特定主机路由条目,一般用于网络管理人员对网络的管理和测试。另外在需要考虑某种安全问题时,也可以采用特定主机路由,假设这是该网络中的某台特定主机,我们可以在R1的路由表中添加1条到达该主机的特定主机路由条目。特定主机路由条目中的目的网络地址为该特定主机的IP地址,地址掩码为255.255.255.255,其CIDR形式为特定主机IP地址斜线32。对于本例特定主机路由条目中的下一跳,是路由器R2的接口0的地址。由于特定主机路由也是由我们人工配置的,因此其类型也是静态。
可以看出特定主机路由的目的网络前缀最长,路由最具体,默认路由的目的网络前缀最短,路由最模糊,当路由器查表转发IP数据报时,若有多条路由条目可选,则采用最长前缀匹配的原则,选用目的网络前缀最长的路由条目进行转发
接下来我们举例说明,静态路由配置错误可能导致的路由环路问题,如图所示,这是各路由器自动得出的直连网络,这是我们给各路由器人工配置的静态路由。
我们来看看路由器R中的这条人工配置的静态路由条目,它表明 R2要转发IP数据报到该网络,下一跳,应转发给R1的接口1,
假设我们将下一跳错误的配置成了该地址,也就是错误的指向了R3的接口0,则当R2要转发IP数据报到该网络时,下一跳会错误的转发给路由器R3的接口0,R3收到该IP数据报后进行查表转发,找到了匹配的路由条目,下一跳,应该转发给该地址,也就是转发给R的接口1
R2收到该IP数据报后进行查表转发,找到了匹配的路由条目,下一跳应该转发给该地址,也就是转发给R3的接口0。
很显然由于我们静态路由配置错误,导致R2和R3之间产生了路由环路。为了防止IP数据报在路由环路中永久兜圈,在IP数据报首部设有生存时间、TTL字段。IP数据报进入路由器后,TTL字段的值被路由器减1,若TTL字段的值减1号不等于0,则被路由器转发,否则被丢弃。
我们再来举例说明,聚合了不存在的网络可能导致的路由环路问题,这是路由器R1的路由表,这是其自动得出的直连网络,这是我们给其人工配置的默认路由,下一跳指向路由器R2的接口0
这是路由器R2的路由表,这是其自动得出的直连网络,这是我们给其人工配置的1条聚合路由,它是由这两个网络地址聚合而来的,具体方法就是找这两个网络地址的共同前缀,然后将共同前缀保持不变,将剩余比特全部取0,写成点分10进制形式,在其后面写上斜线,斜线后面写上共同前缀的数量。
假设R2要转发IP数据报到该网络,进行查表转发,找到了匹配的路由条目,下一跳应该转发给该地址,也就是转发给R1的接口1。
R1收到该IP数据报后进行查表转发,找到了匹配的路由条目,下一跳,是通过接口2直接交付。
我们再来看看这条聚合路由的细节,它实际上包含了以下4个网络,该网络存在于我们的网络拓扑中,该网络也存在于我们的网络拓扑中,而该网络不存在,该网络也不存在。
当R2要转发IP数据报到这个不存在的网络时,进行查表转发,找到了匹配的路由条目,下一跳应该转发给该地址,也就是转发给R1的接口1,但对于这个不存在的网络,路由器R2应该不予转发,却错把它转发给了路由器R1。
R1收到该IP数据报后进行查表转发,只能走默认路由,下一跳,应该转发给该地址,也就是转发给R的接口0。很显然R1和R2之间产生了路由环路。
针对这种情况,我们可以在R2的路由表中添加针对所聚合的不存在的网络的黑洞路由,黑洞路由的下一跳为null0,这是路由器内部的虚拟接口,可以把它形象的看成是1个黑洞,IP数据报进入它后就有去无回了,也就是路由器丢弃了该IP数据报,而不是转发该IP数据报。
现在假设R2要转发IP数据报到这个不存在的网络,进行查表转发,找到了两条可选的路由条目,根据最长前缀匹配的原则,将会选择这条到达该不存在网络的黑洞路由,下一跳为虚拟接口null0,因此该IP数据报会进入这个黑洞
接下来我们再来举例说明,网络故障可能导致的路由环路问题,假设路由器R1检测到其接口0所直连的网络出现了故障,而不可达,就会自动在其路由表中删除该直连网络的路由条目。
之后,R2要转发IP数据报到该网络,进行查表转发,找到匹配的路由条目,下一跳,应该转发给该地址,也就是转发给R1的接口1。
R1收到该IP数据报后进行查表转发,找不到该IP数据报的目的,网络的相关路由条目,只能走默认路由,下一跳应该转发给该地址,也就是转发给R2的接口0,
这样就将该IP数据报错误的转发给了R2,,很显然 R1和R之间产生了路由环路。
针对这种情况,我们可以在R1的路由表中添加针对该直连网络的黑洞路由,这样当R2要转发IP数据报到该网络时,进行查表转发,找到匹配的路由条目,下一跳转发给R1的接口1,R1收到该IP数据报后,进行查表转发,找到匹配的路由条目,这是1条黑洞路由,下一跳为虚拟接口null0,因此该IP数据报会进入这个黑洞。
假设一段时间后之前的故障消失了,则R1又自动的得出了其接口0的直连网络的路由条目,并将我们之前人工配置的针对该直连网络的黑洞路由条目设置为失效状态。
假设R1再次检测到其接口0所直连的网络出现了故障而不可达,则会自动在其路由表中删除该直连网络的路由条目,并将我们之前人工配置的针对该直连网络的黑洞路由条目设置为生效状态。
本节课的内容小节如下
# 4.6 路由选择
# 4.6.1 路由选择协议概述
本节课我们介绍路由选择协议的相关基本概念,路由选择可分为静态路由选择和动态路由选择两类。
- 静态路由选择是指采用人工配置的方式给路由器添加网络路由、默认路由、特定主机路由、黑洞路由等路由信息。
- 而动态路由选择是指路由器通过路由选择协议自动获取路由信息。对于路由器自身而言,静态路由选择简单,开销小,但不能及时适应网络状态的变化,
- 而动态路由选择比较复杂,开销比较大,但能较好的适应网络状态的变化。因此静态路由选择一般只在小规模网络中采用,而动态路由选择适用于大规模网络。
因特网是全球最大的互联网络,它所采用的路由选择协议具有以下三个主要特点,分别是自适应,分布式,分层次,
- 自适应是指因特网采用的是动态路由选择,能较好的适应网络状态的变化。
- 分布式是指因特网中的各路由器,通过相互间的信息交互,共同完成路由信息的获取和更新
- 分层次是指将整个因特网划分为许多较小的自治系统AS,例如一个较大的因特网服务提供商,就可划分为一个自治系统,在自治系统内部和自治系统外部,采用不同类别的路由选择协议,分别进行路由选择。
下面我们来举例说明,因特网采用的分层次路由选择协议,假设这是因特网中的很小的一部分,我们可以将这些网络和路由器划归到一个自治系统,而将这些网络和路由器划归到另一个自治系统
- 自治之间的路由选择,简称为域间路由选择。自治系统内部的路由选择,简称为域内路由选择。
- 域间路由选择使用外部网关协议EGP类别的路由选择协议,域内路由选择使用内部网关协议IGP这个类别的路由选择协议
需要说明的是外部网关协议EGP和内部网关协议IGP只是路由选择协议的分类名称,而不是具体的路由选择协议。另外名称中使用的是网关这个名词,是因为在因特网早期的RFC文档中没有使用路由器,而使用的是网关这一名词。现在新的RFC文档中又改用路由器这一名词,因此外部网关协议EGP可改称为外部路由协议ERP,内部网关协议IGP,可改称为内部路由协议IRP。本课程仍然采用RFC原先使用的名词,以方便大家查阅RFC文档。
在一个自治系统内部使用的具体的内部网关协议,与因特网中其他自治系统中选用何种内部网关协议无关。例如在该自治系统内部使用的内部网关协议为路由信息协议RIP,而在这个自治系统内部使用的内部网关协议为开放式最短路径优先OSPF协议,
自治系统之间使用的外部网关协议为边界网关协议BGP
接下来我们给出常见的路由选择协议,分为内部网关协议和外部网关协议两大类,
内部网关协议包括路由信息协议RIP,内部网关路由协议IGRP,增强型内部网关路由协议EIGRP,开放式最短路径优先OSPF,中间系统到中间系统IS-IS
- RIP和IGRP是基于距离向量的,RIP是最早应用在因特网上的路由选择协议,IGRP是思科早期私有的协议,现在已被EIGRP取代。
- OSPF和IS-IS是基于链路状态的,OSPF在各种网络中得到了广泛的使用,而集成化的IS-IS是ISP骨干网上最常用的内部网关协议。RIGRP是思科私有的用来取代IGRP的混合型路由选择协议,它结合了距离向量和链路状态
而外部网关协议中最常见的仅有边界网关协议BGP
IGP:interior Gateway Protocols,内部网关协议
EGP:exterior gateway protocol,外部网关协议
BGP:Border Gateway Protocol,边界网关协议
路由选择协议是在路由器上运行的,下面我们就来看看路由器的基本结构,如图所示,路由器是一种具有多个输入端口和输出端口的专用计算机,其任务是转发分组。
整个路由器结构可划分为两大部分,一个是路由选择部分,另一个是分组转发部分。
路由选择部分的核心构件是路由选择处理机,它的任务是根据所使用的路由选择协议,周期性的与其他路由器进行路由信息的交互,来更新路由表。
分组转发部分由三部分构成,分别是交换结构,一组输入端口,一组输出端口。
信号从某个输入端口进入路由器,物理层将信号转换成比特流,送交数据链路层处理,数据链入层从比特流中识别出帧去掉帧头和帧尾后,送交网络层处理。如果送交网络层的分组是普通代转发的数据分组,则根据分组首部中的目的地址进行查表转发,若找不到匹配的转发条目,则丢弃来分组,否则按照匹配条目中所指示的端口进行转发。
网络层更新数据分组首部中某些字段的值,例如将数据分组的生存时间减一,然后送交数据链路层进行封装,数据链路层将数据分组封装成帧,送交物理层处理,物理层将帧看作是比特流,将其变换成相应的电信号进行发送。
如果送交网络层的分组,是路由器之间交换路由信息的路由报文则把这种分组送交路由选择处理机,路由选择处理机根据分组的内容来更新自己的路由表。路由表一般仅包含从目的网络到下一跳的映射,路由表需要对网络拓扑变化的计算最优化,而转发表是从路由表得出的,转发表的结构应当是查找过程最优化,
需要说明的是我们在之前的静态路由配置的相关课程中,并没有严格区分路由器中的路由表和转发表,这样有助于简化问题的分析。因此在后续有关路由选择协议的课程中,我们仍然不严格区分路由表和转发表,还是以路由表来表述问题。
路由选择处理机除了处理收到的路由报文外,还会周期性的给其他路由器发送自己所知道的路由信息。
路由器的各端口还应具有输入缓冲区和输出缓冲区,输入缓冲区用来暂存,新进入路由器,但还来不及处理的分组,
输出缓冲区用来暂存,已经处理完毕,但还来不及发送的分组。
需要说明的是路由器的端口一般都具有输入和输出的功能。我们图中分别给出输入端口和输出端口,目的在于更好的演示路由器的基本工作过程,使同学们更容易理解。
本节课的内容小结如下
# 4.6.2 路由信息协议RIP的基本工作原理
我们介绍路由信息协议,RIP的基本工作原理,路由信息协议RIP是内部网关协议中最先得到广泛使用的协议之一,其相关标准文档为RFC 1058,RIP要求自治系统内的每一个路由器都要维护从他自己到自治系统内其他每一个网络的距离记录,这是一组距离,称为距离向量,
RIP使用跳数作为度量来衡量到达目的网络的距离。我们来举例说明,RIP将路由器到直连网络的距离定义为一,例如图中的路由器R1到其直连网络N1的距离为一。
RIP将路由器到非直连网络的距离,定义为所经过的路由器数加一。
例如图中的路由器R3,到其非直连网络N2的距离为2,
RIP允许一条路径,最多只能包含15个路由器,距离等于16时,相当于不可达。因此RIP只适用于小型互联网,
需要说明的是有些厂商的路由器并没有严格按照RIP标准文档的规定来实现RIP,例如思科路由器中的RIP,将路由器到直连网络的距离定义为零,但这并不影响RIP的正常运行。
RIP认为好的路由距离短的路由,也就是所通过路由器数量最少的路由,如图所示,从R1到R5可以走这条路由,也可以走这条路由,RIP认为R1到R5的好路由是图中只经过一个路由器R4的这条路由。尽管这条路由上各段链路的带宽都非常小。
再来看这个例子,从R1到R6可以走这条路由,也可以走这条路由,而这两条路由是等价的,RIP该如何选择?当到达同一目的网络,有多条距离相等的路由时,RIP可以进行等价负载均衡,也就是将通信量均衡的分布到多条等价的路由上,
RIP包含以下三个要点,
- 第一个要点是和谁交换信息?答案是仅和相邻路由器交换信息。我们来举例说明相邻路由器的概念,下图中R1与R2故为相邻路由器,因为它们是直连的,中间没有其他路由器。
同理,R2与R3也互为相邻路由器,但是R1与R3不是相邻路由器,因为它们之间还存在其他路由器。 - 第二个要点是交换什么信息?答案是路由器自己的路由表。
- 第三个要点是何时交换信息,答案是周期性交换,例如每30秒发送一次RIP更新报文,
接下来我们举例说明RIP的基本工作过程:
- 路由器刚开始工作时,只知道自己到直连网络的距离是1如图所示,这是各路由器刚开始工作时各自的路由表,
其中包含的路由条目都是到达各自直连网络的信息,其距离都是1
- 之后每个路由器仅和相邻路由器周期性的交换,并更新路由信息。如图所示 R1和R2互为相邻路由器,R1和R3互为相邻路由器,R2和R3互为相邻路由器,R和R4互为相邻路由器,R3和R4也互为相邻路由器,
- 若干次交换和更新后,每个路由器都知道到达本自治系统内各网络的最短距离和下一跳地址,这称为收敛。如图所示。
接下来我们举例说明RIP的路由条目更新规则,路由器C和D互为相邻路由器,它们之间周期性的交换并更新路由信息
这是路由器C的路由表,其中到达各目的网络的下一跳都记为问号。可以理解为路由器D并不需要关心路由器C的这些内容,
这是路由器D的路由表。假设路由器C的RIP更新报文发送周期到了,则路由器C将自己路由表中的相关路由信息封装到RIP更新报文中,发送给路由器D。我们可以简单的理解为路由器C将自己的路由表发送给了路由器D
路由器D收到后对其进行改造,将到达各目的网络的下一跳,都改为C距离都增加1,这样的操作很容易理解,因为路由器C告诉D,它可以到达这些目的网络,那么路由器D作为C的邻居路由器,当然也就可以通过C来到达这些目的网络,只是比C到达这些目的网络的距离大1,路由器D现在可以根据改造好的路由表来更新自己先前的路由表了
更新过程:
- 路由器D原来到达网络N2的距离是二,下一跳经过路由器C的转发。
现在路由器D知道了,到达网络N2仍然经过C的转发,距离变为了5,也就是说C与N2之间的网络拓扑发生了变化,于是将自己这条路由条目中的距离更新为5。
更新路由表的理由可总结为到达目的网络相同的下一跳,最新的消息应该更新。 - 路由器D原来不知道网络N3的存在,现在路由器D知道了,可通过路由器C到达网络N3,于是将该路由条目添加到自己的路由表中
更新路由表的理由可总结为发现了新的网络添加 - 路由器D原来到达网络N6的距离是8,下一跳,经过路由器F的转发,现在路由器D知道了,到达网络N6,如果通过C来转发,则距离可缩短为5,于是将自己这条路由条目中的距离修改为5,下一跳修改为C
更新路由表的理由可总结为到达目的网络不同的下一跳,新路由有优势,应该更新, - 路由器D原来到达网络N8的距离是4,下一跳,经过路由器E的转发,现在路由器D知道了,到达网络N8还可以通过C来转发,距离也为4,于是将该路由条目添加到自己的路由表中。更新路由表的理由可总结为到达目的网络不同的下一跳,但距离相等,进行等价负载均衡。
- 路由器D原来到达网络N9的距离14,下一跳经过路由器F的转发,现在路由器D知道了,到达网络N9,如果通过C来转发,则距离扩大为6,于是不使用这条路由条目来更新自己的路由表,不更新。路由表的理由可总结为到达目的网络,不同的下一跳,新路由劣势,不应该更新。
接下来请同学们参看我们之前的举例,来完成这道习题。
再来看这道相关的考研题,这是计算机专业考研全国统考计算机网络部分2010年的题35,答案是选项D
在RIP协议中距离16被定义为目的网络不可达,因此而无法到达NET1,R1也无法通过R2到达NET1。
下面我们介绍RIP协议存在的坏消息传的慢的问题,如图所示,
- 假设R1到达其直连网络N1的链路出现了故障,当R1检测出该故障后,会将到达N1的路由条目中的距离修改为16,表示N1不可达,并等待RIP更新周期到时后,发送该路由信息给R2。
- 而此时R2的路由表中,关于N1的路由条目仍然是先前通过RIP协议获取到的,也就是到达N1的距离为2,下一跳通过R1转发,
- 假设R2的RIP更新周期先到时,也就是R2的这条路由信息先到达R1,而R1的这条路由信息一段时间后才到达R2,
- 当R1收到R2的这条路由信息后就会被该谣言误导,认为可以通过R2到达N1距离为3,并在自己的RIP更新周期到时后,将这条路由信息发送给R2
- 当R2收到R1的这条路,由信息后被该谣言误导,认为可以通过R1到达N1,距离为4,并在自己的RIP更新周期到时后将这条路由信息发送给R1。
- 当R1收到R的这条路由信息后被该谣言误导,认为可以通过R2到达N1,距离为5,并在自己的RIP更新周期,到时后将这条路由信息发送给R2
- 很显然只有R1和R2的路由表中到达N1的路由条目中的距离都增加到16号,R1和R2才都知道N1不可达,也就是才收敛。
- 在该过程中,R1和R2之间会出现路由环路,时间长达数分钟,有关路由环路的问题,我们在之前的静态路由配置的相关课程中已经介绍过了,此处就不再赘述了。
坏消息传的慢,要称为路由环路或距离无穷技术问题,这是距离向量算法的一个固有问题,可以采取多种措施,减少出现该问题的概率,或减少该问题带来的危害。例如
限制最大路径距离为15。
当路由表发生变化时,就要立即发送更新报文及触发更新,而不仅是周期性发送,
让路由器记录收到某特定路由信息的接口,而不让同一路由信息再通过此接口向反方向传送,即水平分割,
请注意使用上述措施后,也不能彻底避免路由环路问题,这是距离向量算法的本质所决定的。
最后我们再来练习一道相关的考研题,这是2016年的题37,答案是选项B
- 根据题目所给,R3检测到网络201.1.2.0/25不可达可知R3与该网络是直连的,如图所示
- 又根据题目所给,R1,R2,R3采用RIP协议交换路由信息,且均已收敛,可知先前他们各自的路由表中关于该目的网络的路由条目如下所示
- 再根据题目所给,R3检测到网络201.1.2.0/25不可达,并向R2通告一次新的距离向量可知R3与该网络之间的链路出现了故障,
当R3检测到该故障时,将自己到达该网络的路由条目中的距离修改为16,表示该网络不可达,并向R2发送关于这条路由条目的通告 - R2收到后更新自己相应的路由条目,将距离修改为16。
- 最后根据题目所给,则R2更新后这句话可知,R1给R2发送了关于该路由条目的RIP更新报文,而R2听信了该谣言,误认为到达该目的网络可以通过R1的转发距离为3
小结:
# 4.6.3 开放最短路径优先OSPF的基本工作原理
本节课我们介绍开放最短路径优先OSPF协议的基本工作原理,开放最短路径优先OSPF协议是为客服RIP协议的缺点,在1989年开发出来的,开放表明OSPF不是受某一厂商控制的,而是公开发表的
最短路径优先,是因为使用了迪杰斯特拉提出的最短路径算法SPF。
OSPF是基于链路状态的,而不像RIP那样,是基于距离向量的
OSPF采用最短路径优先算法计算路由,从算法上保证了不会产生路由环路,
OSPF不限制网络规模,更新效率高,收敛速度快。
链路状态是指本路由器都和哪些路由器相邻,以及相应链路的代价,代价用来表示费用,距离时延、带宽等等,这些都是由网络管理人员来决定的。
我们来举例说明,在思科路由器中,OSPF计算代价的方法是用100兆比特每秒除以链路带宽,计算结果小于1的值仍记为1,大于1且有小数的舍去小数。我们来看看图中各路由器的链路状态,R1的邻居路由器有R2,相应的链路代价用100兆比特每秒除以链路带宽100兆比特每秒,结果是1
R1的邻居路由器还有R4,相应的链路代价用100兆比特每秒除以链路带宽1G比特每秒,计算结果小于一,但仍记为1,相信同学们可以很容易的得出其他各路由器的链路状态,我们就不再赘述了。
OSPF相邻路由器之间通过交互问候分组来建立和维护邻居关系。如图所示。问候分组需要封装在IP数据报中发送,发往组播地址224.0.0.5,IP数据报首部中的协议号字段的取值应为89,来表明IP数据报的数据载荷为OSPF分组,问候分组的发送周期为10秒,若40秒仍未收到来自邻居路由器的问候分组,则认为该邻居路由器不可达
因此每个路由器都会建立一张邻居表,例如这是路由器R1的邻居表,其中的每一个条目对应记录其各邻居路由器的相关信息,包括邻居ID,接口以及死亡倒计时。
例如R2是R1的一个邻居路由器,为简单起见,邻居ID就记为R2实践中应填写相应的路由器ID,该邻居路由器与自己的接口1相连,将接口号记为1,死亡倒计时还剩36秒,若在死亡倒计时到达0之前,再次收到了来自R2的问候分组,则重新启动针对该邻居条目的40秒死亡倒计时,否则当死亡倒计时为0,则判定该邻居路由器不可达。
R4是R1的另一个邻居路由器,邻居ID记为R4,该邻居路由器与自己的接口0相连,将接口号记为0,死亡倒计时还剩余18秒
使用OSPF的每个路由器都会产生链路状态通告,其中包含以下两类内容,一类是直连网络的链路状态信息,另一类是邻居路由器的链路状态信息。假设N1是路由器R4的直连网络,则R4的链路状态通道应包含R4与该直连网络的链路状态信息,还应包含其邻居路由器R1的链路状态信息,以及其邻居路由器R3的链路状态信息。链路状态通告被封装在链路状态更新分组中,采用洪范法发送。收到链路状态更新分组的路由器,将从自己其他所有接口转发该分组,也就是进行洪范转发,如图所示。
这样自制系统中每个路由器所发送的封装有链路状态通告的链路状态更新分组,会传递给系统中其他所有路由器。
使用OSPF的每个路由器都有一个链路状态数据库,用于存储链路状态通道,通过各路由器洪范发送封装有自己链路状态通道的链路状态更新分组,各路由器的链路状态数据库最终将达到一致。
例如这是路由器R2的链路状态数据库,其中记录有系统中各路由器的链路状态通道
使用OSPF的各路由器,基于链路状态数据库进行最短路径优先计算,就可构建出各自到达其他各路由器的最短路径,也就是构建出各自的路由表。
例如有这样一个网络拓扑,各链路旁的数字表示代价。通过各路由器洪范发送封装有自己链路状态通告的链路状态更新分组,各路由器最终会得出相同的链路状态数据库,由链路状态数据库可以得出带权有向图,对该图进行基于迪杰斯特拉的最短路径优先算法,就可以得出以各路由器为根的最短路径,如图所示
对于这样一个比较简单的网络拓扑,即使大家不懂得最短路径优先算法,也可以很快找出每个路由器到达其他各路由器的最短路径。但是如果网络拓扑比较复杂,该项工作对人类而言就比较复杂了,因此可以按照迪杰斯特拉提出的最短路径优先算法,编制程序,让路由器执行该程序。如果大家对该算法感兴趣,可以自行查阅相关资料,我们就不再赘述了。
对于一般的网络工程师,即便不熟悉该算法,也不影响对OSPF协议的配置和使用。OSPF包含以下5种分组类型,
- 类型一是问候分组,用来发现和维护邻居路由器的可达性,
- 类型二是数据库描述分组,用来向邻居路由器给出自己的链路状态数据库中的所有链路状态项目的摘要信息
- 类型三是链路状态请求分组,用来向邻居路由器请求发送某些列入状态项目的详细信息
- 类型四是链路状态更新分组,路由器使用这种分组,将其链路状态进行洪范发送,即用洪范法对全网更新链路状态
- 类型5是链路状态确认分组,这是对链路状态更新分组的确认分组。
接下来我们来举例说明OSPF协议的基本工作过程,相邻路由器之间周期性发送问候分组,以便建立和维护邻居关系,
建立邻居关系后,给邻居路由器发送数据库描述分组,也就是将自己的链路状态数据库中的所有链路状态项目的摘要信息发送给邻居路由器。例如 R1收到R2的数据库描述分组后,发现自己缺少其中的某些链路状态项目,于是就给R2发送链路状态请求分组。R2收到后,将R1所缺少的链路状态项目的详细信息,封装在链路状态更新分组中发送给R1。R1收到后,将这些所缺少的链路状态项目的详细信息添加到自己的链路状态数据库中,并给R2发送链路状态确认分组。需要说明的是R2也可以像R1请求自己所缺少的链路状态项目的详细信息。这里我们就要不再演示该过程了,最终 R1和R2的链路状态数据库将达到一致,也就是链路状态数据库达到同步。
每30分钟或链路状态发生变化时,路由器都会发送链路状态更新分组,收到该分组的其他路由器,将洪范转发该分组,并给该路由器发回链路状态确认分组,这又称为新情况下的链路状态数据库同步。
当OSPF路由器在多点接入网络中建立邻居关系时,如果不采用其他机制,将会产生大量的多播分组。例如这5台路由器连接在同一个多点接入网络中,他们周期性的发送问候分组,以建立和维护邻居关系。这些路由器中的任意两个路由器都互为邻居关系,如图所示,邻居关系的数量为N乘以N-1,然后再除以2,其中N是路由器的数量,这样每个路由器要向其他N减一个路由器发送问候分组和链路状态更新分组。
为了减少所发送分组的数量,OSPF采用选举指定路由器DR和备用的指定路由器BDR的方法。如图所示,假设这两台路由器被分别选举为DR和BDR,所有的非DR,BDR只与DR,BDR建立邻居关系。如图所示,
因此之前的邻居关系数量降低为2×(N-2),再加1。非DR,BDR之间不能直接交换信息,而必须通过DR,BDR进行交换。若DR出现问题,则由BDR顶替DR。实现DR和BDR的选举并不复杂,无非就是各路由器之间交换一些选举参数,例如路由器优先级、路由器ID,接口IP地址等,然后根据选举规则选出DR和BDR,这与交换机生成树协议,选举跟交换机类似,我们就要不再赘述了。
为了使OSPF协议能够用于规模很大的网络,OSPF把一个自治系统在划分为若干个更小的范围,称为区域
如图所示,这是一个规模很大的网络,我们将其划分成一个自制系统,在该自治系统内,所有路由器都使用OSPF协议,OSPF将该自治系统再划分成4个更小的区域,每个区域都有一个32比特的区域标识符,可以用点分十进制表示,例如主干区域的标识符必须为0,也可表示成点分10进制形式的0.0.0.0,主干区域用于联通其他区域,其他区域的标识符不能为0,且互不相同。
每个区域的规模不应太大,一般所包含的路由器不应超过200个,划分区域的好处就是把利用洪范法交换链路状态信息的范围局限于每一个区域,而不是整个自治系统,这样就减少了整个网络上的通信量。
如果路由器的所有接口都在同一个区域内,则该路由器称为区域内路由器。为了本区域可以和自治系统内的其他区域联通,每个区域都会有一个区域边界路由器,它的一个接口用于连接自身所在区域,另一个接口用于连接主干区域,
主干区域内的路由器称为主干路由器。我们也可以把区域边界路由器看作是主干路由器。
在主干区域内还要有一个路由器,专门和本自制系统外的其他自治系统交换路由信息,这样的路由器成为自治系统边界路由器。在本例中区域边界路由器R3向主干区域发送自己所在区域一的链路状态通告,向自己所在区域发送区域023的链路状态通告,区域边界路由器R4向主干区域发送自己所在区域二的链路状态通道,向自己所在区域发送区域013的链路状态通告,
区域边界路由器R7,向主干区域发送自己所在区域三的链路状态通告,向自己所在区域发送区域0,1,2的链路状态通道,采用分层次划分区域的方法,虽然使交换信息的种类增多了,同时也使OSPF协议更加复杂了,但这样做却能使每一个区域内部交换路由信息的通信量大大减小,因而使OSPF协议能够用于规模很大的自制系统中。
本节课的内容小结如下
# 4.6.4 边界网关协议BGP的基本工作原理
本节课,我们介绍边界网关协议BGP的基本工作源理。在之前的课程中我们已经介绍过了,因特网采用分层次的路由选择协议,内部网关协议这一类别的协议,用于自治系统内部的路由选择,典型的协议有路由信息协议RIP 和开放最短路径优先OSPF 我们已在之前的课程中介绍过他们的基本工作源理,他们都是设法使分组,在一个自治系统内部,尽可能有效的从源网络传输到目的网络,无需考虑自治系统外部其他方面的策略。
外部网关协议这一类别的协议用于自治系统之间的路由选择。典型的协议是边界网关协议BGP。在不同自治系统内,度量路由的代价可能不同,因此对于自治系统之间的路由选择,使用代价作为度量来寻找最佳路由是不可行的。
我们来举例说明,各自治系统的连接关系如图所示,其中自治系统AS1将时延作为度量,AS2将距离也就是跳数作为度量,AS3将链路带宽作为度量,那么AS4可以通过哪些路径到达AS5呢?
可以走这条路径,也就是说AS4可以通过1AS3到达AS5,
也可以走这条路径,也就是说AS4可以通过AS1AS2到达AS5,当然还可以有其他路径,我们就要不再一一列出了。
那么这些路径中哪一个是最佳路由呢?由于没有统一的路由度量,因此寻找最佳路由是无意义的。
自治系统之间的路由选择还必须考虑相关策略。例如我国国内的站点在互相传送数据报时,不应经过国外兜圈,特别是不要经过某些对我国的安全有威胁的国家,又例如自治系统AS4,要发送数据报给AS5,本来最好是依次经过S1S3,但是 AS3不愿意让这些数据报经过自己自治系统内的网络,因为这是那两个自治系统的事情,与我这个自治系统无关。而AS2愿意让某些相邻自治系统的数据报,通过自己的网络,只要支付相应的服务费用即可。由此可见,自治系统之间的路由选择协议,应当允许使用多种路由选择策略,这些策略包括政治、经济、安全等,他们都是由网络管理人员对每一个路由器进行设置的,但这些策略并不是自治系统之间的路由选择协议本身。
基于上述情况,边界网关协议BGP只能是力求寻找一条能够到达目的网络且比较好的路由,也就是不能兜圈子,而并非要寻找一条最佳路由
我们来举例说明,在配置BGP时,每个自治系统的管理员要选择至少一个路由器,作为该自治系统的BGP发言人,一般来说两个BGP发言人都是通过一个共享网络连接在一起的,而BGP发言人往往就是BGP边界路由器,不同自治系统的BGP发言人要交换路由信息,首先必须建立TCP连接,端口号为179,在此TCP连接上交换BGP报文,以建立BGP会话,利用BGP会话交换路由信息,例如增加新的路由或撤销过时的路由,以及报告出错的情况等,使用TCP连接交换路由信息的两个BGP发言人,彼此称为对方的邻站或对等站。
BGP发言人除了运行BGP协议外,还必须运行自己所在自治系统所使用的内部网关协议,例如OSPF或RIP
BGP发言人交换网络可达性的信息,也就是要到达某个网络所要经过的一系列自治系统。当BGP发言人互相交换了网络可达性的信息后,各BGP发言人就根据所采用的策略,从收到的路由信息中,找出到达各自治系统的较好的路由,也就是构造出树形结构,不存在环路的自治系统连通图。如图所示,这是自治系统A的某个BP发言人,构造出的自治系统联通图,
边界网关协议BGP适用于多级结构的因特网。这里我们给出一个BGP发言人交换路径向量的例子,自治系统AS2的BP发言人,通知主干网的BGP发言人,要到达网络N1、N2、N3和N4,可经过AS2。
主干网在收到这个通知后就发出通知,要到达网络N1、N2、N3和N4,可沿路径AS1AS2,这里的路径AS1、AS2称为路径向量。
自治系统AS3,收到这条路径向量信息后,如果AS3自身也包含在其中,则不能采用这条路径,否则会兜圈子。
接下来我们介绍BGP版本4中规定的4种报文,
打开报文用来与相邻的另一个BGP发言人建立关系,是通信初始化
更新报文,用来通告某一路由的信息,以及列出要撤销的多条路由
保活报文用来周期性的证实临站的连通性,
通知报文用来发送检测到的差错。
在BGP协议刚刚运行时,BGP的临站交换整个BGP路由表,但以后只需要在发生变化时更新有变化的部分,这样做对节省网络带宽和减少路由器的处理开销都有好处。
这是计算机专业考研全国统考计算机网络部分2013年提47的第3问,我们来一起分析一下图中的R1和R2,分别位于两个不同的。自治系统AS1和AS2中,自治系统之间需要使用外部网关协议EGP这一类协议,具体为边界网关协议BGP。目前使用最多的版本是BGP4,BGP4的报文,被封装在TCP报文段中进行传输。
再来看2017年的题37 答案是选项D 本题并没有什么计算过程和解答技巧,需要大家记住下图所示的封装关系即可。
将本节课的内容小结如下,需要说明的是BGP协议非常复杂,很多内容都超出了本系列课程的教学目标,因此不再深入讨论。有兴趣的同学可查阅RFC4271文档。
# 4.7 IPv4数据报的首部格式
本节课我们介绍IPv4数据报的首部格式,为了简单起见,之后我们将IPv4数据报简称为IP数据报,而不指出、版本号。IP数据报的首部格式及其内容是实现IP协议主要功能的基础,因此我们有必要搞清楚这部分内容,如图所示
- 这是IP数据报的首部格式,它由20字节的固定部分和最大40字节的可变部分组成。所谓固定部分是指每个IP数据报首部都必须包含的部分,而某些IP数据报的首部除了包含20字节的固定部分外,还包含一些可选的字段来增加IP数据报的功能。
- IP数据报的首部常以32个比特为单位进行描述,图中的每一行都由32比特也就是4个字节构成,每个小格子称为字段或者域。
- 每个字段或某些字段的组合,用来表达IP协议的相关功能,
- 这是版本字段,该字段占4个比特,用来表示IP协议的版本,通信双方使用的IP协议的版本必须一致,目前广泛使用的IP协议的版本号为4,即IPv4,
- 这是首部长度字段,该字段占4个比特,用来表示IP数据报首部的长度,该字段的取值以四字节为单位,最小十进制取值为5,表示IP数据报首部只有20字节的固定部分;最大十进制取值为15,表示IP数据报首部包含20字节的固定部分和最大40节的可变部分,
- 这是可选字段,该字段的长度从1个字节到40个字节不等,用来支持排错、测量以及安全措施。可选字段增加了IP数据报的功能,但这同时也使得IP数据报的首部长度成为可变的,这就增加了每一个路由器,处理IP数据报的开销,实际上可选字段很少被使用,
- 这是填充字段,该字段用来确保首部长度为四字节的整数倍,使用全0进行填充。我们之前刚刚介绍过首部,长度字段是以四字节为单位的,换句话说,IP数据报的首部长度一定是四字节的整数倍。由于首部中的可选字段的长度,从1个字节到40个字节不等,那么当20字节的固定部分加上1~40个字节长度不等的可变部分,会造成首部长度不是四字节的整数倍时,就用取值为全零的填充字段,填充相应的字节,以确保IP数据报的首部长度是四字节的整数倍。
- 这是区分服务字段,该字段占8个比特,用来获得更好的服务。该字段在旧标准中叫做服务类型,但实际上一直没有被使用过。1998年因特网工程任务组IEFT把这个字段改名为区分服务,利用该字段的不同数值,可提供不同等级的服务质量。只有在使用区分服务时,该字段才起作用,一般情况下都不使用该字段
这是总长度字段,该字段占16比特,用来表示IP数据报的总长度,也就是首部和数据载荷的长度总和,最大取值为十进制的65535,以字节为单位,需要注意的是在实际应用中很少传输这么长的IP数据报。接下来我们来举例说明,首部长度字段和总长度字段的区别与联系
这是一个IP数据报,它由首部和数据载荷两部分构成。假设首部中的首部长度字段的二进制取值为0101,则可以计算出IP数据报的首部长度,也就是用首部长度字段的取值乘以四字节单位共20字节。
假设首部中的总长度字段的二进制取值为0000 0011 1111 1100,则可以计算出IP数据报的总长度,也就是在总长度字段的取值后,添加字节的单位共1020个字节,进而可以计算出数据载荷的长度,也就是用IP数据报的总长度减去IP数据报的首部长度,结果为1000个字节
接下来我们介绍标识,标志,片偏移这三个字段,他们共同用于进行IP数据报分片,这是网际层封装出的IP数据报,它将在数据链路层封装成帧。每一种数据链路层协议都规定了帧的数据载荷的最大程度,称为最大传输单元MTU。例如以太网的数据链路层规定,MTU的值为1500个字节,如果某个IP数据报的总长度超过MTU时,将无法封装成帧,需要将源IP数据报分片为更小的IP数据报,再将各分片IP数据报封装成帧。
接下来我们介绍标识,标志,片偏移这三个字段,他们共同用于进行IP数据报分片,这是网际层封装出的IP数据报,它将在数据链路层封装成帧。每一种数据链路层协议都规定了帧的数据载荷的最大程度,称为最大传输单元MTU。例如以太网的数据链路层规定,MTU的值为1500个字节,如果某个IP数据报的总长度超过MTU时,将无法封装成帧,需要将源IP数据报分片为更小的IP数据报,再将各分片IP数据报封装成帧。
- 标识字段,占16个比特,属于同一个数据报的各分片数据报,应该具有相同的标识,IP软件维持一个计数器,每产生一个IP数据报,计数器的值就要加一,并将此值赋给标识字段,
- 标志字段占三个比特,各比特含义如下,DF比特表示是否允许分片置一表示不允许分片,清0表示允许分片。MF比特表示本分片后面是否还有分片?置一表示本分片后面还有分片,清0表示本分片就是最后一个分片,还有一个保留位,必须设置为0,
- 片偏移字段占13个比特,指出分片数据报的数据载荷部分偏移,其在源数据报的位置有多远,片偏移以8个字节为单位。
接下来我们举例说明IP数据报如何进行分片。假设有这样一个IP数据报,它由20字节的固定首部和3800字节的数据载荷两部分构成,也就是说该IP数据报的总长为3820个字节。假设使用以太网传送该IP数据报,以太网的最大传送单元MTU为1500个字节,也就是以太网的数据载荷部分,最大为1500个字节,无法封装3820字节长的IP数据报,因此需要把该IP数据报分片成几个更小的IP数据报,每个长度不能大于1500个字节,然后再将每个分片IP数据报封装成一个以太网的帧进行传输。
为了更好的描述后续的分片工作,我们将源IP数据报数据载荷部分的每一个字节都编上号,第一个字节编号为0,最后一个字节编号为3799,我们可将源IP数据报的数据载荷分成三个更小的分片,第一个分片从0号字节到1399号字节,共1400个字节。第二个分片,从1400号字节到2799号字节,共1400个字节。第三个分片,从2800号字节到3799号字节,共1000个字节
分片结束后,给每个分片重新添加一个首部,使之成为IP数据报。请同学们思考这样一个问题,给各分片添加的首部是否完全相同,我们来一起填一下下面这张表格。源IP数据报首部中的总长度字段的十进制取值为3800+20,标识字段的10进制取值为12345,MF比特的取值为0,表示后面没有分片数据报,这就是最后一个分片数据报,DF比特的取值为0,表示该IP数据报允许被分片,由于这是未分片的源IP数据报,因此片偏移为0。
我们来填写分片一,IP数据报首部中相关字段的值,总长度字段的十进制取值为1400+20,其中1400字节是分片的长度,20字节是固定首部的长度,标识字段的十进制取值与源IP数据报的相同,由于该分片不是最后一个分片,因此 MF比特的取值为一,表示该分片后还有分片,该分片IP数据报允许被再次分片,因此DF比特的取值为0。该分片IP数据报数据载荷部分的第一个字节,就是源IP数据报数据载荷部分的第一个字节,因此片偏移字段的取值为0÷8。除以八的原因是片偏移字段,以八字节为单位。
接下来请同学们填写分片二IP数据报首部中相关字段的值,相信大家都可以正确完成。分片二IP数据报、首部装这几个相关字段的值,只有片偏移字段的值,与分片一IP数据报的不同,
我们再来填写分片三IP数据报首部装相关字段的值,总长度字段的十进制取值为1000+20,其中1000字节是分片的长度,20字节是固定首部的长度,标识字段的十进制取值,与源IP数据报的相同,由于该分片就是最后一个分片,因此MF比特的取值为0,表示该分片后没有其他分片。该分片IP数据报允许被再次分片,因此DF比特的取值为0。该分片IP数据报数据载荷的第一个字节是源IP数据报数据载荷中编号为2800的字节,因此片偏移字段的取值为2800÷8。
现在假定分片二的IP数据报,经过某个网络时还需要再进行分片,其中一个分片长度为800字节,另一个分片长度为600字节,分片结束后给每个分片重新添加一个首部,使之成为IP数据报。接下来请同学们填写该表格,相信大家都可以正确完成。
再来看生存时间字段,该字段占8个比特,最初以秒为单位,最大生存周期为255秒,路由器转发IP数据报时,将IP数据报首部中的该字段的值,减去IP数据报在本路由器上所耗费的时间,若不为零就要转发,否则就丢弃。
现在以跳数为单位,路由器转发IP数据报时,将IP数据报首部中的该字段的值减一,若不为零就转发,否则就要丢弃。
接下来我们来举例说明,生存时间字段的作用。假设采用如下图所示的网络拓扑,路由器R1R2R3,各自的路由表如图所示。为了简单起见,我们只给出了各路由器路由表中的由人工配置的静态路由条目,例如路由器R中的这条静态路由条目,他指出了IP数据报要到达网络N2,下一跳,需要转发给路由器R3。
假设我们在人工配置这条静态路由条目时,错将下一跳,配置成了R1,这会导致将去往网络N2的IP数据报,错误的转发给路由器R1。我们来看看会出现什么问题。
假设某个IP数据报从网络N1发网络N2,该IP数据报到达R1号,R1进行查表转发,发现了匹配的路由条目,其下一跳指示转发给R2,于是R1将该IP数据报转发给了R2,R2收到该IP数据报后进行查表转发,发现了匹配的路由条目,其下一跳指示转发给R1,于是R将该IP数据报又转发回来R1。很显然形成了路由环路。如果没有其他措施,IP数据报将在路由环路庄永久兜圈。现在相信大家能够更好的理解IP数据报首部中生存时间字段的作用了,那就是确保IP数据报不会在网络中永久兜圈。IP数据报每经过一个路由器其生存时间的值被减1,当减少到0时,IP数据报将被路由器丢弃。
再来看协议字段,该字段占8个比特,用来指明IP数据报的数据部分是何种协议数据单元。常用的一些协议和相应的协议字段值,如下表所示。我们来举例说明,这是一个IP数据报,
当首部中协议字段的取值为1时,表明数据部分是ICMP报文,也就是用ICMP协议封装的协议数据单元,
当首部中协议字段的取值为60,表明数据部分是TCP报文段,也就是用TCP协议封装的协议数据单元,
这是首部检验和字段,该字段占16比特,用来检测IP数据报首部,在传输过程中是否出现差错,所采用的检错码比循环冗余检错码简单,称为因特网检验和,我们就不再赘述了,有兴趣的同学可自行查阅相关资料,
IP数据报每经过一个路由器,路由器都要重新计算首部检验和。因为某些字段,例如生存时间,标志,片偏移等的取值可能会发生变化。由于IP层本身并不提供可靠传输的服务,并且计算首部检验和是一项耗时的操作,因此在IPV6中路由器不再计算首部检验和,从而更快转发IP数据报,
这是计算机专业考研全国统考计算机网络部分,2018年题47的第2问,我们来一起分析一下。这是题目所给的。销售部装某个主机发送到IP分组,总长度为1500个字节,题目给出IP分组的头部长度为20字节,因此数据载荷部分因为1480个字节,为了方便描述我们将数据载荷中的每一个字节都编上号,第一个字节的编号为0,最后一个字节的编号为1479,
题目给出由于该IP数据报通过路由器的F1接口转发时,受到所在网络的最大传送单元MTU为800字节的限制,需要进行分片。换句话说,分片后的每一个IP数据报的最大长度可以是800字节,假设这是分片一的IP数据报,这是它的20字节固定首部,为了符合题目的要求,尽可能分为最大片,我们将分片长度取为780个字节,其第一个字节的编号为0,最后一个字节的编号为779,偏移量等于0÷8,结果是0,
将剩余的700字节作为分片二,其第一个字节的编号为780,最后一个字节的编号为1479,给其添加相应的20字节首部,使之成为分片二的IP数据报,片偏移量等于780÷8,结果为97.5。
由于偏移量必须为整数,因此这种分片方案不行,我们可将分片的最大长度取为小于780,且能整出8的最大整数,具体方法是将780÷8的结果向下取整,然后再乘以8,结果为776。
这样分片一的长度为776个字节,剩余704个字节作为分片2,分片一的最后1个字节编号为775,分片二的第一个字节编号为776,这样分片二的片偏移量等于776÷8,结果为97。
再来看2011年的提47的第一问和第四问。尽管到目前为止,我们还未学习外部请求是用什么应用层协议封装的,也不知道在运输层还会用什么协议进行封装,但是我们知道在网际层一定会用IP协议对其进行封装,使之成为IP分组。web服务器的IP地址就填写在IP分组头中的目的IP地址字段,IP分组,还要封装成以太网帧才能发送在IP分组头中,目的IP地址字段前,还有16个字节的内容,在以太网帧中数据载荷前还有14字节的内容,因此可知在以太网帧中,从第31个字节开始的4个字节,实际上就是目的IP地址的内容。题目所给的以太网数据,帧的第一列数据,实际上并不是以太网帧的内容,仅仅作为行号,其增量为16,表示每行有16个字节的内容,这些是以太网帧内容的16进制形式,这些是以太网帧内容的ASCII 这些是以太网帧的前30个字节。接下来的4个字节就是WEB服务器的IP地址,其点分10进制形式为64.170.98.32。
从图中可知,主机的默认网关就是路由器R,主机会将web请求发送给默认网关,由默认网关将WEB请求转发到因特网。因此以太网帧头中的目的MAC地址字段,封装的就是默认网关的MAC地址,如图所示,
而目的MARK地址字段就是以太网帧的前6个字节,其内容就是默认网关的MAC地址,写成MARK地址的形式为00-21-27-21-51-EE
再来解答第四问,IP分组经过路由器R时生存时间字段的值被减一,首部检验和会被重新计算,若IP分组总长度大于最大传送单元,MTU的值,则需要进行分片。此时总长度字段、标志字段、片偏移字段都需要修改。
小结
# 4.8 网际控制报文协议ICMP
本节课我们介绍网际控制报文协议ICMP (Internet Control Message Protocol)
- 为了更有效的转发IP数据报和提高交付成功的机会,在网际层使用了网际控制报文协议ICMP。
- 主机或路由器使用ICMP协议来发送差错报告报文和询问报文。
- ICMP报文被封装在IP数据报中发送。
ICMP差错报告报文共有以下5种,它们分别是终点不可达,源点抑制,时间超过,参数问题,改变路由(重定向)。
我们首先来看终点不可达,当路由器或主机不能交付数据报时,就像源点发送终点不可达报文。具体可再根据ICMP的代码字段细分为目的网络不可达,目的主机不可达,目的协议不可达,目的端口不可达,目的网络未知,目的主机未知等13种错误。我们来举例说明,假设主机H1给H2发送IP数据报,H1会将IP数据报发送给路由器R1,由R1帮其转发,若R1的路由表中没有网络N3的路由记录,默认路由,以及主机H2的特定主机路由,则R1旧不知道如何转发该数据报,只能将其丢弃,并向发送该数据报的源主机H1发送ICMP差错报告报文,其类型为终点不可达。
来看源点抑制,当路由器或主机由于拥塞而丢弃数据报时,就像源点发送源点抑制报文,使源点知道应当把数据报的发送速率放慢。
例如H1给H2发送IP数据报,当该数据报传输到路由器R2时,由于R2拥塞也就是R2比较繁忙,R2根据自己的丢包策略,丢弃了该数据报,并向发送该数据报的源主机H1发送 ICMP差错报告报文,其类型为源点抑制,
又例如H1给H2发送IP数据报,当该数据报传输到H2时,由于H2拥塞就丢弃了该数据报,并向发送该数据报的源主机H1发送ICMP差错报告报文,其类型为源点抑制
来看时间超过。当路由器收到一个目的IP地址不是自己的IP数据报时,会将其生存时间TTL字段的值减一,若结果不为0,则将数据报转发出去;若结果为0,除丢弃该数据报外,还要向源点发送时间超过报文。例如某个生存时间等于2的IP数据报传输到了路由器R1,R1将其生存时间减一后,结果是一,这表明该数据报的生存时间还没有结束,R1将其转发出去,当该数据报传输到路由器R2后,R2将其生存时间减一号结果是0,这表明该数据报的生存时间结束了,R2丢弃该数据报,并向发送该数据报的源主机H1发送ICMP差错报告报文,其类型为时间超过
另外当终点在预先规定的时间内,不能收到一个数据报的全部数据报片时,就把已收到的数据包片都丢弃,也会向源点发送时间超过报文
来看参数问题。当路由器或目的主机收到IP数据报后,根据其首部中的检验和字段,发现首部在传输过程中出现了误码,就丢弃该数据报,并向源点发送参数问题报文。例如这是H1发送给H2的IP数据报,假设该数据报在传输过程中受到了干扰,其首部出现了误码,当该数据报传输到路由器R1后,R1检测出该数据报的首部出错,于是丢弃该数据报,并向发送该数据报的源主机H1发送 IC MP差错报告报文,其类型为参数问题。
再来看改变路由,路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器,这样可以通过更好的路由。我们来举例说明。假设我们给主机H1指定的默认网关是路由器R1,则H1要发往网络N2的IP数据报,都会传输给R1,由其帮忙转发,当R1发现H1发往N2的数据报的最佳路由,不应当经过R1,而是应当经过R4时,就用改变路由报文,把这个情况告诉主机,于是H1就在自己的路由表中添加一个项目,到达N2应经过路由器R4,而不是默认网关R1。之后H1要发往N2的IP数据报,都会传输给R4由其帮忙转发。
需要注意的是以下情况不应发送ICMP差错报告报文,
对ICMP差错报告报文,不再发送ICMP差错报告报文。
对第一个分片的数据报片的所有后续数据报片都不发送ICMP差错报告报文,
对具有多播地址的数据报,都不发送ICMP差错报告报文,对具有特殊地址,例如127.0.0.0或0.0.0.0的数据报,不发送ICMP差错报告报文。
练习:这是计算机专业考研全国统考,计算机网络部分2010年的题36,答案是选项C
接下来我们介绍常见的两种ICMP询问报文,
- 一种是回送请求报文及其回答报文,ICMP回送请求报文是由主机或路由器向一个特定的目的主机发出的询问。收到此报文的主机必须给源主机或路由器发送ICMP回送回答报文,这种询问报文用来测试目的站是否可达,以及了解其有关状态。
- 另一种是时间戳请求报文及其回答报文。ICMP时间戳请求报文,是请求某个主机或路由器回答当前的日期和时间。在ICMP时间戳回答报文中有一个32位的字段,其中写入的整数代表从1900年1月1日起到当前时刻一共有多少秒,这种询问报文用来进行时钟同步和测量时间
接下来我们介绍利用ICMP协议的两个典型应用,一个是分组网间探测PING(Packet Internet Groper),另一个是跟踪路由。
首先来看分组网间探测,该应用用来测试主机或路由器之间的连通性,其应用层直接使用网际层的ICMP协议,而不通过运输层的TCP或UDP协议。所使用的ICMP报文类行为回送请求和回答,如下所示。这是在我的主机的WINDOWS命令行中使用拼命令来测试该主机与我校官方网站服务器的连通性。
再来看跟踪路由,该应用用来测试IP数据报,从源主机到达目的主机要经过哪些路由器,在该应用的WINDOWS版本中,具体命令为tracert。其应用层直接使用网际层的ICMP协议,所使用的ICMP报文类型有回送请求和回答报文以及差错报告报文。在该应用的UNIX版本中,具体命令为traceroute、其在运输层使用UDP协议,在网际层使用的ICMP报文类型,只有差错报告报文如下所示,这是在我的主机的WINDOWS命令行中是用tracert命令来测试该主机与我校官方网站服务器之间要经过哪些路由器。
请大家思考一下 tracert命令的实现源理是什么?我们来举例说明,假设主机H1想知道到达主机H2要经过哪些路由器,H1就给H2发送ICMP回送请求报文,该报文被封装在IP数据报中,IP数据报首部中生存时间字段TTL的值被设置为一,该IP数据报到达R1后,其生存时间减1,结果为0。R1丢弃该数据报,并向发送该数据报的源主机H1,发送ICMP差错报告报文,其类型为时间超过,这样 H1就知道了到达H2的路径中的第一个路由器,
H1继续发送下一个封装有ICMP回送请求报文的IP数据报,其首部中生存时间字段TTL的值被设置为二,经过R1的转发后,该数据包的生存时间减少为一,该IP数据报到达R2后,其生存时间减1,结果为0,R2丢弃该数据报,并向发送该数据报的源主机H1,发送ICMP差错报告报文,其类型为时间超过这样 H1就知道了到达H2的路径中的第二个路由器,
H1继续发送下一个封装有ICMP回送请求报文的IP数据报,其首部中生存时间字段TTL的值被设置为三,经过R1和R2的转发后,该数据报到达主机H2,其生存时间减少为一,H2解析该数据报,发现其内部封装的是ICMP回送请求报文,于是就给H1发送封装有ICMP回送请求回答报文的IP数据报,这样 H1就知道已经跟踪到路径中的最后一站,也就是目的主机H2
本节课的内容小结如下
# 4.9 虚拟专用网VPN与网络地址转换NAT
本节课我们介绍虚拟专用网VPN(Virtual Private Network)和网络地址转换NAT的基本工作原理。
首先介绍虚拟专用网VPN的基本工作原理,来看这个例子,假设这是某机构部门A的局域网,这是该机构部门B的局域网,部门A的局域网位于北京,部门B的局域网位于上海,那么如何才能让这两个专用网络可以通信,一种方法是租用电信公司的通信线路,这种方法简单方便,但是租金很高。
另一种方法是利用公用的因特网作为本机构各专用网之间的通信载体,这样形成的专用网要称为虚拟专用网。那么虚拟专用网中的各主机应该分配怎样的IP地址?由于IPv4地址的紧缺,一个机构能够申请到的IPv4地址数量往往远小于本机构所拥有的主机数量。因此虚拟专用网中的各主机所分配的地址应该是无需申请,就可由本机构自由分配的专用地址,而不是需要申请的在因特网上使用的公有地址,我们可以在因特网数字分配机构IA NA的官方网站,查看IPVC地址空间中特殊地址的分配方案,这三个地址块中的地址,就是无需申请的可自由分配的专用地址或称私有地址。
我们给部门A的专用网分配的私有地址的网络号为10.1.0.0,给部门B的专用网分配的私有地址的网络号为10.2.0.0。两个专用网装各主机所分配的私有地址如图所示,需要注意的是私有地址只能用于一个机构的内部通信,而不能用于和因特网上的主机通信。
换句话说,私有地址只能用作本地地址,而不能用作全球地址。在因特网中的所有路由器,对目的地址是私有地址的IP数据报,一律不进行转发。很显然部门A和B各自至少需要一个路由器,具有合法的全球IP地址,这样他们各自的专用网才能利用公有的因特网进行通信。
假设部门A中的这台主机要给部门B中的另一台主机发送数据,它会将待发送数据封中成内部IP数据报,发送给路由器R1,其首部中源地址字段的值为部门A中该主机的IP地址,目的地址字段的值为部门B中另一台主机的IP地址。R1收到该数据报后,发现其目的网络必须通过因特网才能到达,就将该内部IP数据报进行加密,这样就确保了内部IP数据报的安全,然后重新添加上数据报的首部封中成为在因特网上发送的外部数据报,且首部中源地址字段的值为路由器R1的全球地址,目的地址字段的值为路由器R2的全球地址。
路由器R2收到该外部IP数据报后,去掉其首部,将其数据部分进行解密,恢复出源来的内部IP数据报,这样就可以从其首部提取出源地址和目的地址,根据目的地址将该内部IP数据报发送给相应的主机。很显然两个专用网内的主机间发送的数据报是通过了公用的因特网,但在效果上好像是在本机构的专用网上传送一样,
数据报在因特网中可能要经过多个网络和路由器,但从逻辑上看,R1和R2之间好像是一条直通的点对点链路,因此也被称为IP隧道技术。本地属于同一机构内不同部门的内部网络所构成的虚拟专用网,这就称为内联网VPN。有时一个机构的虚拟专用网需要某些外部机构参加进来,这样的虚拟专用网又称为外联网VPN。在外地工作的员工需要访问公司内部的专用网络时,只要在任何地点接入到因特网,运行驻留在员工PC中的VPN软件,在员工的PC和公司的主机之间建立VPN隧道,即可访问专用网络中的资源,这种虚拟专用网又称为远程接入VPN。
相信很多同学寒暑假在家中要远程访问校园网内的某些资源时,就要使用过远程接入VPN这种技术。
接下来我们介绍网络地址转换NATNetwork Address Translation)的基本工作源理。虽然因特网采用了无分类编制方式,来减缓IP地址空间耗尽的速度,但是由于因特网用户数目的激增,特别是大量小型办公室网络和家庭网络接入因特网的需求不断增加,IPv4地址空间即将面临耗尽的危险,仍然没有被解除。
1994年提出了一种网络地址转换的方法,再次缓解了IPv4地址空间即将耗尽的问题。NAT能使大量使用内部专用地址的专用网络用户,共享少量外部全球地址来访问因特网上的主机和资源。
我们来举例说明,图中的专用网络使用私有网络号192.168.0.0,该网络中各主机的私有地址如图所示,那么使用私有地址的主机如何才能与因特网上使用全球IP地址的主机进行通信呢?
这需要在专用网络连接到因特网的路由器上,安装NAT软件,装有NAT软件的路由器,叫做NAT路由器,它至少有一个有效的外部全球IP地址,这样所有使用私有地址的主机在和外界通信时都要在NAT路由器上将其私有地址转换成全球IP地址。我们来举例说明,假设使用私有地址的该主机要给因特网上使用全球IP地址的另一台主机发送IP数据报,该主机将数据报发送给NAT路由器,数据报首部中源地址字段的值为该主机的私有地址,目的地址字段的值为因特网上另一台主机的全球地址。NAT路由器从自己的全球IP地址池中为该主机分配一个临时的全球IP地址,172.38.1.5,并将IP数据报的源地址修改为该地址,
然后将私有地址与全球地址的对应关系记录在NAT转换表中,之后就可以转发该IP数据报了。请注意此时该IP数据报中的源地址和目的地址都是全球IP地址,如图所示
因特网上的这台主机给源主机发回数据报,数据报的源地址和目的地址都是全球IP地址,如图所示。NAT路由器收到该IP数据报后,在NAT转换表中进行查找,发现该数据报的目的地址所对应的私有地址为192.168.0.2,于是就将该数据报的目的地址修改为192.168.0.2,并将其发送给相应的主机。请注意此时该IP数据包中的源地址为因特网上那台主机的全球IP地址,而目的地址为专用网络中这台主机的私有地址如图所示。
当专用网中的这两台使用私有地址的主机,都要给因特网上使用全球地址的另一台主机。发送数据报时,在NAT路由器的NAT转换表中就会产生两条记录,分别记录两个私有地址与两个全球地址的对应关系,这种基本转换方法存在这样一个问题。如果NAT路由器具有N个全球IP地址,那么至多只能有N个内网主机,能够同时和因特网上的主机通信,由于绝大多数的网络应用都是使用运输层协议TCP或UDP来传送数据,因此可以利用运输层的端口号和IP地址一起进行转换,这样用一个全球IP地址就可以使多个拥有本地地址的主机,同时和因特网上的主机进行通信,这种将端口号和IP地址一起进行转换的技术,叫做网络地址与端口号转换。
NAPT如图所示,这是本例中的NAPT路由器,这是它的全球IP地址,这是它的NAPT转换表中的部分内容。
实际上现在很多家用路由器都是这种NAPT路由器,由于端口号的概念属于运输层,而我们的课程还没有进行到运输层,因此对该转换表中的内容不再解释。等我们学习了运输层的端口号概念后,相信大家很容易看懂该转换表的内容,请大家思考这样一个问题。内网主机与外网主机间的通信是否能由外网主机首先发起?答案是否定的,如果由外网主机首先发起,那么当NAPT路由器收到来自外网的IP数据报后,在NAPT转换表中找不到相应的记录,也就无法把数据报转发给内网中的主机,因此需要私有地址的主机不能直接充当因特网服务器。对于一些点对点网络应用,需要外网主机主动与内网主机进行通信,在通过NAT时也会遇到问题,需要网络应用自己使用一些特殊的NAT穿越技术来解决问题。另外由于NAT对外网屏蔽了内网主机的网络地址,因此能为内网主机提供一定的安全防护。还记得我们在上节课中介绍的ICMP协议的典型应用Tracert吗?可以看到其中有两个路由器使用了相同的IP地址,这很可能是内网出外网的路由器使用了NAT,并且内网中还有一个使用私有IP地址的路由器,
小结