《计算机网络》学习总结——网络层的 ICMP 和路由选择算法与协议

第四章 网络层

4.4 网际控制报文协议ICMP

为了更有效地转发 IP 数据报和提高交付成功的机会,在网际层使用了网际控制报文协议 ICMP (Internet Control Message Protocol) 。ICMP是 IP 层的协议,允许主机或路由器报告差错情况和提供有关异常情况的报告。 ICMP 报文格式如下图所示。

image-20220329111845903

4.4.1 ICMP 报文的种类

ICMP 报文的种类有两种,即 ICMP 差错报告报文和 ICMP 询问报文。ICMP 报文的前 4 个字节是统一的格式,共有三个字段:类型、代码和检验和。接着的 4 个字节的内容与 ICMP 的类型有关。最后面是数据字段,其长度取决于 ICMP 的类型。下表出了几种目前常用的 ICMP 报文类型。

image-20220329111725709

代码字段是为了进一步区分某种类型中的几种不同情况。检验和字段用来检验整个 ICMP 报文。

(一)常用的 ICMP 差错报告报文共有四种,即:

(1) 终点不可达 当路由器或主机不能交付数据报时就向源点发送终点不可达报文。

(2) 时间超过 当路由器收到生存时间为零的数据报时,除丢弃该数据报外,还要向源点发送时间超过报文。当终点在预先规定的时间内不能收到一个数据报的全部数据报片时,就把己收到的数据报片都丢弃,并向源点发送时间超过报文。

(3) 参数问题 当路由器或目的主机收到的数据报的首部中有的字段的值不正确时,就丢弃该数据报,并向源点发送参数问题报文。

(4) 改变路由(重定向) 路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器(更好的路由)。

主机内的转发表中设置了默认路由器,如果默认路由器发现主机发往某个目的地址的数据报的最佳路由应当经过网络上的另一个路由器B时,就用改变路由报文把这情况告诉主机。于是,该主机就在其转发表中增加一个项目:到某某目的地址应经过路由器B。

所有的 ICMP 差错报告报文中的数据字段都具有同样的格式(如下图) 。把收到的需要进行差错报告的 IP 数据报的首部和数据字段的前 8 个字节提取出来,作为 ICMP 报文的数据字段。再加上相应的 ICMP 差错报告报文的前 8 个字节,就构成了 ICMP 差错报告报文。

提取收到的数据报的数据字段前 8 个字节是为了得到运输层的端口号(对于 TCP与UDP) 以及运输层报文的发送序号(对于 TCP) 。这些信息对源点通知高层协议是有用的

image-20220329115049698

下面是不应发送 ICMP 差错报告报文的几种情况。

  • ICMP 差错报告报文,不再发送 ICMP 差错报告报文。
  • 对第一个分片的数据报片的所有后续数据报片,都不发送 ICMP 差错报告报文。
  • 对具有多播地址的数据报,都不发送 ICMP 差错报告报文。
  • 对具有特殊地址(如 127.0.0.0 或 0.0.0.0) 的数据报,不发送 ICMP 差错报告报文。

(二)常用的 ICMP 询问报文有两种,即:

(1)回送请求或回送回答 ICMP 回送请求报文是由主机或路由器向一个特定的目的主机发出的询问。收到此报文的主机必须给源主机或路由器发送 ICMP 回送回答报文。这种询问报文用来测试目的站是否可达以及了解其有关状态。

(2) 时间戳请求或时间戳回答 在 ICMP 时间戳请求报文发出后,就能收到对方响应的 ICMP 时间戳回答报文。利用在报文中记录的时间戳,发送方很容易计算出当前网络的往返时间。

4.4.2 ICMP 的应用举例

ICMP 的一个重要应用就是分组网间探测 PING (Packet InterNet Groper) ,使用了 ICMP 回送请求与回送回答报文,用来测试两台主机之间的连通性。 PING 是应用层直接使用网络层 ICMP 的一个例子,没有通过运输层的 TCP 或 UDP。

