本博客为个人笔记,篇幅较长,内容较多,因时间原因,内容中的重点部分没有重点标出,望谅解。如有错误,欢迎各位前来纠正。
目录
4.IP数据报中没有下一跳路由器的IP地址,那么待转发的数据报又怎样能够找到下一跳路由器呢?
一.网络层提供的两种服务
1.虚电路服务
部分人认为,计算机网络也应模仿打电话所使用的面向连接的通信方式。当两台计算机进行通信时,也应当先建立连接(但在分组交换中是建立一条虚电路)以预留双方通信所需的一切网络资源。然后双方就沿着已建立的虚电路发送分组。这样的分组的首部不需要填写完整的目的主机地址,而只需要填写这条虚电路的编号(一个不大的整数),因而减少了分组的开销。这种通信方式如果再使用可靠传输的网络协议,就可使所发送的分组无差错按序到达终点,当然也不丢失、不重复。在通信结束后要释放建立的虚电
路。下图是网络提供虚电路服务的示意图。主机H1和H2之间交换的分组都必须在事先建立的虚电路上传送。

2.电话机与现代计算机的区别
互联网的先驱者认为,电信网提供的端到端可靠传输的服务对电话业务无疑是很合适的,因为电信网的终端(电话机)非常简单,没有智能,也没有差错处理能力。因此电信网必须负责把用户电话机产生的话音信号可靠地传送到对方的电话机,使还原后的话音质量符合技术规范的要求。但计算机网络的端系统是有智能的计算机。计算机有很强的差错处理能力(这点和传统的电话机有本质上的差别)。因此,互联网在设计上就采用了和电信网完全不同的思路。
3.数据报服务
互联网采用的设计思路是这样的:网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。这里的“数据报是互联网的设计者最初使用的名词,其实数据报(或IP数据报)就是我们经常使用的“分组”。
网络在发送分组时不需要先建立连接。每一个分组(也就是IP数据报)独立发送,与其前后的分组无关(不进行编号)。网络层不提供服务质量的承诺。也就是说,所传送的分组可能出错、丢失、重复和失序(即不按序到达终点),当然也不保证分组交付的时限。由于传输网络不提供端到端的可靠传输服务,这就使网络中的路由器比较简单,且价格低廉(与电信网的交换机相比较)。如果主机(即端系统)中的进程之间的通信需要是可靠的,那么就由网络的主机中的运输层负责(包括差错处理、流量控制等)。采用这种设计思路的好处是:网络造价大大降低,运行方式灵活,能够适应多种应用。
下图给出了网络提供数据报服务的示意图。主机H1向H2发送的分组各自独立地选择路由,并且在传送的过程中还可能丢失。

4.虚电路服务与数据报服务的主要区别

二.网际协议IP
扩展:
网际协议IP是TCP/IP体系中两个最主要的协议之,与IP协议配套使用的还有三个协议
- 地址解析协议ARP( Address resolution protoco)
- 网际控制报文协议ICMP( Internet Control Message Protocol)
- 网际组管理协议IGMP( nternet Group Management Protocol)
下图画出了这三个协议和网际协议IP的关系。在这一层中,ARP画在最下面,因为IP经常要使用这个协议。ICMP和IGMP画在这一层的上部,因为它们要使用IP协议。

