【计算机网络】网络层

网络层概述

网络层的主要任务是实现网络互连,进而实现数据包在各网络之间的传输

如图所示,这些异构型网络,如果只是需要各自内部通信,他们只要实现各自的物理层和数据链入层即可,但是如果需要将这些异构型网络互连起来,形成一个更大的互联网,就需要使用网络层互联设备路由器
在这里插入图片描述
需要说明的是为了简单起见,有时我们可以不用画出这些网络,而将他们看作是一条链路即可。
在这里插入图片描述
对于互联网而言,仅实现计算机网络体系结构中的物理层和数据链路层,是不能实现数据包在互联网中各网络之间传输的,要实现该功能,就要必须实现网络层,网络层需要解决以下主要问题:

  • 向运输层提供怎么样的服务
  • 寻址问题
  • 路由选择问题

接下来我们一个个来看看。


首要问题是网络层应该向其上面的运输层提供怎样的服务,是可靠传输服务,还是不可靠传输服务?我们在之前的文章中曾介绍过,数据包在传输过程中可能会出现误码,也有可能由于路由器繁忙而被路由器丢弃,还有可能出现按序发送的数据包,不能按序到达接收方。

  • 如果网络层对于上述传输错误不采取任何措施,则提供的是不可靠传输服务。
  • 如果网络层对于上述传输错误采取措施,并使得接收方能正确接收发送方所发送的数据包,则提供的是可靠传输服务。
  • 不同网络体系结构所提供的服务可能是不同的。例如因特网使用的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协议战中,网络层常称为网际层。
在这里插入图片描述
内容小结:
在这里插入图片描述

网络层提供的两种服务

网络层提供的两种服务:

  • 一种是面向连接的虚电路服务
  • 另一种是无连接的数据报服务

虚电路服务;
在这里插入图片描述

数据报服务:
在这里插入图片描述

内容小结:
在这里插入图片描述

IPv4地址

IPv4地址概述

IPv4地址的基本概念:

  • 在TCP/IP体系中,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地址的编制方法,经历了如下三个历史阶段,我们在后面会详细介绍:
在这里插入图片描述
由于32比特的IPV4地址不方便阅读记录以及输入等,因此IPV4地址采用点分十进制表示方法,以方便用户使用。

关于二进制的转换等计算在此不赘述

内容小结:
在这里插入图片描述

分类编址的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的地址是广播地址,不能分配给主机或路由器的各接口

在这里插入图片描述


  • 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类地址

在这里插入图片描述


第一题
在这里插入图片描述

第二题
在这里插入图片描述
这里的源地址和目标地址表示的是:

  • 在路由器通信中,IP数据包中一般有2个IP地址,一个是源IP,另外一个是目标IP地址;
  • 源IP地址就是发出这个数据包的电脑的IP地址,它是数据的来源;
  • 目标IP地址就是数据最终要到达的那台电脑的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,因为这是广播地址,网络地址或广播地址都不能分配给主机或路由器的各接口,因为他们无法唯一标识一台主机或路由器的某个接口

内容小结:
在这里插入图片描述

划分子网的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地址,我们用连续的比特1来对应网络号和子网号,用连续的比特0来对应主机号,这样就构成了划分子网的IP地址的32比特的子网掩码
在这里插入图片描述

将划分子网的IP地址与相应的子网掩码进行逻辑与运算,也就是逐比特相与,就可得到IP地址所在子网的网络地址,如图所示这样网络号和子网号被保留,而主机号被清零,结果为IP地址所在子网的网络地址。

接下来我们来举例说明划分子网的细节,已知某个网络的地址为218.75.230.0,使用子网掩码255.255.255.128,对其进行子网划分,给出划分细节:
在这里插入图片描述

注意:由于原来的8位主机号被借走一位作为子网号,因此主机号还剩7位,这就是表达式中8-1的原因,可有2的7次方个组合,但是我们还要去掉主机号为全0的网络地址和全1的广播地址,这就是表达式中-2的原因。

我们来看看题目所给的C类网地址,218.75.230.0的细节:
在这里插入图片描述

