计算机网络 第四章 网络层

第四章是整个计算机网络中最重要的一章,大三学这门课的时候被第四章虐的不像样子,这一章不仅内容多,而且很多的算法和协议都十分复杂,又多又难,

4.1 网络层的功能

世界上存在着各种各样的网络,要将这些异构的网络连接起来,本身就是一个很有挑战性的任务。 网络层要实现的任务之一就是实现异构网络之间的网络互联
所谓网络互连,就是指将两个以上的计算机网络通过一定的方法,用一种或多种中间设备相互连接起来,从而形成更大的网络系统。
这里的中间设备也称中继系统,根据设备所在的层,可以进行以下的划分:
①物理层中继系统:中继器(转发器)、集线器
②数据链路层中继系统:网桥、交换机
③网络层中继系统:路由器
④网络层以上的中继系统:网关
此外,在数据链路层和网络层之间还有一个穿插的中继设备,称为桥路器。

TCP/IP体系中在网络互连的实现上,要求网络层采用标准化协议,但相互连接的网络可以是异构的,由于所有网络在网络层都是用相同的网络协议,所以可以将互联后的计算机网络视为一个虚拟的IP网络,而下层复杂的异构细节则被屏蔽了,从而使得性能各异的网络在网络层上看起来像一个统一的网络

IP OVER EVERYTHING和EVERYTHING OVER IP是这一部分常提到的两句话,用于形象地描述IP的作用,这两句话主要是指TCP/IP体系使得所有网络在网络层都是用统一的IP协议,所以网络层以下的异构细节都被屏蔽了,网络层以上的细节也被屏蔽了。举个例子市里领导来学校里开会,领导说的话乱七八糟,有用鸟语的有用狗语的,但是到了学校会议上就必须说中文,学校开完大会再给学生开小会,学生说什么语言的都有,天津话东北话粤语,但是在开小会的会场里都必须说中文,这样不管领导和学生私底下说什么语言,到了会议会场里都必须说中文,这样就仿佛所有人都会中文,交流沟通起来也就没有任何麻烦了。

网络层中最重要的设备就是路由器,路由器主要负责路由选择和分组转发。路由选择指的是按照分布式算法,根据从相邻路由器获得的整个网络拓扑的变化情况,动态地改变所选择的路由。而分组转发指的则是路由器根据转发表进行的转发。具体的过程在后面网络层设备和路由算法的部分整理。

在设计网络层时,关于网络层应该提供什么样的服务引起了长期的争论。主要的观点有两种:面向连接的虚电路和无连接、尽最大努力交付的数据报服务。最终采用的后者,这是因为综合考虑网络中的成本,网络不提供服务质量的承诺,而是让分组可能出错、丢失、重复和失序,这就让整个网络中的路由器比较简单网络造价大大降低,运行更加灵活且能够适应多种应用。
在这里插入图片描述
为了理解方便,将网络层做了以下的划分
在这里插入图片描述
同样是在网络层,为另一个协议提供服务的就在下层,所以ARP实际上是在这一层的最下层,因为ARP是处理两层地址的协议,之后IP在中间,由于ICMP和IGMP都是使用IP协议的,所以这两个协议在IP的上面。可以说A使用B传输,就是将A作为B的数据部分进行传输,而在图里面就是A在B的上面。

4.2 IPv4

IPv4是目前广泛使用的IP协议版本,是这一章的主体。

首先,IP协议采用分组的格式,IP分组具有固定的格式,区别在于版本,IPv4分组的格式如下:
在这里插入图片描述
可以看出一个IP数据报由数据部分和首部两部分组成,其中首部的前一部分是固定长度的,共20字节,后面则根据需要,提供了最长40个字节的可选字段。下面按顺序总结一下各个字段的功能
第一个字段为版本,共4位,这里指的是IP的版本,目前广泛使用的版本号为4.
第二个字段为首部长度,指的是整个首部包含可选字段的长度,这里需要注意,首部长度字段一共4位,而整个首部最长可以达到60个字节,所以首部长度的1实际上代表着首部长度的4字节,即以4字节为单位,反过来想,因为首部长度的部分是以4字节为单位的,所以整个首部的长度必须是4字节的倍数,这正好对应后面的填充字段。
第三个字段为区分服务,这个基本不考,主要是用来提供需要的服务类型
第四个字段为总长度,这个字段指的是整个分组,包括首部和数据部分的总长度,一共占两个字节,所以最多能表示2的16次方的长度,即数据报的最大长度为65535B,但实际发送的帧并不一定这么长,要受到数据链路层MTU的限制,如果超过就要进行分片操作。
第五个字段为标识,这个字段占16位,是一个计数器,每产生一个数据报就加一,需要注意的是,由于IP采用的是无连接的服务,所以这个字段并不是序号,虽然看着像序号,这个字段主要是用在分片的重装时,如果有三个帧ABC都进行了分片,在目的主机组装成原来的帧时,要搞清楚谁是谁的,这是就需要用到这个字段,让标识字段一样的进行组合。
第六个字段为标志,共三位,其中两位是有用的,剩下一位没有用。三位中最低位为MF(More Fragment),当MF=1时表示后面还有分片。三位中中间位为DF(Don‘t Fragment),当DF=0时才可以进行分片操作。
第七个字段为片偏移,共13位,这个字段表示的是较长的分组在分片后,某片在原分组中的位置。和前面首部长度的计算方式一样,由于总长度字段是16位,所以理论上片偏移最大也要到65535B,但是只有13位,所以需要让片偏移的1位表示总长度的8B,同理,在分片后每个片的长度也必须是8B的倍数。标识、标志和片偏移三个字段刚好对应了分片需要调整的三个字段。
第八个字段为生存时间,也称TTL,共8位,这个字段指的是数据报在网络中可通过的路由器数的最大值,在过程中路由器每转发一次,TTL的值就会减一,当减为零时就丢弃并向主机返回一个ICMP报文。
第九个字段是协议,共8位,指的是上层的协议,用于指示分组的数据部分应该上交给那个传输层协议。
第十个字段为首部检验和,占16位,用于检验数据报的首部,与一般的校验和有所区别,由于每次进行转发都会让首部的一些字段发生变化,所以每次转发都会检验一次首部,而如果采用CRC这类的常见的校验方式,会增加过程中的时延,所以这里采用的是一种简单的反码运算。将数据报的首部拆成许多个16位的字,将所有16位字相加,结果取反码后放入校验和字段,接收方再将16位字相加一次,之后与首部检验和字段相加,如果结果为0说明没有出错。
在这里插入图片描述