下图是展示用法,只需要在命令提示符中输入 ping xxx(域名或ip地址),即可进行本主机与xxx的连通性的测试。由图结果分析,本PC 一连发出四个 ICMP 回送请求报文,新浪网的邮件服务器 mail la.com.cn 也发回了四个 ICMP 回送回答报文的具体情况。最后显示出的是统计结果:发送到哪个机器(IP 地址),已发送、已接收的和丢失的分组数(但不给出分组丢失的原因),以及往返时间(往返的 ICMP 报文上都有时间戳)的最小值、最大值和平均值。最后可以判断,本主机可以和邮件服务器进行通信。

image-20220329120610998

另一个非常有用的应用是路由跟踪在Windows中叫tracert (在 UNIX中叫traceroute )

工作原理:tracert 从源主机向目的主机发送一连串的 IP 数据报,数据报中封装的是无法交付的 UDP 用户数据报(使用了非法的端口号)。第一个数据报的生存时间 TTL 设置为 1 。当到达路径上的第一个 路由器 R1时,路由器 R1 先收下它,接着把 TTL 的值减 1 ,但由于 TTL 等于 0了,也就丢弃了,并向源主机发送一个 ICMP 时间超过差错报告报文。 源主机接着发送第二个数据报 ,并把 TTL 设置为 2 , 先到达路由器 R1 ,将 TTL 减 1 ,再转发给路由器R2,R2 收到时 TTL 为1,但减 1 后 TTL 变为0了。 就丢弃了并向源主机发送一个 ICMP 时间超过差错报告报文。这样一直继续下去。当最后一个数据报刚刚到达目的主机时,数据报的 TTL 为 1。主机不转发数据报,也不把 TTL 值减 1。因为IP 数据报中封装的是无法交付的运输层的 UDP 用户数据报,因此目的主机要向源主机发送 ICMP 终点不可达差错报告报文。 就这样,源主机达到了自己的目的,因为这些路由器和最后目的主机发来的 ICMP 报文正好给出了源主机想知道的路由信息一一到达目的主机所经过的路由器的 IP 地址,以及到达其中的每一个路由器的往返时间。

image-20220329122032280.png

由上图可以看到经过15个路由跳转即可。*号可能是由于一些路由器的安全防范问题,或者丢失。

4.5 互联网的路由选择协议

路由选择协议规定了互联网中有关的路由器应如何相互交换信息并生成出路由表。一般认为属于网络层,但具体的某个路由选择协议如RIP,BGP等却属于应用层,因为他们使用了运输层提供的服务。事实上,不必在意路由选择协议所在的层级。

4.5.1 路由选择协议的概念

路由选择协议的核心就是路由算法,即需要何种算法来获得路由表中的各项目。理想的路由选择算法应有以下特点:

  1. 算法必须是正确的和完整的。即沿着各路由表所指引的路由,分组一定能够最终到达目的主机。
  2. 算法在计算上应简单。路由选择的计算不应使网络通信量增加太多的额外开销。
  3. 算法应具有稳定性。在通信量和网络拓扑相对稳定的情况下,算法应收敛于一个可以接受的解。
  4. 算法要有自适应性,当通信量发生变化时,算法能自适应地改变路由以均衡各链路的负载。当链路发生故障或修好了,算法也能及时地改变路由。也称为 鲁棒性(Robustness),即稳健性
  5. 算法应是公平的。路由选择算法应对所有用户(除对少数优先级高的用户)都是平等的。
  6. 算法应是最佳的。路由选择算法应当能够找出最好的路由完成某一种特定要求,如使得分组平均时延最小而网络的吞吐量最大。

应当知道,路由选择是非常复杂的,是网络中的所有结点共同协调工作的结果。并且,路由选择的环境是不断发生无法预知的变化的。从路由算法能否随网络的通信量或拓扑自适应地进行调整变化来划分,可分成静态路由选择策略(非自适应路由选择),与动态路由选择策略(自适应路由选择)。