接下来我们引入子网再来看看细节;
在这里插入图片描述


最后我们介绍默认子网掩码的概念,默认子网掩码是指在未划分子网的情况下使用的子网掩码,概念较为简单:
在这里插入图片描述
内容小结:
在这里插入图片描述

无分类编址的IPv4地址

这里我们介绍IPv4地址编制方法的第三个历史阶段,也就是无分类编制的IPv4地址
在这里插入图片描述
在这里插入图片描述
我们来看一个例子:请给出CIDR地址块128.14.35.7/20的全部细节

在这里插入图片描述

注意:

  • 这里是最小和最大地址,而不是最小和最大可分配地址。
  • 聚合C类网数量就是地址数量除以C类网的主机数量

接下来我们介绍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的前面,这就是聚合后的地址块,也可以称为超网。

通过本地我们还可以看出网络前缀越长,地址块越小,路由就越具体。需要说明的是若路由器查表转发分组时,发现有多条路由可选则选择网络前缀最长的那条,这称为最长前缀匹配,因为这样的路由更具体

在这里插入图片描述
接下来我们看两个题:
在这里插入图片描述
在这里插入图片描述
内容小结如下;
在这里插入图片描述

IPv4地址的应用规划

这里我们介绍IPv4地址的应用规划,也就是给定一个IPv4地址块,如何将其划分成几个更小的地址块,并将这些地址块分配给互联网中的不同网络,进而可以给各网络中的主机和路由器接口分配IPv4地址,一般有以下两种方法:

  • 一种是采用定长的子网掩码进行划分。就是使用同一个子网掩码来划分子网
    • 采用定长的子网掩码来划分子网,每个子网所分配的IP地址数量相同,容易造成IP地址浪费
  • 另一种是采用变长的子网掩码进行划分。就是使用不同的子网掩码来划分子网
    • 采用变长的子网掩码来划分子网,每个子网所分配的IP地址数量可以不相同,尽可能减少了对IP地址的浪费。

在这里插入图片描述

接下来我们举例说明,采用定长的子网掩码划分子网的方法,假设我们申请到了一个C类网络,218.75.230.0,要使用定长的子网掩码,给图中所示的小型互联网中的各设备分配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地址的严重浪费。
在这里插入图片描述


接下来我们举例说明,使用变长的子网掩码划分子网的方法,本例与之前的例子基本一样,只是划分子网的方法,改为采用变长的子网掩码。

既然网络N1需要9个地址,那么分配给网络N1的地址的主机号应为4个比特,因为2的4次方等于16,这样网络N1就可有16个地址。由于使用4个比特作为主机号,因此剩余28个比特可作为网络前缀。

既然网络N2需要28个地址,那么分配给网络N2的地址的主机号应该为5个比特,因为2的5次方等于32,这样网络N2就可有32个地址,由于使用5个比特作为主机号,因此剩余27个比特可作为网络前缀,

以此类推,我们将所得出的各网络所需地址块的大小标注在它们各自的旁边,这样我们就可得到本例的应用需求:
在这里插入图片描述
也就是从地址块218.75.230.0/24中,取出5个地址块,按需分配给图中所示的5个网络,218.75.230.0/24地址块所包含的全部地址如下所示,我们需要在该地址块中给图中所示的网络N1到N5分配子块,分配的原则是每个子块的起点位置不能随意选取,只能选取块大小整数倍的地址作为起点,建议大家先给大的子块进行分配

在这里插入图片描述
分配结果如下:

在这里插入图片描述
通过本例可以看出采用变长的子网掩码进行子网划分,可以按需划分出相应数量的子网,每个子网所分配到的IP地址数量可以不相同,尽可能减少了对IP地址的浪费。例如图中的网络5只需要4个IP地址,我们也非常精确的给他分配了4个IP地址,没有造成IP地址的浪费。

内容小结:
在这里插入图片描述

IP数据报的发送和转发过程

IP数据报的发送和转发过程包含以下两部分:

  • 一部分是主机发送IP数据报
  • 另一部分是路由器转发IP数据报