第十一和十二个字段为源地址和目的地址,没什么太多好说的,填对应的IP地址即可。

上面的十一个字段代表首部固定的20字节,每个IP数据报首部都要有这20个字节,而首部剩下的部分为可选字段,用来支持上层协议需要的额外功能,根据需要选择不同的选项,选项之间不需要有分隔符,直接拼接即可,最后用全0的填充字段填充成4B的整数倍即可。

前面提到过分片的操作需要修改首部中标识、标志和片偏移三个字段,下面总结一下分片的操作过程。当IP数据报作为数据链路层帧的数据部分超过了MTU时,就需要网络层进行分片操作,首先分片是分的数据报的数据部分,如果一个长度为1000B的默认数据报,数据部分为980B,如果分成两个帧,就是将这980B拆分成两个490B的数据部分,之后加上各自的首部,成为两个长度为510B的帧送去下层的数据链路层进行传输。
分片后首部的三个字段需要进行修改,首先需要看DF位,当DF位为0时是不可以进行分片的,如果不可以分片而不分片又传输不了时,就会返回一个ICMP报文,之后在DF=1的条件下,源主机给标识位赋值,如果不是最后一个分片还要讲MF位修改成1,之后计算片偏移,片偏移这里是分片后第一个字节相较于原分组的位置,记得要除以8再填入这个字段
如果传输的中间过程下层MTU更小了,则需要进行二次分片,二次分片时不需要修改标识和标志,只需要将片偏移更新为新片相对于原分组的位置即可。
分片的过程可以结合典型题中的例题进行理解,是一个并不难的过程。
在这里插入图片描述

所以现在我们可以总结出网络层路由器转发分组的一个大体流程:
①从数据报中提取出目的主机的IP地址D,得到目的网络地址N。
②如果目的网络N与本路由器直接相连,说明目的主机就在自己的地盘,那么就将数据报直接交付给目标主机,即路由器的直接交付。
③如果路由表中有目的地址为D的特定主机路由(一般是为了控制或者测试网络),则将数据报传送给表中所指示的下一跳。
④若路由表中有到达N的路由,则将数据报传送给路由表指明的下一条。
⑤若路由表中设置了默认路由,那么将数据报传送给默认路由指示的下一条。
⑥若上述情况都没能满足,则报告转发的分组有误。
需要注意的是,整个转发的过程中,IP地址都是没有发生改变的,所有路由器都是借助目的网络地址,查找自己的路由表,得到下一条的地址,再利用ARP协议得到下一跳的MAC地址,这里是将目标的IP地址送给ARP解析,从而在数据报IP地址不变的情况下进行转发。

IP协议在地址上选用的是32位的地址。连接到因特网上的每台主机都分配一个32比特的全球唯一标识符,即IP地址,分为A、B、C、D、E五类。
在这里插入图片描述
从图里可以看出,无论哪一类IP地址,都是由网络号和主机号两部分组成的,其中网络号表示主机接入的网络,所以网络号在整个因特网范围内必须是唯一的。
在各类的IP地址中,由于以下IP地址具有特殊用途,所以不作为主机的IP地址:
①主机号全0表示网络本身
②主机号全1表示本网络的广播地址
③127.0.0.0表示环路自检,不进行转发
所以根据这些限制条件,我们可以得到三类IP地址的限制范围:
在这里插入图片描述
另外,IP地址作为源地址和目的地址时也有一定的限制,限制如下,顺便这里可以这样去记忆,主机号全1代表广播,所以一定是很多台机器,很多台机器必然不能同时作为源地址,所以只要是主机号全1就不可以作为源地址,而剩下网络号全0就不可以作为目的地址。
在这里插入图片描述

IP地址为了方便记忆,也采用点分十进制:
在这里插入图片描述
这里需要说明一下,A类网络中减二的原因是0.0.0.0和127.0.0.0是不可用的,B类是因为128.0.0.0不可分配,C类是因为192.0.0.0不可分配,主机号都减二是因为主机号全0或者全1都是不可用的。现在由于IPV4地址的短缺,B类网络号128.0.0.0已经被分配出去了,C类网络192.0.0.0还没有被分配出去,有关机构已经取消了对这两个网络地址的保留,以后将会分配出去。

关于IP地址,还有一些零碎的知识点。一个IP地址实际上指明了是一台主机的一个接口,当一个主机同时接入了两个网络,此时主机就应该分配两个IP地址,每个地址对应一个网络,这种主机称为多归属主机。同一个局域网上的主机或者路由器的IP地址中的网络号必须是一样的。