互联网由于规模大,并且一些单位不愿暴露内部网络的细节,故采用分层次的路由选择协议。首先划分许多较小的自治系统AS(autonomous system) , AS 是在单一技术管理下的使用同种路由选择协议和度量一组路由器。一个 AS 对其他 AS 表现出的是一个单一的和一致的路由选择策略。由此,互联网可以把路由选择协议划分为两大类型:

  1. 内部网关协议 IGP (Interior Gateway Protocol) 即在一个自治系统内部使用的路由选择协议,与互联网中的其他自治系统无关。目前这类路由选择协议使用得最多的是 RIPOSPF 协议。
  2. 外部网关协议 EGP (Extemal Gateway Protocol) 若源主机和目的主机处在不同的自治系统中(这两个自治系统可能使用不同的内部网关协议),不同的AS之间的路由选择就需要使用外部网关协议 EGP 。这类路由选择协议使用得最多的是 BGP - 4 协议。

4.5.2 内部网关协议RIP

RIP 是一种分布式基于距离向量的路由选择协议只适用于小型互联网,因为规定了一条路径最多只能包含 15 个路由器。最大优点就是简单。

距离:也称“跳数(hop count)”,路由器到直接连接的网络的距离定义为 1。到非直接连接的网络的距离定义为所经过的路由器数加 1。

分布式路由选择协议:每一个路由器都要不断地和其他一些路由器交换路由信息

RIP2 协议的报文格式如下图所示:

image-20220401005544661

路由部分:地址族标识符字段用来标志所使用的地址协议,如IP地址的值为2;路由标记填入自治系统号 ASN, RIP 判断收到的路由选择信息是否为本自治系统发送的;还指出目的网络地址(包括子网掩码)、下一跳路由器地址以及到此网络的距离

RIP 协议让一个自治系统中的所有路由器都和相邻路由器定期交换自己的全部路由信息,并不断更新其路由表,使得从每一个路由器到每一个目的网络的路由器都是最少的(即跳数最少)

路由表主要的信息是:到本自治系统中某个网络的最短距离,经过的下一跳地址。

路由表更新的算法是距离向量算法(Bellman-Ford Algorithm),即找出到每个目的网络的最短距离和路径。

距离向量算法的要点:设 X 是结点 A到B 的最短路径上的一个结点。若把路径 A到B 拆成两段路径 A到X 和 B到X ,则每一段路径 A到X 和 B到X 也都分别是结点 A到 X 和结点 X到B 的最短路径。

距离向量算法对每一个相邻路由器发送过来的 RIP 报文,进行以下步骤:

  1. 对地址为 X 的相邻路由器发来的 RIP 报文,先修改此报文中的所有项目:把"下一跳"字段中的地址都改为 X ,并把所有的"距离"字段的值加1。每一个项目都有三个关键数据,即:到目的网络Net,距离是 d ,下一跳路由器是 X
  2. 对修改后的 RIP 报文中的每一个项目,进行以下步骤:
    • 若原来的路由表中没有目的网络 ,则把该项目添加到路由表中
    • 若原来的路由表中有目的网络,就再查看下一跳路由器地址,(1)若下一跳路由器地址是X ,则把收到的项目替换原路由表中的项目。(2)如果下一跳路由器不是 X,且收到的项目中的距离小于路由表中的距离,则进行更新。 (3)否则什么也不做。
  3. 若3分钟还没有收到相邻路由器的更新路由表,则把此相邻路由器记为不可达的路由器,即把距离置为 16 (表示不可达)。
  4. 返回。

通过上面步骤可以知道,当一个路由器发现了更短的路由,会迅速更新完毕。但RIP存在的一个问题是当网络出现故障时,要经过比较长的时间才能将此信息传送到所有的路由器。RIP 协议的这一特点叫做:好消息传播得快,而坏消息传播得慢

4.5.3 内部网关协议 OSPF

开放最短路径优先 OSPF (Open Shortest Path First)隶属内部网关协议,用于在单一自治系统 AS 内决策路由。OSPF 是链路状态(Link-state)的路由协议,而不是RIP那样的距离向量协议。

"开放"表明 OSPF 协议不是受某一家厂商控制,而是公开发表的。

"最短路径优先"是因为使用了 Dijkstra 提出的最短路径算法 SPF。