需要说明的是为了将重点放在TCP协议站的网际层,发送和转发IP数据报的过程上,在接下来的举例中,我们将忽略使用ARP协议来获取目的主机或路由器接口的MAC地址的过程,以及以太网交换机自学习和转发帧的过程。下面我们就来举例说明,IP数据报的发送和转发过程。

在下图所示的小型互联网中,路由器的接口0直连了1个交换式以太网,接口1也直连了一个交换式以太网:
在这里插入图片描述

  • 同一个网络中的主机之间可以直接通信,这属于直接交付
  • 不同网络中的主机之间的通信,需要通过路由器来中转,这属于间接交付

那么源主机如何判断出目的主机是否与自己在同一个网络中

我们来举例说明:

  • 假设主机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数据报,不会转发。

内容小结如下;
在这里插入图片描述

静态路由配置及其可能产生的路由环路问题

静态路由配置是指用户或网络管理员使用路由器的相关命令,给路由器人工配置路由表,这种人工配置方式简单,开销小,但不能及时适应网络状态(流量、拓扑等)的变化,一般只在小规模网络中

使用静态路由配置,可能出现以下导致产生路由环路的错误:

  • 配置错误
  • 聚合了不存在的网络
  • 网络故障

接下来我们首先举例说明静态路由配置

我们采用如图所示的网络拓扑和相应的IP地址配置。路由器R1通过自己的接口0所配置的IP地址和地址掩码,可以自动得出接口0所在的网络。由于接口0与该网络直连,则下一跳不是路由器地址,而是通过接口0转发IP数据报给该网络中的某个主机,这属于直接交付。这条自动得出的路由条目的类型属于直连路由。同理,R1还可自行得出接口1的直连网络路由条目。路由器R2同样如此
在这里插入图片描述

  • 假设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要转发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的地址。

由于默认路由也是由我们人工配置的,因此其类型也是静态。在配置了默认路由条目后,我们甚至可以删除这条路由条目。
在这里插入图片描述


接下来我们举例说明特定主机路由的概念

有时候我们可以给路由器添加针对某个主机的特定主机路由条目,一般用于网络管理人员对网络的管理和测试。另外在需要考虑某种安全问题时,也可以采用特定主机路由

假设192.168.2.1是该网络中的某台特定主机,我们可以在R1的路由表中添加1条到达该主机的特定主机路由条目。特定主机路由条目中的目的网络地址为该特定主机的IP地址,地址掩码为255.255.255.255,其CIDR形式为特定主机IP地址斜线32。对于本例特定主机路由条目中的下一跳,是路由器R2的接口0的地址。由于特定主机路由也是由我们人工配置的,因此其类型也是静态。

可以看出特定主机路由的目的网络前缀最长,路由最具体,默认路由的目的网络前缀最短,路由最模糊,当路由器查表转发IP数据报时,若有多条路由条目可选,则采用最长前缀匹配的原则,选用目的网络前缀最长的路由条目进行转发
在这里插入图片描述


接下来我们举例说明,静态路由配置错误可能导致的路由环路问题,如图所示,这是各路由器自动得出的直连网络,这是我们给各路由器人工配置的静态路由。
在这里插入图片描述

  • 我们来看看路由器R2中的这条人工配置的静态路由条目,它表明 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的路由表:
在这里插入图片描述
我们给其人工配置了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数据报到192.168.1.0/24网络,进行查表转发,找到匹配的路由条目,下一跳为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所直连的网络出现了故障而不可达,则会自动在其路由表中删除该直连网络的路由条目,并将我们之前人工配置的针对该直连网络的黑洞路由条目设置为生效状态。

内容小结如下:
在这里插入图片描述

路由选择

路由选择协议概述

路由选择可分为以下两类:

  • 静态路由选择
  • 动态路由选择

在这里插入图片描述
因特网是全球最大的互联网络,它所采用的路由选择协议具有以下三个主要特点,分别是:

  • 自适应:因特网采用的是动态路由选择,能较好的适应网络状态的变化。
  • 分布式:因特网中的各路由器,通过相互间的信息交互,共同完成路由信息的获取和更新
  • 分层次:将整个因特网划分为许多较小的自治系统AS,例如一个较大的因特网服务提供商,就可划分为一个自治系统,在自治系统内部和自治系统外部,采用不同类别的路由选择协议,分别进行路由选择。