由于并不是每个主机都随时需要接入全球的互联网,所以又延伸出了网络地址转换(Network Address Transmition)技术,这种技术将专用网络地址转换为公用地址,从而对外隐藏内部管理的IP地址,从而使得整个专用网只需要一个全球IP地址就可以与因特网连通,从而大大节省了IP地址的消耗,而且降低了内部受到攻击的风险。规定下面的网络为私有IP地址:
在这里插入图片描述
路由器对于这类IP地址一律不转发,采用这类私有IP地址的互联网称为专用互联网或者本地互联网。另外,与一般的路由器不同,NAT路由器在转发IP数据报时,一定要更换IP地址,普通的路由器只工作在网络层,而NAT路由器还需要查看传输层的端口号。显然通过NAT路由器的通信必须由专用网内部的主机来发起,即只能作为源地址。
在这里插入图片描述
在这里插入图片描述

在数据报的传输过程中,涉及IP地址与硬件地址的转换。IP地址是在网络层使用的地址,而MAC地址是用在数据链路层的,IP地址和MAC地址是互相不认识的。由于路由器的隔离,IP网络中无法通过广播方式依靠MAC地址来完成跨网络的寻址,所以需要一个IP地址到MAC地址的转换,只有经过这个转换,才能在跨网络时进行路由的选择。
这一步主要是用到在网络层的ARP协议,通过这个协议来实现IP地址到MAC地址的转换。
每个主机都有一个ARP高速缓存,用于存放本局域网中主机和路由器的IP地址到MAC地址的映射关系。需要注意,ARP是工作在本局域网上的,也就是范围不会特别大的一个局域网,利用ARP高速缓存,记录到哪个IP地址应该转发到哪个物理地址上。ARP高速缓存主要是用来存放最近获得的 IP 地址到 MAC 地址的绑定,以减少ARP广播的数量。
在这里插入图片描述
参照上图,ARP分组主要包括下面几部分:
①前面两个字段为硬件类型和协议类型,分别对应数据链路层的硬件地址的类型(以太网、令牌环网等)和网络层映射的协议地址(IP地址)。
②第三四个字段分别表示硬件地址的长度和协议地址的长度,对于ARP请求或者应答,这个字段的值为6和4。
③第五个字段为操作字段,这个字段指示这个ARP操作具体的功能,是哪一种ARP操作。
④剩下的四个字段分别为发送方的硬件地址和协议地址以及接收方的硬件地址和协议地址。
对于ARP请求来说,除了目的端硬件地址其他都有填充值,接收方收到后将原来的发送方地址作为ARP相应帧接收方地址,之后填入自己的地址后发回去。

工作过程中,假设主机A向同一个局域网的B发送信息,主机A先检查自己的ARP高速缓存中有没有B的IP地址,如果有就直接查表找出对应的硬件地址,再将这个硬件地址写入MAC帧并在数据链路层发送。如果没有,则需要在局域网中广播发送一个ARP请求分组,这个分组给出了发送方的IP地址、MAC地址和目标的IP地址,之后所有局域网上的主机都会收到这个分组,B收到ARP请求分组之后,将分组的相关内容修改,单播给A一个ARP响应分组,同时将A的信息记录在B的ARP高速缓存中,A收到ARP响应分组之后就可以记录下信息并开始转发。
但是当所要发送的目标主机不在一个局域网的时候,就需要转发给路由器,由路由器来进行相同的操作。转发给路由器后,路由器检查自己的ARP高速缓存,如果有则直接转发,如果没有,则像前面提到的那样广播ARP请求分组,如果还是没有响应,就再交给下一个路由器。
ARP的四种典型情况如下:
在这里插入图片描述
在这里插入图片描述

有一个容易混淆的一个点,ARP协议并不一定是完全按照目的地址工作的,比如说我要向东京的一个IP地址发送数据,我不可能完全按照ARP一点一点用这个东京的IP地址去反复交给路由器,实际上是结合前面的路由转发,主机发送出这个数据报之后,送到第一个路由器,第一个路由器查自己的路由表,假设路由表上有这个表项,那么按照这个表项的信息,将下一跳的IP地址交给ARP工作,而不是将这个东京的IP地址交给ARP工作,路由表中存放有下一跳路由器的IP地址以及应该转发的接口,利用这个来进行转发。
ARP难度并不大,算是网络层协议中入门级的了。王道上还补充了DHCP动态主机配置协议,这个协议常用于给主机动态分配IP地址,个人感觉校园网的登录就是靠这个协议实现。但DHCP是应用层的协议,放在网络层有失公允,这里就不再多说了,等应用层再整理吧。

除此之外,为了提高IP数据报交付成功的机会,网络层还使用了网际控制报文协议,即ICMP协议,这个协议主要是向主机或者路由器报告差错或者异常信息,ICMP一般作为IP数据报的数据,再加上数据报的首部,组成数据报发送出去,一定程度上可以看作是ICMP使用了IP协议(使用了谁就是作为谁的报文的数据部分传送出去)。
在这里插入图片描述
ICMP分为两类:ICMP差错报告报文和ICMP询问报文。
ICMP差错报告报文用于目标主机或者目标主机路径上的路由器向源主机报告差错和异常情况,主要分为5种:
在这里插入图片描述
另外,下面几种情况不会发送ICMP差错报告报文:
在这里插入图片描述
而ICMP询问报文分为四类:回送请求和回答报文、时间戳请求和回答报文、掩码地址请求和回答报文、路由器询问和通告报文,其中最常用的是前两个。