1.虚拟互联网络
能不能让大家都使用相同的网络,这样可使网络互连变得比较简单。答案是不行的,因为用户的需求是多种多样的,没有一种单一的网络能够适应所有用户的需求。
从一般的概念来讲,将网络互相连接起来要使用一些中间设备。根据中间设备所在的层次,可以有以下四种不同的中间设备:
- 物理层使用的中间设备叫做转发器
- 数据链路层使用的中间设备叫做网桥或桥接器
- 网络层使用的中间设备叫做路由器
- 在网络层以上使用的中间设备叫做网关。用网关连接两个不兼容的系统需要在高层进行协议的转换
现在我们讨论网络互连时,都是指用路由器进行网络互连和路由选择。路由器其实就是一台专用计算机,用来在互联网中进行路由选择。图a表示有许多计算机网络通过一些路由器进行互连。由于参加互连的计算机网络都使用相同的网际协议IP(,因此可以把互连以后的计算机网络看成如图b所示的一个虛拟互连网络。

所谓虚拟互连网络也就是逻辑互连网络,它的意思就是互连起来的各种物理网络的异构性本来是客观存在的,但是我们利用IP协议就可以使这些性能各异的网络在网络层上看起来好像是一个统一的网络。这种使用IP协议的虚拟互连网络可简称为IP网(IP网是虚拟的,但平常不必每次都强调“虚拟”二字)。使用IP网的好处是:当IP网上的主机进行通信时,就好像在一个单个网络上通信一样,它们看不见互连的各网络的具体异构细节(如具体的编址方案、路由选择协议,等等)。
当很多异构网络通过路由器互连起来时,如果所有的网络都使用相同的IP协议,那么在网络层讨论问题就显得很方便。现在用一个例子来说明。
在下图所示的互联网中的源主机H1要把一个P数据报发送给目的主机H2。根据分组交换的存储转发概念,主机H1先要查找自己的路由表,看目的主机是否就在本网络上。如是,则不需要经过任何路由器而是直接交付,任务就完成了。如不是,则必
须把IP数据报发送给某个路由器(图中的R1)。R1在查找了自己的路由表后,知道应当把数据报转发给R2进行间接交付。这样一直转发下去,最后由路由器R知道自己是和H2连接在同一个网络上,不需要再使用别的路由器转发了,于是就把数据报直接交付目的主机H2。图中画出了源主机、目的主机以及各路由器的协议栈。我们注意到,主机的协议栈共有五层,但路由器的协议栈只有下三层。图中还画出了数据在各协议栈中流动的方向(用黑色粗线表示)。总之,这里强调的是:互联网可以由多种异构网络互连组成如果我们只从网络层考虑问题,那么IP数据报就可以想象是在网络层中传送,其传送路径是


2.分类的IP地址
关于IP地址的内容,我在其他博客中已经详细讲解,感兴趣的读者可自行学习
链接:https://blog.csdn.net/ThinPikachu/article/details/104672860
IP地址具有以下一些重要特点:
- 每一个IP地址都由网络号和主机号两部分组成。从这个意义上说,IP地址是一种分等级的地址结构。分两个等级的好处是:第一,IP地址管理机构在分配IP地址时只分配网络号(第一级),而剩下的主机号(第二级)则由得到该网络号的单位自行分配。这样就方便了PP地址的管理;第二,路由器仅根据目的主机所连接的网络号来转发分组(而不考虑目的主机号),这样就可以使路由表中的项目数大幅度减少,从而减小了路由表所占的存储空间以及查找路由表的时间。
- 实际上P地址是标志一台主机(或路由器)和一条链路的接口。当一台主机同时连接到两个网络上时,该主机就必须同时具有两个相应的IP地址,其网络号必须是不同的。由于一个路由器至少应当连接到两个网络,因此一个路由器至少应当有两个不同的IP地址。这好比一个建筑正好处在北京路和上海路的交叉口上,那么这个建筑就可以拥有两个门牌号码。例如,北京路4号和上海路37号。
- 按照互联网的观点,一个网络是指具有相同网络号 的主机的集合,因此,用转发器或网桥连接起来的若干个局域网仍为一个网络,因为这些局域网都具有同样的网络号。具有不同网络号的局域网必须使用路由器进行互连。
- 在IP地址中,所有分配到网络号的网络(不管是范围很小的局域网,还是可能覆盖很大地理范围的广域网)都是平等的。所谓平等,是指互联网同等对待每一个IP地址。
下图画出了三个局域网(LAN,LAN2和LAN3)通过三个路由器(R1,R2和R3)互连起来所构成的一个互联网(此互联网用虚线圆角方框表示)。

我们应当注意到:
- 在同一个局域网上的主机或路由器的IP地址中的网络号必须是一样的。
- 用网桥(它只在链路层工作)互连的网段仍然是一个局域网,只能有一个网络号。
- 路由器总是具有两个或两个以上的IP地址。即路由器的每一个接口都有一个不同网络号的IP地址。当两个路由器直接相连时,在连线两端的接口处,可以分配也可以不分配P地址。如分配了IP地址,则这一段连线就构成了一种只包含
段线路的特殊“网络”(如图中的N1,N2和N3)。之所以叫做“网络”是因为它有IP地址。现在也常常不分配P地址。通常把这样的特殊网络叫做无编号网络或无名网络。
3.IP地址与硬件地址
1.主机的IP地址与硬件地址的区别
从层次的角度看,物理地址是数据链路层和物理层使用的地址,而IP地址是网络层和以上各层使用的地址,是一种逻辑地址。

在发送数据时,数据从高层下到低层,然后才到通信链路上传输。使用IP地址的IP数据报一旦交给了数据链路层,就被封装成MAC帧了。MAC帧在传送时使用的源地址和目的地址都是硬件地址,这两个硬件地址都写在MAC帧的首部中。连接在通信链路上的设备(主机或路由器)在收到MAC帧时,根据MAC帧首部中的硬件地址决定收下或丢弃。只有在剥去MAC帧的首部和尾部后把MAC层的数据上交给网络层后,网络层才能在IP数据报的首部中找到源IP地址和目的IP地址。
下图画的是三个局域网用两个路由器R1和R2互连起来。现在主机H1要和主机H2通信。这两台主机的IP地址分别是P1和IP2,而它们的硬件地址分别为HA1和HA2。通信的路径是:H1→经过R1转发→再经过R2转发→H2。路由器R1因同时连接到两个局域网上,因此它有两个硬件地址,即HA3和HA4同理,路由器R2也有两个硬件地址HA5和HA6。

这里要强调指出以下几点:
- 在网络层上只能看到IP数据报。
- 在局域网的链路层,只能看见MAC帧。
- 虽然在P数据报首部有源站IP地址,但路由器只根据目的站的IP地址的网络号进行路由选择。
三.地址解析协议ARP
在实际应用中,我们经常会遇到这样的问题:已经知道了一个机器的IP地址,需要找出其相应的硬件地址。地址解析协议ARP就是用来解决这样的问题的。
地址解析协议ARP在主机ARP高速缓存中存放一个从IP地址到硬件地址的映射表,并且这个映射表还经常动态更新(新增或超时删除)。
当主机A要向本局域网上的某台主机B发送IP数据报时,就先在其ARP高速缓存中查看有无主机B的P地址。如有,就在ARP高速缓存中查出其对应的硬件地址,再把这个硬件地址写入MAC帧,然后通过局域网把该MAC帧发往此硬件地址。也有可能查不到主机B的IP地址的项目。在这种情况下,主机A就自动运行ARP,然后按以下步骤找出主机B的硬件地址。
- ARP进程在本局域网上广播发送一个ARP请求分组。下图(a)是主机A广播发送ARP请求分组的示意图。ARP请求分组的主要内容是:“我的IP地址是209.0.0.5,硬件地址是00-00-C0-15-AD-18.我想知道IP地址为209.0.0.6的主机的硬件地址。
- 在本局域网上的所有主机上运行的ARP进程都收到此ARP请求分组。
- 主机B的IP地址与ARP请求分组中要查询的IP地址一致,就收下这个ARP请求分组,并向主机A发送ARP响应分组,同时在这个ARP响应分组中写入自己的硬件地址。其余的所有主机的IP地址都与ARP请求分组中要查询的IP地址不一致,因此都不理睬这个ARP请求分组,见下图(b)。ARP响应分组的主要内容是:“我的IP地址是209.0.0.6,我的硬件地址是08-002B00EEOA.”请注意:虽然ARP请求分组是广播发送的,但ARP响应分组是普通的单播。
- 主机A收到主机B的ARP响应分组后,就在其ARP高速缓存中写入主机B的IP地址到硬件地址的映射。

ARP把已经得到的地址映射保存在高速缓存中,这样就使得该主机下次再和具有同样目的地址的主机通信时,可以直接从高速缓存中找到所需的硬件地址而不必再用广播方式发送ARP请求分组。
请注意,ARP是解决同一个局域网上的主机或路由器的IP地址和硬件地址的映射问题。从IP地址到硬件地址的解析是自动进行的。
下面我们归纳出使用ARP的四种典型情况:

- 发送方是主机(如H1),要把IP数据报发送到同一个网络上的另一台主机(如H2)。这时H1发送ARP请求分组(在网1上广播),找到目的主机H2的硬件地址。
- 发送方是主机(如H1),要把IP数据报发送到另一个网络上的一台主机(如H3或H4)。这时H1发送ARP请求分组(在网1上广播),找到网1上的一个路由器R1的硬件地址。剩下的工作由路由器R1来完成。R1要做的事情是下面的(3)或(4)
- 发送方是路由器(如R1),要把IP数据报转发到与R1连接在同一个网络(网2)上的主机(如H3)。这时R1发送ARP请求分组(在网2上广播),找到目的主机H3的硬件地址
- 发送方是路由器(如R1),要把IP数据报转发到网3上的一台主机(如H4)。H4与R1不是连接在同一个网络上。这时R1发送ARP请求分组(在网2上广播),找到连接在网2上的一个路由器R2的硬件地址。剩下的工作由这个路由器R2来完成。
四.IP数据报的格式
IP数据报的格式能够说明IP协议都具有什么功能。在TCP/IP的标准中,各种数据格式常常以32位(即4字节)为单位来描述。下图是IP数据报的完整格式。

从上图可看出,一个IP数据报由首部和数据两部分组成。首部的前一部分是固定长度,共20字节,是所有P数据报必须具有的。在首部的固定部分的后面是一些可选字段,其长度是可变的。下面介绍首部各字段的意义。
1.IP数据报首部的固定部分中的各字段
- 版本占4位,指IP协议的版本。通信双方使用的IP协议的版本必须一致。目前广泛使用的IP协议版本号为4(即IPv4)。
- 首部长度占4位,可表示的最大十进制数值是15。因为IP首部的固定长度是20字节,因此首部长度字段的最小值是5,即二进制表示的首部长度是0101(为什么是5,因为20字节=5*4字节)。而当首部长度为最大值1111(即十进制数的15),就表明首部长度达到最大值15个32位(4字节),即60字节。当IP分组的首部长度不是4字节的整数倍时,必须利用最后的填充字段加以填充。因此IP数据报的数据部分永远在4字节的整数倍时开始,这样在实现IP协议时较为方便。
- 区分服务占8位,用来获得更好的服务。这个字段在旧标准中叫做服务类型,但实际上一直没有被使用过。
- 总长度指首部和数据之和的长度,单位为字节。总长度字段为16位,因此数据报的最大长度为
-1=65535字节。然而实际上传送这样长的数据报在现实中是极少遇到的。
- 标识占16位。IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。但这个“标识”并不是序号,因为IP是无连接服务,数据报不存在按序接收的问题。
- 标志占3位,但目前只有两位有意义。标志字段中的最低位记为MF。MF=1即表示后面“还有分片”的数据报。MF=0表示这已是若干数据报片中的最后一个。标志字段中间的一位记为 DF ,意思是“不能分片”。只有当DF=0时才允许分片。
- 片偏移占13位。片偏移指出:较长的分组在分片后,某片在原分组中的相对位置。也就是说,相对于用户数据字段的起点,该片从何处开始。片偏移以8个字节为偏移单位。这就是说,每个分片的长度一定是8字节(64位)的整数倍。
- 生存时间占8位,生存时间字段常用的英文缩写是TTL,表明这是数据报在网络中的寿命。由发出数据报的源点设置这个字段。其目的是防止无法交付的数据报无限制地在互联网中兜圈子。数据报每经过一个路由器时,就把TTL减去数据报在路由器所消耗掉的一段时间。若数据报在路由器消耗的时间小于1秒,就把TIL值减1。当TTL值减为零时,就丢弃这个数据报。
- 协议占8位,协议字段指出此数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应将数据部分上交给哪个协议进行处理。
- 首部检验和占16位。这个字段只检验数据报的首部,但不包括数据部分。
- 源地址占32位。
- 目的地址占32位。
2.IP数据报首部的可变部分
IP数据报首部的可变部分就是一个选项字段。选项字段用来支持排错、测量以及安全等措施,内容很丰富。此字段的长度可变,从1个字节到40个字节不等,取决于所选择的项目。这些选项一个个拼接起来,中间不需要有分隔符,最后用全0的填充字段补齐成为4字节的整数倍。实际上这些选项很少被使用。很多路由器都不考虑IP首部的选项字段。
五.IP层转发分组的流程
1.IP层转发分组的流程
下面我们先用一个简单例子来说明路由器是怎样转发分组的。下图是一个路由表的简单例子。

有四个A类网络通过三个路由器连接在一起。每一个网络上都可能有成千上万台主机(图中没有画出这些主机)。可以想象,若路由表指出到每一台主机应怎样转发,则所得出的路由表就会过于庞大。但若路由表指出到某个网络应如何转发,则每个路由器中的路由表就只包含4个项目(即只有4行,每行对应于一个网络)。
以路由器R2的路由表为例。由于R2同时连接在网络2和网络3上,因此只要目的主机在网络2或网络3上,都可通过接口0或1由路由器R2直接交付(当然还要利用地址解析协议ARP才能找到这些主机相应的硬件地址)。若目的主机在网络1中,则下一跳路由器应为R1,其P地址为20.0.07.路由器R2和R1由于同时连接在网络2上,因此从路由器R2把分组转发到路由器R1是很容易的。同理,若目的主机在网络4中,则路由器R2应把分组转发给IP地址为30.0.0.1的路由器R3。我们应当注意到,图中的每一个路由器都有两个不同的IP地址 。
可以把整个的网络拓扑简化为下图所示的那样。在简化图中,网络变成了一条链路,但每一个路由器旁边都注明其IP地址。使用这样的简化图,可以使我们不必关心某个网络内部的具体拓扑以及连接在该网络上有多少台主机。这样的简化图强调了在互联网上转发分组时,是从一个路由器转发到下一个路由器。总之,在路由表中,对每一条路由最主要的是以下两个信息:

2.特定主机路由
对特定的目的主机指明一个路由,这种路由叫做特定主机路由。
3.默认路由
路由器还可采用默认路由以减小路由表所占用的空间和搜索路由表所用的时间。我们在前面已经讲过,主机在发送每一个IP数据报时都要查找自己的路由表。如果一台主机连接在一个小网络上,而这个网络只用一个路由器和互联网连接,那么在这种情况下使用默认路由是非常合适的。例如,在下图的互联网中,连接在网络N1上的任何一台主机中的路由表只需要三个项目即可。第
个项目就是到本网络主机的路由,其目的网络就是本网络N1,因而不需要路由器转发而是直接交付。第二个项目是到网络N2的路由,对应的下一跳路由器是R2。第三个项目就是默认路由。只要目的网络是其他网络(不是N1或N2),就一律选择默认路由,把数据报先间接交付路由器R1,让R1再转发给互联网中的下一个路由器,一直转发到目的网络上的路由器,最后进行直接交付。在实际上的路由器中,像图下图路由表中所示的“直接”和“其他”的几个字符并没有出现在路由表中,而是被记为0.0.0.0。

4.IP数据报中没有下一跳路由器的IP地址,那么待转发的数据报又怎样能够找到下一跳路由器呢?
在IP数据报的首部写上的IP地址是源IP地址和目的IP地址,而没有中间经过的路由器的IP地址。既然IP数据报中没有下一跳路由器的IP地址,那么待转发的数据报又怎样能够找到下一跳路由器呢?
当路由器收到一个待转发的数据报,在从路由表得出下一跳路由器的IP地址后,不是把这个地址填入IP数据报,而是送交数据链路层的网络接口软件。网络接口软件负责把下跳路由器的IP地址转换成硬件地址(必须使用ARP),并将此硬件地址放在链路层的MAC帧的首部,然后根据这个硬件地址找到下一跳路由器。
这里我们要再强调一下,路由表并没有给分组指明到某个网络的完整路径(即先经过哪一个路由器,然后再经过哪一个路由器,等等)。路由表指出,到某个网络应当先到某个路由器(即下一跳路由器),在到达下一跳路由器后,再继续查找其路由表,知道再下一步应当到哪一个路由器。这样一步一步地查找下去,直到最后到达目的网络。
5.IP数据报的分组转发算法
- 从数据报的首部提取目的主机的IP地址D,得出目的网络地址为N。
- 若N就是与此路由器直接相连的某个网络地址,则进行直接交付,不需要再经过其他的路由器,直接把数据报交付目的主机(这里包括把目的主机地址D转换为具体的硬件地址,把数据报封装为MAC帧,再发送此帧)。否则就是间接交付,执行(3)。
- 若路由表中有目的地址为D的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器。否则,执行(4)。
- 若路由表中有到达网络N的路由,则把数据报传送给路由表中所指明的下一跳路由器。否则,执行(5)。
- 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器。否则,执行(6).
- 报告转发分组出错。
六.划分子网和构造超网
1.划分子网
关于划分子网的内容,我在其他博客中已经详细讲解,感兴趣的读者可自行学习
链接:https://blog.csdn.net/ThinPikachu/article/details/104674514
我们应当注意到,使用子网划分后,路由表必须包含以下三项内容:目的网络地址、子网掩码和下一跳地址。
2.构造超网
关于构造超网的内容,我在其他博客中已经详细讲解,感兴趣的读者可自行学习
链接:https://blog.csdn.net/ThinPikachu/article/details/105679584
3.最长前缀匹配
在使用CIDR时,由于采用了网络前缀这种记法,IP地址由网络前缀和主机号这两个部分组成,因此在路由表中的项目也要有相应的改变。这时,每个项目由“网络前缀”和“下一跳地址”组成。但是在査找路由表时可能会得到不止一个匹配结果。这样就带来一个
问题:我们应当从这些匹配结果中选择哪一条路由呢?
正确的答案是:应当从匹配结果中选择具有最长网络前缀的路由。这叫做最长前缀匹配,这是因为网络前缀越长,其地址块就越小,因而路由就越具体。最长前缀匹配又称为最长匹配或最佳匹配。
七.网际控制报文协议ICMP
为了更有效地转发IP数据报和提高交付成功的机会,在网际层使用了网际控制报文协议ICMP。ICMP允许主机或路由器报告差错情况和提供有关异常情况的报告。ICMP是互联网的标准协议。但ICMP不是高层协议(看起来好像是高层协议,因为ICMP报文是装在IP数据报中,作为其中的数据部分),而是IP层的协议。ICMP报文作为IP层数据报的数据,加上数据报的首部,组成IP数据报发送出
去。ICMP报文格式如图所示:

1.ICMP报文的种类
ICMP报文的种类有两种,即:
- ICMP差错报告报文
- ICMP询问报文。
ICMP报文的前4个字节是统一的格式,共有三个字段:类型、代码和检验和。接着的4个字节的内容与ICMP的类型有关。最后面是数据字段,其长度取决于ICMP的类型。下表给出了几种常用的ICMP报文类型。IP数据报首部的检验和并不检验IP数据报的内容,因此不能保证经过传输的ICMP报文不产生差错。

ICMP差错报告报文共有四种,即
- 终点不可达:当路由器或主机不能交付数据报时就向源点发送终点不可达报文。
- 时间超过:当路由器收到生存时间为零的数据报时,除丢弃该数据报外,还要向源点发送时间超过报文。当终点在预先规定的时间内不能收到一个数据报的全部数据报片时,就把已收到的数据报片都丢弃,并向源点发送时间超过报文
- 参数问题:当路由器或目的主机收到的数据报的首部中有的字段的值不正确时,就丢弃该数据报,并向源点发送参数问题报文。
- 改变路由(重定向):路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器(可通过更好的路由)。
下面对改变路由报文进行简短的解释。我们知道,在互联网的主机中也要有一个路由表。当主机要发送数据报时,首先是查找主机自己的路由表,看应当从哪一个接口把数据报发送出去。在主机刚开始工作时,一般都在路由表中设置一个默认路由器的IP地址。不管数据报要发送到哪个目的地址,都一律先把数据报传送给这个默认路由器,而这个默认路由器知道到每一个目的网络的最佳路由(通过和其他路由器交换路由信息)。如果默认路由器发现主机发往某个目的地址的数据报的最佳路由应当经过网络上的另一个路由器R时,就用改变路由报文把这情况告诉主机。于是,该主机就在其路由表中增加一个项目:到某某目的地址应经过路由器R(而不是默认路由器)。
常用的ICMP询问报文有两种,即:
- 回送请求和回答IMP回送请求报文是由主机或路由器向一个特定的目的主机发出的询问。收到此报文的主机必须给源主机或路由器发送ICMP回送回答报文。这种询问报文用来测试目的站是否可达以及了解其有关状态。
- 时间戳请求和回答ICMP时间戳请求报文是请某台主机或路由器回答当前的日期和时间。在ICMP时间戳回答报文中有一个32位的字段,其中写入的整数代表从1900年1月1日起到当前时刻一共有多少秒。时间戳请求与回答可用于时钟同步和时间测量。
八.互联网的路由选择协议
1.理想的路由算法
路由选择协议的核心就是路由算法,即需要何种算法来获得路由表中的各项目。应当指出,路由选择是个非常复杂的问题,因为它是网络中的所有结点共同协调工作的结果。
静态路由选择也叫做非自适应路由选择,其特点是简单和开销较小,但不能及时适应网络状态的变化。对于很简单的小网络,完全可
以采用静态路由选择,用人工配置每一条路由。
动态路由选择也叫做自适应路由选择,其特点是能较好地适应网络状态的变化,但实现起来较为复杂,开销也比较大。因此,动态路由选择适用于较复杂的大网络。
2.分层次的路由选择协议
可以把整个互联网划分为许多较小的自治系统,一般都记为AS。自治系统AS是在单一技术管理下的一组路由器,而这些路由器使用一种自治系统内部的路由选择协议和共同的度量。一个AS对其他AS表现出的是一个单一的和一致的路由选择策略。
在目前的互联网中,一个大的ISP就是一个自治系统。这样,互联网就把路由选择协议划分为两大类,即:
- 内部网关协议IGP:即在一个自治系统内部使用的路由选择协议,而这与在互联网中的其他自治系统选用什么路由选择协议无关。目前这类路由选择协议使用得最多,如RIP和OSPF协议。
- 外部网关协议EGP:若源主机和目的主机处在不同的自治系统中(这两个自治系统可能使用不同的内部网关协议),当数据报传到一个自治系统的边界时,就需要使用一种协议将路由选择信息传递到另一个自治系统中。这样的协议就是外部网关协议EGP。目前使用最多的外部网关协议是BGP的版本4(BGP4)。
自治系统之间的路由选择也叫做域间路由选择,而在自治系统内部的路由选择叫做域内路由选择。
下图是两个自治系统互连在一起的示意图。每个自治系统自己决定在本自治系统内部运行哪一个内部路由选择协议(例如,可以是RIP,也可以是OSPF)。但每个自治系统都有一个或多个路由器(图中的路由器R1和R2)除运行本系统的内部路由选择协议外,还要
运行自治系统间的路由选择协议(BGP4)。

九.内部网关协议RIP
1.工作原理
RIP是一种分布式的基于距离向量的路由选择协议,是互联网的标准协议,其最大优点就是简单。RIP协议要求网络中的每一个路由器都要维护从它自己到其他每一个目的网络的距离记录(因此,这是一组距离,即“距离向量”)。RIP协议将“距离”定义如下:
从一路由器到直接连接的网络的距离定义为1。
从一路由器到非直接连接的网络的距离定义为所经过的路由器数加1。“加1”是因为到达目的网络后就进行直接交付,而到直接连接的网络的距离已经定义为1。例如在下图中,路由器R1到网1或网2的距离都是1(直接连接),而到网3的距离是2,到网4的距离是3。
RP协议的“距离”也称为“跳数”,因为每经过一个路由器,跳数就加1。RIP认为好的路由就是它通过的路由器的数目少,即“距离短”。RIP允许一条路径最多能包含15个路由器。因此“距离”等于16时即相当于不可达。可见RIP只适用于小型互联网。
RIP不能在两个网络之间同时使用多条路由。RIP选择一条具有最少路由器的路由(即最短路由),哪怕还存在另一条高速(低时延)但路由器较多的路由。
RIP协议的特点是:
- 仅和相邻路由器交换信息。如果两个路由器之间的通信不需要经过另一个路由器,那么这两个路由器就是相邻的。RIP协议规定,不相邻的路由器不交换信息。
- 路由器交换的信息是当前本路由器所知道的全部信息,即自己现在的路由表。
- 按固定的时间间隔交换路由信息,例如,每隔30秒。然后路由器根据收到的路由信息更新路由表。当网络拓扑发生变化时,路由器也及时向相邻路由器通告拓扑变化后的路由信息。
这里要强调一点:路由器在刚刚开始工作时,它的路由表是空的。然后路由器就得出到直接相连的几个网络的距离(这些距离定义为1)。接着,每一个路由器也只和数目非常有限的相邻路由器交换并更新路由信息。但经过若干次的更新后,所有的路由器最终都会知
道到达本自治系统中任何一个网络的最短距离和下一跳路由器的地址。
路由表更新的原则是找出到每个目的网络的最短距离。这种更新算法又称为距离向量算法。
2.RIP协议的报文格式
下图是RP2的报文格式,它和RIP1的首部相同,但后面的路由部分不一样。从图中还可看出,RIP协议使用运输层的用户数据报UDP进行传送。

RIP报文由首部和路由部分组成。RIP的首部占4个字节,其中:
- 命令字段指出报文的意义。例如:
- 1表示请求路由信息
- 2表示对请求路由信息的响应或未被请求而发出的路由更新报文
- 首部后面的“必为0”是为了4字节字的对齐
RIP2报文中的路由部分由若干个路由信息组成。每个路由信息需要用20个字节。
- 地址族标识符(又称为地址类别)字段用来标志所使用的地址协议。如采用IP地址就令这个字段的值为2
- 路由标记填入自治系统号ASN,这是考虑使RIP有可能收到本自治系统以外的路由选择信息。
- 再后面指出某个网络地址、该网络的子网掩码、下一跳路由器地址以及到此网络的距离。
一个RIP报文最多可包括25个路由,因而RIP报文的最大长度是4+20×25=504字节。如超过,必须再用一个RIP报文来传送。
RIP存在的一个问题是当网络出现故障时,要经过比较长的时间才能将此信息传送到所有的路由器。RIP协议的这一特点叫做:好消息传播得快,而坏消息传播得慢。网络出故障的传播时间往往需要较长的时间(例如数分钟)。这是RIP的一个主要缺点。但如果一个路由器发现了更短的路由,那么这种更新信息就传播得很快。
RIP协议最大的优点就是实现简单,开销较小
十.内部网关协议OSPF
1.OSPF协议的基本特点
这个协议的名字是开放最短路径优先OSPF。它是为克服RIP的缺点在1989年开发出来的。OSPF的原理很简单,但实现起来却较复杂。请注意:OSPF只是一个协议的名字,它并不表示其他的路由选择协议不是“最短路径优先”。实际上,所有的在自治系统内部使用的路由选择协议(包括RIP协议)都是要寻找条最短的路径。
OSPF最主要的特征就是使用分布式的链路状态协议,而不是像RIP那样的距离向量协议。和RIP协议相比,OSPF的三个要点和RP的都不一样
- 向本自治系统中所有路由器发送信息。这里使用的方法是洪泛法,这就是路由器通过所有输出端口向所有相邻的路由器发送信息。而每一个相邻路由器又再将此信息发往其所有的相邻路由器(但不再发送给刚刚发来信息的那个路由器)。这样,最终整个区域中所有的路由器都得到了这个信息的一个副本。我们应注意,RIP协议是仅仅向自己相邻的几个路由器发送信息。
- 发送的信息就是与本路由器相邻的所有路由器的链路状态,但这只是路由器所知道的部分信息。所谓“链路状态”就是说明本路由器都和哪些路由器相邻,以及该链路的度量。OSPF将这个“度量”用来表示费用、距离、时延、带宽,等等。有时为了方便就称这个度量为“代价”.我们应注意,对于RIP协议,发送的信息是:“到所有网络的距离和下一跳路由器”。
- 只有当链路状态发生变化时,路由器才向所有路由器用洪泛法发送此信息。而不像RIP那样,不管网络拓扑有无发生变化,路由器之间都要定期交换路由表的信息。
由于各路由器之间频繁地交换链路状态信息,因此所有的路由器最终都能建立一个链路状态数据库,这个数据库实际上就是全网的拓扑结构图。这个拓扑结构图在全网范围内是一致的。因此,每一个路由器都知道全网共有多少个路由器,以及哪些路由器是相连的,其代价是多少,等等。每一个路由器使用链路状态数据库中的数据,构造出自己的路由表。我们注意到,RIP协议的每一个路由器虽然知道到所有的网络的距离以及下一跳路由器,但却不知道全网的拓扑结构(只有到了下一跳路由器,才能知道再下一跳应当怎样走)
为了使OSPF能够用于规模很大的网络,OSPF将一个自治系统再划分为若干个更小的范围,叫做区城,下图就表示一个自治系统划分为四个区域。每一个区域都有一个32位的区域标识符(用点分十进制表示)。

划分区域的好处就是把利用洪泛法交换链路状态信息的范围局限于每一个区域而不是整个的自治系统,这就减少了整个网络上的通信量。在一个区域内部的路由器只知道本区域的完整网络拓扑,而不知道其他区域的网络拓扑的情况。为了使每一个区域能够和本区域以外的区域进行通信,OSPF使用层次结构的区域划分。在上层的区域叫做主干区域。主干区域的标识符规定为0.0.0.0。主干区域的作用是用来连通其他在下层的区域。从其他区域来的信息都由区域边界路由器进行概括。在图中,路由器R3,R4和R7都是区域边界路由器,而显然,每一个区域至少应当有一个区域边界路由器。在主干区域内的路由器叫做主干路由器,如R3,R4,Rs,R6和R7。一个主干路由器可以同时是区域边界路由器,如R3,R4和R7。在主干区域内还要有一个路由器专门和本自治系统外的其他自治系统交换路由信息。这样的路由器叫做自治系统边界路由器,如图中的R6。
2.OSPF协议的报文格式
OSPF不用UDP而是直接用IP数据报传送(其IP数据报首部的协议字段值为89)。OSPF构成的数据报很短。OSPF分组使用24字节的固定长度首部(见下图),分组的数据部分可以是五种类型分组中的一种。

下面简单介绍OSPF首部各字段的意义:
- 版本 当前的版本号是2
- 类型 可以是五种类型分组中的一种
- 分组长度 包括OSPF首部在内的分组长度,以字节为单位
- 路由器标识符 标志发送该分组的路由器的接口的IP地址
- 区域标识符 分组属于的区域的标识符
- 检验和 用来检测分组中的差错
- 鉴别类型 目前只有两种,0(不用)和1(口令),鉴别鉴别类型为0时就填入0,鉴别类型为1则填入8个字符的口令
3.OSPF的五种分组类型
OSPF共有以下五种分组类型
- 类型1,问候分组,用来发现和维持邻站的可达性。
- 类型2,数据库描述分组,向邻站给出自己的链路状态数据库中的所有链路状态项目的摘要信息。
- 类型3,链路状态请求分组,向对方请求发送某些链路状态项目的详细信息。
- 类型4,链路状态更新分组,用洪泛法对全网更新链路状态。这种分组是最复杂的,也是OSPF协议最核心的部分。路由器使用这种分组将其链路状态通知给邻站。
- 类型5,链路状态确认分组,对链路更新分组的确认。
OSPF规定,每两个相邻路由器每隔10秒钟要交换一次问候分组。这样就能确知哪些邻站是可达的。对相邻路由器来说,“可达”是最基本的要求,因为只有可达邻站的链路状态信息才存入链路状态数据库(路由表就是根据链路状态数据库计算出来的)。在正常情况下,网络中传送的绝大多数OSPF分组都是问候分组。若有40秒钟没有收到某个相邻路由器发来的问候分组,则可认为该相邻路由器是不可达的,应立即修改链路状态数据库,并重新计算路由表。其他的四种分组都是用来进行链路状态数据库的同步。所谓同步就是指不同路由器的链路状态数据库的内容是一样的。两个同步的路由器叫做“完全邻接的”路由器。不是完全邻接的路由器表明它们虽然在物理上是相邻的,但其链路状态数据库并没有达到一致。
OSPF让每一个路由器用数据库描述分组和相邻路由器交换本数据库中已有的链路状态摘要信息。摘要信息主要就是指出有哪些路由器的链路状态信息(以及其序号)已经写入了数据库。经过与相邻路由器交换数据库描述分组后,路由器就使用链路状态请求分组,向对方请求发送自己所缺少的某些链路状态项目的详细信息。通过一系列的这种分组交换,全网同步的链路数据库就建立了。下图给出了OSPF的基本操作,说明了两个路由器需要交换各种类型的分组:

在网络运行的过程中,只要一个路由器的链路状态发生变化,该路由器就要使用链路状态更新分组,用洪泛法向全网更新链路状态。OSPF使用的是可靠的洪泛法,其要点见下图所示。设路由器R用洪泛法发出链路状态更新分组。图中用一些小的箭头表示更新分组。
第一次先发给相邻的三个路由器。这三个路由器将收到的分组再进行转发时,要将其上游路由器除外。可靠的洪泛法是在收到更新分组后要发送确认(收到重复的更新分组只需要发送一次确认)。图中的空心箭头表示确认分组。

为了确保链路状态数据库与全网的状态保持一致,OSPF还规定每隔一段时间,如30分钟,要刷新一次数据库中的链路状态。
十一.外部网关协议BGP
我们首先应当弄清,在不同自治系统AS之间的路由选择为什么不能使用前面讨论过的内部网关协议,如RIP或OSPF?
我们知道,内部网关协议(如RIP或OSPF)主要是设法使数据报在一个AS中尽可能有效地从源站传送到目的站。在一个AS内部也不需要考虑其他方面的策略。然而BGP使用的环境却不同。这主要是因为以下的两个原因:
- 第一,互联网的规模太大,使得自治系统AS之间路由选择非常困难。
- 第二,自治系统AS之间的路由选择必须考虑有关策略。
由于上述情况,边界网关协议BGP只能是力求寻找一条能够到达目的网络且比较好的路由(不能兜圈子),而并非要寻找一条最佳路由。BGP采用了路径向量路由选择协议,它与距离向量协议和链路状态协议都有很大的区别。
1.BGP是如何工作的
在配置BGP时,每一个自治系统的管理员要选择至少一个路由器作为该自治系统的“BGP发言人”。一般说来,两个BGP发言人都是通过一个共享网络连接在一起的,而BGP发言人往往就是BGP边界路由器,但也可以不是BGP边界路由器。
一个BGP发言人与其他AS的BGP发言人要交换路由信息,就要先建立TCP连接,然后在此连接上交换BGP报文以建立BGP会话,利用BGP会话交换路由信息,如增加了新的路由,或撤销过时的路由,以及报告出差错的情况等等。使用TCP连接交换路由信息的两
个BGP发言人,彼此成为对方的邻站或对等站。
下图表示BGP发言人和自治系统AS的关系的示意图。在图中画出了三个自治系统中的5个BGP发言人。每一个BGP发言人除了必须运行BGP协议外,还必须运行该自治系统所使用的内部网关协议,如OSPF或RIP。

边界网关协议BGP所交换的网络可达性的信息就是要到达某个网络所要经过的一系列自治系统。当BGP发言人互相交换了网络可达性的信息后,各BGP发言人就根据所采用的策略从收到的路由信息中找出到达各自治系统的较好路由。
下图给出了一个BGP发言人交换路径向量的例子。自治系统AS2的BGP发言人通知主干网的BGP发言人:“要到达网络N1,N2,N3和N4可经过AS2”主干网在收到这个通知后,就发出通知:“要到达网络N1,N2,N3和N4可沿路径(AS1,AS2)”。同理,主干网还可发出通知:“要到达网络N5,N6和N7可沿路径(AS1,AS3)。”

BGP支持无分类域间路由选择CIDR,因此BGP的路由表也就应当包括目的网络前缀、下一跳路由器,以及到达该目的网络所要经过的自治系统序列。在BGP刚刚运行时,BGP的邻站是交换整个的BGP路由表。但以后只需要在发生变化时更新有变化的部分。
2.BGP的四种报文
- OPEN(打开)报文,用来与相邻的另一个BGP发言人建立关系,使通信初始化。
- UPDATE(更新)报文,用来通告某一路由的信息,以及列出要撤销的多条路由。
- KEEPALIⅤE(保活)报文,用来周期性地证实邻站的连通性。
- NOTIFICATION(通知)报文,用来发送检测到的差错。
若两个邻站属于两个不同AS,而其中一个邻站打算和另一个邻站定期地交换路由信息,这就应当有一个商谈的过程。因此,一开始向邻站进行商谈时就必须发送OPEN报文。如果邻站接受这种邻站关系,就用 KEEPALIVE报文响应。这样,两个BGP发言人的邻站关系就建立了。一旦邻站关系建立了,就要继续维持这种关系。双方中的每一方都需要确信对方是存在的,且一直在保持这种邻站关系。为此,这两个BGP发言人彼此要周期性地交换KEEPALIVE报文(一般每隔30秒)。UPDATE报文是BGP协议的核心内容。BGP发言人可以用 UPDATE报文撤销它以前曾经通知过的路由,也可以宣布增加新的路由。撤销路由可以一次撤销许多条,但增加新路由时,每个更新报文只能增加一条。
下图给出了BGP报文的格式。四种类型的BGP报文具有同样的通用首部,其长度为19字节。通用首部分为三个字段。标记 字段为16字节长,用来鉴别收到的BGP报文。当不使用鉴别时,标记字段要置为全1。长度字段指出包括通用首部在内的整个BGP报文以字节为单位的长度,最小值是19,最大值是4096。类型字段的值为1到4,分别对应于上述四种BGP报文中的一种。

3.OPEN报文
OPEN报文共有6个字段,即版本(1字节,现在的值是4)、本自治系统号(2字节)、保持时间(2字节)、BGP标识符(4字节,通常就是该路由器的IP地址),可选参数长度(1字节)和可选参数。
4.UPDATE报文
UPDATE报文共有5个字段,即不可行路由长度(2字节,指明下一个字段的长度)、撤销的路由(列出所有要撤销的路由)、路径属性总长度(2字节,指明下一个字段的长度)、路径属性(定义在这个报文中增加的路径的属性)和网络层可达性信息NLRI
。最后这个字段定义发出此报文的网络,包括网络前缀的位数、IP地址前缀。
5.KEEPALIVE报文
KEEPALIVE报文只有BGP的19字节长的通用首部。
6.NOTIFICATION报文
NOTIFICATION报文有3个字段,即差错代码(1字节)、差错子代码(1字节)和差错数据(给出有关差错的诊断信息)。
十二.路由器的构成
关于路由器的内容,我在其他博客中已经详细讲解,感兴趣的读者可自行学习
链接:https://blog.csdn.net/ThinPikachu/article/details/105713671
十三.IPv6
1.什么是IPv6
关于IPv6的内容,我在其他博客中已经详细讲解,感兴趣的读者可自行学习
链接:https://blog.csdn.net/ThinPikachu/article/details/105715620
2.从IPv4向IPv6过渡
由于现在整个互联网的规模太大,因此,“规定一个日期,从这一天起所有的路由器一律都改用IPv6”,显然是不可行的。这样,向IPv6过渡只能采用逐步演进的办法,同时,还必须使新安装的IPv6系统能够向后兼容。这就是说,IPv6系统必须能够接收和转发IPV4
分组,并且能够为IPv4分组选择路由。下面介绍两种向IPv6过渡的策略,即使用双协议栈和使用隧道技术。
双协议栈:双协议栈是指在完全过渡到IPv6之前,使一部分主机(或路由器)装有双协议栈:一个IPv4和一个IPv6。因此双协议栈主机(或路由器)既能够和IPv6的系统通信,又能够和IPv4的系统通信。双协议栈的主机(或路由器)记为IPv6/IPV4,表明它同时
具有两种IP地址:一个IPv6地址和一个IPV4地址。双协议栈主机在和IPV6主机通信时采用IPv6地址,而和IPv4主机通信时则采用IPv4
地址。但双协议栈主机怎样知道目的主机是采用哪一种地址呢?它是使用域名系统DNS来查询的。若DNS返回的是IPV4地址,双协议栈的源主机就使用IPv4地址。但当DNS返回的是IPv6地址,源主机就使用IPv6地址。
隧道技术:向IPv6过渡的另一种方法是隧道技术。下图给出了隧道技术的工作原理。这种方法的要点就是在IPv6数据报要进入IPV4网络时,把IPv6数据报封装成为IPv4数据报。现在整个的IPv6数据报变成了IPⅵ4数据报的数据部分。这样的IPv4数据报从路由器B经过路由器C和D,传送到E,而原来的IPv6数据报就好像在IPv4网络的隧道中传输,什么都没有变化。当IPV4数据报离开IPv4网络中的隧道时,再把数据部分(即原来的IPv6数据报)交给主机的IPv6协议栈。图中的一条粗线表示在IPV4网络中好像有一个从B到E的“IPv6隧道”,路由器B是隧道的入口而E是出口。请注意,在隧道中传送的数据报的源地址是B而目的地址是E。要使双协议栈的主机知道IPv4数据报里面封装的数据是一个IPv6数据报,就必须把IPV4首部的协议字段的值设置为41(41表示数据报的数据部分是IPv6数据报)。

3.ICMPv6
和IPv4一样,IPV6也不保证数据报的可靠交付,因为互联网中的路由器可能会丢弃数据报。因此IPv6也需要使用ICMP来反馈一些差错信息。新的版本称为 ICMPv6,它比ICMPv4要复杂得多。地址解析协议ARP和网际组管理协议IGMP的功能都已被合并到 ICMPv6
中。

ICMPv6是面向报文的协议,它利用报文来报告差错,获取信息,探测邻站或管理多播通信。 ICMPv6还增加了几个定义报文功能及含义的其他协议。
十四.IP多播
1.IP多播的基本概念
现在IP多播,已成为互联网的一个热门课题。这是由于有许多的应用需要由一个源点发送到许多个终点,即一对多的通信。与单播相比,在一对多的通信中,多播可大大节约网络资源。下图(b)是视频服务器用单播方式向90台主机传送同样的视频节目。为此,需要发送90个单播,即同一个视频分组要发送90个副本。下图(a)是视频服务器用多播方式向属于同一个多播组的90个成员传送节目。这时,视频服务器只需把视频分组当作多播数据报来发送,并且只需发送一次。路由器R1在转发分组时,需要把收到的分组复制成3个副本,分别向R2、R3和R4各转发个副本。当分组到达目的局域网时,由于局域网具有硬件多播功能,因此不需要复制分组,在局域网上的多播组成员都能收到这个视频分组。


当多播组的主机数很大时(如成千上万个),采用多播方式就可明显地减轻网络中各种资源的消耗。在互联网范围的多播要靠路由器来实现,这些路由器必须增加一些能够识别多播数据报的软件。能够运行多播协议的路由器称为多播路由器。当然也可以转发普通的单播IP数据报在互联网上进行多播就叫做IP多播。IP多播所传送的分组需要使用多播IP地址。
2.IP多播如何工作
在互联网上进行多播就叫做IP多播。IP多播所传送的分组需要使用多播IP地址。我们知道,在互联网中每一台主机必须有一个全球唯一的IP地址。如果某台主机现在想接收某个特定多播组的分组,那么怎样才能使这个多播数据报传送到这台主机?
显然,这个多播数据报的目的地址一定不能写入这台主机的P地址。这是因为在同时间可能有成千上万台主机加入到同一个多播组。多播数据报不可能在其首部写入这样多的主机的IP地址。在多播数据报的目的地址写入的是多播组的标识符,然后设法让加入到这个多播组的主机的IP地址与多播组的标识符关联起来。
其实多播组的标识符就是IP地址中的D类地址。D类IP地址的前四位是1110,因此D类地址范围是224.0.0.0到239.255.255.255我们就用每一个D类地址标志一个多播组。这样,D类地址共可标志228个多播组,也就是说,在同一时间可以允许有超过26亿的多播组在互联网上运行。多播数据报也是“尽最大努力交付”,不保证一定能够交付多播组内的所有成员。因此,多播数据报和一般的IP数据报的区别就是它使用D类IP地址作为目的地址,并且首部中的协议字段值是2,表明使用网际组管理协议IGMP。显然,多播地址只能用于目的地址,而不能用于源地址。此外,对多播数据报不产生ICMP差错报文。因此,若在PING命令后面键入多播地址,将永远不会收到响应。
IP多播可以分为两种。一种是只在本局域网上进行硬件多播,另一种则是在互联网的范围进行多播。在互联网上进行多播的最后阶段,还是要把多播数据报在局域网上用硬件多播交付多播组的所有成员。下面就先讨论这种硬件多播。
十五.网际组管理协议IGMP和多播路由选择协议
1.IP多播需要两种协议
下图是在互联网上传送多播数据报的例子。图中标有IP地址的四台主机都参加了一个多播组,其组地址是226.15.37.123。显然,多播数据报应当传送到路由器R1,R2和R3,而不应当传送到路由器R4,因为与R4连接的局域网上现在没有这个多播组的成员。但这些
路由器又怎样知道多播组的成员信息呢?这就要利用一个协议,叫做网际组管理协议IGMP。

上图强调了IGMP的本地使用范围。请注意,IGMP并非在互联网范围内对所有多播组成员进行管理的协议。IGMP不知道IP多播组包含的成员数,也不知道这些成员都分布在哪些网络上,等等。IGMP协议是让连接在本地局域网上的多播路由器知道本局域网上是否有主机(严格讲,是主机上的某个进程)参加或退出了某个多播组。显然,仅有lGMP协议是不能完成多播任务的。连接在局域网上的多播路由器还必须和互联网上的其他多播路由器协同工作,以便把多播数据报用最小代价传送给所有的组成员。这就需要使用多播路由选择协议。
然而多播路由选择协议要比单播路由选择协议复杂得多。我们可以通过一个简单的例子来说明。

我们假定上图中有两个多播组。多播组①的成员有主机A,B和C,而多播组②的成员有主机D,E和F。这些主机分布在三个网络上(N1,N2和N3)。路由器R不应当向网络N3转发多播组①的分组,因为网络N3上没有多播组①的成员。但是每一台主机可以随时加入或离开一个多播组。例如,如果主机G现在加入了多播组①,那么从这时起,路由器R就必须也向网络N3转发多播组①的分组。这就是说,多播转发必须动态地适应多播组成员的变化(这时网络拓扑并未发生变化)。请注意,单播路由选择通常是在网络拓扑发生变化时才需要更新路由。
再看一种情况。主机E和F都是多播组②的成员。当E向F发送多播数据报时,路由器R把这个多播数据报转发到网络N3。但当F向E发送多播数据报时,路由器R则把多播数据报转发到网络N2。如果路由器R收到来自主机A的多播数据报(A不是多播组②的成员,但也可向多播组发送多播数据报),那么路由器R就应当把多播数据报转发到N2和N3。由此可见,多播路由器在转发多播数据报时,不能仅仅根据多播数据报中的目的地址,而是还要考虑这个多播数据报从什么地方来和要到什么地方去。
还有一种情况。主机G没有参加任何多播组,但G却可向任何多播组发送多播数据报。例如,G可向多播组①或②发送多播数据报。主机G所在的局域网上可以没有任何多播组的成员。显然,多播数据报所经过的许多网络,也不一定非要有多播组成员。总之,多播数据报可以由没有加入多播组的主机发出,也可以通过没有组成员接入的网络。正因为如此,IP多播就成为比较复杂的问题。下面介绍这两种协议的要点。
2.网际组管理协议IGMP
和网际控制报文协议ICMP相似,IGMP使用IP数据报传递其报文(即IGMP报文加上IP首部构成IP数据报),但它也向IP提供服务。因此,我们不把IGMP看成是一个单独的协议,而是属于整个网际协议IP的一个组成部分。从概念上讲,IGMP的工作可分为两个阶段:
第一阶段:当某台主机加入新的多播组时,该主机应向多播组的多播地址发送IGMP报文,声明自己要成为该组的成员。本地的多播路由器收到IGMP报文后,还要利用多播路由选择协议把这种组成员关系转发给互联网上的其他多播路由器。
第二阶段:组成员关系是动态的。本地多播路由器要周期性地探询本地局域网上的主机,以便知道这些主机是否还继续是组的成员。只要有一台主机对某个组响应,那么多播路由器就认为这个组是活跃的。但一个组在经过几次的探询后仍然没有一台主机响应,多播路由器就认为本网络上的主机已经都离开了这个组,因此也就不再把这个组的成员关系转发给其他的多播路由器。多播路由器只需要知道网络上是否至少还有一台主机是本组成员即可。实际上,对询问报文每一个组只需有一台主机发送响应。如果一台主机上有多个进程都加入了某个多播组,那么这台主机对发给这个多播组的每个多播数据报只接收一个副本,然后给主机中的每一个进程发送一个本地复制的副本。
最后我们还要强调指出,多播数据报的发送者和接收者都不知道(也无法找出)一个多播组的成员有多少,以及这些成员是哪些主机。互联网中的路由器和主机都不知道哪个应用进程将要向哪个多播组发送多播数据报,因为任何应用进程都可以在任何时候向任何一个多播组发送多播数据报,而这个应用进程并不需要加入这个多播组。
3.多播路由选择协议
在多播过程中一个多播组中的成员是动态变化的。例如在收听网上某个广播节目时,随时会有主机加入或离开这个多播组。多播路由选择实际上就是要找出以源主机为根节点的多播转发树。在多播转发树上,每一个多播路由器向树的叶节点方向转发收到的多播数据
报,但在多播转发树上的路由器不会收到重复的多播数据报(即多播数据报不应在互联网中兜圈子)。不难看岀,对不同的多播组对应于不同的多播转发树。同一个多播组,对不同的源点也会有不同的多播转发树。已有了多种实用的多播路由选择协议,它们在转发多播数据报时使用了以下的三种方法:
- 洪泛与剪除 这种方法适合于较小的多播组,而所有的组成员接入的局域网也是相邻接的。
- 隧道技术 隧道技术适用于多播组的位置在地理上很分散的情况。
- 基于核心的发现技术 这种方法对于多播组的大小在较大范围内变化时都适合。
十六. 网络地址转换NAT
1.网络地址转换NAT
关于NAT的内容,我在其他博客中已经详细讲解,感兴趣的读者可自行学习
链接:https://blog.csdn.net/ThinPikachu/article/details/105754570
十七.多协议标记交换MPLS
1.什么是MPKS
MPLS利用面向连接技术,使每个分组携带一个叫做标记的小整数。当分组到达交换机(即标记交换路由器)时,交换机读取分组的标记,并用标记值来检索分组转发表。这样就比查找路由表来转发分组要快得多。
MPLS具有以下三个方面的特点:
- 支持面向连接的服务质量。
- 支持流量工程,平衡网络负载。
- 有效地支持虚拟专用网VPN。
2.MPLS的工作原理
在传统的IP网络中,分组每到达一个路由器,都必须查找路由表,并按照“最长前缀匹配”的原则找到下一跳的IP地址(请注意,前缀的长度是不确定的)。当网络很大时,查找含有大量项目的路由表要花费很多的时间。在出现突发性的通信量时,往往还会使缓存溢出,这就会引起分组丢失、传输时延增大和服务质量下降。MPLS的一个重要特点就是在MPLS域的入口处,给每一个IP数据报打上固定长度“标记”,然后对打上标记的IP数据报用硬件进行转发,这就使得IP数据报转发的过程大大地加快了。采用硬件技术对打上标记的IP数据报进行转发就称为标记交换。“交换”也表示在转发时不再上升到第三层査找转发表,而是根据标记在第二层(链路层)用硬件进行转发。MPLS可使用多种链路层协议,如PPP、以太网、ATM以及帧中继等。下图是MPLS协议的基本原理的示意图。

MPLS域是指该域中有许多彼此相邻的路由器,并且所有的路由器都是支持MPLS技术的标记交换路由器 LSR 。LSR同时具有标记交换和路由选择这两种功能,标记交换功能是为了快速转发,但在这之前LSR需要使用路由选择功能构造转发表。
上图中给出了MPLS的基本工作过程如下:
- MPLS域中的各LSR使用专门的标记分配协议LDP交换报文,并找出和特定标记相对应的路径,即标记交换路径LSP。例如
在图中的路径A→B→C→D。各LSR根据这些路径构造出转发表。这个过程和路由器构造自己的路由表相似。应注意的是,MPLS是面向连接的,因为在标记交换路径LSP上的第一个LSR就根据IP数据报的初始标记确定了整个的标记交换路径,就像一条虚连接一样。 - 当一个IP数据报进入到MPLS域时,MPLS入口结点就给它打上标记(后面我们就会知道,这实际上是插入一个MPLS首部),并按照转发表把它转发给下一个LSR。以后的所有LSR都按照标记进行转发给IP数据报打标记的过程叫做分类。严格的第三层(网络层)分类只使用了IP首部中的字段,如源IP地址和目的IP。
- 由于在全网内统一分配全局标记数值是非常困难的,因此一个标记仅仅在两个标记交换路由器LSR之间才有意义。分组每经过一个LSR,LSR就要做两件事:一是转发,是更换新的标记,即把入标记更换成为出标记。这就叫做标记对换。做这两件事所需的数据都已清楚地写在转发表中。例如,上图中的标记交换路由器B从入接口0收到一个入标记为3的IP数据报,查找了如下的转发表:
,标记交换路由器B就知道应当把该IP数据报从出接口1转发出去,同时把标记对换为1。当IP数据报进入下一个LSR时,这时的入标记就是刚才得到的出标记。因此,标记交换路由器C接着在转发该IP数据报时,又把入标记1对换为出标记2。 - 当IP数据报离开MPLS域时,MPLS出口结点就把MPLS的标记去除,把IP数据报交付非MPLS的主机或路由器,以后就按照普通的转发方法进行转发。
上述的这种“由入口LSR确定进入MPLS域以后的转发路径”称为显式路由选择。
3.转发等价类FEC
MPLS有个很重要的概念就是转发等价类FEC。所谓“转发等价类”就是路由器按照同样方式对待的IP数据报的集合。这里“按照同样方式对待”表示从同样接口转发到同样的下一跳地址,并且具有同样服务类别和同样丢弃优先级等。FEC的例子是:
- 目的IP地址与某一个特定IP地址的前缀匹配的IP数据报(这就相当于普通的IP路由器)
- 所有源地址与目的地址都相同的IP数据报
- 具有某种服务质量需求的IP数据报
总之,划分FEC的方法不受什么限制,这都由网络管理员来控制,因此非常灵活。入口结点并不是给每一个IP数据报指派一个不同的标记,而是将属于同样FEC的IP数据报都指派同样的标记。FEC和标记是一一对应的关系。
例如:
下图(a)给出一个把FEC用于负载平衡的例子。图(a)的主机H1和H2分别向H3和H4发送大量数据。路由器A和C是数据传输必须经过的。但传统的路由选择协议只能选择最短路径A→B→C,这就可能导致这段最短路径过载。
图(b)表示在MPLS的情况下,入口结点A可设置两种FEC:“源地址为H而目的地址为H3”和“源地址为H2而目的地址为H4”,把前一种FEC的路径设置为H1→A→B→C→H3,而后一种的路径设置为H2→A→D→E→C→H4这样可使网络的负载较为平衡。
4.MPLS首部的位置与格式
MPLS并不要求下层的网络都使用面向连接的技术。因此一对MPLS路由器之间的物理连接,既可以由一个专用电路组成,也可以使用像以太网这样的网络。但是这些网络并不提供打标记的手段,而IPv4数据报首部也没有多余的位置存放MPLS标记。这就需要使用一种封装技术:在把IP数据报封装成以太网帧之前,先要插入一个MPLS首部。从层次的角度看,MPLS首部就处在第二层和第三层之间。在把加上MPLS首部的IP数据报封装成以太网帧时,以太网的类型字段在单播的情况下设置为,而在多播的情况下为
。这样,接收方可以用帧的类型来判决这个帧是携带了MPLS标记还是一个常规的IP数据报。

上图给出了MPLS首部的格式。可见“给IP数据报打上标记”其实就是在以太网的帧首部和IP数据报的首部之间插入一个4字节的MPLS首部。具体的标记就在“标记值”这个字段中。

MPLS首部共包括以下四个字段:
- 标记值 占20位。由于一个MPLS标记占20位。
- 试验 占3位,目前保留用于试验。
- 栈S 占1位,在有“标记栈”时使用。
- 生存时间TTL 占8位,用来防止MPLS分组在MPLS域中兜圈子。