下面我们来举例说明,因特网采用的分层次路由选择协议,假设这是因特网中的很小的一部分,我们可以将这些网络和路由器划归到两个不同的自治系统:

  • 自治之间的路由选择,简称为域间路由选择。自治系统内部的路由选择,简称为域内路由选择
  • 域间路由选择使用外部网关协议EGP类别的路由选择协议,域内路由选择使用内部网关协议IGP这个类别的路由选择协议

在这里插入图片描述

需要说明的是外部网关协议EGP内部网关协议IGP只是路由选择协议的分类名称,而不是具体的路由选择协议。另外名称中使用的是网关这个名词,是因为在因特网早期的RFC文档中没有使用路由器,而使用的是网关这一名词。现在新的RFC文档中又改用路由器这一名词,因此外部网关协议EGP可改称为外部路由协议ERP,内部网关协议IGP,可改称为内部路由协议IRP。

注意:
在一个自治系统内部使用的具体的内部网关协议,与因特网中其他自治系统中选用何种内部网关协议无关。
在这里插入图片描述


接下来我们给出常见的路由选择协议:
在这里插入图片描述


路由选择协议是在路由器上运行的,下面我们就来看看路由器的基本结构

在这里插入图片描述

路由器是一种具有多个输入端口和输出端口的专用计算机,其任务是转发分组。

整个路由器结构可划分为两大部分:

  • 路由选择部分
    • 路由选择部分的核心构件是路由选择处理机,它的任务是根据所使用的路由选择协议,周期性的与其他路由器进行路由信息的交互,来更新路由表。
  • 分组转发部分
    • 分组转发部分由三部分构成,分别是交换结构,一组输入端口,一组输出端口。

接下来我们来看看路由器的工作过程:

在这里插入图片描述

  • 信号从某个输入端口进入路由器,物理层将信号转换成比特流,送交数据链路层处理,数据链入层从比特流中识别出帧去掉帧头和帧尾后,送交网络层处理。如果送交网络层的分组是普通代转发的数据分组,则根据分组首部中的目的地址进行查表转发,若找不到匹配的转发条目,则丢弃来分组,否则按照匹配条目中所指示的端口进行转发。
  • 转发出去时,网络层更新数据分组首部中某些字段的值,例如将数据分组的生存时间减1,然后送交数据链路层进行封装,数据链路层将数据分组封装成帧,送交物理层处理,物理层将帧看作是比特流,将其变换成相应的电信号进行发送。
  • 如果送交网络层的分组是路由器之间交换路由信息的路由报文,则把这种分组送交路由选择处理机,路由选择处理机根据分组的内容来更新自己的路由表。路由表一般仅包含从目的网络到下一跳的映射,路由表需要对网络拓扑变化的计算最优化,而转发表是从路由表得出的,转发表的结构应当是查找过程最优化

需要说明的是我们在前面的静态路由配置的相关内容中,并没有严格区分路由器中的路由表和转发表,这样有助于简化问题的分析。因此在后续有关路由选择协议的内容中,我们仍然不严格区分路由表和转发表,还是以路由表来表述问题。

注意:

  • 路由选择处理机除了处理收到的路由报文外,还会周期性的给其他路由器发送自己所知道的路由信息。

  • 路由器的各端口还应具有输入缓冲区和输出缓冲区

    • 输入缓冲区用来暂存,新进入路由器,但还来不及处理的分组。

    • 输出缓冲区用来暂存,已经处理完毕,但还来不及发送的分组。
      在这里插入图片描述

      需要说明的是路由器的端口一般都具有输入和输出的功能。我们图中分别给出输入端口和输出端口,目的在于更好的演示路由器的基本工作过程,使同学们更容易理解。

内容小结:
在这里插入图片描述

路由信息协议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
    在这里插入图片描述
  • 之后每个路由器仅和相邻路由器周期性的交换,并更新路由信息若干次交换和更新后,每个路由器都知道到达本自治系统内各网络的最短距离和下一跳地址,这称为收敛
    在这里插入图片描述