ICMP有两个重要的应用,PING和TRACERT。
PING主要用来测试主机之间的连通性,使用了ICMP回送请求和回答报文,PING是应用层直接使用网络层的一个例子,并没有通过运输层的UDP或者TCP。
TRACERT则是用来跟踪一个分组的源点到终点的路径,通过设置分组首部的TTL,TTL从1开始一次一次地增加,每次路由器都会由于TTL变成0而向主机发送ICMP时间超过报文,由于TRACERT发送的是无法交付的UDP报文,所以最后一次到达目的主机时,会因为端口号问题向主机发送ICMP终点不可达报文,所以最终就可以得到一条到达目的主机的路径。需要注意的是这条路径并不是固定的,再次使用TRACERT可能会导致路径变成另一条。

前面的两级IP地址,随着发展,出现了很多不足之处:利用率很低、路由表过大、不够灵活,为了解决这个问题,出现了划分子网这种技术。采用划分子网之后,IP地址就变成了三级结构:网络号、子网号、主机号。划分之后,相当于将原来的网络划分成了更小的部分,就像是地产开发商交付了一个没有墙的大屋子,住户就需要根据自己的需要,根据合适的大小修墙,但是对外面的人来说,你住的屋子还是那个屋子,并不知道你屋子里怎么修的墙。
子网的划分是一个单位内部的事,对外部来说,这些子网并不可知,仍然表现为没有划分子网的网络。划分过程中,从主机号中占据一部分比特作为子网号,代价就是牺牲了一部分主机号,由于不能使用主机号全0或者全1(全0表示子网的网络号,全1表示子网的广播地址),所以每次划分子网,都有两个IP地址被浪费掉,一定程度上增加了IP地址的浪费。
划分子网之后,其余的路由器依然按照没有划分子网的时候的方法,通过路由表转发,直到路由器与目的网络直连,按照不划分子网的情况,这时的操作应该是ARP直接交付,而采用了划分子网之后,这一步的操作就应该变成按照目的网络号和子网号找到目的子网,再把IP数据报交付给目的主机。

采用了子网划分之后,还需要通过子网掩码来表达对原网络中主机号的借位,主要是用于在与目的网络直连的情况下,找出所在子网。
子网掩码是一个与IP地址相对应的、长32位的01串,1对应IP地址中的网络号以及子网号,而0对应主机号,计算机只需要将IP地址和对应的子网掩码按位与就可以得到相应子网的网络地址。子网掩码是一个网络或者一个子网的重要属性,路由表中的每个条目,除了要给出目的网络地址和下一跳之外,还需要给出对应的子网掩码,相应地,路由器在相互交换信息时,也需要交换自己所在网络的子网掩码。
在这里插入图片描述

采用子网掩码之后,路由器的转发过程就变成下面的步骤:
在这里插入图片描述
新的互联网标准规定,所有网络都必须使用子网掩码,即使没有划分子网,也需要使用默认的子网掩码,这是因为不划分子网的默认子网掩码与IP地址与运算之后,得到的是主机的网络号,并不是没有用处,总体上来看这样子更便于查找路由表
子网的划分可以定长也可以变长,主要是看题目要求,二者各有优缺点:
在这里插入图片描述

与划分子网正相反,构造超网则是在变长子网掩码的基础上提出的一种消除传统网络划分的一种IP地址的划分方法。构造超网重新回归了两级的IP地址,这次两部分为网络前缀和主机号,采用斜线记法,在IP地址后加一个斜线,斜线后面是网络前缀的长度,采用按位与的方法,就可以利用子网掩码得到IP地址的网络前缀。
将网络前缀连续的IP地址组成CIDR地址块,一个地址块可以表示很多个地址,这种地址的聚合就称为路由聚合或者构造超网。构造超网后,就可以将多个地址连续的网络地址聚合起来并映射到一个物理网络上,这个物理网络就可以使用这个聚合起来的C类地址的共同地址前缀作为其网络号。构成超网需要满足以下的规则:
在这里插入图片描述
这里可以解释一下,第一条和第二条规则都比较好理解,主要是第三条,第三条规则主要是要求开始的位置要有所限制,这个限制不太好直接表达,反正就是防止出现进位的现象,一般也不会在这里挖坑。
构造超网后,主机号全0和全1仍然是不可用的,而且也可以在网络前缀的基础上再划分子网,这就属于这部分很难处理的题目了,具体在后面的题目里面再写。

使用网络前缀之后,就会出现前缀匹配的问题,这里需要先明确,网络前缀越长,地址块中所包含的地址数目就越少,也就是说,网络前缀越长,代表的地址也就越精确,所以在前缀匹配时需要遵循最长前缀匹配,如果目标地址与路由表中的两个表项都前缀匹配,那么选择两个表项中更长的,也就是选择了更具体的那一个。

使用网络前缀后,查找路由表就成为一个很费时间的问题,不像前面那样,因为涉及一个前缀的问题,尤其是常用的默认路由,在最差情况下需要经历31次不必要的查找。这种浪费时间的行为是计算机中很不希望的,改善方法是采用二叉线索的方法,将前缀匹配与二叉线索树结合起来,可以先找出对应于每个IP地址的唯一前缀,利用这些唯一前缀来构造二叉树,并在二叉树的叶节点内存放对应的子网掩码
这样构建好二叉树之后,每当过来一个目标IP地址,就遍历二叉树,如果能够到达一个叶节点,说明唯一前缀匹配,再用存放在叶节点中的子网掩码与目标地址与运算,结果仍然匹配则找到了对应的表项,转发即可。这里要注意,唯一前缀匹配并不等于网络前缀匹配,只有后者才代表可以转发。
在这里插入图片描述