"链路状态"就是说明本路由器都和哪些路由器相邻,以及该链路的 “度量(代价)”。代价为无量纲数,可代表费用、距离、时延、带宽,等。

OSPF规定当链路状态发生变化或每隔一段时间(30min),每个路由器都利用泛洪法向本自治系统中所有路由器发送本路由器所知道的部分信息(与本路由器相邻的所有路由器的链路状态)。通过各路由器之间频繁地交换链路状态信息,最后所有的路由器最终都能建立一个链路状态数据库,即全网的拓扑结构图。每一个路由器及时使用链路状态数据库中的数据,构造出自己的路由表,更新过程收敛得快

泛洪法”就是路由器通过所有输出端口向所有相邻的路由器发送数据,而每个相邻的路由器发往其所有的相邻路由器(除源路由器),最中整个区域都收到该信息。

收敛”就是在自治系统中所有节点都得到正确路由选择信息的过程。

OSPF可用于规模很大的网络,因为使用层次结构的区域划分,将本AS再划分为若干个更小的区域,使用了主干区域(标识符规定为 0.0.0.0)来连通其他区域,如下图所示。在主干区域内应有一个路由器专门和其他自治系统交换路由信息,称为自治系统边界路由器,如图中的R6

image-20220401170746739

OSPF 的特点如下:

  1. 允许管理员给每条路由指派不同的代价(跳数、时延、带宽等)。如高带宽的卫星链路对于非实时的业务可设置为较低的代价,但对于时延敏感的业务就可设置为非常高的代价,对于不同类型的业务可计算出不同的路由。商用网络常用链路带宽来计算链路的代价。
  2. 如果到同一个目的网络有多条相同代价的路径,那么可以将通信量分配给这几条路径。即多路径间的负载均衡 (load balancing) 。RIP只能找出到某个网络的一条路径。
  3. 所有在 OSPF 路由器之间交换的分组(如链路状态更新分组)都具有鉴别的功能,保证了仅在可信赖的路由器之间交换链路状态信息。
  4. 支持可变长度的子网划分和无分类的编址 CIDR
  5. 由于网络中的链路状态可能经常发生变化,因此 OSPF 让每一个链路状态都带上一个 32 位的序号,序号越大状态就越新。

OSPF分组是作为IP数据报的数据部分来传送的,如下图所示。OSPF 不用 UDP 而是直接用 IP 数据报传送(其 IP 数据报首部的协议字段值为 89),构成的数据报很短。

image-20220401173437607

OSPF 共有以下五种分组类型:

  1. 类型 1 ,问候(Hello) 分组,用来发现和维持邻站的可达性(40s)
  2. 类型 2 ,数据库描述(Database Description) 分组,向邻站给出自己的链路状态数据库中的所有链路状态项目的摘要信息。
  3. 类型 3 ,链路状态请求(Link State Request) 分组,向对方请求发送某些链路状态项目的详细信息。
  4. 类型 4 ,链路状态更新(Link State Update) 分组,路由器使用这种分组将其链路状态通知给邻站,用泛洪法可对全网更新链路状态。这种分组是 OSPF 协议最核心的部分。
  5. 类型 5 ,链路状态确认(Link State Acknowledgment) 分组,对链路更新分组的确认。

OSPF 规定,每两个相邻路由器每隔 10 秒钟要交换一次问候分组,。若有 40 秒没有收到某个相邻路由器发来的问候分组,则可认为该相邻路由器是不可达的,应立即修改链路状态数据库,并重 新计算路由表。其他的四种类型分组都是用来进行链路状态数据库的同步,即将不同路由器的链路状态数据库的内容更新成一样的。

两个同步的路由器叫做"完全邻接的" (fully adjacent) 路由器。不是完全邻接的路由器表明它们虽然在物理上是相邻的,但其链路状态数据库并没有达到一致。

4.5.4 外部网关协议BGP

在不同自治系统 AS 之间的路由选择使用外部网关协议(或边界网关协议)BGP,目前使用最多的版本 BGP-4 ,但目前 BGP-4 仍然是草案标准,在下面简写成BGP。

