一,网络层的几个重要概念
1,网络层提供的两种服务
- 在计算机网络领域,网络层应该向运输层提供怎样的服务(“面向连接”还是“无连接”)引起了长期的争论。
- 争论的焦点就是:在计算机通信中,可靠交付应当由谁来负责?是网络还是端系统。
1,让网络负责可靠交付
-
此观点认为,应借助于电信网的成功经验,让网络负责可靠交付,计算机网络应模仿电信网络,使用面向连接的通信方式。
-
通信之前先建立虚电路(Virtual Circuit),以保证双方通信所需的一切网络资源。
-
如果再使用可靠传输的网络协议,就可使所发送的分组无差错按序到达终点,不丢失,不重复。
-
虚电路表示这只是一条逻辑上的连接,分组都沿着这条逻辑连接按照存储转发方式传送,而并不是真正建立了一条物理连接。
-
电路交换的电话通信是先建立了一条真正的连接。
-
因此分组交换的虚电路和电路交换的连接只是类似,但并不完全一样。
2,网络提供数据报服务
- 网络层要设计得尽量简单,向其上层提供简单灵活的,无连接的,尽最大努力交付的数据报(分组)服务。
- 网络在发送分组时不需要先建立连接,每一个分组(即IP数据报)独立发送,与其前后的分组无关(不进行编号)。
- 网络层不提供服务质量的承诺。即所传送的分组可能出错,丢失,重复和失序(不按序到达终点),当然也不保证分组传送的时限。
- 由于传输网络不提供端到端的可靠传输服务,这就使网络中的路由器比较简单,且价格低廉(与电信网的交换机相比较)。
- 如果主机(即端系统)进程之间需要进行可靠的通信,那么就由主机中的运输层负责(包括差错处理,流量控制等)。
- 采用这种设计思路的好处是:网络造价大大降低,运行方式灵活,能够适应多种应用。互联网能够发展到今日的规模,充分证明了当初采用这种设计思路的正确性。
3,虚电路服务与数据报服务的对比
对比的方面 | 虚电路服务 | 数据报服务 |
---|---|---|
思路 | 可靠通信应当由网络来保证 | 可靠通信应当由用户主机来保证 |
连接的建立 | 必须有 | 不需要 |
终点地址 | 仅在连接建立阶段使用,每个分组使用短的虚电路号 | 每个分组独立查找转发表进行转发 |
分组的转发 | 属于同一条虚电路的分组均按照同一路由进行转发 | 每个分组独立查找转发表进行转发 |
当节点出现故障时 | 所有通过出故障的节点的虚电路均不能工作 | 出故障的节点可能会丢失分组,一些路由可能会发生变化 |
分组的顺序 | 总是按发送顺序到达终点 | 到达终点的顺序不一定按发送的顺序 |
端到端的差错处理和流量控制 | 可以由网络负责,也可以由用户主机负责 | 由用户主机负责 |
2,网络层的两个层面
-
路由器之间传送的信息有两大类
- 第一类是转发源主机和目的主机之间所传送的数据,把源主机所发送的分组,像接力一般从一个路由器转发到下一个路由器,最后把分组传送到目的主机。
- 第二类则是传送路由信息,是根据路由选择协议所使用的路由算法,彼此不断地交换路由信息分组,目的是为了在路由器中创建路由表,并由此导出为转发分组而用的转发表。这一类信息的传送是为第一类数据的传送服务的。
-
用下图的方法来描述,就是把网络层抽象地划分为数据层面(或转发层面)和控制层面。
-
- 在数据层面中,每一个路由器根据本路由器生成的转发表,把收到的分组,从查找到的对应接口转发出去。为了加快转发的速率,现在的路由器通常都采用硬件进行转发,转发一个分组的时间为纳秒( 1 0 − 9 10^{-9} 10−9秒)数量级。
- 在控制层面中,一个路由器不可能独自创建出路由表。路由器必须和相邻的路由器经常交换路由信息,然后才能创建出本路由器的路由表。根据路由选择协议所用的路由算法计算路由要使用软件,这就慢多了,一般是秒的数量级。
- 数据层面的问题比较单纯,因为路由器在转发分组时,是独立地根据本路由器的转发表转发分组的,但控制层面就比较复杂,因为路由器要创建路由表,就必须依靠许多路由器协同动作。不同的路由选择协议定义了不同的协同动作方式。
1,软件定义网络SDN(Software Defined Network)
-
在传统的互联网中,每一个路由器中,既有转发表又有路由选择软件。也就是说,每个路由器中,既有数据层面也有控制层面。
-
在SDN结构中,所有的路由器都变简单了。路由器中的路由选择软件都不存在了,因此路由器之间不再相互交换路由信息。在网络的控制层面有一个在逻辑上集中的远程控制器(但在物理上可以由不同地点的多个服务器组成)。远程控制器掌握各主机和整个网络的状态,能够为每一个分组计算出最佳的路由,然后在每一个路由器中生成其正确的转发表。路由器的工作很单一,即收到分组,查找转发表,转发分组。
-
这样,网络又变成为集中控制的。本来互联网是分散控制的,为什么现在又提出集中控制呢?
- 软件定义网络SDN的提出,并非现在要把整个互联网都改造为上图所示的集中控制模式,这是不现实的。然而在某些具体条件下,特别是像一些大型的专用数据中心之间的广域网,若使用SDN模式来建造,就可以使网络运行的效率提高,同时还可以获得更好的经济效益。
二,网际协议IP
- 网际协议IP(Internet Protocol)是TCP/IP体系中两个最主要的协议之一。
- 与IP协议配套使用的还有三个协议:
- 地址解析协议ARP(Address Resolution Protocol)
- 网际控制报文协议ICMP(Internet Control Message Protocol)
- 网际组管理协议IGMP(Internet Group Management Protocol)
- 下图展示了上面三个协议与IP的关系。
-
ARP画在最下面,因为IP经常要使用这个协议。
-
ICMP和IGMP画在这一层的上部,因为它们要使用协议IP。
-
由于网际协议IP是用来使互连起来的许多计算机网络能够进行通信的,因此TCP/IP体系中的网络层常常称为网际层(internet layer)。或IP层。
1,虚拟互连网络
- 将网络互连并能够互相通信,会遇到许多问题需要解决,如:
- 不同的寻址方案。
- 不同的最大分组长度。
- 不同的网络接入机制。
- 不同的超时控制。
- 不同的差错恢复方法。
- 不同的状态报告方法。
- 不同的路由选择技术。
- 不同的用户接入控制。
- 不同的服务(面向连接服务和无连接服务)
- 不同的管理与控制方式等。
- 从一般的概念来讲,将网络互相连接起来要使用一些中间设备。根据中间设备所在的层次,可以有以下几种不同的中间设备:
- 物理层使用的中间设备叫做转发器(repeater)。
- 数据链路层使用的中间设备叫做网桥或桥接器(bridge),以及交换机(switch)。
- 网络层使用的中间设备叫做路由器(router)。
- 网桥和路由器的混合物桥路器(brouter)。
- 在网络层以上使用的中间设备叫做网关(gateway)。用网关连接两个不兼容的系统需要在高层进行协议的转换。
1,网络互连使用路由器
- 当中间设备是转发器或网桥时,这仅仅是把一个网络扩大了,而从网络层的角度看,这仍然是一个网络,一般并不称为网络互连。
- 网关由于比较复杂,目前使用的较少。
- 网络互连都是指用路由器进行网络互连和路由选择。
- 由于历史原因,许多有关TCP/IP的文献将网络层使用的路由器称为网关。
2,互连网络与虚拟互连网络
- 下图(a)表示有许多计算机网络通过一些路由器进行互连。由于参加互连的计算机网络都使用相同的网际协议IP(Internet Protocol),因此可以把互连以后的计算机网络看成为如图(b)所示的一个虚拟互连网络(internet)。
3,虚拟互连网络的意义
-
所谓虚拟互连网络也就是逻辑互连网络,它的意思就是互连起来的各种物理网络的异构性本来是客观存在的,但是我们利用IP协议就可以使这些性能各异的网络在网络层上看起来好像是一个统一的网络。
-
这种使用协议IP的虚拟互连网络可简称为IP网。
-
使用IP网的好处是:当IP网上的主机进行通信时,就好像在一个单个网络上通信一样,它们看不见互连的各网络的具体异构细节。
-
如果在这种覆盖全球的IP网的上层使用TCP协议,那么就是现在的互联网(Internet)
-
互联网中的源主机H1要把一个IP数据报发送给目的主机H2。主机H1先要检查自己的转发表,看目的主机H2是否就在本网络上。如是,则不需要经过任何路由器而是直接交付,任务就完成了。如不是,则必须把IP数据报发送给某个路由器(下图R1)。R1在查找了自己的转发表后,知道应当把数据报转发给R2进行间接交付。这样一直转发下去,最后由路由器R5知道自己是和H2连接在同一个网络上,不需要再使用别的路由器转发了,于是就把数据报直接交付目的主机H2。总之,分组从源节点A发送到目的节点B,若中间必须经过一个或几个路由器(这表示A和B不在同一个网络上),则是间接交付。但若不需要经过路由器(这表示A和B在同一个网络上),则是直接交付。
-
- 分组在传送途中的每一次转发都称为一“跳(hop)”。路由器在转发分组时也常常使用“下一跳(next hop)”的说法。每一跳两端的两个节点都必定直接连接在同一个网络上。在上面所举的例子中,前5跳都是间接交付,只有最后一跳是直接交付。
2,IP地址
1,IP地址及其表示方法
-
IP地址就是给连接到互联网上的每一台主机(或路由器)的每一个接口,分配一个在全世界范围内是唯一的32位的标识符。
-
IP地址的结构使我们可以在互联网上很方便地进行寻址。
-
IP地址现在由互联网名字和数字分配机构ICANN(Internet Corporation for Assigned Names and Numbers)进行分配。
-
对主机或路由器来说,IP地址都是32位的二进制代码。为了便于人们书写和记忆,常用其等效的十进制数字表示,并且在每段数字之间加上一个小数点,这就叫做点分十进制记法(dotted decimal notation)。如下是一个IP地址表示方法的例子。
-
32位的IP地址采用两级结构,由两个字段组成。第一个字段是网络号,它标志主机(或路由器)所连接到的网络。一个网络号在整个互联网范围内必须是唯一的。第二个字段是主机号,它标志该主机(对路由器来说,就是标志该路由器)。一个主机号在所连接的网络中必须是唯一的。一个IP地址在整个互联网范围内是唯一的。因此,IP地址可以记为:
- IP地址 ::= {<网络号>,<主机号>}
- “::=”表示“定义为”。
- IP地址中包含网络号就表明,不连网的主机就没有IP地址。IP地址指明了连接到某个网络上的一个主机(或路由器)。
- IP地址中的前n位是主机所连接的网络号,而IP地址中后面的**(32-n)位是主机号**。
2,分类的IP地址
- 互联网早期采用的分类的IP地址,这里A类(n=8),B类(n=16)和C类(n=24)地址都是单播地址(一对一通信),是最常用的。D类是多播地址(一对多通信),而E类是保留地址。
- 32位的IP地址空间共有
2
32
2^{32}
232个地址。
- A类地址空间共有 2 31 2^{31} 231个地址,占整个IP地址空间的50%。
- B类地址空间共有 2 30 2^{30} 230个地址,占整个IP地址空间的25%。
- C类地址空间共有 2 29 2^{29} 229个地址,占整个IP地址空间的12.5%。
- D类和E类地址各占整个IP地址的6.25%。
- A类地址的网络号字段占1个字节,只有7位可供使用(该字段的第一位已固定为0)。
- 第一,网络号为全0的IP地址有特殊用途,表示“本网络”。
- 第二,网络号为127(即01111111)保留作为本地软件环回测试(loopback test)本主机的进程之间的通信之用。若主机发送一个目的地址为环回地址(如127.0.0.1)的IP数据报,则本主机中的协议软件就处理数据报中的数据,而不会把数据报发送到任何网络。因此A类地址可指派的网络号是126个(即 2 7 − 2 2^7-2 27−2)。
- A类地址的主机号占3个字节。但全0和全1的主机号一般不指派。全0的主机号表示该IP地址是“本主机”所连接到的单个网络地址。全1表示“所有的”,因此全1的主机号字段表示该网络上的所有主机。因此每一个A类网络中的最大主机数是 2 24 − 2 2^{24}-2 224−2。
- B类地址的网络号字段有2个字节。因此B类地址可指派的网络数为 2 14 − 2 2^{14}-2 214−2。B类地址的每一个网络上的最大主机数是 2 16 − 2 2^{16}-2 216−2。这里需要减2是因为要扣除全0和全1的主机号。
- C类地址有3个字节的网络号字段。因此C类地址可指派的网络总数是 2 21 − 2 2^{21}-2 221−2。每个C类地址的最大主机数是 2 8 − 2 2^8-2 28−2。
1,常用的三种类别的IP地址指派范围
网络类别 | 最大可指派的网络数 | 第一个可指派的网络号 | 最后一个可指派的网络号 | 每个网络中最大主机数 |
---|---|---|---|---|
A | 126 ( 2 7 − 2 ) (2^7-2) (27−2) | 1 | 126 | 16777214 |
B | 16382 ( 2 14 − 2 ) (2^{14}-2) (214−2) | 128.1 | 191.255 | 65534 |
C | 2097150 ( 2 21 − 2 ) (2^{21}-2) (221−2) | 192.0.1 | 223.255.255 | 254 |
2,一般不指派的特殊IP地址
网络号 | 主机号 | 源地址使用 | 目的地址使用 | 代表的意思 |
---|---|---|---|---|
0 | 0 | 可以 | 不可 | 在本网络上的本主机 |
0 | X | 可以 | 不可 | 在本网络上主机号为X的主机 |
全1 | 全1 | 不可 | 可以 | 只在本网络上进行广播(各路由器均不转发) |
Y | 全1 | 不可 | 可以 | 对网络号为Y的网络上的所有主机进行广播 |
127 | 非全0或全1的任何数 | 可以 | 可以 | 用于本地软件环回测试 |
3,无分类编址CIDR
- 这种编址方法的全名是无分类域间路由选择CIDR(Classless Inter-Domain Routing)。其要点有以下三个:
- 网络前缀
- 地址块
- 地址掩码
1,网络前缀
-
CIDR将传统IP中的网络号改称为“网络前缀”(network-prefix),用来指明网络,剩下的后面部分仍然是主机号,用来指明主机。也有文献将主机号字段称为后缀(suffix)。CIDR的记法是:
- IP地址 ::= {<网络前缀>,<主机号>}
-
上面两个图看起来没有什么区别。只是将“网络号”变成了“网络前缀”。其实不然。这里最大的区别就是网络前缀的位数n不是固定的数,而是可以在0~32之间选取任意的值。
-
CIDR使用“斜线记法”(slash notation),或称为CIDR记法,即在IP地址后面加上斜线“/”,斜线后面是网络前缀所占的位数。
- 如:CIDR表示一个IP地址128.14.35.7/20,二进制IP地址的前20位是网络前缀(相当于原来的网络号),剩下后面12位是主机号。
2,地址块
-
CIDR把网络前缀都相同的所有连续的IP地址组成一个“CIDR地址块”。一个CIDR地址块包含的IP地址数目,取决于网络前缀的位数。
-
我们只需要知道CIDR地址块中的任何一个地址,就可以知道这个地址块的最小地址和最大地址,以及地址块中的地址数。
-
如:已知IP地址128.14.35.7/20是某CIDR地址块中的一个地址,现在把它写成二进制表示形式,其中的前20位是网络前缀,而前缀后面的12位是主机号:
-
128.14.35.7/20 = 10000000 00001110 00100011 00000111
-
可以很方便得出这个地址所在的地址块中的最小地址和最大地址:
-
最小地址 128.14.32.0 10000000 00001110 00100000 00000000 最大地址 128.14.47.255 10000000 00001110 00101111 11111111
-
-
这个地址块的IP地址共有 2 12 2^{12} 212个,扣除主机号为全0和全1的地址(最小地址和最大地址)后,可指派的地址数是 2 12 − 2 2^{12}-2 212−2个。
-
我们常使用地址块中的最小地址和网络前缀的位数指明一个地址块。显然,上面导出的最小地址并不是该地址128.14.32.0/20的网络地址。在不需要指明网络地址时,也可把这样的地址块简称为“/20地址块”。
-
-
注意下面例子
- 128.14.32.7是IP地址,但未指明网络前缀长度,因此不知道网络地址是什么。
- 128.14.32.7/20也是IP地址,但同时指明网络前缀为20位,由此可导出网络地址。
- 128.14.32.0/20是包含多个IP地址的地址块或网络前缀,或称为前缀,同时也是这个地址块中主机号为全0的地址。地址块中4段十进制数字最后的0有时可以省略,即简写为128.14.32/20。我们不能仅用128.14.32.0来指明一个网络地址,因为无法知道网络前缀是多少。
-
早期使用分类的IP地址时,A类网络的前缀是8位,B类网络的前缀是16位,而C类网络的前缀是24位,都是固定值,因此不需要重复指明其网络前缀。采用CIDR后,仅从斜线左边的IP地址已无法知道其网络地址。在这一点上,原来的分类地址还是比较方便。
3,地址掩码
-
地址掩码(address mask)(简称为掩码)由一连串1和接着的一连串0组成,而1的个数就是网络前缀的长度。地址掩码又称为子网掩码。
-
在CIDR记法中,斜线后面的数字就是地址掩码中1的个数。如**/20地址块的地址掩码是:11111111 11111111 11110000 00000000(20个连续的1和接着的12个连续的0)。这个掩码用CIDR记法表示就是255.255.240.0/20**。
-
对于早期使用的分类IP地址,其地址掩码是固定的,常常不用专门指出。如:
- A类网络,地址掩码为255.0.0.0或255.0.0.0/8。
- B类地址,地址掩码255.255.0.0或255.255.0.0/16。
- C类地址,地址掩码255.255.255.0或255.255.255.0/24。
-
把二进制的IP地址和地址掩码进行按位AND运算,即可得出网络地址。如下图
-
AND运算就是逻辑乘法运算,其规则是:1 AND 1 = 1,1 AND 0 = 0,0 AND 0 = 0。点分十进制的IP地址是128.14.35.7/20,前缀长度是20。
-
注意,从点分十进制的IP地址并不容易看出其网络地址。要使用二进制地址来运算。在本例中把二进制IP地址的前20位保留不变,剩下的12位全写为0,即可得出网络地址。从上面的运行结果可以知道,IP地址128.14.35.7/20所在的网络地址是128.14.32.0/20。
-
下表给出了最常用的CIDR地址块。表中的K表示 2 10 2^{10} 210即1024。网络前缀长度在13到27之间是最常用的。在“包含的地址数”中把全1和全0的主机号都计算在内了。
-
网络前缀长度 点分十进制 包含的地址数 相当于包含分类的网络数 /13 255.248.0.0 512K 8个B类或2048个C类 /14 255.252.0.0 256K 4个B类或1024个C类 /15 255.254.0.0 128K 2个B类或512个C类 /16 255.255.0.0 64K 1个B类或256个C类 /17 255.255.128.0 32K 128个C类 /18 255.255.192.0 16K 64个C类 /19 255.255.224.0 8K 32个C类 /20 255.255.240.0 4K 16个C类 /21 255.255.248.0 2K 8个C类 /22 255.255.252.0 1K 4个C类 /23 255.255.254.0 512 2个C类 /24 255.255.255.0 256 1个C类 /25 255.255.255.128 128 1/2个C类 /26 255.255.255.192 64 1/4个C类 /27 255.255.255.224 32 1/8个C类
-
-
CIDR地址中还有三个特殊地址块,即:
- 前缀n=32,即32位IP地址都是前缀,没有主机号。其实就是一个IP地址,这个特殊地址用于主机路由。
- 前缀n=31,这个地址块中只有两个IP地址,其主机号分别为0和1。这个地址块用于点对点链路。
- 前缀n=0同时IP地址也是全0,即0.0.0.0/0。这用于默认路由。
-
使用CIDR的一个好处就是可以更加有效地分配IP地址空间,可根据用户的需要分配适当大小的CIDR地址块。
-
一个大的CIDR地址块中往往包含很多小地址块,所以在路由器的转发表中就利用较大的一个CIDR地址块来代替许多较小的地址块。这种方法称为路由聚合(route aggregation),它使得转发表中只有一个项目就可以表示原来传统分类地址的很多个路由项目,因而大大压缩了转发表所占的空间,减少了转发表所需的时间。
4,IP地址的特点
1,IP地址的重要特点
- 每一个IP地址都由网络前缀和主机号两部分组成。从这个意义上说,IP地址是一种分等级的地址结构。分等级的好处是:
- IP地址管理机构在分配IP地址时只分配网络前缀(第一级),而剩下的主机号(第二级)则由得到该网络前缀的单位自行分配。这样就方便了IP地址的管理。
- 路由器根据目的主机所连接的网络前缀(即地址块)来转发分组(而不考虑目的主机号),这样就可以使转发表中的项目数大幅度减少,从而减少转发表所占的存储空间,缩短查找转发表的时间。
- 实际上IP地址是标志一台主机(或路由器)和一条链路的接口。当一台主机同时连接到两个网络上时,该主机就必须同时具有两个相应的IP地址,其网络前缀必须是不同的。这种主机称为多归属主机(multihomed host)。由于一个路由器至少应当连接到两个网络,因此一个路由器至少应当有两个不同的IP地址。
- 按照互联网的观点,一个网络(或子网)是指具有相同网络前缀的主机的集合,因此,用转发器或交换机连接起来的若干个局域网仍为一个网络,因为这些局域网都具有同样的网络前缀。具有不同网络前缀的局域网必须使用路由器进行互连。
- 在IP地址中,所有分配到网络前缀的网络(不管是范围很小的局域网,还是可能覆盖很大地理范围的广域网)都是平等的。所谓平等,是指互联网同等对待每一个IP地址。
2,互联网中的IP地址
- 在同一个局域网上的主机或路由器的IP地址中的网络前缀必须是同样的,即必须具有同样的网络号。
- 图中的网络地址(用粗体字加下划线表示)里面的主机号必定是全0。
- 图中所有设备都有自己的MAC地址。注意,图中以太网交换机连接上画出的小圆圈,是主机或路由器的IP地址,并不是以太网交换机的IP地址。以太网交换机是链路层设备,只有MAC地址。
- 用以太网交换机(它只在链路层工作)连接的几个网段合起来仍然是一个局域网,只使用同样的网络前缀。
- 路由器总是具有两个或两个以上的IP地址。即路由器每个接口的IP地址的网络前缀都不同。
- 当两个路由器直接相连时,在连接两端的接口处,可以分配也可以不分配IP地址。如分配了IP地址,则这一段连线就构成了一种只包含一段线路的特殊“网络”。之所以叫作“网络”,是因为它有IP地址。但为了节省IP地址资源,对于点对点链路构成的特殊“网络”,现在也常常不分配IP地址。通常把这样的特殊网络叫做无编号网络(unnumbered network)或匿名网络(anonymous network)。
3,IP地址与MAC地址
-
IP地址与硬件地址是不同的地址。
-
从层次的角度看:
- 硬件地址(或物理地址)是数据链路层和物理层使用的地址。
- IP地址是网络层和以上各层使用的地址,是一种逻辑地址(称IP地址是逻辑地址是因为IP地址是用软件实现的)。
-
在IP层抽象的互联网上只能看到IP数据报。
-
虽然在IP数据报首部有源站IP地址,但路由器只根据目的站的IP地址进行转发。
-
在局域网的链路层,只能看见MAC帧。
-
IP层抽象的互联网屏蔽了下层很复杂的细节。在网络层上探讨问题,就能够使用统一的,抽象的IP地址研究主机和主机或路由器之间的通信。
4,地址解析协议ARP
1,概述
- 已经知道一个机器的IP地址,需要找出其相应的MAC地址。地址解析协议ARP就是用于解决这个问题的。
- 还有一个旧的协议叫做逆地址解析协议RARP,它的作用是使只知道自己MAC地址的主机能够通过协议RARP找出其IP地址。现在的协议DHCP已经包含了协议RARP的功能。
2,要点
- 网络层使用的是IP地址,但在实际网络层的链路上传送数据帧时,最终还是必须使用链路层的MAC地址。IP地址和下面的链路层的MAC地址之间由于格式不同而不存在简单的映射关系。此外,在一个网络上可能经常会有新的主机加入进来,或撤走一些主机。更换网络适配器也会使主机的MAC地址改变。地址解析协议ARP解决这个问题的方法是在主机的ARP高速缓存中存放一个从IP地址到MAC地址的映射表,并且这个映射表还经常动态更新。
- 每一台主机都有一个ARP高速缓存(ARP cache),里面存有本局域网上的各主机和路由器的IP地址到MAC地址的映射表,这些都是该主机目前知道的一些MAC地址。那么主机怎样知道这些MAC地址呢?
- 当主机A要向本局域网上的某台主机B发送IP数据报时,就先在其ARP高速缓存中查看有无主机B的IP地址。如有,就在ARP高速缓存中查出其对应的MAC地址,再把这个MAC地址写入MAC帧,然后通过局域网把该MAC帧发往此MAC地址。
- 也有查不到主机B的IP地址。这可能是主机B才入网,也可能是主机A刚刚加电,其高速缓存还是空的。这种情况下,主机A就自动运行ARP,然后按照以下步骤找出主机B的MAC地址。
- ARP进程在本局域网上广播发送一个ARP请求分组。ARP请求分组的主要内容是:“我的IP是xxx,MAC地址是XXX,我想知道IP地址为xxx的主机的MAC地址”。
- 在本局域网上的所有主机上运行的ARP进程都收到此ARP请求分组。
- 主机B的IP地址与ARP请求分组中要查询的IP地址一致,就收下这个ARP请求分组,并向主机A发送ARP响应分组,同时在这个ARP响应分组中写入自己的MAC地址。由于其余所有主机的IP地址都与ARP请求分组中要查询的IP地址不一致,因此都不理睬这个ARP请求分组。ARP响应分组的主要内容是:“我的IP地址是xxx,我的MAC地址是XXX”。请注意:虽然ARP请求分组是广播发送的,但ARP响应分组是普通的单播,即从一个源地址发送到一个目的地址。
- 主机A收到主机B的ARP响应分组后,就在其ARP高速缓存中写入主机B的IP地址到MAC地址的映射。
- ARP对保存在高速缓存中的每一个映射地址项目都设置生存时间(如,10~20分钟)。凡超过生存时间的项目就从高速缓存中删除掉。
- 注意,ARP用于解决同一个局域网上的主机或路由器的IP地址和MAC地址的映射问题。
5,IP数据报的格式
1,概述
-
在协议IP的标准中,描述首部格式的宽度是32位。
-
一个IP数据报由首部和数据两部分组成。首部的前一部分长度是固定的,共20字节,是所有IP数据报必须具有的。在首部的固定部分的后面是一些可选字段,其长度是可变的。
2,IP数据报首部的固定部分中的各字段
1,版本
- 占4位,指协议IP的版本。通信双方使用的协议IP版本必须一致,这里讨论的协议版本号是4(IPv4)。
2,首部长度
- 占4位,可表示的最大十进制数值是15。
- 首部长度字段所表示数的单位是32位字长(1个32位字长是4字节),因此首部长度字段的最小值是5(即二进制表示的首部长度是0101)。而当首部长度字段为最大值1111时(即十进制的15),就表明首部长度达到最大值—15个32位字长,即60字节。
- 当IP分组的首部长度不是4字节的整数倍时,必须利用最后的填充字段加以填充。
- 首部长度限制为60字节的缺点是有时可能不够用,但这样做是希望用户尽量减少开销。最常用的首部长度是20字节,不使用任何可选字段。
3,区分服务
- 占8位,用来获取更好的服务。这个字段在旧标准中叫做服务类型。
- 1998年IETF把这个字段改名为区分服务DS(Differentiated Services)。
- 只有在使用区分服务时,这个字段才起作用。在一般的情况下都不使用这个字段。
4,总长度
- 总长度指首部和数据总和的长度,单位为字节。总长度字段为16位,因此数据报的最大长度为 2 16 − 1 = 65535 2^{16}-1=65535 216−1=65535字节。
- 在IP层下面的每一种数据链路层都规定了一个数据帧中的数据字段的最大长度,这称为最大传送单元MTU(Maximum Transfer Unit)。
- 当一个IP数据报封装成链路层的帧时,此数据报的总长度(即首部加上数据部分)一定不能超过下面的数据链路层所规定的MTU值。如:最常见的以太网就规定其MTU值是1500字节。若所传送的数据报长度超过数据链路层的MTU值,就必须把过长的数据报进行分片处理。
- 尽可能长的IP数据报会使传输效率得到提高,但数据报短些也有好处。IP数据报越短,路由器转发的速度就越快。为此,协议IP规定,在互联网中所有的主机和路由器必须能够接受长度不超过576字节的数据报。这是假定上层交下来的数据长度有512字节(合理的长度),加上最长的IP首部60字节,再加上4字节的富余量,就得到576字节。当主机需要发送长度超过576字节的数据报时,应当先了解一下,目的主机能否接受所要发送的数据报长度。否则,就要进行分片。
- 在进行分片时,数据报首部中的“总长度”字段是指分片后的每一个分片的首部长度与该分片的数据长度的总和。
5,标识(identification)
- 占16位。IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。但这个“标识”并不是序号,因为IP是无连接服务,数据报不存在按序接收的问题。当数据报由于长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的数据报片的标识字段中。相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报。
6,标志(flag)
- 占3位,但目前只有两位有意义。
- 标志字段中的最低位记为MF(More Fragment)。MF=1即表示后面“还有分片”的数据报。MF=0表示这已是若干数据报片中的最后一个。
- 标志字段中间的一位记为DF(Don‘t Fragment),意思是“不能分片”。只有当DF=0时才允许分片。
7,片偏移
- 占13位。片偏移指出:较长的分组在分片后,某片在原分组中的相对位置。就是说,相对于用户数据字段的起点,该片从何处开始。
- 片偏移以8个字节为偏移单位。就是说,除最后一个数据报片外,其他每个分片的长度一定是8字节(64位)的整数倍。
8,生存时间TTL(Time To Live)
- 占8位,表明这是数据报在网络中的寿命。
- 由发出数据报的源点设置这个字段。目的是防止无法交付的数据报无限制地在互联网中兜圈子,因而白白消耗网络资源。
- 最初设计的时候以秒作为TTL值的单位。每经过一个路由器时,就把TTL减去数据报在路由器所消耗掉的一段时间。若数据报在路由器消耗的时间小于1秒,就把TTL值减1.当TTL值减为零时,就丢弃这个数据报。
- 随着技术的发展,路由器处理数据报所需的时间不断在缩短,一般都远远小于1秒,后来就把TTL字段的功能改为“跳数限制”。路由器在每次转发数据报之前就把TTL值减1。若TTL值减小到零,就丢弃这个数据报,不再转发。因此,现在TTL的单位不再是秒,而是跳数。
- 数据报能在互联网中经过的路由器的最大数值是255。若把TTL的初始值设置为1,就表示这个数据报只能在本局域网中传送。因为这个数据报一传到局域网上的某个路由器,在被转发之前TTL值就减少到0,所以会被这个路由器丢弃。
9,协议
- 占8位,协议字段指出数据报携带的数据使用何种协议,以便使目的主机的IP层知道应将数据部分上交给那个协议进行处理。
10,首部校验和
- 占16位。这个字段只检验数据报的首部,但不包括数据部分。这是因为数据报每经过一个路由器,路由器都要重新计算一下首部检验和。不检验数据部分可减少计算的工作量。为了进一步减少计算检验和的工作量,IP首部的检验和不采用复杂的CRC检验码。
11,源地址
- 占32位。发送IP数据报的主机的IP地址。
12,目的地址
- 占32位。接收IP数据报的主机的IP地址。
3,IP数据报首部的可变部分
- IP数据首部的可变部分就是一个选项字段。选项字段用来支持排错,测量以及安全等措施。此字段的长度可变,从1字节到40字节不等,取决于所选择的项目。这些选项一个个拼接起来,中间不需要有分隔符,最后用全0的填充字段补齐为4字节的整数倍。
- 增加首部的可变部分是为了增加IP数据报的功能,但这同时也使得IP数据报的首部长度成为可变的。这就增加了每一个路由器处理数据报的开销。实际上这些选项很少被使用。很多路由器都不考虑IP首部的选项字段,因此新的IP版本IPv6就把IP数据报的首部长度做成固定的了。
三,IP层转发分组的过程
1,基于终点的转发
- 分组在互联网上传送和转发是基于分组首部中的目的地址的,因此这种转发方式称为基于终点的转发。
- 因此,分组每到达一个路由器,路由器就根据分组中的终点(目的地址)查找转发表,然后就得知下一条应当到哪一个路由器。
- 但是,路由器中的转发表却不是按照目的IP地址来直接查找下一跳路由器的。这是因为互联网中的主机数目实在太大了。如果用目的地址直接查找转发表,那么这种结构的转发表就会非常庞大,使得查找过程非常之慢。这样的转发表也就没有实用价值了。因此必须想办法压缩转发表的大小。
- 32位的IP地址是由两级组成的。前一部分是前缀,表示网络,后一部分表示主机。所以可以把查找目的主机的方法变通一下,即不是直接查找目的主机,而是先查找目的网络(网络前缀),在找到目的网络之后,就把分组在这个网络上直接交付目的主机。由于互联网上的网络数远远小于主机数,这样就可以大大压缩转发表的大小,加速分组在路由器中的转发。这就是基于终点的转发过程。
四,网际控制报文协议ICMP
1,概述
- 为更有效转发IP数据报和提高交付成功的机会,网络层使用网际控制报文协议ICMP(Internet Control Message Protocol)。
- ICMP允许主机或路由器报告差错情况和提供有关异常情况的报告。
- ICMP是互联网的标准协议。但ICMP不是高层协议,而是IP层的协议。
- ICMP报文作为IP层数据报的数据,加上数据报的首部,组成IP数据报发送出去。
2,ICMP报文的种类
-
ICMP报文有两种,ICMP差错报告报文和ICMP询问报文。
-
ICMP报文的前4字节是统一的格式,共有三个字段:类型,代码和检验和。接着的4字节的内容与ICMP的类型有关。最后面是数据字段,其长度取决于ICMP的类型
-
下表给出了几种常用的ICMP报文类型
-
ICMP标准在不断更新。已不再使用的ICMP报文有:”信息请求与回答报文“”地址掩码请求与回答报文“”路由器请求与通告报文“以及”源点抑制报文“
-
ICMP报文的代码字段用于进一步区分某种类型中的几种不同情况。检验和字段用来检验整个ICMP报文。IP数据报首部的检验和并不检验IP数据报的内容,因此不能保证经过传输的ICMP报文不产生差错。
-
上面表格中给出了ICMP差错报告报文共有四种,即:
- 终点不可达:当路由器或主机不能交付数据报时就向源点发送终点不可达报文。
- 时间超过:当路由器收到生存时间为零的数据报时,除丢弃该数据报外,还要向源点发送时间超过报文。当终点在预先规定的时间内不能收到一个数据报的全部数据报片时,就把已收到的数据报片都丢弃,并向源点发送时间超过报文。
- 参数问题:当路由器或目的主机收到的数据报的首部中有字段的值不正确时,就丢弃该数据报,并向源点发送参数问题报文。
- 改变路由(重定向):路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器。
- 在互联网的主机中也要有一个转发表。当主机要发送数据报时,首先查找主机自己的转发表,看应当从哪个接口把数据报发送出去。在互联网中主机的数量远大于路由器的数量,处于效率的考虑,这些主机不和连接在网络上的路由器定期交换路由信息。在主机刚开始工作时,一般都在转发表中设置一个默认路由器的IP地址。不管数据报要发送到哪个目的地址,都一律先把数据报传送给这个默认路由器,而这个默认路由器知道到每一个目的网络的最佳路由。如果默认路由器发现主机发往某个目的地址的数据报的最佳路由应当经过网络上的另一个路由器R,就用改变路由报文把这情况告诉主机。于是,该主机就在其转发表中增加一个项目:到某某目的地址应经过路由器R(而不是默认路由)。
-
ICMP差错报告报文中的数据字段都具有同样的格式(如下图)。把收到的需要进行差错报告的IP数据报的首部和数据字段的前8个字节提取出来,作为ICMP报文的数据字段。再加上相应的ICMP差错报告报文的前8个字节,就构成了ICMP差错报告报文。提取收到的数据报的数据字段前8个字节是为了得到运输层的端口号以及运输层报文的发送序号。这些信息对源点通知高层协议是有用的。整个ICMP报文作为IP数据报的数据字段发送给源点。
-
下面是不应发送ICMP差错报告报文的几种情况:
- 对ICMP差错报告报文,不再发送ICMP差错报告报文。
- 对第一个分片的数据报片的所有后续数据报片,都不发送ICMP差错报告报文。
- 对具有多播地址的数据报,都不发送ICMP差错报告报文。
- 对具有特殊地址(如127.0.0.0或0.0.0.0)的数据报,不发送ICMP差错报告报文。
-
常用的ICMP询问报文有两种,即:
- 回送请求或回送回答:ICMP回送请求报文是由主机或路由器向一个特定的目的主机发出的询问。收到此报文的主机必须给源主机或路由器发送ICMP回送回答报文。这种询问报文用来测试目的站是否可达以及了解其有关状态。
- 时间戳请求或时间戳回答:在ICMP时间戳请求报文发出后,就能够接收到对方响应的ICMP时间戳回答报文。利用在报文中记录的时间戳,发送方很容易计算出当前网络的往返时延。
五,IPv6
1,IPv6的基本首部
-
IPv6仍支持无连接的传送,但将协议数据单元PDU称为分组(packet),而不是IPv4的数据报(datagram)。
-
IPv6所引进的主要变化如下:
- 更大的地址空间:IPv6把地址从IPv4的32位增大到4倍,即增大到128位,使地址空间增加了 2 96 2^{96} 296倍。
- 扩展的地址层次结构:IPv6由于地址空间很大,因此可以划分为更多的层次。
- 灵活的首部格式:IPv6数据报的首部和IPv4的并不兼容。IPv6定义了许多可选的扩展首部,不仅可提供比IPv4更多的功能,而且还可提高路由器的处理效率。
- 改进的选项:IPv6允许数据报包含有选项的控制信息,因而可以包含一些新的选项。但IPv6的首部长度是固定,其选项放在有效载荷中。IPv4所规定的选项是固定不变的,其选项放在首部的可变部分。
- 允许协议继续扩充:因为技术总是在不断的发展,而新的应用也还会出现。IPv4的功能是固定不变的。
- 支持即插即用:因此IPv6不需要使用DHCP。
- 支持资源的预分配:IPv6支持实时视像等要求保证一定的带宽和时延的应用。
- IPv6首部改为8字节对齐。原来的IPv4首部是4字节对齐。
-
IPv6数据报由两大部分组成:
- 基本首部(base header)
- 有效载荷(payload)
- 有效载荷也称为净负荷。有效载荷允许有零个或多个扩展首部(extension header),再后面是数据部分(如下图),注意,所有的扩展首部并不属于IPv6数据报的基本首部。
-
与IPv4相比,IPv6对首部中的某些字段进行了如下的更改:
- 取消了首部长度字段,因为它的首部长度是固定的(40字节)。
- 取消了服务类型字段,因为优先级和流标号字段实现了服务类型字段的功能。
- 取消了总长度字段,改用有效载荷长度字段。
- 取消了标识,标志和片偏移字段,因为这些功能已包含在分片扩展首部中。
- 把TTL字段改称为跳数限制字段,但作用一样。
- 取消了协议字段,改用了下一个首部字段。
- 取消了检验和字段,这样就加快了路由器处理数据报的速度。
- 取消了选项字段,而用扩展首部来实现选项功能。
-
IPv6基本首部中各字段的作用
-
- 版本(version):占4位。指明协议的版本,对IPv6该字段是6。
- 通信量类(traffic class):占8位,为了区分不同的IPv6数据报的类别或优先级。
- 流标号(flow label):占20位。IPv6的一个新的机制是支持资源预分配,并且允许路由器把每一个数据报与一个给定的资源分配相联系。IPv6提出流(flow)的抽象概念。”流“就是互联网络上从特定源点到特定终点(单播或多播)的一系列数据报,而在这个”流“所经过的路径上的路由器都保证指明的服务质量。所有属于同一个流的数据报都具有同样的流标号。因此,流标号对实时音频/视频数据的传送特别有用。对于传统的电子邮件或非实时数据,流标号则没有用处,把它置为0即可。
- 有效载荷长度(payload length):占16位。指明IPv6数据报除基本首部以外的字节数。这个字段的最大值是64KB。
- 下一个首部(next header):占8位。相当于IPv4的协议字段或可选字段。
- 当IPv6数据报没有扩展首部时,下一个首部字段的作用和IPv4的协议字段一样,它的值指出了基本首部后面的数据应交付IP层上面的哪一个高层协议。
- 当出现扩展首部时,下一个首部字段的值就标识后面第一个扩展首部的类型。
- 跳数限制(hop limit):占8位。用来防止数据报在网络中无限期地存在。和IPv4的生存时间字段相似。源点在每个数据报发出时即设定某个跳数限制(最大为255跳)。每个路由器在转发数据报时,要先把跳数限制字段中的值减1。当跳数限制的值为零时,就要把这个数据报丢弃。
- 源地址:占128位。是数据报的发送端的IP地址。
- 目的地址:占128位。是数据报的接收端的IP地址。
-
2,IPv6的地址
1,概述
- 一个IPv6数据报的目的地址可以是以下三种基本类型地址之一:
- 单播(unicast):就是传统的点对点通信。
- 多播(multicast):一点对多点的通信,数据报发送到一组计算机中的每一个。IPv6没有采用广播的术语,而是将广播看作多播的一个特例。
- 任播(anycast):IPv6增加的一种类型。任播的终点是一组计算机,但数据报只交付其中的一个,通常是按照路由算法得出的距离最近的一个。
- IPv6将实现IPv6的主机和路由器均称为节点。
- 在IPv6中,每个地址占128位,地址空间大于 3.4 ∗ 1 0 38 3.4*10^{38} 3.4∗1038。
2,IPv6地址记法
- IPv6使用冒号十六进制记法(colon hexadecimal notation,简写为colon hex),它把每个16位的值用十六进制值表示,各值之间用冒号分隔。例如点分十进制记法的IP地址:
- 104.230.140.100.255.255.255.255.0.0.17.128.150.10.255.255
- 将上面的地址改为冒号十六进制记法,就变成了:
- 68E6:8C64:FFFF:FFFF:0:1180:960A:FFFF
- 冒号十六进制记法可以允许零压缩(zero compression),即一连串连续的零可以为一对冒号所取代,如:
- FF05:0:0:0:0:0:0:B3可压缩为FF05::B3
- 为了保证零压缩有一个不含混的解释,规定在任一地址中只能使用一次零压缩。
3,IPv6地址分类
地址类型 | 地址块前缀 | 前缀的CIDR记法 |
---|---|---|
未指明地址 | 00…0(128位) | ::/128 |
环回地址 | 00…1(128位) | ::1/128 |
多播地址 | 11111111 | FF00::/8 |
本地站点单播地址 | 1111111011 | FEC0::/10 |
本地链路单播地址 | 1111111010 | FE80::/10 |
全球单播地址 | 见下图 | 见下图 |
-
未指明地址:这是16字节的全0地址,可缩写为两个冒号”::“。这个地址不能用作目的地址,只能将某台主机当作源地址使用,条件是这台主机还没有配置到一个标准的IP地址。这类地址仅此一个。
-
环回地址:IPv6的环回地址是0:0:0:0:0:0:0:1,可缩写为::1。作用和IPv4的环回地址一样。这类地址也是仅此一个。
-
多播地址:功能和IPv4一样。这类地址占IPv6地址总数的1/256。
-
本地站点单播地址(cite-local unicast address):有些单位的内部网络使用TCP/IP协议,但并没有连接到互联网上。连接在这样的内部网络上的主机都可以使用这种本地站点地址进行通信,但不能和互联网上的其他主机通信。这类地址占IPv6地址总数的1/1024,其用途和IPv4的专用地址是一样的。
-
本地链路单播地址(link-local unicast address):这种地址是在单一链路上使用的。当一个节点启用IPv6时就自动生成本地链路地址。当需要把分组发往单一链路的设备而不希望该分组被转发到此链路范围以外的地方时,就可以使用这种特殊地址。这类地址占IPv6地址总数的1/1024。
-
全球单播地址:IPv6的这一类单播地址是使用得最多的一类。IPv6单播地址的划分方法可以是下面的任何一种:
- 可把整个的128位都作为一个节点的地址。
- 可用n位作为子网前缀,用剩下的(128-n)位作为接口标识符(相当于IPv4的主机号)。
- 用n位作为全球路由选择前缀,用m位作为子网前缀,而用剩下的(128-n-m)位作为接口标识符。
3,从IPv4向IPv6过渡技术
1,双协议栈
- 双协议栈(dual stack)是指在完全过度到IPv6之前,使一部分主机(或路由器)同时装有IPv4和IPv6这两种协议栈。因此双协议栈主机(或路由器)既能够和IPv6的系统通信,又能够和IPv4的系统通信。双协议栈的主机(或路由器)记为IPv6/IPv4,表明它同时具有IPv6和IPv4地址。
- 双协议栈主机在和IPv6主机通信时采用IPv6地址,和IPv4主机通信时则采用IPv4地址。但协议栈主机怎样知道目的主机采用的是哪一种地址呢?它是使用域名系统DNS来查询的。若DNS返回的是IPv4地址,则协议栈的源主机就使用IPv4地址,反之亦然。
- 要使双协议栈的主机知道IPv4数据报里面封装的数据是一个IPv6数据报,就必须把IPv4首部的协议字段的值设置为41(41表示数据报的数据部分是IPv6数据报)
2,隧道技术(tunneling)
- 这种方法的要点就是在IPv6数据报要进入IPv4网络时,把IPv6数据报封装成IPv4数据报。现在整个的IPv6数据报变成了IPv4数据报的数据部分。而原来的IPv6数据报就好像在IPv4网络的隧道中传输,没有什么变化。当IPv4数据报离开IPv4网络中的隧道时,再把数据部分交给主机的IPv6协议栈。
六,互联网的路由选择协议
1,有关路由选择协议的几个基本概念
1,理想的路由算法
- 路由选择协议的核心就是路由算法,一个理想的路由算法应具有如下的一些特点
- 算法必须是正确的和完整的:沿着各路由表所指引的路由,分组一定能够最终到达目的网络和目的主机。
- 算法在计算上应简单:路由选择的计算不应使网络通信量增加太多的额外开销。
- 算法应能适应通信量和网络拓扑的变化:当网络中的通信量发生变化时,算法能自适应地改变路由以均衡各链路的负载。当某个或某些节点,链路发生故障不能工作,或者修好了再投入运行时,算法也能及时地改变路由,有时称这种自适应性为“稳健性”(robustness)。
- 算法应具有稳定性:在网络通信量和网络拓扑相对稳定的情况下,路由算法应收敛于一个可以接受的解,而不应使得出的路由不停地变化。
- 算法应是公平的:路由选择算法应对所有用户(除对少数优先级高的用户)都是平等的。
- 算法应是最佳的:路由选择算法应当能够找出最好的路由,使得分组平均时延最小而网络的吞吐量最大。“最佳”只能是相对于某一种特定要求下得出的较为合理的选择而已。
- 一个实际的路由选择算法,应尽可能接近于理想的算法。在不同的应用条件下,对以上提出的6个方面也可有不同的侧重。
- 倘若从路由算法能否随网络的通信量或拓扑自适应地进行调整变化来划分,则只有两大类,即静态路由选择策略和动态路由选择策略。静态路由选择策略也叫做非自适应路由选择,其特点是简单和开销较小,但不能及时适应网络状态地变换。对于很简单的小网络,完全可以采用静态路由选择,用人工配置每一条路由。动态路由选择也叫作自适应路由选择,其特点是能够较好地适应网络状态地变化,但实现起来较为复杂,开销也比较大。因此,动态路由选择适用于较复杂的大网络。
2,分层次的路由选择协议
-
互联网采用的路由选择协议主要是自适应的,分布式路由选择协议。由于以下两个原因,互联网采用分层次的路由选择协议:
- 互联网的规模非常大。
- 许多单位不愿意让外界了解自己单位网络的布局细节和本部门所采用的路由选择协议,但同时还希望连接到互联网上。
-
为此,可以把整个互联网划分为许多较小的自治系统(autonomous system),一般都记为AS。自治系统AS是在单一技术管理下的许多网络,IP地址以及路由器,而这些路由器使用一种自治系统内部的路由选择协议和共同的度量。每一个AS对其他AS表现出的是一个单一的和一致的路由选择策略。这样,互联网就把路由选择协议划分为两大类,即:
- 内部网关协议IGP(Interior Gateway Protocol)即在一个自治系统内部使用的路由选择协议,而这与在互联网中的其他自治系统选用什么路由协议无关。目前这类路由选择协议使用得最多的是RIP和OSPF协议。
- 外部网关协议EGP(External Gateway Protocol)若主机和目的主机处在不同的自治系统中,那么在不同自治系统AS之间的路由选择,就需要使用外部网关协议EGP。目前使用最多的外部网关协议是BGP的版本4(BGP-4)。
-
自治系统之间的路由选择也叫做域间路由选择(interdomain routing),而在自治系统内部的路由选择叫做域内路由选择(intradomain routing)。
-
下图是两个自治系统互连在一起的示意图。每个自治系统自己决定在本自治系统内部运行哪一个内部路由选择协议(可以是RIP,也可以是OSPF)。但每个自治系统都有一个或多个路由器(如下图中R1和R2)除运行本系统的内部路由选择协议外,还要运行自治系统间的路由选择协议(BGP-4)。
-
按照使用分层次的路由选择方法,可将互联网的路由选择协议划分为:
- 内部网关协议IGP:具体的协议如RIP和OSPF等。
- 外部网关协议EGP:目前使用的协议是BGP-4。
2,内部网关协议RIP
1,协议RIP的工作原理
- RIP(路由信息协议,Routing Information Protocol)是内部网关协议IGP中最先得到广泛使用的协议。RIP是一种分布式的基于距离向量的路由选择协议,是互联网的标准协议,最大优点就是简单。
- RIP协议要求网络中的每一个路由器都要维护从它自己到其他每一个目的网络的距离记录(因此,这是一组距离,即“距离向量”)。协议RIP将“距离”定义如下:从一路由器到直接连接的网络的距离定义为1,从一主机到非直接连接的网络的距离定义为所经过的路由器数加1。“加1”是因为到达目的网络后就进行直接交付(不需要再经过路由器),而到直接连接的网络的距离已经定义为1。
- 协议RIP的“距离”也称为“跳数”(hop count),并且每经过一个网络,跳数就加1。RIP认为好的路由器就是它通过的网络数目少,即“距离短”。RIP允许一条路径最多只能包含15个网络。因此“距离”等于16时即相当于不可达。可见RIP只适用于小型互联网。
- RIP不能在两个网络之间同时使用多条路由。RIP选择一条具有最少网络数的路由(即最短路由),哪怕还存在另一条高速(低时延)但网络数较多的路由。
2,协议RIP的特点
1, 仅和相邻路由器交换信息。如果两个路由器之间的通信不需要经过另一个路由器,那么这两个路由器就是相邻的。协议RIP规定,不相邻的路由器不交换信息。
2, 路由器交换的信息是当前本路由器所知道的全部信息,即自己现在的路由表。
3, 按固定的时间间隔交换路由信息,如,每隔30秒。然后路由器根据收到的路由信息更新路由表。当网络拓扑发生变化时,路由器也及时向相邻路由器通告拓扑变化后的路由信息。
- 强调一点:路由器在刚刚开始工作时,它的路由表是空的。然后路由器就得出到直接相连的几个网络的距离(这些距离定义为1)。接着,每一个路由器也只和数目非常有限的相邻路由器交换并更新路由信息。但经过若干次更新后,所有的路由器最终都会知道到达本自治系统中任何一个网络的最短距离和下一跳路由器的地址。
- 路由表中最主要的信息就是:到某个网络的距离(即最短距离),以及应经过的下一跳地址。路由表更新的原则是找出到每个目的网络的最短距离。这种更新算法又称为距离向量算法。
- 协议RIP让一个自治系统中的所有路由器都和自己的相邻路由器定期交换路由信息,并不断更新其路由表,使得从每一个路由器到每一个目的网络的路由都是最短的(即跳数最少)。
- 现在较新的RIP版本是1998年公布的RIP2。RIP2可以支持无分类域间路由选择CIDR。此外,RIP2还提供了简单的鉴别过程支持多播。
3,协议RIP的缺点
- 传播的慢,当网络出现故障时,要经过比较长的时间才能将此信息传送到所有的路由器。
- 网络规模小,RIP限制了网络的规模,它能使用的最大距离为15(16表示不可达)。
- 路由器之间交换的路由信息是路由器中的完整路由表,随着网络规模的扩大,开销也就增加。
3,内部网关协议OSPF
1,OSPF的基本特点
- OSPF(开放最短路径优先OSPF,Open Shortest Path First)。
- 现在使用的协议OSPF是第二个版本OSPFv2。
- OSPF只是一个协议的名字,它并不表示其他的路由选择协议不是“最短路径优先”。
- OSPF最主要的特征就是使用链路状态协议(link state protocol),而不是像RIP那样的距离向量协议。协议OSPF的特点是:
- 向本自治系统中所有路由器发送信息。这里使用的方法是洪泛法(flooding)。路由器通过所有输出端口向所有相邻的路由器发送信息。而每一个相邻路由器又再将此信息发往其所有的相邻路由器(但不再发送给刚刚发来信息的哪个路由器)。
- 发送的信息就是与本路由器相邻的所有路由器的链路状态。“链路状态”就是说明本路由器都和那些路由器相邻,以及该链路的“度量”(metric)。OSPF将这个“度量”用来表示费用,距离,时延,带宽,等等。对于协议RIP,发送的信息是:“到所有网络的距离和下一跳路由器”。
- 当链路状态发生变化或每隔一段时间(如30分钟),路由器向所有路由器用洪泛法发送链路状态信息。
- 由于各路由器之间频繁的交换链路状态信息,因此所有的路由器最终都能建立一个链路状态数据库(link-state database),这个数据库实际上就是全网的拓扑结构图。
- OSPF的链路状态数据库能较快地进行更新,使各个路由器能及时更新其路由表。OSPF的更新过程收敛得快是其重要优点。
- 为了使OSPF能够用于规模很大的网络,OSPF将一个自治系统再划分为若干个更小的范围,叫做区域(area)。在一个区域内的路由器最好不超过200个。
- 划分区域的好处就是把利用洪泛法交换链路状态信息的范围局限于每一个区域而不是整个的自治系统,这就减少了整个网络上的通信量。在一个区域内部的路由器只知道本区域的完整网络拓扑,而不知道其他区域的网络拓扑的情况。为了使每一个区域能够和本区域以外的区域进行通信,OSPF使用层次结构的区域划分。在上层的区域叫做主干区域(backbone area)。主干区域的标识符规定为0.0.0.0。主干区域的作用是用来连通其他在下层的区域。从其他区域来的信息都由区域边界路由器(area border router)进行概括。在主干区域内的路由器叫作主干路由器(backbone router)。一个主干路由器可以同时是区域边界路由器。在主干区域内还要有一个路由器专门和本自治系统外的其他自治系统交换路由信息。这样的路由器叫作自治系统边界路由器。
- OSPF允许管理员给每条路由指派不同的代价。OSPF对于不同类型的业务可计算出不同的路由。链路的代价可以是1至65535中的任何一个无量纲的数,因此十分灵活。
- 如果到同一个目的网络有多条相同代价的路径,那么可以将通信量分配给这几条路径。这叫作多路径间的负载均衡(load balancing)。
- 所有在OSPF路由器之间交换的分组(如,链路状态更新分组)都具有鉴别的功能,因而保证了仅在可信赖的路由器之间交换链路状态信息。
- OSPF支持可变长度的子网划分和无分类的编址CIDR。
- 由于网络中的链路状态可能经常发生变化,因此OSPF让每一个链路状态都带上一个32位的序号,序号越大状态就越新。OSPF规定,链路状态序号增长的速率不得超过每5秒钟1次。这样,全部序号空间在600年内不会产生重复号。
2,OSPF的五种分组类型
-
OSPF共有以下五种分组类型
- 类型1,问候(Hello)分组,用来发现和维持邻站的可达性。
- 类型2,数据库描述(Database Description)分组,向邻站给出自己的链路状态数据库中的所有链路状态项目的摘要信息。
- 类型3,链路状态请求(Link State Request)分组,向对方请求发送某些链路状态项目的详细信息。
- 类型4,链路状态更新(Link State Update)分组,用洪泛法对全网更新链路状态。这种分组是最复杂的,也是OSPF协议最核心的部分。路由器使用这种分组将其链路状态通知给邻站。链路状态更新分组共有五种不同的链路状态。
- 类型5,链路状态确认(Link Start Acknowledgment)分组,对链路更新分组的确认。
-
OSPF分组是作为IP数据报的数据部分来传送的。OSPF不用UDP而是直接用IP数据报传送(其IP数据报首部的协议字段值为89)。OSPF构成的数据报很短。这样可减少路由信息的通信量。数据报很短的另一个好处是可以不必将长的数据报分片传送。分片传送的数据报只要丢失一个,就无法组装成原来的数据报,而整个数据报就必须重传。
-
OSPF规定,每两个相邻的路由器每隔10秒钟要交换一次问候分组。这样就能够确知那些邻站是可达的。在正常情况下,网络中传送的绝大多数OSPF分组都是问候分组。若有40秒钟没有收到某个相邻路由器发来的问候分组,则可认为该相邻路由器是不可达的,应立即修改链路状态数据库,并重新计算路由表。
-
其他的四种分组都是用来进行链路状态数据库的同步。同步就是指不同的路由器的链路状态数据库的内容是一样的。两个同步的路由器叫作“完全邻接的”(fully adjacent)路由器。不是完全邻接的路由器表明它们虽然在物理上是相邻的,但其链路状态数据库并没有达到一致。
-
当一个路由器开始工作时,它只能通过问候分组得知它有哪些相邻的路由器在工作,以及将数据发往相邻路由器所需的“代价”。如果所有的路由器都把自己的本地链路状态信息对全网进行广播,那么各路由器只要将这些链路状态信息综合起来就可得出链路状态数据库。但这样开销太大。
4,外部网关协议BGP
1,协议BGP的主要特点
- 在外部网关协议(或边界网关协议)BGP中,现在使用的是第4个版本BGP-4(简写为BGP)。协议BGP对互联网非常重要。路由选择协议RIP和OSPF,都只能在一个自治系统AS内部工作。若没有协议BGP,那么分布在全世界数以万计的AS都将是一个个没有联系的孤岛。
- 内部网关协议(如RIP和OSPF)主要是设法使数据报在一个AS中尽可能有效地从源站传送到目的站。在一个AS内部也不需要考虑其他方面的策略。然而BGP使用的环境却不同。这主要是因为以下的两个原因:
- 互联网的规模太大,使得自治系统AS之间路由选择非常困难。
- 自治系统AS之间的路由选择必须考虑有关策略。
2,BGP路由
- 在一个自治系统AS中有两种不同功能的路由器,即边界路由器(或边界网关)和内部路由器。一个AS至少要有一个边界路由器和相邻AS的边界路由器直接相连。正是有了边界路由器,AS之间才能利用协议BGP交换可达性路由信息。
5,路由器的构成
1,路由器的结构
-
路由器是一种具有多个输入端口和多个输出端口的专用计算机,其任务是转发分组。从路由器某个输入端口收到的分组,按照分组要去的目的地(即目的网络),把该分组从路由器的某个合适的输出端口转发给下一跳路由器。下一跳路由器也按照这种方法处理分组,直到该分组到达终点为止。路由器的转发分组正是网络层的主要工作。
-
整个的路由器结构可划分为两大部分:路由选择部分和分组转发部分。
- 路由选择部分也叫作控制部分,或控制层面,其核心构建是路由选择处理机。路由选择处理机的任务是根据所选定的路由选择协议构造出路由表,同时经常或定期地和相邻路由器交换路由信息而不断地更新和维护路由表。
- 分组转发部分也就是数据层面,它由三部分组成:交换结构,一组输入端口和一组输出端口(这里的端口就是硬件接口)。
- 交换结构(switching fabric)又称为交换组织,它的作用就是根据转发表(forwarding table)对分组进行处理,将某个输入端口进入的分组从一个合适的输出端口转发出去。交换结构本身就是一种网络,但这种网络完全包含在路由器之中,因此交换结构可看成是“在路由器中的网络”。“转发”就是路由器根据转发表把收到的IP数据报从路由器合适的端口转发出去。“转发”仅仅涉及一个路由器。但是“路由选择”则涉及很多路由器。路由表则是很多路由器协同工作的结果。这些路由器按照复杂的路由算法,得出整个网络的拓扑变化情况,因而能够动态地改变所选择的路由,并由此构造出整个的路由表。路由表一般仅包含从目的网络到下一跳(用IP地址表示)的映射,而转发表是从路由表得出的。转发表必须包含完成转发功能所必需的信息。路由表总是用软件实现的,但转发表则可用特殊的硬件来实现。
- 上图中,路由器的输入和输出端口里面都各有三个方框,用方框中的1,2和3分别代表物理层,数据链路层和网络层的处理模块。物理层进行比特的接收。数据链路层则按照链路层协议接收传送分组的帧。在把帧的首部和尾部剥去后,分组就被送入网络层的处理模块。若接收到的分组是路由器之间交换路由信息的分组(如RIP或OSPF分组等),则把这种分组送交路由器的路由选择部分中的路由选择处理机。若接收到的是数据分组,则按照分组首部中的目的地址查找转发表,根据得出的结果,分组就经过交换结构到达合适的输出端口。一个路由器的输入端口和输出端口就做在路由器的线路接口卡上。
- 输入端口中的查找和转发功能在路由器的交换功能中是最重要的。为了使交换功能分散化,往往把复制的转发表放在每一个输入端口中(如上图中的虚线箭头所示)。路由选择处理机负责对各转发表的副本进行更新。这些副本常称为“影子副本”(shadow copy)。分散化交换可以避免在路由器中的某一点上出现瓶颈。
- 分组在路由器的输入端口和输出端口都可能会在队列中排队等候处理。若分组处理的速率赶不上分组进入队列的速率,则队列的存储空间最终必定减少到零,这就使后面再进入队列的分组由于没有存储空间而只能被丢弃。
2,交换结构
-
交换结构是路由器的关键构件。正是这个交换结构把分组从一个输入端口转移到某个合适的输出端口。
-
最早使用的路由器就是利用普通的计算机,用计算机的CPU作为路由器的路由选择处理机。路由器的输入和输出端口的功能和传统的操作系统中的I/O设备一样。当路由器的某个输入端口收到一个分组时,就用中断方式通知路由选择处理机。然后分组就从输入端口复制到存储器中。路由器处理机从分组首部提取目的地址,查找路由表,再将分组复制到合适的输出端口的缓存中。若存储器的带宽(读或写)为每秒 M M M个分组,那么路由器的交换速率(即分组从输入端口传送到输出端口的速率)一定小于 M / 2 M/2 M/2。这是因为存储器对分组的读和写需要花费的时间是同一个数量级。
-
下图表示分组通过存储器进行交换。与早期的路由器的区别就是,目的地址的查找和分组在存储器中的缓存都是在输入端口中进行的。
-
下图表示分组通过总线进行交换。采用这种方式时,数据报从输入端口通过共享总线直接传送到合适的输出端口,而不需要路由选择处理机的干预。但是,由于总线是共享的,因此在同一时间只能有一个分组在总线上传送。当分组到达输入端口时若发现总线忙,则被阻塞而不能通过交换结构,并在输入端口排队等待。因为每一个要转发的分组都要通过这一条总线,因此路由器的转发带宽就受总线速率的限制。
-
下图表示的是通过纵横交换结构(crossbar switch fabric)进行交换。常称为互连网络(interconnection network)。它有 2 N 2N 2N条总线,可以使 N N N个输入端口和 N N N个输出端口相连接,这取决于相应的交叉节点是使水平总线和垂直总线接通还是断开。当输入端口收到一个分组时,就将它发送到与该输入端口相连的水平总线上。若通向所要转发的输出端口的垂直总线是空闲的,则在这个节点将垂直总线与水平总线接通,然后把该分组转发到这个输出端口。和前两种交换机制不同,这种纵横交换结构是一种无阻塞的交换结构,其特点是分组可以转发到任何一个输出端口,只要这个输出端口没有被别的分组占用,如果这个输出端口已被占用,那么后到达的分组就必须在输入端口排队等待。
七,IP多播
1,IP多播的基本概念
-
IP多播是需要在互联网上增加更多的智能才能提供的一种服务。
-
IP多播(multicast,以前曾译为组播)。由于有许多的应用需要由一个源点发送到许多个终点,即一对多的通信。
-
与单播相比,在一对多的通信中,多播可大大节约网络资源。如下:
-
视频服务器用多播方式向属于同一个多播组的90个成员传送节目。这时,视频服务器只需把视频分组当作多播数据报来发送,并且一次只需发送一次。路由器 R 1 R_1 R1在转发分组时,需要把收到的分组复制成3个副本,分别向 R 2 R_2 R2, R 3 R_3 R3和 R 4 R_4 R4各转发1个副本。当分组到达目的局域网时,由于局域网具有硬件多播功能,因此不需要复制分组,在局域网上的多播组成员都能收到这个视频分组。
-
当多播组的主机数很大时(如成千上万),采用多播方式就可明显地减轻网络中各种资源的消耗。在互联网范围的多播要靠路由器来实现,这些路由器必须增加一些能够识别多播数据报的软件。能够运行多播协议的路由器称为多播路由器(multicast router)。多播路由器当然也可以转发普通的单播IP数据报。
-
-
为了适应交互式音频和视频信息的多播,互联网开始试验虚拟的多播主干网MBONE(Multicast Backbone On the InterNEt)。MBONE可把分组传播给地点分散但属于一个组的许多台主机。现在多播主干网已经有了相当大的规模。
-
在互联网上进行多播就叫做IP多播。IP多播所传送的分组需要使用多播IP地址。
-
在互联网中每一台主机必须有一个全球唯一的IP地址。如果某台主机现在想接收某个特定多播组的分组,那么怎样才能使这个多播数据报传送到这台主机?
-
显然,这个多播数据报的目的地址一定不能写入这台主机的IP地址。这时因为在同一时间可能有成千上万台主机加入到同一个多播组。多播数据报不可能在其首部写入这样多的主机的IP地址。在多播数据报的目的地址写入的是多播组的标识符,然后设法让加入到这个多播组的主机的IP地址与多播组的标识符关联起来。
-
其实多播组的标识符就是IP地址中的D类地址。D类IP地址的前四位是1110,因此D类地址范围是224.0.0.0到239.255.255.255。我们就用每一个D类地址标志一个多播组。这样,D类地址共可标志 2 28 2^{28} 228个多播组,就是说,在同一时间可以允许有超过2.6亿的多播组在互联网上运行。多播数据报和一般的IP数据报的区别就是它使用D类IP地址作为目的地址,并且首部中的协议字段值是2,表明使用网际组管理协议IGMP。
-
显然,多播地址只能用于目的地址,而不能用于源地址。此外,对多播数据报不产生ICMP差错报文。因此,若在PING命令后面键入多播地址,将永远不会收到响应。
-
IP多播可以分为两种。一种是只在本局域网上进行硬件多播,另一种则是在互联网的范围进行多播。
2,网际组管理协议IGMP和多播路由选择协议
1,IP多播需要两种协议
-
下图是在互联网上传送多播数据报的例子,图中标有IP地址的四台主机都参加了一个多播组,其组地址是226.15.37.123。显然,多播数据报应当传送到路由器 R 1 R_1 R1, R 2 R_2 R2和 R 3 R_3 R3,而不应当传送到路由器 R 4 R_4 R4,因为与 R 4 R_4 R4连接的局域网上现在没有这个多播组的成员。但这些路由器又怎样知道多播组的成员信息呢?这就要利用一个协议,叫作网际组管理协议IGMP(Internet Group Management Protocol)。
-
上图强调了IGMP的本地使用范围。注意,IGMP并非在互联网范围内对所有多播组成员进行管理的协议。IGMP不知道IP多播组包含的成员数,也不知道这些成员都分布在那些网络上。IGMP协议是让连接在本地局域网上的多播路由器知道本局域网上是否有主机(严格讲,是主机上的某个进程)参加或退出了某个多播组。
-
仅有IGMP协议是不能完成多播任务的。连接在局域网上的多播路由器还必须和互联网上的其他多播主机协同工作,以便把多播数据报用最小代价传送给所有的组成员。这就需要使用多播路由选择协议。
-
多播路由选择协议比单播路由选择协议复杂的多,如下图
-
假定图中有两个多播组。多播组 M 1 M_1 M1的成员有主机A,B和C,而多播组 M 2 M_2 M2的成员有主机D,E和F。这些主机分布在三个网络上( N 1 , N 2 和 N 3 N_1,N_2和N_3 N1,N2和N3)。有如下三种情况。
- 路由器R不应当向网络 N 3 N_3 N3转发多播组 M 1 M_1 M1的分组,因为网络 N 3 N_3 N3上没有多播组 M 1 M_1 M1的成员。但是每一台主机可以随时加入或离开一个多播组。如,如果主机G现在加入了多播组 M 1 M_1 M1,那么从这时起,路由器 R R R就必须也向网络 N 3 N_3 N3转发多播组 M 1 M_1 M1的分组。就是说,多播转发必须动态地适应多播组成员的变化(这时网络拓扑并未发生变化)。注意,单播路由选择通常在网络拓扑发生变化时才需要更新路由。
- 主机E和F都是多播组 M 2 M_2 M2的成员。当E向F发送多播数据报时,路由器 R R R把这个多播数据报转发到网络 N 3 N_3 N3。但当 F F F向 E E E发送多播数据报时,路由器 R R R则把多播数据报转发到网络 N 2 N_2 N2。如果路由器 R R R收到来自主机A的多播数据报(A不是多播组 M 2 M_2 M2的成员,但也可向多播组发送多播数据报),那么路由器 R R R就应当把多播数据报转发到 N 2 N_2 N2和 N 3 N_3 N3。由此可见,多播路由器在转发多播数据报时,不能仅仅根据多播数据报中的目的地址,而是还要考虑这个多播数据报从什么地方来和要到什么地方去。
- 主机G没有参加任何多播组,但G却可向任何多播组发送多播数据报。如,G可向多播组 M 1 M_1 M1或 M 2 M_2 M2发送多播数据报。主机G所在的局域网上可以没有任何多播组的成员。显然,多播数据报所经过的许多网络,也不一定非要有多播组成员。总之,多播数据报可以由没有加入多播组的主机发出,也可以通过没有组成员接入的网络。
2,网际组管理协议IGMP
- IGMP使用IP数据报传递其报文(即IGMP报文加上IP首部构成IP数据报),但它也向IP提供服务。因此,我们不把IGMP看成是一个单独的协议,而是属于整个网际协议IP的一个组成部分。
- 从概念上讲,IGMP的工作可以分为两个阶段
- 第一阶段:当某台主机加入新的多播组时,该主机应向多播组的多播地址发送一个IGMP报文,声明自己要成为该组的成员。本地的多播路由器收到IGMP报文后,还要利用多播路由选择协议把这种组成员关系转发给互联网上的其他多播路由器。
- 第二阶段:组成员关系是动态的。本地多播路由器要周期性地探询本地局域网上的主机,以便知道这些主机是否还继续是组的成员。只要有一台主机对某个组响应,那么多播路由器就认为这个组是活跃的。但一个组在经过几次的探询后仍然没有一台主机响应,多播路由器就认为本网络上的主机已经都离开了这个组,因此也就不再把这个组的成员关系转发给其他的多播路由器。
- IGMP为了避免多播控制信息给网络增加大量的开销,采用了如下措施:
- 在主机和多播路由器之间的所有通信都使用IP多播。只要有可能,携带IGMP报文的数据报都用硬件多播来传送。因此在支持硬件多播的网络上,没有参加IP多播的主机不会收到IGMP报文。
- 多播路由器在探询组成员关系时,只需要对所有的组发送一个请求信息的询问报文,而不需要对每一个组发送一个询问报文(虽然也允许对一个特定组发送询问报文)。默认的询问速率是每125秒发送一次(通信量并不太大)
- 当同一个网络上连接有几个多播路由器时,它们能够迅速和有效地选择其中的一个来探询主机的成员关系。因此,网络上多个多播路由器并不会引起IGMP通信量的增大。
- 在IGMP的询问报文中有一个数值 N N N,它指明一个最长响应时间(默认值为10秒)。当收到询问时,主机在0到 N N N之间随机选择发送响应所需经过的时延。因此,若一台主机同时参加了几个多播组,则主机对每一个多播组选择不同的随机数。对应于最小时延的响应最先发送。
- 同一个组内的每一台主机都要监听响应,只要有本组的其他主机先发送了响应,自己就可以不再发送响应了。这样就抑制了不必要的通信量。
3,多播路由选择协议
- 在多播过程中一个多播组中的成员是动态变化的。如在收听网上某个广播节目时,随时会有主机加入或离开这个多播组。多播路由选择实际上就是要找出以源主机为根节点的多播转发树。在多播转发树上,每一个多播路由器向树的叶节点方向转发收到的多播数据报,但在多播转发树上的路由器不会收到重复的多播数据报(即多播数据报不应在互联网中兜圈子)。不难看出,对不同的多播组对应于不同的多播转发树。同一个多播组,对不同的源点也会有不同的多播转发树。
- 多播路由选择协议,转发多播数据报时使用的三种方式,如下
- 洪泛与剪除
-
适合于较小的多播组,而所有的组成员接入的局域网也是相邻接的。一开始,路由器转发多播数据报使用洪泛的方法(就是广播)。为了避免兜圈子,采用了叫作反向路径广播RPB(Reverse Path Broadcasting)的策略。RPB的要点是:每一个路由器在收到一个多播数据报时,先检查数据报是否是从源点经最短路径传送来的。进行这种检查很容易,只要从本路由器寻找到源点的最短路径上(之所以叫作反向路径,因为在计算最短路径时是把源点当作终点的)的第一个路由器是否就是刚才把多播数据报送来的路由器。若是,就向所有其他方向转发刚才收到的多播数据报(但进入的方向除外),否则就丢弃而不转发。如果本路由器有好几个相邻路由器都处在到源点的最短路径上(也就是说,存在几条同样长度的最短路径),那么只能选择一条最短路径,选择的准则就是看这几条最短路径中的相邻路由器谁的IP地址最小。
-
上图中的网络用路由器之间的链路来表示。假定各路由器之间的距离都是1。路由器 R 1 R_1 R1收到源点发来的多播数据报后,向 R 2 R_2 R2和 R 3 R_3 R3转发。 R 2 R_2 R2发现 R 1 R_1 R1就在自己到源点的最短路径上,因此向 R 3 R_3 R3和 R 4 R_4 R4转发收到的数据报。 R 3 R_3 R3发现 R 2 R_2 R2不在自己到源点的最短路径上,因此丢弃 R 2 R_2 R2发来的数据报。其他路由器也这样转发。 R 7 R_7 R7到源点有两条最短路径: R 7 → R 4 → R 2 → R 1 → 源点 R_7→R_4→R_2→R_1→源点 R7→R4→R2→R1→源点; R 7 → R 5 → R 3 → R 1 → 源点 R_7→R_5→R_3→R_1→源点 R7→R5→R3→R1→源点。我们再假定 R 4 R_4 R4的IP地址比 R 5 R_5 R5的IP地址小,所以我们只使用前一条最短路径。因此 R 7 R_7 R7只转发 R 4 R_4 R4传过来的数据报,而丢弃 R 5 R_5 R5传过来的数据报。最后就得出了用来转发多播数据报的多播转发树(上图中用粗线表示),以后就按这个多播转发树来转发多播数据报。这样就可避免多播数据报兜圈子,同时每一个路由器也不会接收重复的多播数据报。
-
如果在多播转发树上的某个路由器发现它的下游树枝(即叶节点方向)已没有该多播组的成员,就应把它和下游的树枝一起剪除。如上图中虚线椭圆表示剪除的部分。当某个树枝有新增加的组成员时,可以再接入到多播转发树上。
-
- 隧道技术(tunneling)
-
隧道技术适用于多播组的位置在地理上很分散的情况。如下图中,网 N 1 N_1 N1和网 N 2 N_2 N2都支持多播。现在 N 1 N_1 N1中的主机向 N 2 N_2 N2中的一些主机进行多播。但路由器 R 1 R_1 R1和 R 2 R_2 R2之间的网络并不支持多播,因而 R 1 R_1 R1和 R 2 R_2 R2不能按多播地址转发数据报。为此,路由器 R 1 R_1 R1就对多播数据报进行再次封装,即再加上普通数据报首部,使之成为向单一目的站发送的单播(unicast)数据报,然后通过“隧道”(tunnel)从 R 1 R_1 R1发送到 R 2 R_2 R2。
-
单播数据报到达路由器 R 2 R_2 R2后,再由路由器 R 2 R_2 R2剥去其首部,使它恢复成原来的多播数据报,继续向多个目的站转发。这种使用隧道技术传送数据报又叫作IP中的IP(IP-in-IP)。
-
- 基于核心的发现技术
- 这种方法对于多播组的大小在较大范围内变化时都适合。这种方法是对每一个多播组G指定一个核心(core)路由器,给出它的IP单播地址。核心路由器按照前面讲过的方法创建出对应于多播组G的转发树。如果有一个路由器 R 1 R_1 R1向这个核心路由器发送数据报,那么它在途中经过的每一个路由器都要检查其内容。当数据报到达参加了多播组G的路由器 R 2 R_2 R2时, R 2 R_2 R2就处理这个数据报。如果 R 1 R_1 R1发出的是一个多播数据报,其目的地址是G的组地址, R 2 R_2 R2就向多播组G的成员转发这个多播数据报。如果 R 1 R_1 R1发出的数据报是一个请求加入多播组G的数据报, R 2 R_2 R2就把这个信息加到它的路由中,并用隧道技术向 R 1 R_1 R1转发每一个多播数据报的一个副本。这样,参加到多播组G的路由器就从核心向外增多了,扩大了多播转发树的覆盖范围。
- 下面是一些建议使用的多播路由选择协议
- 距离向量多播路由选择协议DVMRP(Distance Vector Multicast Routing Protocol)
- 互联网上使用的第一个多播路由选择协议。
- 基于核心的转发树CBT(Core Based Tree)
- 使用核心路由器作为转发树的根节点。一个大的自治系统AS可划分为几个区域,每个区域选择一个核心路由器。
- 开放最短通路优先的多播扩展MOSPF(Multicast extensions to OSPF)
- 此协议是单播路由选择协议OSPF的扩充,使用于一个机构内。MOSPF使用多播链路状态路由选择创建出基于源点的多播转发树。
- 协议无关多播-稀疏方式PIM-SM(Protocol Independent Multicast-Sparse Mode)
- 唯一成为互联网标准的一个协议,使用和CBT同样的方法构成多播转发树。
- 虽然在建立多播转发树时是使用单播数据报来和远程路由器联系的,但这并不要求使用特定的单播路由选择协议。这个协议适用于组成员的分布非常分散的情况。
- 协议无关多播-密集方式PIM-DM(Protocol Independent Multicast-Mode)
- 适用于组成员的分布非常集中的情况,如组成员都在一个机构之内。
- PIM-DM不使用核心路由器,而是使用洪泛方式转发数据报。
- 距离向量多播路由选择协议DVMRP(Distance Vector Multicast Routing Protocol)
- 洪泛与剪除
八,虚拟专用网VPN和网络地址转换NAT
1,虚拟专用网VPN
- 由于IP地址的紧缺,一个机构能够申请到的IP地址数往往小于本机构所拥有的主机数。考虑到互联网并不很安全,一个机构内也并不需要把所有的主机接入到外部的互联网。实际上,在许多情况下,很多主机还是要和本机构内的其他主机进行通信。假定在一个机构内部的计算机通信也是采用TCP/IP协议,那么从原则上讲,对于这些仅在机构内部使用的计算机就可以由本机构自行分配其IP地址。就是说,让这些计算机使用仅在本机构有效的IP地址(这种地址称为本地地址),而不需要向互联网的管理机构申请全球唯一的IP地址(这种地址称为全球地址)。这样就可以大大节约宝贵的全球IP地址资源。
- 但是,如果任意选择一些IP地址作为本机构内部使用的本地地址,那么在某种情况下可能会引起一些麻烦。如,有时机构内部的某台主机需要和互联网连接,那么这种仅在内部使用的本地地址就有可能和互联网中某个IP地址重合,这样就会出现地址的二义性问题。为了解决这一问题,RFC 1918指明了一些专用地址(private address)。这些地址只能用于一个机构的内部通信,而不能用于和互联网上的主机通信。换言之,专用地址只能用作本地地址而不能用在全球地址。在互联网中的所有路由器,对目的地址是专用地址的数据报一律不进行转发。
- RFC 6890全面给出了所有特殊用途的IPv4和IPv6地址,但三个IPv4专用地址块的指派并无变化,即
- 10.0.0.0/8,即从10.0.0.0到10.255.255.255。
- 172.16.0.0/12,即从172.16.0.0到172.31.255.255。
- 192.168.0.0/16,即从192.168.0.0到192.168.255.255。
- 上面这三个地址块分别相当于原来的一个A类地址,16个连续的B类地址和256个连续的C类地址。
- 采用这样的专用IP地址的互联网络称为专用互联网,本地互联网或专用网。专用IP地址也叫作可重用地址(reusable address)。
- 有时一个很大的机构的许多部门分布的范围很广,这些部门经常要互相交换信息。这可以有两种方法:
- 租用电信公司的通信线路为本机构专用。这种方法简单,但是费用过高。
- 利用公用的互联网作为本机构各专用网之间的通信载体,这样的专用网称为虚拟专用网VPN(Virtual Private Network)。
- 如果专用网不同网点之间的通信必须经过公用的互联网,但又有保密的要求,那么所有通过互联网传送的数据都必须加密。
- 一个机构要构建自己的VPN就必须为它的每一个场所购买专门的硬件和软件,并进行配置,使每一个场所的VPN系统都知道其他场所的地址。
2,VPN示例
1,使用隧道技术
-
假定某个机构在两个相隔较远的场所建立了专用网A和B,其网络地址分别为专用地址10.1.0.0和10.2.0.0。现在这两个场所需要通过公用的互联网构成一个VPN。
-
每一个场所至少需要有一个路由器具有合法的全球IP地址,如下图中的路由器 R 1 R_1 R1和 R 2 R_2 R2。这两个路由器和互联网的接口地址必须是合法的全球IP地址。路由器 R 1 R_1 R1和 R 2 R_2 R2在专用网内部网络的接口地址则是专用网的本地地址。
-
在每一个场所A或B内部的通信量都不经过互联网。但如果场所A的主机X要和另一个场所B的主机Y通信,那么就必须经过路由器 R 1 R_1 R1和 R 2 R_2 R2。主机X向主机Y发送的IP数据报的源地址是10.1.0.1,而目的地址是10.2.0.3。这个数据报先作为本机构的内部数据报从X发送到与互联网连接的路由器 R 1 R_1 R1。路由器 R 1 R_1 R1收到内部数据报后,发现其目的网络必须通过互联网才能到达,就把整个的内部数据报进行加密(这样就保证了内部数据报的安全),然后重新加上数据报的首部,封装成为在互联网上发送的外部数据报,其源地址是路由器 R 1 R_1 R1的全球地址125.1.2.3,而目的地址是路由器 R 2 R_2 R2的全球地址194.4.5.6。路由器 R 2 R_2 R2收到数据报后将其数据部分取出进行解密,恢复出原来的内部数据报(目的地址是10.2.0.3),交付主机Y。可见,虽然X向Y发送的数据报通过了公用的互联网,但在效果上就好像是在本部门的专用网上传送一样。如果主机Y要向X发送数据报,那么所进行的步骤也是类似的。
3,VPN分类
1,虚拟专用网VPN
- 下图由场所A和B的内部网络所构成的虚拟专用网VPN又称为内联网(intranet或intranet VPN,即内联网VPN),表示场所A和B都属于同一个机构。
2,外联网VPN
- 有时一个机构的VPN需要有某些外部机构(通常是合作伙伴)参加进来。这样的VPN就称为外联网(extranet或extranet VPN,即外联网VPN)。
- 内联网和外联网都采用了互联网技术,即都是基于TCP/IP协议的。
3,远程接入VPN
- 远程接入VPN(remote access VPN)。
- 有的公司由于业务的需要,有很多流动员工在外地工作。公司需要和它们保持联系,有时还可能需要视频会议。远程接入VPN可以满足这种需求。在外地工作的员工通过拨号接入互联网,而驻留在员工个人电脑中的VPN软件可以在员工的个人电脑和公司的主机之间建立VPN隧道,因而外地员工与公司通信的内容也是保密的。
4,网络地址转换
- 在专用网内部的一些主机本来已经分配到了本地IP地址(即在本专用网内使用的专用地址),但现在又想和互联网上的主机通信(并不需要加密),那么应该采取什么措施呢?
- 网络地址转换NAT(Network Address Translation)
- 网络地址转换NAT(Network Address Translation)。需要在专用网连接到互联网的路由器上安装NAT软件。装有NAT软件的路由器叫作NAT路由器,它至少需要有一个有效的外部全球IP地址。这样,所有使用本地地址的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球IP地址,才能和互联网通信。
1,NAT工作原理
-
下图中,专用网192.168.0.0内所有主机的IP地址都是本地IP地址192.168.x.x。NAT路由器至少要有一个全球IP地址,才能和互联网相连。下图中NAT路由器的全球地址是172.38.1.5(NAT路由器可以有多个全球IP地址)。
-
NAT路由器收到从专用网内部的主机A发往互联网主机B的IP数据报1:源地址S=192.168.0.3,而目的地址D=213.18.2.4。NAT路由器通过内部的NAT转换表,把专用网的IP地址192.168.0.3,转换为全球IP地址172.38.1.5后,改写到数据报的首部中作为新的源地址,然后把新的数据报2转发出去。主机B收到IP数据报2后,发回应答3,B发送的IP数据报的源地址就是自己的地址:S=213.18.2.4,目的地址就是刚才收到的数据报的源地址,因此现在D=172.38.1.5。注意,B并不知道A的专用地址192.168.0.3。实际上,即使知道了,也不能使用,因为互联网上的路由器不能转发目的地址是任何专用地址的IP数据报。当NAT路由器收到B发来的IP数据报3时,还要进行一次IP地址的转换。通过NAT转换表,把收到的IP数据报使用的目的地址D=172.38.1.5转换为专用网内部的目的地址D=192.168.0.3(即主机A真正的本地IP地址),变成了数据报4,然后发送到A。
-
通过NAT路由器的通信必须由专用网内的主机发起。如果专用网上外面的主机要发起通信,当IP数据报到达NAT路由器时,NAT路由器就不知道应当把目的IP地址转换成专用网内的哪一个本地IP地址。这就表明,专用网内部的主机不能直接充当服务器用。
-
为了更加有效地利用NAT路由器上的全球IP地址,现在常用的NAT转换表把运输层的端口号也利用上。这样,就可以使多个拥有本地地址的主机,共用NAT路由器上的一个全球IP地址,因而可同时和互联网上的不同主机进行通信。
-
使用端口号的NAT也叫作网络地址与端口号转换NAPT(Network Address and Port Translation),而不使用端口号的NAT就叫作传统的NAT(traditional NAT)。