接下来我们举例说明RIP的路由条目更新规则,路由器C和D互为相邻路由器,它们之间周期性的交换并更新路由信息

在这里插入图片描述

路由器C的路由表,其中到达各目的网络的下一跳都记为问号。可以理解为路由器D并不需要关心路由器C的这些内容,

假设路由器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,于是不使用这条路由条目来更新自己的路由表。不更新路由表的理由可总结为到达目的网络,不同的下一跳,新路由劣势,不应该更新

在这里插入图片描述


下面我们介绍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之间会出现路由环路,时间长达数分钟,有关路由环路的问题,我们之前已经介绍过了,此处就不再赘述了。

造成这种反复误导的本质就是,接收方将RIP报文中的下一条改成了发送方,在上述例子中更新的时候,都是到达目的网络有着相同下一跳,采取的最新消息更新策略。

在这里插入图片描述
在这里插入图片描述

请注意使用上述措施后,也不能彻底避免路由环路问题,这是距离向量算法的本质所决定的

内容小结:
在这里插入图片描述

开放最短路径优先OSPF的基本工作原理

在这里插入图片描述
我们来举例说明,在思科路由器中,OSPF计算代价的方法是用100兆比特每秒除以链路带宽,计算结果小于1的值仍记为1,大于1且有小数的舍去小数。我们可以很容易的得出下图中各路由器的链路状态:
在这里插入图片描述
OSPF相邻路由器之间通过交互问候分组来建立和维护邻居关系。

如图所示。问候分组需要封装在IP数据报中发送,发往组播地址224.0.0.5,IP数据报首部中的协议号字段的取值应为89,来表明IP数据报的数据载荷为OSPF分组,问候分组的发送周期为10秒,若40秒仍未收到来自邻居路由器的问候分组,则认为该邻居路由器不可达。

因此每个路由器都会建立一张邻居表,其中的每一个条目对应记录其各邻居路由器的相关信息,包括邻居ID,接口以及死亡倒计时

例如R2是R1的一个邻居路由器,为简单起见,邻居ID就记为R2(实践中应填写相应的路由器ID),该邻居路由器与自己的接口1相连,将接口号记为1,死亡倒计时还剩36秒,若在死亡倒计时到达0之前,再次收到了来自R2的问候分组,则重新启动针对该邻居条目的40秒死亡倒计时,否则当死亡倒计时为0,则判定该邻居路由器不可达

R4是R1的另一个邻居路由器,邻居ID记为R4,该邻居路由器与自己的接口0相连,将接口号记为0,死亡倒计时还剩余18秒

在这里插入图片描述


使用OSPF的每个路由器都会产生链路状态通告,其中包含以下两类内容:

  • 一类是直连网络的链路状态信息
  • 另一类是邻居路由器的链路状态信息。

假设N1是路由器R4的直连网络,则R4的链路状态通告应包含:

  • 与其直连网络N1的链路状态信息
  • 邻居路由器R1的链路状态信息
  • 邻居路由器R3的链路状态信息

链路状态通告被封装在链路状态更新分组中,采用洪范法发送。收到链路状态更新分组的路由器,将从自己其他所有接口转发该分组,也就是进行洪范转发,如图所示。这样自制系统中每个路由器所发送的封装有链路状态通告的链路状态更新分组,会传递给系统中其他所有路由器。
在这里插入图片描述
使用OSPF的每个路由器都有一个链路状态数据库,用于存储链路状态通告,通过各路由器洪范发送封装有自己链路状态通告的链路状态更新分组,各路由器的链路状态数据库最终将达到一致

例如这是路由器R2的链路状态数据库,其中记录有系统中各路由器的链路状态通告:
在这里插入图片描述
使用OSPF的各路由器,基于链路状态数据库进行最短路径优先计算,就可构建出各自到达其他各路由器的最短路径,也就是构建出各自的路由表