划分子网和构造超网这里确实很抽象,但是实际做题并没有这么抽象,把握好划分或者聚合的方法,理顺明白关系,题目并不难。

4.3 路由选择协议

路由选择协议的核心就是路由算法,即需要用什么样的算法来得到路由表中的表项

根据能否根据网络的通信量或拓扑自适应地进行调整变化来划分,路由算法分为两类:静态路由算法和动态路由算法。
静态路由算法指的是网络管理员手工配置的路由信息,网络的拓扑发生变化时,需要网络管理员来手动调整,所以这种算法比较笨重,一方面需要人工调整,另一方面网络管理员也不能全面的了解实时的网络信息,所以只能用在网络规模很小的网络。适用于高度安全的军事系统和较小的商业网络。
动态路由算法指的是路由器上的路由表项是通过相互连接的路由器之间彼此交换信息,然后按照一定的算法优化出来的,这些信息随时更新,以适应网络的变化。算法复杂,会增加网络的负担。常用的动态路由算法分为距离-向量路由算法和链路状态路由算法。

静态路由算法不是考点,重点是两种动态路由算法。
距离-向量路由算法中,所有节点定期将整个路由选择表传送给相邻的节点,最典型的就是RIP协议。而链路状态协议则是要求每个参与该算法的结点都具有完全的网络拓扑信息,洪范给自治系统中的所有路由器,最典型的是OSPF协议。这两个协议会在下面详细总结。

当网络的规模继续扩大时,路由器的路由表也会成比例扩大,这时就不能像小规模的网络那样规划,采用的方式是采用层次路由,将整个互联网划分为许多小的自治系统,每个自治系统根据自己需要选择自己内部的路由选择协议,而采用特殊的协议来实现自治系统之间的通信差异。这种协议分为两类,自治系统内部使用的路由选择协议称为内部网关协议(IGP),而自治系统之间使用的路由选择协议则称为外部网关协议(EGP),外部网关协议的典型是BGP协议,而RIP和OSPF都属于内部网关协议。

下面介绍一下这几种路由协议,在路由协议之前,需要先搞明白什么是自治系统。自治系统是单一技术管理下的一组路由器,这些路由器使用一种AS内部的路由选择协议和共同的度量来确定分组在AS内的路由,同时使用一种AS之间的路由选择协议来确定分组在AS之间的路由。用人话来说就是一个自治系统就是一堆路由器,这些路由器内部按照一种协议来通信,和其它的自治系统通信则一致采用一种协议。可见自治系统就是对全球互联网的一种划分,中国的自治系统全球第六,和美帝还是有差距的。
在这里插入图片描述
自治系统内部采用的协议称为内部网关协议,最典型的就是RIP和OSPF。
RIP协议是最先得到广泛应用的协议,是一种分布式的基于距离向量的路由选择协议,最大优点就是简单。
RIP协议做出了以下的规定:
在这里插入图片描述
从上述规定中可以发现,RIP仅仅将距离作为唯一的标准进行选择,除此之外不作考虑,定时与相邻的路由器交换自己全部的路由信息
一个路由器刚刚加入网络时,路由表是空的,只知道和路由器直接相连的几个网络的距离,之后和相邻的路由器交换并更新路由信息,经过若干次的更新,最终所有路由器都会知道到达所在自治系统内的任何一个的网络的最短距离和下一跳地址。
更新路由表主要根据下面的方式:
在这里插入图片描述
这个更新算法并不难,但是由于算法存在的一些不足,导致RIP协议会出现满收敛的情况。
假设有下面的网络结构,如果R1到网1的链路出现了故障,R1现在无法到达网1,所以R1的路由器会将自己的路由表中到达网1的距离设置为16表示不可达,但是这个消息并不是立即告诉R2,而是等待最长30S时间才告诉R2,而如果发送之前R2先告诉了R1自己的路由表,那么按照距离向量算法,R1会认为可以经过R2到达网1,所以将距离修改为3,但是实际上是不可达的,之后R1将自己的路由表再发送给R2。所以采用RIP协议后,故障信息会传播的很慢,即坏消息传的慢
在这里插入图片描述
总而言之,RIP协议简单、开销小而且收敛过程较快,但是限制了网络的规模,一旦距离超过16就认为不可达,而且由于交换的是全部的路由信息,所以一旦网络规模变大,开销也会变大,另外网络出现故障时还会出现慢收敛现象,好消息传的快坏消息传的慢。

RIP是应用层协议,采用UDP传递数据,选择的路径不一定是时间最短的,但一定是具有最少路由器的路径,其报文格式如下:
在这里插入图片描述
RIP报文由首部和路由部分两部分组成,由于使用UDP进行传输,所以作为数据部分封装在UDP报文中。首部一共四字节,其中第一个字节表示命令,即报文的意义,说明是哪一类的RIP报文。第二个字节为版本,填写RIP的版本号,之后两字节全为零,用来保证四字节的对齐。
路由部分实际上就是许多路由表项的重复,一个路由信息对应路由表中的一个表项,可以重复出现最多25个。其中,地址族标识符用来表示所使用的地址协议,路由标记填入自治系统号,剩下的四项就是老生常谈的了。一个RIP报文最多包括25个路由,超过的话就只能分片。
RIP的更新版本RIP2还增加了鉴别的功能,如果采用鉴别,就将原来第一个路由信息的位置用作鉴别,此时地址族标识符全填1,路由标记则写入鉴别类型,剩下的16字节为鉴别信息。由于占用了一个路由信息,所以此时只可以传送24个路由信息。