因为互联网的规模太大了,使得自治系统 AS 之间路由选择非常困难,路由表的项目数过多,且不同自治系统AS中代价定义不同;并且自治系统 AS 之间的路由选择必须考虑有关策略,必须考虑政治、安全或经济方面,如,我国国内的站点在互相传送数据报时不应经过国外兜圈子,特别是,不要经过某些对我国的安全有威胁的国家。这些策略都是由网络管理人员对每一个路由器进行设置的,但这些策略并不是自治系统之间的路由选择协议本身。

由于上述情况,边界网关协议 BGP 只能是力求选择出一条能够到达目的网络且比较好的路由(不能兜圈子),而井非要计算出一条最佳路由。 这里所说的BGP路由是指经过哪些自治系统AS可以到达目的网络。BGP 采用了路径向量(path vector)路由选择协议。

我们知道,在一个自治系统AS中有两种不同功能的路由器,边界路由器(或边界网关)和内部路由器。通过边界路由器,AS之间才能利用BGP交换可达性路由信息。当两个边界路由器如下图中的R1和R2进行通信时,必须先建立TCP连接(端口号为179),这种连接又称为半永久连接(即双方交换完信息后仍然保持连接状态)。

像R1和R2之间的连接称为eBGP,e代表外部external。AS内部,两个路由器之间的BGP连接称为iBGP,i表示内部internal,逻辑上的连接。

BGP路由"X,AS1,R1"则表示从R1经过AS1可到达X。

image-20220401212459889

边界路由器根据本AS管理员所规定的策略,可以拒绝某些路由,而在iBGP的连接上仅转发符合规定策略的BGP路由。若对于R3到X,必须借助R2才能到达R1。通过下图可以形象的理解eBGP和iBGP的作用,及内部协议网关的区别。

image-20220401213620166

然后介绍BGP路由的一般格式,如下:

BGP路由 = “ 目的网络(前缀),BGP属性 ” = “ 目的网络(前缀),AS-PATH,NEXT-HOP ”

目的网络(前缀)就是通告的BGP路由终点,BGP属性有好几种,其中最重要的有AS-PATH(自治系统路径)是通告的BGP路由所经过的自治系统,将他们的ASN加入到AS-PATH中,不允许出现重复的ASN。NEXT-HOP(下一跳)是通告的BGP路由起点。总的来分析即,从NEXT-HOP经过所有AS-PATH可到达目的网络。

在互联网中的自治系统AS可大概分为下图中所示的三类,即末梢AS、对等AS和穿越AS,链路旁边的人民币符号¥表示需要对转发分组付费(下面使用上面提供的服务,故需付费)。

image-20220401222737633

假如从一个AS到另一个AS中的网络 X 有多条BGP路由可供选择时,路由选择就需要按以下的原则来选择:

  1. 本地偏好(LOCAL-PREF)值最高的路优选选择。即BGP路由中的属性的本地偏好的选项的值,可由管理员根据政治或经济上的策略来设置。
  2. 选择具有AS跳数最少的路由
  3. 使用热土豆路由选择算法(尽快送走),即选择让分组经过最少代价离开本AS的路径,代价由内部网关协议(如RIP或OSPF)决定
  4. 选择路由器BGP标识符的数值最少的路由。

BGP的报文是作为TCP报文的数据部分来传送的,BGP有以下四种报文。

  1. OPEN (打开)报文,用来与 BGP 连接对等端建立关系,可识别与协商功能。
  2. UPDATE (更新)报文,用来通告某一路由的信息,以及列出要撤销的路由。
  3. KEEPALIVE (保活)报文,用来周期性地证实与对等端的连通性。
  4. NOTIFICATION (通知)报文,用来发送检测到的差错。

在两个路由器建立了TCP连接后,发送OPEN报文,收到后就发回KEEPALIVE表示接受建立BGP连接。

本文参考 计算机网络(第8版) / 谢希仁编著. ----北京:电子工业出版社,2021.6

若能对你有所帮助,请点个赞,欢迎交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

羊and船

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

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

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

打赏作者

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

抵扣说明:

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

余额充值