例如有这样一个网络拓扑,各链路旁的数字表示代价。通过各路由器洪范发送封装有自己链路状态通告的链路状态更新分组,各路由器最终会得出相同的链路状态数据库,由链路状态数据库可以得出带权有向图,对该图进行基于迪杰斯特拉的最短路径优先算法,就可以得出以各路由器为根的最短路径,如图所示
在这里插入图片描述

对于这样一个比较简单的网络拓扑,即使大家不懂得最短路径优先算法,也可以很快找出每个路由器到达其他各路由器的最短路径。但是如果网络拓扑比较复杂,该项工作对人类而言就比较复杂了,因此可以按照迪杰斯特拉提出的最短路径优先算法,编制程序,让路由器执行该程序。

对于一般的网络工程师,即便不熟悉该算法,也不影响对OSPF协议的配置和使用。OSPF包含以下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建立邻居关系
在这里插入图片描述

因此之前的邻居关系数量降低为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向主干区域发送自己所在区域一的链路状态通告,向自己所在区域发送区域0,2,3的链路状态通告

  • 区域边界路由器R4向主干区域发送自己所在区域二的链路状态通道,向自己所在区域发送区域0,1,3的链路状态通告,

  • 区域边界路由器R7,向主干区域发送自己所在区域三的链路状态通告,向自己所在区域发送区域0,1,2的链路状态通道

采用分层次划分区域的方法,虽然使交换信息的种类增多了,同时也使OSPF协议更加复杂了,但这样做却能使每一个区域内部交换路由信息的通信量大大减小,因而使OSPF协议能够用于规模很大的自制系统中

内容小结如下:
在这里插入图片描述

边界网关协议BGP的基本工作原理

因特网采用分层次的路由选择协议,内部网关协议这一类别的协议,用于自治系统内部的路由选择,典型的协议有路由信息协议RIP 和开放最短路径优先OSPF,他们都是设法使分组在一个自治系统内部,尽可能有效的从源网络传输到目的网络,无需考虑自治系统外部其他方面的策略。

外部网关协议这一类别的协议用于自治系统之间的路由选择。典型的协议是边界网关协议BGP。在不同自治系统内,度量路由的代价可能不同,因此对于自治系统之间的路由选择,使用代价作为度量来寻找最佳路由是不可行的

在这里插入图片描述
我们来举例说明,各自治系统的连接关系如图所示:
在这里插入图片描述
其中自治系统AS1将时延作为度量,AS2将距离也就是跳数作为度量,AS3将链路带宽作为度量,那么AS4可以通过哪些路径到达AS5呢?图中已经标明了两种路线(当然还存在其他的可能性)

那么这些路径中哪一个是最佳路由呢?由于没有统一的路由度量,因此寻找最佳路由是无意义的。

自治系统之间的路由选择还必须考虑相关策略。例如我国国内的站点在互相传送数据报时,不应经过国外兜圈,特别是不要经过某些对我国的安全有威胁的国家,又例如自治系统AS4,要发送数据报给AS5,本来最好是依次经过S1S3,但是 AS3不愿意让这些数据报经过自己自治系统内的网络,因为这是那两个自治系统的事情,与我这个自治系统无关。而AS2愿意让某些相邻自治系统的数据报,通过自己的网络,只要支付相应的服务费用即可。由此可见,自治系统之间的路由选择协议,应当允许使用多种路由选择策略,这些策略包括政治、经济、安全等,他们都是由网络管理人员对每一个路由器进行设置的,但这些策略并不是自治系统之间的路由选择协议本身。
在这里插入图片描述
基于上述情况,边界网关协议BGP只能是力求寻找一条能够到达目的网络且比较好的路由,也就是不能兜圈子,而并非要寻找一条最佳路由

我们来举例说明:

在这里插入图片描述

一般来说两个BGP发言人都是通过一个共享网络连接在一起的,而BGP发言人往往就是BGP边界路由器

