参考教程:4.6.1 路由选择协议概述_哔哩哔哩_bilibili
(1)路由选择可分为静态路由选择和动态路由选择:
①静态路由选择是指采用人工配置的方式给路由器添加网络路由、默认路由、特定主机路由、黑洞路由等路由信息。对于路由器自身而言,静态路由选择简单、开销小,但不能及时适应网络状态(流量、拓扑等)的变化。因此,静态路由选择一般只在小规模网络中采用。
②动态路由选择是指路由器通过路由选择协议自动获取路由信息。
对于路由器自身而言,动态路由选择比较复杂、开销大,但能较好地适应网络状态(流量、拓扑等)的变化。因此,动态路由选择适用于大规模网络。
(2)因特网是全球最大的互联网络,它所采用的路由选择协议具有以下三个主要特点:
①自适应:因特网采用的是动态路由选择,能较好地适应网络状态的变化。
②分布式:因特网中的各路由器通过相互间的信息交互共同完成路由信息的获取和更新。
③分层次:将整个因特网划分为许多较小的自治系统AS。在自治系统内部和自治系统外部采用不同类别的路由选择协议分别进行路由选择。
(3)因特网采用的分层次路由选择协议:
①下图所示是因特网中很小的一部分,可以将左边的网络和路由器划归到一个自治系统,将右边的网络和路由器划归到另一个自治系统。自治系统之间的路由选择简称为域间路由选择,自治系统内部的路由选择简称为域内路由选择。
②域间路由选择使用外部网关协议EGP(又称为外部路由协议ERP)这个类别的路由选择协议,域内路由选择使用内部网关协议IGP(又称为内部路由协议IRP)这个类别的路由选择协议。(EGP和IGP只是路由选择协议的分类名称,而不是具体的路由选择协议)
③在一个自治系统内部使用的具体的内部网关协议与因特网中其它自治系统中选用何种内部网关协议无关。例如在左边的自治系统内部使用的内部网关协议为路由信息协议RIP,在右边的自治系统内部使用的内部网关协议为开放式最短路径优先OSPF协议,自治系统之间使用的外部网关协议为边界网关协议BGP。
(4)常见的路由选择协议分为内部网关协议和外部部网关协议两大类:
①内部网关协议包括路由信息协议RIP、内部网关路由协议IGRP、增强型内部网关路由协议EIGRP、开放式最短路径优先OSPF、中间系统到中间系统IS-IS,该大类协议用于自治系统内部的路由选择。
[1]RIP和IGRP是基于距离向量的。RIP是最早应用在因特网上的路由选择协议,IGRP是思科早期私有的协议,现在已被EIGRP取代。
[2]OSPF和IS-IS是基于链路状态的。OSPF在各种网络中广泛使用,集成化的IS-IS是ISP骨平网上最常用的内部网关协议。
[3]EIGRP是思科私有的,用来取代IGRP的混合型路由协议(结合距离向量和链路状态)。
②外部网关协议中最常见的仅有边界网关协议BGP,该大类协议用于自治系统之间的路由选择。
(5)路由选择协议是在路由器上运行的,路由器是一种具有多个输入端口和输出端口的专用计算机,其任务是转发分组。整个路由器结构可划分为两大部分:
①路由选择部分的核心构件是路由选择处理机,它的任务是根据所使用的路由选择协议周期性地与其它路由器进行路由信息的交互以更新路由表。
②分组转发部分由三部分构成,分别是交换结构、一组输入端口和一组输出端口。
[1]路由器的端口一般都同时具有输入和输出的功能。
[2]路由器的各端口还应具有输入缓冲区和输出缓冲区,输入缓冲区用来暂存新进入路由器但还来不及处理的分组,输出缓冲区用来暂存已经处理完毕但还来不及发送的分组。
(6)路由器的工作过程:
①信号从某个输入端口进入路由器,物理层将信号转换成比特流后送交数据链路层处理,数据链路层从比特流中识别出帧,去掉帧头和帧尾后送交网络层处理:
[1]如果送交网络层的分组是普通待转发的数据分组,则根据分组首部中的目的地址进行查表转发:
#1 若找不到匹配的转发条目,则丢弃该分组。
#2 若找到匹配的转发条目,则按照条目中所指示的端口进行转发。网络层更新数据分组首部中某些字段的值,例如将数据分组的生存时间减1,然后送交数据链路层进行封装。数据链路层将数据分组封装成帧,送交物理层处理。物理层将帧看作是比特流,将其变换成相应的电信号进行发送。
[2]如果送交网络层的分组是路由器之间交换路由信息的路由报文,则把这种分组送交路由选择处理机,路由选择处理机根据分组的内容来更新自己的路由表。
②路由选择处理机除了处理收到的路由报文外,还会周期性地给其它路由器发送自己所知道的路由信息。
(7)路由表和转发表:
①路由表一般仅包含从目的网络到下一跳的映射。路由表需要对网络拓扑变化的计算最优化。
②转发表是从路由表中得出的。转发表的结构应当使查找过程最优化。
③值得注意的是,为了简化问题的分析,在之前的介绍中没有区分路由表和转发表,在之后的介绍中仍然不进行严格区分。
(1)路由信息协议RIP(Routing Information Protocol)是内部网关协议IGP中最先得到广泛使用的协议之一,其相关标准文档为RFC 1058。(并不是所有厂商都按照标准文档的规定实现RIP,不过这不影响RIP的正常运行)
(2)RIP要求自治系统AS内的每个路由器都要维护从它自己到AS内其他每一个网络的距离记录,这是一组距离,称为“距离向量D-V(Distance-Vector)”。RIP使用跳数(Hop Count)作为度量(Metric)来衡量到达目的网络的距离。
①RIP将路由器到直连网络的距离定义为1,下图所示的路由器R1到其直连网络N1的距离为1。
②RIP将路由器到非直连网络的距离定义为所经过的路由器数加1,下图所示的路由器R3到其非直连网络N2的距离为2。
③RIP允许-一条路径最多只能包含15个路由器,“距离”等于16时相当于不可达,因此RIP只适用于小型互联网。
(3)RIP认为好的路由就是“距离短”的路由,也就是所通过路由器数量最少的路由。
①如下图所示,R1到R5可以走上下两条路由,RIP认为R1到R5的好路由是途中只经过一个路由器R4的路由,尽管这条路由上各段链路的带宽都非常小。
②如下图所示,R1到R6可以走上下两条路由,两条路由等价,当到达同一目的网络有多条“距离相等”的路由时,RIP可以进行等价负载均衡,也就是将通信量均衡地分布到多条等价的路由上。
(4)RIP包含以下三个要点:
①和谁交换信息:仅和相邻路由器交换信息。下图中R1与R2互为相邻路由器,因为它们是直连的,中间没有其它路由器,同理,R2与R3也互为相邻路由器;R1和R3不互为相邻路由器,因为它们之间还存在其它路由器。
②交换什么信息:交换的是路由器自己的路由表。
③何时交换信息:周期性交换(例如每30秒发送一次RIP更新报文)。
(5)RIP的基本工作过程:
①路由器刚开始工作时,只知道自己到直连网络的距离为1。下图所示是路由器刚开始工作时各自的路由表,其中包含的路由条目都是到达各自直连网络的信息,其距离都是1。
②之后,每个路由器仅和相邻路由器周期性地交换并更新路由信息。如下图所示,R1和R2互为相邻路由器,R1和R3互为相邻路由器,R2和R3互为相邻路由器,R2和R4互为相邻路由器,R3和R4互为相邻路由器,相邻路由器之间周期性地交换并更新路由信息。
③若干次交换和更新后,每个路由器都知道到达本AS内各网络的最短距离和下一跳地址,称为收敛。
(6)RIP的路由条目的更新过程:
①如下图所示,路由器C和D互为相邻路由器,它们之间周期性地交换并更新路由信息。对于路由器D,路由器C的路由表中到达各目的网络的下一跳都记为问号,理解为路由器D并不需要关心路由器C的这部分内容。
②假设路由器C的RIP更新报文发送周期到了,则路由器C将自己路由表中的相关路由信息封装到RIP更新报文中发送给路由器D,可以理解为路由器C将自己的路由表发送给路由器D。路由器D收到路由器C的路由表后对其进行改造,将到达各目的网络的下一跳都改为C,距离都增加1,接着路由器D可以根据改造好的路由表更新自己先前的路由表。
[1]路由器D原来到达网络N2的距离是2,下一跳经过路由器C的转发,现在路由器D得知到达网络N2仍然需要经过C的转发,不过距离变为了5,也就是说路由器C与网络N2之间的网络拓扑发生了变化,于是将自己这条路由条目中的距离更新为5。(到达同一个目的网络,还是相同的下一跳,更新最新消息)
[2]路由器D原来不知道网络N3的存在,现在路由器D得知可以通过路由器C到达网络N3,于是将该路由条目添加到自己的路由表中。(发现新的网络信息,添加新记录)
[3]路由器D原来到达网络N6的距离是8,下一跳经过路由器F的转发,现在路由器D得知到达网络N6如果通过C来转发,距离可缩短为5,于是将自己这条路由条目中的距离修改为5,下一跳修改为C。(到达同一个目的网络,但是下一跳换为另一个路由器后距离变短,修改原记录)
[4]路由器D原来到达网络N8的距离是4,下一跳经过路由器E的转发,现在路由器D得知到达网络N8还可以通过C来转发,而且距离也为4(等价负载均衡),两条路径的距离相等,于是将该路由条目也添加到自己的路由表中。(到达同一个目的网络,下一跳换为另一个路由器后距离不变,添加新记录)
[5]路由器D原来到达网络N9的距离是4,下一跳经过路由器F的转发,现在路由器D得知到达网络N9如果通过C来转发,距离会增长至6,于是不使用这条路由条目来更新自己的路由表。(到达同一个目的网络,但是下一跳换为另一个路由器后距离变长,保持原记录)
(7)RIP存在“坏消息传播得慢”的问题:
①如下图所示,假设R1到达其直连网络N1的链路出现了故障,当R1检测出该故障后,R1会将到达N1的路由条目中的距离修改为16,表示N1不可达,并等待RIP更新周期到时后发送该路由信息给R2,而此时R2的路由表中关于N1的路由条目仍然是先前通过RIP协议获取到的,也就是到达N1的距离为2,下一跳通过R1转发。
[1]假设R2的RIP更新周期先到时,也就是R2的这条路由信息先到达R1,而R1的这条路由信息后到达R2。当R1收到R2的这条路由信息后,就会被该“谣言”误导,认为可以通过R2到达N1,距离为3,并在自己的RIP更新周期到时后将这条路由信息发送给R2。当R2收到R1的这条路由信息后,同样会被该“谣言”误导,认为可以通过R1到达N1,距离为4,并在自己的RIP更新周期到时后将这条路由信息发送给R2。
[2]以此往复,当R1和R2的路由表中到达N1的路由条目中的距离都增加到16后,R1和R2才知道N1不可达(收敛),在R1和R2“不明真相”的这段时间里,它们之间会出现路由环路,时间长达数分钟。
②“坏消息传播得慢”又称为路由环路或距离无穷计数问题,这是距离向量算法的一个固有问题,可以采取多种措施减少(不能避免)出现该问题的概率或减小该问题带来的危害,例如:
[1]限制最大路径距离为15(16表示不可达)。
[2]当路由表发生变化时就立即发送更新报文(即“触发更新”),而不仅是周期性发送。
[3]让路由器记录收到某特定路由信息的接口,而不让同一路由信息再通过此接口向反方向传送(即“水平分割”)。
(1)开放最短路径优先OSPF(Open Shortest Path First)是为克服RIP的缺点,在1989年开发出来的。
①“开放”表明OSPF协议不是受某一家厂商控制,而是公开发表的。
②“最短路径优先”是因为使用了Dijkstra提出的最短路径算法SPF。
(2)OSPF相比较于RIP的优势:
①OSPF采用SPF算法计算路由,从算法上保证了不会产生路由环路。
②OSPF不限制网络规模,更新效率高,收敛速度快。
③OSPF是基于链路状态的,而不像RIP那样是基于距离向量的,链路状态是指本路由器都和哪些路由器相邻,以及相应链路的“代价”(cost),“代价”用来表示费用、距离、时延、带宽,等等,这些都由网络管理人员来决定的。
(3)OSPF相邻路由器之间通过交互问候(Hello)分组,建立和维护邻居关系。
①问候分组需要封装在IP数据报中发送,发往组播地址224.0.0.5。IP数据报首部中的协议号字段的取值应为89,表明IP数据报的数据载荷为OSPF分组。
②问候分组的发送周期为10秒。
③若40秒后仍未收到来自邻居路由器的问候分组,则认为该邻居路由器不可达。每个路由器都会建立一张下图所示的邻居表,当路由器收到来自邻居的问候分组时,邻居表中相应邻居路由器的死亡”倒计时重置为40秒;当邻居表中的“死亡”倒计时归零,则认为相应邻居路由器不可达。
(4)使用OSPF的每个路由器都会产生链路状态通告LSA(Link State Advertisement),其中包含两类内容:一类是直连网络的链路状态信息,一类是邻居路由器的链路状态信息。
①如下图所示,假设N1是路由器R4的直连网络,则R4的链路状态通告应包含R4与该直连网络的链路状态信息,还应包含其邻居路由器R1的链路状态信息以及其邻居路由器R3的链路状态信息。
②链路状态通告被封装在链路状态更新分组LSU中,采用洪泛法发送。收到链路状态更新分组的路由器将从自己其他所有接口转发该分组,也就是进行洪泛转发。这样,自治系统中每个路由器所发送的封装有链路状态通告的链路状态更新分组会传递给系统中其它所有路由器。
(5)使用OSPF的每个路由器都有一个链路状态数据库LSDB,用于存储LSA。
①通过各路由器洪泛发送封装有自己链路状态通告LSA的链路状态更新分组LSU,各路由器的链路状态数据库LSDB最终将达到一致。
②下图所示是路由器R2的链路状态数据库,其中记录有系统中各路由器的链路状态通告。
(6)使用OSPF的各路由器基于LSDB进行最短路径优先SPF计算,构建出各自到达其它各路由器的最短路径,即构建各自的路由表。
①如下图所示,各链路旁的数字表示“代价”。
②通过各路由器洪泛发送封装有自己链路状态通告的链路状态更新分组,各路由器最终会得出相同的链路状态数据库。
③由链路状态数据库可以得出带权有向图,对该图进行基于Diikstra的最短路径优先算法就可以得出以各路由器为根的最短路径。
(7)OSPF有以下五种分组类型:
①类型1:问候(Hello)分组,用来发现和维护邻居路由器的可达性。
②类型2:数据库描述(Database Description)分组,向邻居路由器给出自己的链路状态数据库中的所有链路状态项目的摘要信息。
③类型3:链路状态请求(Link State Request)分组,向邻居路由器请求发送某些链路状态项目的详细信息。
④类型4:链路状态更新(Link State Update)分组,路由器使用这种分组将其链路状态进行洪泛发送,即用洪泛法对全网更新链路状态。
⑤类型5:链路状态确认(Link State Acknowledgment)分组,这是对链路状态更新分组的确认分组。
(8)OSPF的基本工作过程:
①相邻路由器之间周期性发送问候分组,以便建立和维护邻居关系。
②建立邻居关系后,给邻居路由器发送数据库描述分组,也就是将自己的链路状态数据库中的所有链路状态项目的摘要信息发送给邻居路由器。
③如下图所示,R1收到R2的数据库描述分组后,发现自己缺少其中的某些链路状态项目,于是就给R2发送链路状态请求分组。
④R2收到请求分组后,将R1所缺少的链路状态项目的详细信息封装在链路状态更新分组中发送给R1。
⑤R1收到后R2的状态更新分组后,将这些所缺少的链路状态项目的详细信息添加到自己的链路状态数据库中,并给R2发送链路状态确认分组。
⑥最终,R1和R2的链路状态数据库将达到一致,也就是链路状态数据库达到同步。
⑦每30分钟或链路状态发生变化时,路由器都会发送链路状态更新分组,收到该分组的其他路由器将洪泛转发该分组,并给该路由器发回链路状态确认分组,这又称为新情况下的链路状态数据库同步。
(9)OSPF在多点接入网络中路由器邻居关系的建立:
①当OSPF路由器在多点接入网络中建立邻居关系时,如果不采用其它机制,将会产生大量的多播分组。
②如下图所示,5台路由器连接在同一个多点接入网络中,它们周期性地发送问候分组以建立和维护邻居关系。这些路由器中的任意两个路由器都互为邻居关系,邻居关系的数量为n(n-1)/2,其中n是路由器的数量。这样,每个路由器要向其他n-1个路由器发送问候分组和链路状态更新分组。
③为了减少所发送分组的数量,OSPF采用选举指定路由器DR和备用的指定路由器BDR的方法,所有的非DR/BDR只与DR/BDR建立邻居关系,邻居关系数量降低为2(n-2)+1。
④非DR/BDR之间不能直接交换信息,必须通过DR/BDR进行交换,若DR出现问题,则由BDR顶替DR。
⑤实现DR和BDR的选举并不复杂,无非就是各路由器之间交换一些选举参数,例如路由器优先级、路由器ID、接口IP地址等,然后根据选举规则选出DR和BDR,这与交换机生成树协议选举根交换机类似,这里不再赘述。
(10)为了使OSPF协议能够用于规模很大的网络,OSPF把一个自治系统再划分为若干个更小的范围,叫做区域(Area)。
①下图所示是一个规模很大的网络,将其划分为一个自治系统,在该自治系统内所有路由器都使用OSPF协议。
②OSPF将该自治系统再划分成4个更小的区域,每个区域都有一个32比特的区域标识符,可以用点分十进制表示。
③主干区域的标识符必须为0,也可表示成点分十进制形式的0.0.0.0。主干区域用于连通其它区域,其它区域的标识符不能为0且互不相同。
④每个区域的规模不应太大,一般所包含的路由器不应超过200个。
⑤划分区域的好处就是把利用洪泛法交换链路状态信息的范围局限于每一个区域而不是整个自治系统,这样就减少了整个网络上的通信量。
⑥如果路由器的所有接口都在同一个区域内,则该路由器称为区域内路由器;为了本区域可以和自治系统内的其它区域连通,每个区域都会有一个区域边界路由器,它的一个接口用于连接自身所在区域,另一个接口用于连接主干区域;主干区域内的路由器称为主干路由器,可以把区域边界路由器也看作是主干路由器;在主干区域内还要有一个路由器专门和本自治系统外的其它自治系统交换路由信息,这样的路由器称为自治系统边界路由器。
⑦在本例中,区域边界路由器R3向主干区域发送自己所在区域1的链路状态通告,向自己所在区域发送区域0、2、3的链路状态通告;区域边界路由器R4向主干区域发送自己所在区域2的链路状态通告,向自己所在区域发送区域0、1、3的链路状态通告;区域边界路由器R7向主干区域发送自己所在区域3的链路状态通告,向自己所在区域发送区域0、1、2的链路状态通告。
⑧采用分层次划分区域的方法虽然使交换信息的种类增多了,同时也使OSPF协议更加复杂了,但这样做却能使每一个区域内部交换路由信息的通信量大大减小,因而使OSPF协议能够用于规模很大的自治系统中。
(1)在不同自治系统内,度量路由的“代价”(距离,带宽,费用等)可能不同,因此,对于自治系统之间的路由选择,使用“代价”作为度量来寻找最佳路由是不可行的。
①如下图所示,自治系统AS1将时延作为度量,AS2将距离(也就是跳数)作为度量,AS3将链路带宽作为度量。AS4可以通过AS1、AS3到达AS5,AS4可以通过AS1、AS2到达AS5,当然,到达AS5还可以有其它路径,但是由于没有统一的路由度量,因此导找最佳路由是无意义的。
②自治系统之间的路由选择还必须考虑相关策略(政治,经济,安全等),由此可见,自治系统之间的路由选择协议应当允许使用多种路由选择策略,它们都是由网络管理人员对每一个路由器进行设置的,但这些策略并不是自治系统之间的路由选择协议本身。
(2)基于上述情况,BGP只能是力求寻找一条能够到达目的网络且比较好的路由(不能兜圈子),而并非要寻找一条最佳路由。
(3)在配置BGP时,每个自治系统的管理员要选择至少一个路由器作为该自治系统的“BGP发言人”。
①一般来说两个BGP发言人都是通过一个共享网络连接在一起的,而BGP发言人往往就是BGP边界路由器。
②不同自治系统的BGP发言人要交换路由信息,首先必须建立TCP连接,端口号为179。
[1]在此TCP连接上交换BGP报文以建立BGP会话。
[2]利用BGP会话交换路由信息(例如,增加新的路由,或撤销过时的路由,以及报告出错的情况等)。
[3]使用TCP连接交换路由信息的两个BGP发言人,彼此称为对方的邻站(neighbor)或对等站(peer)。
③BGP发言人除了运行BGP外,还必须运行自己所在自治系统所使用的内部网关协议IGP,例如OSPF或RIP。
④BGP发言人交换网络可达性的信息,也就是要到达某个网络所要经过的一系列自治系统。当BGP发言人互相交换了网络可达性的信息后,各BGP发言人就根据所采用的策略从收到的路由信息中找出到达各自治系统的较好的路由,也就是构造出树形结构、不存在回路的自治系统连通图。
(4)边界网关协议BGP适用于多级结构的因特网。
①下图是一个BGP发言人交换路径向量的例子,自治系统AS2的BGP发言人通知主干网的BGP发言人,“要到达网络N1,N2,N3和N4,可经过AS2”,主干网在收到这个通知后就发出通知“要到达网络N1,N2,N3和N4,可沿路径(AS1,AS2)”。
②自治系统AS3收到(AS1,AS2)这条路径向量信息后,如果AS3自身包含在其中,则不能采用这条路径,否则会兜圈子。
(5)BGP-4中规定的四种报文:
①OPEN(打开)报文:用来与相邻的另一个BGP发言人建立关系,使通信初始化。
②UPDATE(更新)报文:用来通告某一路由的信息,以及列出要撤销的多条路由。
③KEEPALIVE(保活)报文:用来周期性地证实邻站的连通性。
④NOTIFICATION(通知)报文:用来发送检测到的差错。
(6)在BGP协议刚刚运行时,BGP的邻站交换整个BGP路由表。但以后只需要在发生变化时更新有变化的部分,这样做对节省网络带宽和减少路由器的处理开销都有好处。
(7)直接封装RIP、OSPF、BGP报文的协议分别是UDP、IP、TCP。
为了简单起见,下面将IPv4数据报简称为IP数据报,不指出版本号。
(1)下图所示是IP数据报的首部格式,它由20字节的固定部分和最大40字节的可变部分组成。固定部分是指每个IP数据报首部都必须包含的部分,某些IP数据报的首部,除了包含20字节的固定部分外,还包含一些可选的字段来增加IP数据报的功能。
(2)IP数据报的首部常以32个比特为单位进行描述,图中的每一行都由32个比特(也就是4个字节)构成。每个小格子称为字段或者域。每个字段或某些字段的组合用来表达IP协议的相关功能。
(3)版本字段占4个比特,用来表示IP协议的版本。通信双方使用的IP协议的版本必须一致,目前广泛使用的IP协议版本号为4(即IPv4)。
(4)首部长度字段占4个比特,用来表示IP数据报首部的长度,该字段的取值以4字节为单位。
①最小十进制取值为5,表示IP数据报首部只有20字节的固定部分;最大十进制取值为15,表示IP数据报首部包含20字节固定部分和最大40字节可变部分。
②首部长度以4字节为单位,所以IP数据报的首部长度一定是4字节的整数倍。
(5)可选字段的长度从1个字节到40个字节不等,用来支持排错、测量以及安全措施。可选字段增加了IP数据报的功能,但这同时也使得IP数据报的首部长度成为可变的,这就增加了每一个路由器处理IP数据报的开销。实际上可选字段很少被使用。
(6)填充字段用来确保首部长度为4字节的整数倍,使用全0进行填充。由于首部中的可选字段的长度从1个字节到40个字节不等,那么,当20字节的固定部分加上1到40个字节长度不等的可变部分,会造成首部长度不是4字节整数倍时,就用取值为0的填充字段填充相应个字节,以确保P数据报的首部长度是4字节的整数倍。
(7)区分服务字段占8个比特,用来获得更好的服务。
①该字段在旧标准中叫作服务类型,但实际上一直没有被使用过。
②1998年,因特网工程任务组IETF把这个字段改名为区分服务,该字段取不同数值代表提供不同等级的服务质量,只有在使用区分服务时该字段才会其作用,不过一般情况下都不使用该字段。
(8)总长度字段占16个比特,用来表示IP数据报的总长度(首部+数据载荷),最大取值为十进制的65535,以字节为单位。
(9)标识、标志、片偏移三个字段共同用于进行IP数据报分片。网际层封装出的IP数据报,它将在数据链路层封装成帧,每一种数据链路层协议都规定了帧的数据载荷的最大长度(称为最大传输单元MTU),如果某个IP数据报的总长度超过MTU时将无法封装成帧,需要将原IP数据报分片为更小的IP数据报,再将各分片IP数据报封装成帧。
①标识字段占16个比特,属于同一个数据报的各分片数据报应该具有相同的标识。IP软件维持一个计数器,每产生一个数据报,计数器值加1,并将此值赋给标识字段。
②标志字段占3个比特,各比特含义如下:
[1]DF位:表示是否允许分片,1表示不允许分片,0表示允许分片。
[2]MF位:表示本分片后面是否还有分片,1表示“后面还有分片”,0表示“这时最后一个分片”。
[3]保留位:必须设置为0。
③片偏移字段占13个比特,指出分片数据报的数据载荷部分偏移其在原数据报的位置有多少个单位,片偏移以8个字节为单位。
(10)生成时间(TTL)字段占8个比特。
①最初以秒为单位,最大生存周期为255秒,路由器转发IP数据报时,将IP数据报首部中的该字段的值减去IP数据报在本路由器上所耗费的时间,若不为0就转发,否则就丢弃。
②现在以“跳数”为单位,路由器转发IP数据报时,将IP数据报首部中的该字段的值减1,若不为0就转发,否则就丢弃。
(11)协议字段占8个比特,用来指明IP数据报的数据部分是何种协议数据单元。常用的一些协议和相应的协议字段值如下。
协议名称 |
ICMP |
IGMP |
TCP |
UDP |
IPv6 |
OSPF |
协议字段值 |
1 |
2 |
6 |
17 |
41 |
89 |
(12)首部检验和字段占16个比特,用来检测首部在传输过程中是否出现差错,所采用的检错码比CRC检验码简单,称为因特网检验和。
①IP数据报每经过一个路由器,路由器都要重新计算首部检验和,因为某些字段(生存时间、标志片偏移等)的取值可能发生变化。
②由于IP层本身并不提供可靠传输的服务,并且计算首部校验和是一项耗时的操作,因此在IPv6中路由器不再计算首部校验和,从而能更快地转发IP数据报。
(13)源IP地址字段和目的IP地址字段各占32比特,用来填写发送该IP数据报的源主机的IP地址和接收该IP数据报的目的主机的IP地址。
(1)下图所示是一个IP数据报,它由20字节的固定首部和3800字节的数据载荷两部分构成,该IP数据报的总长为3820字节。
(2)假设使用以太网传送该IP数据报,以太网的最大传送单元MTU为1500字节,也就是以太网的数据载荷部分最大为1500字节,无法封装3820字节长的IP数据报,因此需要把该IP数据报分片成几个更小的IP数据报,每个分片长度不能大于1500字节。然后再将每个分片IP数据报封装成一个以太网帧进行传输。
(3)为了更好地描述后续的分片工作,将原IP数据报数据载荷部分的每一个字节都编上号,第一个字节编号为0,最后一个字节编号为3799。
(4)可将原IP数据报的数据载荷分成三个更小的分片:
①第一个分片从0号字节到1399号字节,共1400个字节。
②第二个分片从1400号字节到2799号字节,共1400个字节。
③第三个分片从2800号字节到3799号字节,共1000个字节。
(5)分片结束后,给每个分片重新添加一个首部,使之成为IP数据报。
(6)现在假定分片2的IP数据报经过某个网络时还需要再进行分片,其中一个分片长度为800字节,另一个分片长度为600字节,分片结束后,给每个分片重新添加一个首部,使之成为IP数据报。
(1)假设采用如下图所示的网络拓扑,路由器R2中的第二条路由条目原本应指出IP数据报要到达网络N2,下一跳需要转发给路由器R3,如果在人工配置这条静态路由条目时错将下一跳配置成了R1,这会导致去往网络N2的IP数据报错误地转发给路由器R1。
(2)假设某个IP数据报从网络N1发往网络N2,该IP数据报到达R1后,R1进行查表转发,发现了匹配的路由条目,其下一跳指示转发给R2,于是R1将该IP数据报转发给了R2,该IP数据报到达R2后,R2进行查表转发,发现了匹配的路由条目,其下一跳指示转发给R1,于是R2将该IP数据报转发给了R1。以此往复,很显然存在一个路由环路。
(3)IP数据报在路由环路中兜圈,每经过一个路由器,其生存时间的值减1,当TTL的值减少到0时,该数据报会被路由器丢弃,这样该IP数据报就不会一直浪费网络资源。
(1)为了更有效地转发IP数据报和提高交付成功的机会,在网际层使用了网际控制报文协议CMP(Internet Control Message Protocol)。
(2)主机或路由器使用ICMP来发送差错报告报文和询问报文。
(3)ICMP报文被封装在IP数据报中发送。
(1)终点不可达:
①当路由器或主机不能交付数据报时,就向源点发送终点不可达报文。具体可再根据ICMP的代码字段细分为目的网络不可达、目的主机不可达、目的协议不可达、目的端口不可达、目的网络未知、目的主机未知等13种错误。
②如下图所示,假设主机H1给H2发送IP数据报,H1会将IP数据报发送给路由器R1,由R1帮其转发,若R1的路由表中没有网络N3的路由记录、默认路由以及主机H2的特定主机路由,则R1就不知道如何转发该数据报,只能将其丢弃,并向发送该数据报的源主机H1发送ICMP差错报告报文,其类型为终点不可达。
(2)源点抑制:
①当路由器或主机由于拥塞而丢弃数据报时,就向源点发送源点抑制报文,告知源点应当把数据报的发送速率放慢。
②如下图所示,假设主机H1给H2发送IP数据报,当该数据报传输到路由器R2时,如果R2拥塞(也就是R2比较繁忙),R2会根据自己的丢包策略丢弃了该数据报,并向发送该数据报的源主机H1发送ICMP差错报告报文,其类型为源点抑制。
③如下图所示,假设主机H1给H2发送IP数据报,当该数据报传输到主机H2时,如果H2拥塞(也就是H2比较繁忙),H2会根据自己的丢包策略丢弃了该数据报,并向发送该数据报的源主机H1发送ICMP差错报告报文,其类型为源点抑制。
(3)时间超过:
①当路由器收到一个目的IP地址不是自己的IP数据报,会将其生存时间TTL字段的值减1。
若结果不为0,则将该IP数据报转发出去;若结果为0,除丢弃该IP数据报外,还要向源点发送时间超过报文。另外,当终点在预先规定的时间内不能收到一个数据报的全部数据报片时,就会把已收到的数据报片都丢弃,并会向源点发送时间超过报文。
②如下图所示,某个生存时间等于2的IP数据报传输到了路由器R1,R1将其生存时间减1后结果是1,这表明该数据报的生存时间还没有结束,R1将其转发出去。
③当该数据报传输到路由器R2后,R2将其生存时间减1后结果是0,这表明该数据报的生存时间结束了,R2丢弃该数据报,并向发送该数据报的源主机H1发送ICMP差错报告报文,其类型为时间超过。
(4)参数问题:
①当路由器或目的主机收到IP数据报后,根据其首部中的检验和字段发现首部在传输过程中出现了误码,就丢弃该数据报,并向源点发送参数问题报文。
②如下图所示,假设主机H1给H2发送IP数据报,该数据报在传输过程中受到了干扰(干扰位置在网络N1),其首部出现了误码,当该数据报传输到路由器R1后,R1检测出该数据报的首部出错,于是丢弃该数据报,并向发送该数据报的源主机H1发送ICMP差错报告报文,其类型为参数问题。
(5)改变路由(重定向):
①路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器(可通过更好的路由)。
②如下图所示,假设给主机H1指定的默认网关是路由器R1,则H1要发往网络N2的IP数据报都会传输给R1,由R1帮忙转发。当R1发现H1发往N2的数据报的最佳路由不应当经过R1而是应当经过R4时,就用改变路由报文把这个情况告诉主机,于是H1就在自己的路由表中添加一个项目:到达N2应经过路由器R4,而不是默认网关R1。之后,H1要发往N2的IP数据报都会传输给R4,由R4帮忙转发。
(1)对ICMP差错报告报文不再发送ICMP差错报告报文。
(2)对第一个分片的数据报片的所有后续数据报片都不发送ICMP差错报告报文。
(3)对具有多播地址的数据报都不发送ICMP差错报告报文。
(4)对具有特殊地址(如127.0.0.0或0.0.0.0)的数据报不发送ICMP差错报告报文。
(1)回送请求报文及其回答报文:
①ICMP回送请求报文是由主机或路由器向一个特定的目的主机发出的询问,收到此报文的主机必须给源主机或路由器发送ICMP回送回答报文。
②这种询问报文用来测试目的站是否可达及了解其有关状态。
(2)时间戳请求报文及其回答报文:
①ICMP时间戳请求报文是请某个主机或路由器回答当前的日期和时间。
②在ICMP时间戳回答报文中有一个32位的字段,其中写入的整数代表从1900年1月1日起到当前时刻一共有多少秒。
③这种询问报文用来进行时钟同步和测量时间。
(1)分组网间探测(PING):
①该应用用来测试主机或路由器之间的连通性。
②其应用层直接使用网际层的ICMP协议,而不通过运输层的TCP或UDP协议。
③所使用的ICMP报文类型为回送请求和回答。
④下图所示是在主机的Windows命令行中使用ping命令来测试该主机与某网站的连通性。
(2)跟踪路由:
①该应用用来测试IP数据报从源主机到达目的主机要经过哪些路由器。
②在该应用的Windows版本中,具体命令为tracert,其应用层直接使用网际层的ICMP协议,所使用的ICMP报文类型有ICMP回送请求和回答报文以及差错报告报文。
③在该应用的Unix版本中,具体命令为traceroute,其运输层使用UDP协议,在网际层使用的ICMP报文类型只有差错报告报文。
(1)假设主机H1想知道到达主机H2要经过哪些路由器,H1就给H2发送ICMP回送请求报文,该报文被封装在IP数据报中,IP数据报首部中生存时间字段TTL的值被设置为1。该IP数据报到达R1后,其生存时间减1,结果为0,R1丢弃该数据报并向发送该数据报的源主机H1发送ICMP差错报告报文,其类型为时间超过,这样,H1就知道了到达H2的路径中的第一个路由器。
(2)H1继续发送下一个封装有ICMP回送请求报文的IP数据报,其首部中生存时间字段TTL的值被设置为2。经过R1的转发后,该数据报的生存时间减少为1。该IP数据报到达R2后,其生存时间减1,结果为0,R2丢弃该数据报并向发送该数据报的源主机H1发送ICMP差错报告报文,其类型为时间超过。这样,H1就知道了到达H2的路径中的第二个路由器。
(3)H1继续发送下一个封装有ICMP回送请求报文的IP数据报,其首部中生存时间字段TTL的值被设置为3。经过R1和R2的转发后,该数据报的生存时间减少为1,到达主机H2,H2解析该数据报,发现其内部封装的是ICMP回送请求报文,于是就给H1发送封装有ICMP回送请求回答报文的IP数据报,这样,H1就知道已经跟踪到路经中的最后一站,也就是目的主机H2。
(1)虚拟专用网VPN又称为IP隧道技术。
(2)虚拟专用网VPN的分类:
①同一机构内不同部门的内部网络所构成的虚拟专用网VPN又称为内联网VPN。
②有时一个机构的VPN需要有某些外部机构(通常就是合作伙伴)参加进来,这样的VPN就称为外联网VPN。
③在外地工作的员工需要访问公司内部的专用网络时,只要在任何地点接入到因特网,运行驻留在员工PC中的VPN软件,在员工的PC和公司的主机之间建立VPN隧道,即可访问专用网络中的资源,这种VPN称为远程接入VPN。
(3)下图所示是某机构部门A和部门B的局域网,部门A的局域网位于北京,部门B的局域网位于上海,要使得这两个网络可以通信,有两种方法:
①租用电信公司的通信线路,这种方法简单方便,但是租金很高。
②利用公用的因特网作为本机构各专用网之间的通信载体,这样的专用网又称为虚拟专用网。
(4)由于IPv4地址的紧缺,一个机构能够申请到的IPv4地址数量往往远小于本机构所拥有的主机数量,因此,虚拟专用网中的各主机所分配的地址应该是本机构可自由分配的专用地址,而不是需要申请的、在因特网上使用的公有地址。
①如下图所示,给部门A的专用网分配的私有地址的网络号为10.1.0.0,给部门B的专用网分配的私有地址的网络号为10.2.0.0,两个专用网中各主机所分配的私有地址如图所示。
②私有地址只能用于一个机构的内部通信,不能用于和因特网上的主机通信,在因特网中的所有路由器对目的地址是私有地址的IP数据报一律不进行转发,于是部门A和部门B各自至少需要一个路由器具有合法的全球IP地址,这样它们各自的专用网才能利用公用的因特网进行通信。
(5)专用网利用公用的因特网进行通信:
①如下图所示,假设部门A的一台主机要给部门B中的另一台主机发送数据,它会将待发送数据封装成内部IP数据报发送给路由器R1,其首部中源地址字段的值为部门A中该主机的IP地址,目的地址字段的值为部门B中另一台主机的IP地址。
②R1收到该数据报后,发现其目的网络必须通过因特网才能到达,就将该内部IP数据报进行加密,这样就确保了内部IP数据报的安全,然后重新添加上数据报的首部,封装成为在因特网上发送的外部数据报,其首部中源地址字段的值为路由器R1的全球地址,目的地址字段的值为路由器R2的全球地址。
③路由器R2收到该外部IP数据报后去掉其首部,将其数据部分进行解密,恢复出原来的内部IP数据报,这样就可以从其首部提取出源地址和目的地址,根据目的地址,就可以将该内部IP数据报发送给相应的主机。
(1)虽然因特网采用了无分类编址方式来减缓IPv4地址空间耗尽的速度,但由于因特网用户数目的激增,特别是大量小型办公室网络和家庭网络接入因特网的需求不断增加,IPv4地址空间即将面临耗尽的危险仍然没有被解除。
(2)1994年提出了一种网络地址转换NAT的方法再次缓解了IPv4地址空间即将耗尽的问题,NAT能使大量使用内部专用地址的专用网络用户共享少量外部全球地址来访问因特网上的主机和资源。
(3)如下图所示,一个专用网络使用私有网络号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个内网主机能够同时和因特网上的主机通信。
(4)由于绝大多数的网络应用都是使用运输层协议TCP或UDP来传送数据,因此可以利用运输层的端口号和IP地址一起进行转换,这样,用一个全球IP地址就可以使多个拥有本地地址的主机同时和因特网上的主机进行通信。这种将端口号和IP地址一起进行转换的技术叫作网络地址与端口号转换NAPT(Network Address and Port Translation)。
(5)内网主机与外网主机间的通信不能由外网主机首先发起,如果由外网主机首先发起,那么当NAPT路由器收到来自外网的IP数据报后,在NAPT转换表中找不到相应的记录,也就无法把数据报转发给内网中的主机。
①使用私有地址的主机不能直接充当因特网服务器。
②对于一些点对点网络应用,需要外网主机主动与内网主机进行通信,在通过NAT时会遇到问题,需要网络应用自己使用一些特殊的NAT穿越技术来解决问题。
(6)由于NAT对外网屏蔽了内网主机的网络地址,因此能为内网的主机提供一定的安全保护。