OSPF则是分布式链路状态路由算法的典型代表,相比于RIP,OSPF增加了下面的一些区别:
在这里插入图片描述
可见OSPF实际上是当链路状态发生变化时,在区域内洪范相邻链路的状态。除此之外,OSPF还有下面的一些特点:
在这里插入图片描述
由于各个路由器之间频繁交换链路状态信息,所有路由器最终都会建立一个全网一致的链路状态数据库,即全网的拓扑结构图,之后按照这个结构图,采用迪杰斯特拉算法得到最优路径。由于链路状态是一个复合的概念,所以权值并不仅限于距离,可以综合考虑延迟、负载等状况。
为了让OSPF适用于更大的范围,OSPF还将自治系统划分为更小的区域,之后洪范的范围就局限在区域内,从而减少了整个网络上的通信量,而一个区域的路由器也只知道本路由器的完整网络拓扑
划分区域后,处在上层的称为主干区域,用来连接下层区域,从其他区域来的信息都通过区域边界路由器进行概括,每个区域至少有一个区域边界路由器。主干区域的路由器称为主干路由器,主干路由器可以同时作为边界路由器。除此之外在自治系统边缘还需要有专门的路由器与自治系统外的路由器交换信息,称为自治系统边界路由器。
在这里插入图片描述
OSPF直接使用IP数据报传送,作为IP数据报的数据部分进行传送,分组的格式如下:
在这里插入图片描述
其中,路由器标识符标志发送该分组的路由器的接口的IP地址,区域标识符填写属于的区域的标识符,鉴别类型处如果需要鉴别就填1,此时在后面的鉴别部分写上8个字符的鉴别口令。
OSPF主要有五种:
在这里插入图片描述
当一个路由器刚开始工作时,只能通过问候分组得知有哪些相邻的路由器以及到这些路由器的代价,之后这些邻站就给新路由器发送数据库描述分组,不断互相描述自己的路由表,但并不是传送完整的这一条路由信息,之后路由器缺哪一条,就向对应的路由器发送链路状态请求分组,之后回送链路状态更新分组,更新完毕后发送链路状态确认信息。
在这里插入图片描述
当网络范围继续扩大时,采用的就是不同自治系统之间交流用的BGP协议。这是一种外部网关协议,用于互联网的网关之间。
BGP使用的互联网特别大,在自治系统之间寻找路由选择很困难,而且找到最佳路由很不现实,此外,各个自治系统的协议也不一定一样,需要考虑有关的策略。基于此,BGP只能力求寻找到一条能到达目的网络且比较好的路由,而不是寻找最佳路由。即能到但不一定最好。BGP采用路径向量选择协议,采用运输层的TCP协议
在这里插入图片描述

BGP的工作主要是借助BGP发言人,BGP发言人是自治系统管理员提前选择的一个路由器,由它来和其它BGP发言人交换信息,先建立TCP连接,之后建立BGP会话进行信息交换。所以BGP交换信息的节点数目是自治系统的数量级,比自治系统中的网络少的多,而且BGP发言人也是很少的,所以自治系统之间的路由选择不至于太复杂。
在这里插入图片描述
BGP作为TCP的数据部分进行传输,其格式如下:
在这里插入图片描述
其中标记长16个字节,用来鉴别收到的报文,之后的长度用于记录包括通用首部在内的总长度,最小值是19,最大值是4096,类型字段只有1-4四个值,分别对应四种BGP报文类型:
在这里插入图片描述
三种路由选择协议最好对比着去理解,最重要的是RIP和OSPF,BGP由于涉及范围太大,所以知识点相对较少。
在这里插入图片描述

4.4 IPv6

IPv6的提出,主要是为了解决IP地址不够的问题,增加长度后基本可以满足可预见的未来的需要,从而在根本上解决了地址耗尽问题。

IPv6主要特点如下:
在这里插入图片描述
修改后的IPv6分组结构也发生了变化:
在这里插入图片描述
IPv6的数据报由两部分组成,即基本首部和后面的有效载荷,后者也称为净负荷,有效载荷允许有零个或者多个扩展首部,再后面是数据部分,不一样的是扩展首部并不属于首部。
流量类型也称通信量类,对应IPv4中的区分服务。
流标号是一个新机制,所谓流指的是互联网络上从特定源点到特定终点的一系列数据报,而在这个流所经过的路径上的路由器都保证指明的服务质量。对于同一个流的数据报都具有同样的流标号。
有效载荷指的是除了基本首部之外的字节数
下一个首部占8位,相当于IPv4的可选字段,没有扩展首部时用于指明上层采用的协议。如果采用了扩展首部,则这一字段用于标识后面第一个扩展首部的类型。并且在扩展首部中第一个字段都是下一个首部,用来再指向下一个扩展首部的类型,而在最后一个扩展首部中则指明上层的协议。

IPv6的目的地址可以使单播、多播和任播中的任意一个,任播是新增的功能,指的是终点是一组计算机,但数据只交付给其中的一个,通常是距离最近的一个。

由于地址变长了,表示方法也发生了相应的变化,可以使用冒号十六进制,每个十六位的值用16进制表示,各值用冒号分割。还增添了零压缩技术,连续的一串0可以用两个冒号代替,但一个地址中只允许有一个零压缩。