BGP发言人交换网络可达性的信息,也就是要到达某个网络所要经过的一系列自治系统。当BGP发言人互相交换了网络可达性的信息后,各BGP发言人就根据所采用的策略,从收到的路由信息中,找出到达各自治系统的较好的路由,也就是构造出树形结构,不存在环路的自治系统连通图。如图所示,这是自治系统A的某个BP发言人,构造出的自治系统联通图:
在这里插入图片描述
边界网关协议BGP适用于多级结构的因特网。这里我们给出一个BGP发言人交换路径向量的例子:
在这里插入图片描述

  • 自治系统AS2的BP发言人,通知主干网的BGP发言人,要到达网络N1、N2、N3和N4,可经过AS2。
  • 主干网在收到这个通知后就发出通知,要到达网络N1、N2、N3和N4,可沿路径(AS1, AS2) ,这里的路径AS1、AS2称为路径向量。
  • 自治系统AS3,收到这条路径向量信息后,如果AS3自身也包含在其中,则不能采用这条路径,否则会兜圈子

接下来我们介绍BGP版本4中规定的4种报文:
在这里插入图片描述
内容小结如下:
在这里插入图片描述

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数据报分片,网际层封装出的IP数据报,它将在数据链路层封装成帧。每一种数据链路层协议都规定了帧的数据载荷的最大程度,称为最大传输单元MTU。例如以太网的数据链路层规定,MTU的值为1500个字节,如果某个IP数据报的总长度超过MTU时,将无法封装成帧,需要将源IP数据报分片为更小的IP数据报,再将各分片IP数据报封装成帧。
    在这里插入图片描述
  • 标识字段,占16个比特,属于同一个数据报的各分片数据报,应该具有相同的标识,IP软件维持一个计数器,每产生一个IP数据报,计数器的值就要加1,并将此值赋给标识字段,
  • 标志字段,占3个比特,各比特含义如下:
    • DF比特表示是否允许分片置1表示不允许分片,清0表示允许分片
    • MF比特表示本分片后面是否还有分片,置1表示本分片后面还有分片,清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数据报,经过某个网络时还需要再进行分片,其中一个分片长度为800字节,另一个分片长度为600字节,分片结束后给每个分片重新添加一个首部,使之成为IP数据报。
在这里插入图片描述


再来看生存时间字段
在这里插入图片描述
下来我们来举例说明,生存时间字段的作用。

假设采用如下图所示的网络拓扑,路由器R1R2R3,各自的路由表如图所示。为了简单起见,我们只给出了各路由器路由表中的由人工配置的静态路由条目,例如路由器R2中的这条静态路由条目,他指出了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数据报将被路由器丢弃。

在这里插入图片描述


再来看协议字段
在这里插入图片描述


首部检验和字段

在这里插入图片描述

内容小结:
在这里插入图片描述

网际控制报文协议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差错报告报文。

接下来我们介绍常见的两种ICMP询问报文:
在这里插入图片描述


接下来我们介绍利用ICMP协议的两个典型应用:

  • 一个是分组网间探测PING(Packet Internet Groper)
  • 另一个是跟踪路由

首先来看分组网间探测,该应用用来测试主机或路由器之间的连通性,其应用层直接使用网际层的ICMP协议,而不通过运输层的TCP或UDP协议。所使用的ICMP报文类行为回送请求和回答,如下所示:
在这里插入图片描述

再来看跟踪路由,该应用用来测试IP数据报,从源主机到达目的主机要经过哪些路由器,在该应用的WINDOWS版本中,具体命令为tracert。其应用层直接使用网际层的ICMP协议,所使用的ICMP报文类型有回送请求和回答报文以及差错报告报文。在该应用的UNIX版本中,具体命令为traceroute、其在运输层使用UDP协议,在网际层使用的ICMP报文类型,只有差错报告报文。

在这里插入图片描述

请大家思考一下 tracert命令的实现源理是什么

我们来举例说明:

在这里插入图片描述

  • 假设主机H1想知道到达主机H2要经过哪些路由器,H1就给H2发送ICMP回送请求报文,该报文被封装在IP数据报中,IP数据报首部中生存时间字段TTL的值被设置为1,该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
    在这里插入图片描述

内容小结如下:
在这里插入图片描述

虚拟专用网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地址的路由器:
在这里插入图片描述

内容小结:
在这里插入图片描述

  • 6
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十八岁讨厌编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值