保留的地址也做出了相应的改动
在这里插入图片描述
由于一些路由器还不支持IPv6,所以引申出了一些过渡方法。过渡方法主要有两类:双协议栈和隧道技术。前者指的是一部分主机和路由含有两个协议栈,有两个IP地址,根据需要采用合适的地址,但是这种方法会导致一些字段不可逆的丢失。后者则是利用隧道技术,将IPv6的数据报作为IPv4的数据部分,封装后在不支持IPv6的网络里面传递,之后拆开得到的就是IPv6的分组。

4.5 IP多播

IP多播主要是用于视频点播和视频会议这种的多媒体应用,虽然可以使用多个单播来仿真组播,但是这样开销过大,实际上在一对多的通信中,多播可以大大节省网络资源。多播使用的是UDP,将报文同时送往多个接收者。
在这里插入图片描述
能够运行多播协议的路由器称为多播路由器,多播时采用的地址为多播IP地址,在IPv4中,这类地址从D类地址分配,需要注意的是,这个多播地址是只用于目的地址的,而源地址不能填多播地址。
IP多播可以分为两种:只在本局域网上进行硬件多播和在互联网范围进行多播。
在局域网上进行硬件多播的主要问题是地址之间的关系。互联网号码指派管理局拥有一个以太网地址号的一半,即有23位的组合可以用作多播。所以我们需要的就是将D类的多播地址与以太网硬件地址之间建立联系。而一个D类地址由32位,扣去固定的前4位,所以还会多出来5位。地址选择时采用的方法是忽略这5位,因此受到多播数据报的主机还要在IP层利用软件进行过滤。在因特网上进行组播的最后阶段,还是要在局域网上用硬件组播交付给组播组所在的所有成员。
在这里插入图片描述
在互联网上进行多播则更加复杂,此时需要IGMP与多播路由算法。
IGMP即网际组管理协议,用于让连接在本地局域网上的多播路由器知道本局域网里是否有主机参加或者退出了某个多播组。仅有IGMP是不够的,还需要互联网上的多播路由器协同工作,以便把数据报用最小的代价传给所有组成人员,这就需要多播路由选择协议。
与ICMP相同,IGMP也使用IP数据报传递报文,也向IP提供服务属于整个网际协议IP的组成部分。概念上说IGMP分为两部分,首先当某台主机加入新的多播组时该主机要想多播组的多播地址发送一个IGMP报文声明自己要加入多播组,本地的多播路由器在收到IGMP报文后还要利用多播路由选择协议把这种组员关系转发给互联网上的其他多播路由器。之后本地的多播路由器会周期性地探寻本地局域网上的主机,以便知道这些主机是否还继续是组的成员,只要有一台主机对某个组响应,就认为这个组是活跃的,一旦几次探寻后都无反应则认为主机已经离开了这个组。
多播路由选择协议实际上就是要找出以源主机为根节点的多播转发树,不难看出不同的多播组对应于不同的多播转发树,即使是同一个多播组不同的源点也会有不同的多播转发树。现有的多播路由选择协议主要利用下面的三种方法:
①洪泛与剪枝
适用于较小的多播组,主要是在收到一个多播数据报时,先检查数据报是否是从源点经过最短路径传过来的,如果是则向其他方向转发刚才收到的多播数据报,否则丢弃,如果本路由器上有好几个相邻路由器都处在最短路径上,那么就选择IP地址最小的。此外,如果发现下游树枝已经没有该多播组的成员,就进行剪枝。
②隧道技术
适用于多播组在地理位置上很分散的情况,将多播数据报进行封装,作为单播数据报,通过隧道穿过不支持多播的网络,到达支持多播的网络之后再拆开并恢复为多播数据报。
③基于核心的发现技术
每一个多播组指定一个核心路由器,所有信息经由这个核心路由器进行转发。

4.6 虚拟专用网和MPLS

采用了本地IP地址的互联网络称为专用互联网,或者直接叫专用网,这些专用地址仅仅在专用网内部使用,即使全球有很多重复的这种地址也不会发生冲突。对于一些地理分布很广的网络,要想用到专用网的方便之处,就需要用到虚拟专用网,即VPN,可以在效果上和真正的专用网一样。VPN主要用的是隧道技术,和前面的隧道技术一样,也是封装后利用互联网进行传输,到达后再拆封。由于专用网的安全性要求,封装过程还需要加密。此外,一些大公司还会使用远程接入VPN,使得员工即使在外地也可以访问公司主机。

为了加快转发速度,提出了多协议标记交换MPLS,这种协议给每个分组携带一个标记,当分组经过标机交换路由器时,就可以利用标记来转发,而不需要查找路由表,这种方式并没有取代IP,而只是作为一种IP增强技术
在这种技术中,我们将一组支持MPLS的路由器称为MPLS域。在进入MPLS域的时候给IP数据报打上标记,在域内就可以对打上标记的数据报进行硬件转发,打上的标记仅在交换路由器之间才有意义,每到达一个交换路由器,就对这个标记进行更换,将入标记更换为出标记。当离开MPLS域的时候就删除标记。
MPLS有一个很重要的概念就是转发等价类,即路由器按照同样的方式对待一类的IP数据报。其中同样方式对待指的是从同样接口转发到同样的下一跳地址,并且具有同样服务类别和同样丢弃优先级。
在这里插入图片描述
就比如上面的例子,采用MPLS,让从H2来的走下面的路线,让H1来的走上面的路线,从而实现均衡负载。
从层次的角度来看,MPLS处在第二层和第三层之间,所谓打上标记,就是在以太网帧和IP数据报之间插入一个MPLS首部,首部格式如下:
在这里插入图片描述
MPLS首部一共有四个字段,其中标记值占20位,用于记录具体的标记值。实验占三位,仅作保留而没什么用,S占1位,在有标记栈时使用,TTL占8位,主要是用来防止MPLS分组在MPLS域内绕圈子。

4.7网络层的设备

网络层的设备主要就是路由器。路由器是一种具有多个输入输出端口的专用计算机,其任务是连接不同的网络并完成路由转发。
发送时,路由器先检查目标主机是否是处在自己直连的网络上,如果是则进行直接交付,否则按照路由转发表将数据报转发给下一个路由器,即间接交付。
从结构上来看,路由器由路由选择和分组转发两部分组成。从模型的角度来看,路由器时网络层设备,实现了物理层、数据链路层和网络层三层模型。
路由计算和分组转发是两大基本功能,其中分组转发主要看的是路由表,而路由表是由路由选择算法得出的,标准的路由表含有四个项目:目的网络、子网掩码、下一条地址和接口。转发表根据路由表得出,其表项与路由表项有直接的对应关系。
需要注意的是转发和路由选择的关系。转发一个路由器的任务,根据自己的转发表将收到的数据报发送到合适的端口。而路由选择是许多路由器协同工作的结果,需要按照路由算法,从各个相邻路由器那里得到网络拓扑的变化情况,从而动态改变选择的路由,并构造路由表。

至此整个网络层就算基本完成了,当初大三学网络的时候,一直设想的就是从本地电脑发送信息到很远的一台电脑的过程,用这个过程就可以串起来整个的网络层。现在也做这样的假设,首先从本地发送之后,先检测目的主机是否是本局域网上的主机,这个过程使用的是ARP协议,如果是本局域网上的就直接发送,否则发送给本地路由器,到达路由器后,路由器根据子网掩码得到网络号,然后查自己的路由表,路由表是由RIP或者OSPF得到的,对着目标网络找自己的表项,如果有对应表项就转发到下一条,否则考虑特定主机路由或者默认路由,将目的的下一条地址送入ARP,之后从对应的端口发送出去,我们假设的是到很远处的一台主机,所以是跨区域跨AS的,所以这个数据报就一直向上传,经过区域边界路由器,最后到达自治系统边界路由器,根据BGP发言人的路由信息,沿着一条可行的路线跨自治系统传送,最后到达目的网络。

典型题

在这里插入图片描述
题目挖的坑在可能的最小的子网,这就表明要想获得最小的子网,就应该采用变长子网划分,按照变长子网的划分方法,最小的子网就是第五个子网,可分配的地址数为2的8次方-2=254,B项正确。具体划分如下:
在这里插入图片描述
在这里插入图片描述
这道题并不难,很适合作为分片的例题。根据题目,数据报长度为4000B,且采用定长头部,数据部分就3980B,而MTU为1500B,所以分片后每个分组的数据部分的长度为1480B,两个分组后,剩下3980-1480-1480=1020B,再确定片偏移,显然第一个片的片偏移为0,第二个片的片偏移为第一个的长度,即1480/8=185,第三片的片偏移为前两个的长度,即370。至于MF位则没有什么难度。这道题题目坑还没有深挖,如果设计让片偏移字段不是8B的倍数,那么还需要调整分片的长度。
在这里插入图片描述
这样的题目确实没见过,题干里写的是这一大串十六进制数,是一个帧的前64个字节,显然里面是以太网帧和IP分组的组合,这道题目的坑,就在于不能按照常规的格式来直接拆这个帧,如果按照先MAC帧的首部再IP分组的首部,那么00 1d 72 98 1d fc是MAC的目的地址,00 00 5e 00 01 01是MAC的目的地址,这可以完成第一问,但是后面两个字节是长度/协议,这个字段的值为88 64,显然这里表示的是协议而不是长度。如果从这里开始认为是IP分组的首部,那么后面就做不了了,坑就在于,你需要用题目给的A的IP地址,转换成16进制表示后,从这一大串数据中,用A的IP地址的16进制找出所在位置,再倒推找到IP分组首部的总长度和首部长度部分,这样倒着找之后就会发现在两个首部之间的部分是解释不了的,也不清楚是思路错了还是题目不严谨。搞明白这一点之后剩下的就不难了,用总长度减去首部长度得到的就是数据量,第三问则按照分片进行即可。
在这里插入图片描述
这是课本课后题的一道子网划分,可以作为根据主机数目划分的例题,不严谨的地方在于地址的起始位置,全0全1的主机号是不能分配的,所以起始地址需要有所调整。
在这里插入图片描述
在这里插入图片描述
这道题也是课本上的课后题,考察的是CIDR下变长子网划分,根据子网数目进行分配,从大到小,注意全0全1不能分配。
在这里插入图片描述
这道题主要考察RIP协议的更新过程,对于路由器R2,更新前保存的到达201.1.2.0/25的距离为2,即从R3到达目的网络。而现在R3认为目标网络不可达,即距离为16。根据题意,R3对R2通报,但是并没有R1通报,所以更新之后,R2会认为通过R1可以到达目的网络,此时距离为3,即R2-R1-R3-目的网络。
在这里插入图片描述
题目考查广播域和冲突域的划分,广播域没什么好说的,路由器分割广播域,左右各一个,共两个广播域。坑点在于冲突域,左侧集线器不能分割冲突域,所以属于同一个冲突域,而右侧是交换机,可以分割冲突域,下面的五台计算机各自一个,容易忽略的是交换机到路由器的这个域,所以一共是七个冲突域。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Ayakanoinu

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

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

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

打赏作者

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

抵扣说明:

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

余额充值