第5章
网络互联技术



网络互联技术是计算机网络技术中的核心技术,其中涉及硬件、软件及算法等多方面的知识。本章将从介绍网络互联的基本概念入手,逐步深入地探讨IP协议族、路由协议、多播技术、专用网络互联技术等。随着互联网的不断发展,IPv6技术已经成为一种必然的趋势,移动IP技术也受到了越来越广泛的重视,本章也将对这两种技术进行探究。


5.1网络互联的基本概念


不同的数据通信网络在很多方面都有所不同,存在很大的差异性。这种差异性称为异构性(Heterogeneity),主要表现在: ①不同的网络类型(如广域网、城域网、局域网); ②不同的数据链路层协议(Ethernet、Token Bus、ATM、WLAN); ③不同的计算机系统及操作系统平台。

为了隐藏所有底层网络细节的不同,实现异构网络中任意两台计算机之间的通信,可以利用网关或路由器将两个或两个以上不同的网络相互连接起来构成一个更大的“网络”,这种互联方式称为网络互联(Internetwork),互联后的网络称为互联网(internet),如图51所示。当使用TCP/IP协议进行互联之后,将在网络层上形成一个单一的虚拟网络。网络互联的目标是建立一个支持通用通信服务的统一、协调的互联网络,处于该网络中的主机之间通信就像是在单个网络中进行的一样。




图51网络互联示意图


需要注意,人们常说的因特网(Internet)和互联网(internet)是有区别的。因特网是指使用TCP/IP协议相互连接起来的全世界范围的一个互联网,即全球互联网,也可以说因特网是世界上最大的互联网(Internet is the largest internet)。

为了实现多个网络之间的互联,首先应该确保两个网络在物理上的互通,这是网络互联的前提,如果两个网络在物理上没有相互连接在一起,是没有办法实现网络间互联的。但是,仅有物理连接还远远不够,还需要使用一些特殊的计算机,这些计算机分别与两个网络连接在一起,它们可以将分组从一个网络传递到另一个网络。将这样起着特殊功能作用的计算机称为互联网网关(Internet Gateway)或者互联网路由器(Internet Router)。

应该指出,网关和路由器本来是指不同的网络互联设备。网关是指在网络层以上(主要是应用层)使用的互联设备,也称为高层协议转发器,它能在不同的高层协议间提供协议转换和数据重分组功能,但由于比较复杂,目前使用得较少,本书不进行详细讨论。路由器是指在网络层使用的互联设备,其实就是一台特殊的计算机,用来在互联网中进行路由选择。由于历史的原因,有很多文献都曾经将网络层使用的路由器称为网关(因为真正的网关很少用到),这样网关就成了路由器的代名词,二者可以互换使用。但是,从当前的使用情况来看,人们还是比较认可将网关和路由器区别对待,所以本书将严格区分使用这两个名词。

在物理层使用的连接设备中继器(Repeater)和在数据链路层使用的连接设备网桥并不属于网络互联设备。当使用中继器时,只是在物理层将信号进行了复制、调整和放大,以此来延长网络的长度,并没有实现异种网络间的连接; 当使用网桥时,只是将连接部分的局域网的范围扩大了,从网络层的角度来看,依然属于同一种网络,因此也不属于网络互联。由此可见,网络互联已经是网络层及其以上各层的范畴了。能够实现网络互联的设备只有路由器及高层使用的网关,这一点需要大家特别注意。有一些资料将中继器、集线器、交换机(包括二层和三层)、网桥、路由器及网关统称为网络互联设备,本书并不赞成这样做。

计算机网络基础教程(第4版·题库·微课视频版)

第
5
章网络互联技术

5.2网际协议(IPv4)


最基本的互联网服务被定义为不可靠的(Unreliable)、尽最大努力交付的(Besteffort delivery)、无连接的分组交付系统。这种服务不能保证交付(但这并不意味着可以任意丢弃分组),分组可能会丢失、重复或乱序,但服务检测不到这些情况,也不会通知发送方或接收方。实现这种交付功能的协议称为网际协议(Internet Protocol,IP)。当前使用较多的是该协议的第4个版本,通常用IPv4代表。IPv4协议的研究与发展的过程如图52所示。

IP协议定义了在整个TCP/IP互联网中使用的数据传送基本单元(IP数据报)、IP软件完成的转发(Forwarding)功能,同时还规定了主机和路由器应当如何处理分组、何时及如何产生差错报文,以及在什么情况下可以丢弃分组等。图53说明了TCP/IP协议的层次关系(包括网络层、传输层和应用层),从图53中可以看出,IP协议是互联网中最基本的组成部分。




图52IPv4协议的研究与发展的过程





图53TCP/IP协议的层次关系


本节将讨论与IP协议相关的内容,包括IP地址、地址解析协议ARP、IPv4数据报、ICMPv4协议及整个的IP数据报的转发过程。IP协议不是独立工作的,它常常会与ARP和ICMP协议配套使用,相互之间构成了一个完整的系统。另外,在介绍IP协议相关的内容时,将不加区分地使用IP数据报、IP包、IP分组3个概念。



视频讲解

5.2.1IP地址

在互联网当中有数以亿计的主机和路由器,为了能够实现彼此间的无障碍通信,需要有一种方法来标识这些设备。在TCP/IP协议栈中,规定为每台设备分配一个统一格式、全球唯一的地址,这个地址称为IP地址(有时也可以称为互联网协议地址、互联网地址、逻辑地址、网络层地址)。IP地址是IP协议使用的标识,工作于网络层。一台设备至少拥有一个IP地址(多则不限),任何两台设备的IP地址不允许相同。IP地址由ICANN负责分配,实际上ICANN只负责将地址分配给国家或者地区,具体的分配工作由相应的国家或者地区的网络管理机构负责完成。

为了确保地址的网络部分在Internet上的唯一性,所有的地址都由一个中央管理机构进行分配。最初由因特网赋号管理局(Internet Assigned Number Authority,IANA)负责分配并制定相应的政策。从因特网诞生到1998年秋天,一直由Jon Postel一个人负责IANA的运转及地址分配。1998年年底,在Jon Postel去世以后,组建了一个新的组织来承接IANA的工作,这个组织就是因特网名称与号码指派协会(Internet Corporation for Assigned Names and Numbers,ICANN)。ICANN负责制定政策、分配地址等工作。

IP地址由32位二进制数构成,通常有3种常用的表示方法: 二进制记法、点分十进制记法和十六进制记法。

(1) 二进制记法。IP地址表示为32位,为了有更好的可读性,可以在每字节(8位)之间加上一个(或多个)空格,将32位的IP地址分隔成4个8位组,如01110001 10100101 00001110 10111100。

(2) 点分十进制记法。是一种更为常用、更加简洁的IP地址表示方法。这种方法将32位的二进制IP地址用小数点分隔开,分隔的时候以8位(字节)为单位进行。由于每字节仅有8位,因此在点分十进制记法中的每个数目一定为0~255,如192.168.0.1。将二进制记法表示的IP地址转换为点分十进制记法表示的IP地址的方法是: 把二进制记法中的每一组8位转换成等效的十进制数,并增加分隔用的小数点,如将11100111 11011011 10001011 01101111转换成点分十进制记法表示的IP地址为231.219.139.111。

(3) 十六进制记法。每一个十六进制数字等效于4位二进制数字,这样一来,一个32位的IP地址可以表示为8个十六进制数字,这种记法常用于网络编程中。需要说明的是,十六进制记法中通常不需要加入空格或小数点进行分隔,但在开始处可以加入0X(或0x),或者在最后加入下标16以表示这个数是十六进制的,如0X910C1B26或者910C1B2616。

Internet早期使用的是分类编址的方式; 在20世纪90年代中期,出现了一种称为无分类编址的方式,这已经是当前Internet中主流的编址机制。所以,本节将结合当前的应用情况,分别展开讨论。


1. 分类编址

IP地址由网络号和主机号两部分组成,这样的IP地址是两级地址结构,如图54所示。



图54IP地址结构


IP地址的层次结构便于在Internet上实现寻址。可以先按IP地址的网络号(NetID)找到相应的网络,进而按主机号(HostID)找到对应的主机。所以,IP地址这样的层次结构有利于快速准确地定位主机。反之,像MAC地址这样的平面地址结构是不利于寻址的。

在分类编址中,IP地址按最高1~5位的值分成5类: A、B、C、D和E类,如图55所示。事实上,大量使用的IP地址是A、B、C三类。其中,网络号部分是由相关机构分配的。当一个单位申请到一个IP地址时,实际上只是获得了一个网络号(NetID),具体的主机号(HostID)由本单位内部自行进行分配。




图55分类编址的IP地址


(1) A类地址: 8位网络号,网络号的第一位为0,其余7位可以分配,但可以指派的网络号是27-2=126个,之所以减去了两个网络号,是由于IP地址中的全0表示“此网络(this)”或者“本网络”,是一个保留地址,另外,网络号为127(01111111)的地址保留作为本地软件回环测试地址。

A类网络具有24位主机号,可以容纳的最大主机数是224-2=16777214个,这里减去两个主机号的原因是主机位全0的地址是本主机连接到的网络地址; 而主机位全1的地址则表示该网络上的所有主机(即本网络的广播地址)。A类网络可以容纳的主机数较多,一般用于大型网络。

(2) B类地址: 16位网络号,网络号的前两位为10,其余14位可以分配。由于B类地址中前两位已经是固定的了(10),因此网络位后面的14位无论怎样变化都不可能使整个2B的网络号字段成为全0或全1,因此不存在网络总数减2的问题。但实际上B类网络地址中128.0.0.0是不指派的,而可以指派的B类最小网络地址是128.1.0.0,因此B类地址可指派的网络数为214-1=16383个。

B类网络具有16位主机号,因此每个网络上的最大主机数是216-2=65534个,减去的两个地址为主机位全0的地址(网络地址)和主机位全1的地址(本网络的广播地址)。B类地址一般用于大、中型网络。

(3) C类地址: 24位网络号,网络号的前三位为110,其余21位可以分配,8位主机号。C类网络地址中的192.0.0.0也是不能指派的,可以指派的C类最小网络地址是192.0.1.0,因此C类网络可以指派的网络地址总数是221-1=2097151个。

每一个C类网络中可以容纳的主机数是28-2=254个,同样减去的两个地址为主机位全0的地址(网络地址)和主机位全1的地址(本网络的广播地址)。C类网络可以容纳的主机数较少,一般用于小型网络。

(4) D类地址: 前四位为1110,用于多播。

(5) E类地址: 前五位为11110,保留未使用。

IP地址中,全0、全1的地址一般不能当作普通地址使用。各类地址的可指派范围如表51所示。



表51各类IP地址的可指派范围


类别
范围
可用首网络号
可用末网络号
最大可指派网络数
网络主机数


A
0.0.0.0~127.255.255.255
1
126
126(27-2)①
16777214

B
128.0.0.0~191.255.255.255
128.1
191.255
16383(214-1)②
65534
C
192.0.0.0~223.255.255.255
192.0.1
223.255.255
2097151(221-1)③
254
D
224.0.0.0~239.255.255.255




E
240.0.0.0~255.255.255.254




注: ① 如果除去A类地址中的1个私有网络地址10.0.0.0(该地址本来是分配给ARPANET的,由于ARPANET已经关闭停止运行了,因此这个地址就用作专用地址了),实际可指派的地址变为125个。

② 如果除去B类地址中的16个私有网络地址,实际可指派的地址变为16367个。

③ 如果除去C类地址中的256个私有网络地址,实际可指派的地址变为2096895个。



另外,IP定义了一套特殊地址(有时也称为保留地址)。这些特殊地址有着特殊的用途,如表52所示。


表52特殊IP地址


NetID
HostID
源地址
目的地址
含义


0
0
可以
不可以
本网段上的本主机
0
××
不可以
可以
本网段上的某主机
全1
全1
不可以
可以
本网内广播
××
全1
不可以
可以
对目的的网络广播
127
××
可以
可以
Loopback测试
169.254
××.××


DHCP因故障分配的地址



10
××.××.××


172.16~172.31
××.××


192.168.××
××

私有地址,用于内部网络




视频讲解

分类的IP地址有一些缺点,如IP地址的空间利用率不高,数以百万计的A类地址、大量的B类地址都被浪费了; 与此同时,C类地址空间对于大多数机构而言是不够用的。另外,给每一个物理网络都分配一个网络号会导致路由表变得太大而无法正常工作。基于这样的原因,希望能够有一种更为灵活地使用IP地址的方式。


为此,可以考虑将一个规模较大的网络划分成为相对独立的子网(Subnet),子网间的通信类似于不同网络之间的通信。划分子网后的网络,对外仍然表现为一个网络。本网络外的网络并不知道这个网络是由多少子网构成的。也就是说,划分子网完全是网络内部的事情,进行子网划分的优势是明显的。

(1) 减轻网络的拥塞状况: 通过路由器的分隔,可以将原本属于同一个网络的主机分散到多个子网中,从而大大减少了每个子网内的通信量,同时分隔了广播域。

(2) 缩减了路由表的内容: 划分子网以后,路由表只需要记录没有划分子网前的网络情况,而不需要将每一个子网的信息都记录在路由表中,这样就可以大大减少路由表中的记录数; 如果不进行子网划分,路由表需要记录所有的网络情况,记录数巨大。

(3) 便于网络管理: 网络范围减小后,排错更为容易,安全性相对更高,管理更加灵活。

划分子网的方法是: 将主机号部分进一步分成子网号和新的主机号两部分。这样,IP地址就由三部分组成: 网络号(NetID)、子网号(SubNetID)、主机号(HostID),如图56所示。




图56三级IP地址结构及子网掩码


在子网划分后的IP地址中,子网号有几位?怎样判定哪些位是网络号,哪些位是子网号?这就需要引入子网掩码(Subnet Mask)。子网掩码可以区分网络号和子网号,有时也可以称为屏蔽码。子网掩码的格式和IP地址相同,对应网络号(NetID)和子网号(SubNetID)部分全部为1,对应主机号部分全部为0。子网掩码的表示形式同IP地址,如255.255.255.0。

划分子网后,同一个子网内的所有主机的网络地址、子网地址、子网掩码是相同的。在使用过程中,将网络地址和子网地址合并在一起,称为广义网络地址。广义网络地址的计算方式是: 广义网络地址=(IP地址) AND (子网掩码)。

当前使用的Internet中规定,所有的网络都必须使用子网掩码,在路由器的路由表中也必须有子网掩码这一项内容。子网掩码已经成为一个网络不可或缺的属性。对于一些没有进行子网划分的分类IP地址来说,它们的子网掩码可以使用默认子网掩码,即与IP地址的网络号对应的内容置为1(没有子网号部分),与IP地址的主机号对应的内容置为0。显然,A类IP地址的默认子网掩码是255.0.0.0,B类IP地址的默认子网掩码是255.255.0.0,C类IP地址的默认子网掩码是255.255.255.0。

【例题】设计一个网络时,分配给其中一台主机的IP地址为192.55.12.120,子网掩码为255.255.255.240。

(1) 确定该主机的网络号、子网号和主机号。

(2) 确定该主机所在网络在该子网掩码下子网号的范围。

【解答】

(1) 主机的网络号和子网号可以通过主机的IP地址与子网掩码进行逻辑“与”运算得到,而IP地址剩余的部分即为主机号。

建议大家在进行逻辑运算时,首先将点分十进制记法表示的IP地址转换为二进制记法表示的IP地址。当熟练掌握以后,可以省略这一步骤。

192.55.12.120转换为二进制形式后为11000000 00110111 00001100 01111000; 

255.255.255.240转换为二进制形式后为11111111 11111111 11111111 11110000; 

广义网络地址=(192.55.12.120) AND (255.255.255.240)=192.55.12.112。

主机分配到的是一个C类IP地址,C类地址的前24位均为网络号; 由子网掩码可以知道,从原主机号中拿出了4位(25~28位)充当子网号; 剩余的位为主机号。

所以,网络号为192.55.12; 子网号为112; 主机号为8。

(2) 由(1)的分析可知,IP地址中的第25位到第28位为子网号。因此,子网号范围为192.55.12.0,192.55.12.16,192.55.12.32,192.55.12.48,…,192.55.12.240。

在子网掩码的使用过程中,虽然没有明确规定子网掩码中的1要连续,但建议大家选用连续的1,以避免不必要的麻烦。

在进行子网规划的过程中,会涉及选用几位主机号来充当子网号。选取的原则就是够用即可。例如,选取两位主机号充当子网号后,原则上就可以表示4(22)个不同的子网了。问题在于,子网号部分全0和全1的IP地址能否使用。不同的资料对此问题的回答不尽相同。准确的答案是,在分类IP地址中,子网号不能为全0或全1; 但随着无分类地址的普及应用,现在全0和全1的子网号也可以使用了。使用全0或全1子网号的IP地址时要谨慎,要清楚当前网络中的路由器和主机是否支持这一应用。传统的教材认为使用全0或全1子网号的做法是错误的,这里并不这样认为。当然,主机号部分全0或全1的IP地址是不能分配给主机使用的。

2. 无分类编址

分类编址方式有一些明显的缺陷。

(1) 已有的IP地址已经快分配完毕。A类地址早已分配完,B类地址也将近分配完毕。

(2) 因特网主干网上的路由表中的项目数急剧增长。

(3) 整个IPv4的地址空间将被全部耗尽。

一些不同的策略已经开始实施,以应对地址空间不足的问题。1987年,RFC1009指明在一个划分子网的网络中可以同时使用几个不同的子网掩码。使用变长子网掩码(Variable Length Subnet Mask,VLSM)可以进一步提高IP地址资源的利用率。

在VLSM的基础上又进一步研究出无分类编址方法,其正式名称为无分类域间路由选择(Classless InterDomain Routing,CIDR)。目前CIDR已经成为Internet的建议标准,得到了广泛的应用。

CIDR消除了传统的A、B、C类地址及划分子网的概念,可以更加有效地使用IPv4的地址空间。CIDR把32位的IP地址划分成为两部分,即网络前缀(NetworkPrefix)和主机号(HostID)。网络前缀用来标明网络,主机号用来指明主机。可以看出,CIDR使IP地址从三级编址(使用子网掩码)又回到了两级编址,但这是无分类的两级。

CIDR使用“斜线记法”表示,也称为CIDR记法,即在IP地址后面加上斜线“/”,然后写上网络前缀所占的位数,如201.18.5.0/19。

CIDR把网络前缀相同的连续的IP地址组成的地址区间称为CIDR地址块。根据CIDR地址的表示方法,可以比较容易地知道一个CIDR地址块中的最小地址和最大地址,以及地址块当中的地址数。其方法是,首先计算出主机地址的位数n(32-网络前缀位数),再将IP地址中后n位分别置为全1和全0,就得到了该地址块的最大地址和最小地址。

例如,128.14.35.7/20这个CIDR形式表示的IP地址,主机地址为12位,即第三个字节中的前4位为网络前缀,后4位为主机地址,依据上述方法计算可知,该CIDR地址块的最小地址为128.14.32.0,最大地址为128.14.47.255。

由此可以看出,CIDR方法分配IP地址比较灵活,可以依据实际需要进行分配。不会出现分类地址中那样的浪费情况。CIDR可以分配多个传统网络规模的地址块,也可以分配1/n个传统网络规模的地址块,这样的方式称为“超网”或“地址聚合”。通过地址聚合,可以有效地减少路由表中的记录数。

需要说明的是,“CIDR不使用子网”并不意味着单位内部不能划分子网。CIDR不使用子网是指在32位IP地址中没有指明若干位用于子网号标识。但分配到一个CIDR地址块的单位,仍然可以在本单位内部依据实际需要划分子网,当然,相应的网络前缀部分的长度也会发生变化。


5.2.2地址解析协议
1.  ARP的提出

在互联网中通信时,网络层与数据链路层使用的是不同的地址。数据链路层使用的是物理地址(48位的MAC地址),而在网络层使用的是逻辑地址(32位的IP地址)。如图57所示,当应用层的数据在传输层经过处理变成TCP报文后,向下交给网络层。网络层再对报文加上含有IP地址的首部后就交给了数据链路层。在数据链路层,IP数据报会被封装为MAC帧,而MAC帧是通过首部含有的硬件地址实现寻址的。在数据链路的另一端的设备是根据数据帧首部的硬件地址来接收MAC帧的,只有在数据链路层向上交付给网络层后,IP地址才在IP数据报中被找出来进行应用。从图57中可以看出,IP地址放在IP数据报的首部,而硬件地址则放在MAC帧的首部。




图57IP地址和MAC地址的封装关系


当然有人会问,为什么不在网络层和数据链路层使用同一个地址,而在不同的层要使用不同的地址呢?因为IP地址在互联网内是唯一的主机标识,而硬件地址在全世界也是独一无二的。实际上,最终也是依靠硬件地址找到目标主机的。那么,为什么不直接使用硬件地址进行寻址,而是要使用抽象的IP地址并调用ARP来寻找出相应的硬件地址呢?似乎看起来只使用硬件地址是可以的,其实不然。

由于IP地址是分层次的结构,而MAC地址是一种平面的结构。就如主机A要和主机B进行通信时,核心网络上的路由设备必须清楚地知道全世界所有主机及网络设备是连接在主干网的哪一个端口上。由于MAC地址的这种平面结构不能提供任何信息给路由设备,这些路由设备就必须存储世界上所有主机的MAC地址。如果这样做,就会使得路由器承担极其繁重的工作任务,而且网络性能也是相当糟糕。就好比你要寄一封信给一个人,不写具体的通信地址,只写了收信人的姓名便交给了邮局。可以想象,邮局必须得知道全世界所有人的个人信息,并且还得假设这个世界上所有的人都有不同的名字,才能保证将信送到正确的收信人手中,显然这是不现实的。而IP地址的分层结构可以很好地解决这样的问题,就像平时正常寄信时的情况一样,会以层次性的结构方式写上收信人在世界的具体位置,以方便邮递员投递。

另一个问题是网络异构问题。互联网是由各种网络设备(路由器、网关等)将很多异构型网络相互连接而组成的,这些各式各样的网络可能出自不同的组织,运行不同的协议,使用不同的物理地址(这些网络可能是Ethernet、令牌环网、令牌总线网、ATM或其他类型网络)。当两个主机之间进行通信时,它们的分组从源主机到目的主机将有可能经过各种各样的异构网络。要使这些异构网络能够互相通信就必须进行非常复杂的硬件地址转换工作,这些几乎是不可能做到的事情。因此,需要对这种差异性进行屏蔽,使之具有透明的特性; 如果在上层统一使用IP地址就可以解决这个问题。连接到Internet的主机都拥有统一的网络层地址,方便了相互之间的通信。

由此可以看出,逻辑地址和物理地址分别有各自的用途。逻辑地址由网络层使用,而物理地址则在数据链路层使用。这就要求在通信过程中,有一种方法可以实现相互之间的映射,使这两种地址可以对应起来。地址解析协议(Address Resolution Protocol,ARP)正是在这样的需求下产生的。

2.  ARP的报文结构

ARP报文的格式如图58所示。




图58ARP报文的格式


以太网帧
首部的前两个字段是目的硬件地址和源硬件地址,当要在网络中进行数据帧的广播时,可将目的地址全部置为1; 帧类型字段在分组中占2B,用来说明后面数据的类型,ARP请求/应答分组所对应的该字段的值为0x0806; 接下来是ARP报文部分,其中
硬件类型字段指明了发送方想知道的硬件接口类型,以太网的值为1,在分组中占2B; 协议类型字段则指明了发送方提供的高层协议类型,IP协议为0x0800,占2B,它的值与包含IP数据报的以太网数据帧中的类型字段的值是相同的; 硬件地址长度和协议地址长度是用来指明硬件地址和高层协议地址的长度,它们分别各占1B,这样做的目的是让ARP报文可以在任意硬件和任意协议的网络中使用,对于Ethernet上的IP地址的ARP请求/应答分组来说,它们的值分别是6和4; 操作字段是指操作类型字段,用来表示这个报文的类型,因为ARP请求和ARP应答报文的帧类型字段值是一样的,所以必须靠这个字段来进行区别,一般应用的4种操作类型有ARP请求、ARP响应、RARP请求、RARP响应,对应的字段值分别为1、2、3、4; 最后的4个字段是发送方的硬件地址、发送方的协议地址、目的方的硬件地址、目的方的协议地址。

3.  ARP的工作过程

ARP是一种动态地址解析协议,因为动态的方法有着很好的扩展性与灵活性。假设在一个只有A、B两台主机组成的小型局域网中,A与B之间进行通信时,可以考虑使用静态映射的方法,使A与B的IP地址与MAC地址相对应,形成IP地址与MAC地址对应表。毫无疑问,这样做可以保证A与B之间的正常通信。但当一台新的主机C加入这个网络中时,这张对应表中则没有主机C的信息,C并不能与A、B之间实现通信。另外,若A或B其中的一台主机因为某些原因更换了网卡,则它们的MAC地址会发生相应变化,A与B之间此时也不能实现正常通信,因为IP地址与MAC地址对应表中记录的还是没有更换网卡前的MAC地址。同样,当主机A或主机B从当前网络移动到了一个新的网络,在MAC地址没有发生变化的前提下,IP地址变了,造成IP地址与MAC地址对应表出现错误。由此可见,单纯的静态方法是行不通的,ARP需要采用动态方法实现通信。

为了提高工作效率,ARP一般会采用静态映射与动态映射相结合的方法,这样可以实现一次请求、多次使用的良好效果。实现“动静结合”的关键在于每台主机都建立了一个ARP高速缓存表(ARP Cache),里面存储了本地局域网上一些主机和路由器的IP地址与MAC地址的关系映射,且这些关系映射是随时间动态更新的。当主机A要向本局域网上的主机B发送IP数据报时,首先查找自己的ARP高速缓存表,如果找到对应的记录,则取出MAC地址写入相应的MAC帧; 如果找不到,便启用ARP服务进行地址解析。

如图59所示,实现地址解析的第一步是产生ARP请求帧,在ARP请求帧的相应字段写入本地物理地址、IP地址、待侦测的目的IP地址,在目的物理地址字段填入0,并在操作类型字段填入1,用来表示本数据帧是一个ARP请求帧。该ARP请求帧以本地物理地址作为源地址,以物理广播地址(FFFFFFFFFFFF)作为目的地址,在本局域网内进行广播。




图59ARP地址解析的过程


本局域网当中的所有主机都会接收到该ARP请求帧,除目的主机外,所有接收到该ARP请求帧的主机和设备都会丢弃该ARP请求帧,因为目的主机能够识别ARP消息中的IP地址与自己的IP地址是不是相同。目的主机需要构造ARP应答帧以回应ARP请求。在ARP应答帧中,以请求分组中源物理地址、源IP地址作为其目的物理地址、目的IP地址,并将自身的物理地址、IP地址填入应答帧的源物理地址、源IP地址字段,并在操作字段中写入2,表示本ARP数据帧是一个应答数据帧。源主机接收到ARP应答帧后,获得目的主机的物理地址,并将它作为一条新记录加入ARP高速缓存表。由此,ARP高速缓存表中的内容便可以不断地添加及更新,当以后要有信息发送到同一主机时便会在ARP高速缓存表中找到相应的记录,不再需要进行ARP请求。这样可以减少网络流量,提高处理效率。如果不使用ARP高速缓存,那么任何一个主机只要进行一次通信,就必须在网络上用广播的方式发送ARP请求分组,这会使网络上的通信量大大增加。

此外,也需要考虑ARP高速缓存表中内容的正确性,ARP高速缓存表应当进行实时更新。所以,为每一条记录都设置了一个计时器,每一条记录在高速缓存中的生存时间一般为10~20min,起始时间从被创建时算起,超过生存时间的记录会从高速缓存中删除。

由于ARP协议工作机制的缺陷,如果源主机没有发送ARP请求而收到其他主机的ARP响应数据帧,源主机也会在本地ARP高速缓存表中存储该主机物理地址和IP地址的对应关系。这样设计的初衷是减少网络通信量,提高传输效率。但是,这却成为ARP攻击的主要原因。由于不加验证就存储相应的记录,使得黑客可以很轻易地构造一个假的物理地址和IP地址的对应关系,造成用户没有和真正想通信的主机进行通信,而是在和一台傀儡主机进行通信,从而导致机密信息的泄露。



视频讲解

5.2.3IPv4数据报
1.  IPv4数据报格式

IPv4数据报的格式如图510所示,一个IPv4数据报由首部和数据两部分组成。首部的前一部分长度固定(20B),是所有IP数据报必须具有的。在首部的固定部分后面是一些可选字段,其长度是可变的。下面讨论首部各字段的意义。




图510IPv4数据报的格式


(1) 版本: 占4位,指IP协议的版本,IPv4协议版本号为4。

(2) 首部长度: 占4位,可表示的最大数值是15个单位(一个单位为4B),因此,IP的首部长度的最大值是60B。当IP分组的首部长度不是4B的整数倍时,必须利用最后的填充字段加以填充。

(3) 区分服务: 占8位,用来表示不同的服务质量。这个字段在旧标准中称为服务类型,但实际上一直没有被使用过。1998年IETF把这个字段改名为区分服务。

(4) 总长度: 占16位,指首部和数据之和的长度,单位为字节。因此,数据报的最大长度为65535B(64KB)。在网络层下面的每一种数据链路层都有其自己的帧格式,其中包括帧格式中的数据字段的最大长度,这称为最大传送单元MTU。当一个IP数据报封装成数据链路层的帧时,此数据报的总长度(即首部加上数据部分)一定不能超过下面的数据链路层的MTU值。

(5) 标识: 占16位,可以看作IP数据报的编号。仅仅只是一个编号,而不是序号,因为IP数据报是无序的。

(6) 标志: 占3位,目前只有两位有定义。标志字段中的最低位记为MF,MF=1表示后面“还有分片”的数据报; MF=0表示这已是若干数据报分片中的最后一个。标志字段中间的一位记为DF=1,意思是“不能分片”,只有当DF=0时才允许分片。

(7) 片偏移: 占13位,表示本分片在原分组中的相对位置。片偏移以8B为偏移单位。

(8) 生存时间: 占8位,记为TTL,即数据报在网络中的寿命。初始值设置为允许经过的跳数,一般根据发送端的操作系统类型不同而具有不同的值,常见的值为32、64、128和255,意味着一个数据报在网络中最多允许经过多少段链路。每经过一个路由器,将该值减1,当该值减到0时就将该数据报丢弃,这样可以防止数据报在因特网中“兜圈子”,消耗大量网络资源。

(9) 协议: 占8位,协议字段指出此数据报携带的数据使用哪种协议,以便目的主机的网络层知道应将数据部分上交给哪个处理进程。具体的对应关系有ICMP 1、IGMP 2、TCP 6、EGP 8、IGP 9、UDP 17、IPv6 41、OSPF 89。

(10) 首部检验和: 占16位,这个字段只检验数据报的首部,但不包括数据部分。这是因为数据报每经过一个路由器,路由器都要重新计算一下首部检验和(一些字段,如生存时间、标志、片偏移等都可能发生变化),如果把数据部分一起检验,计算的工作量就太大了。其生成方法是16位为一个字,按字进行补码加法,再将和取反。

(11) 源地址: 占4B,源主机的IP地址。

(12) 目的地址: 占4B,目的主机的IP地址。

(13) 可选字段: 用来支持排错、测量及安全等措施,此字段长度可变,从1B到40B不等,取决于所选择的项目。实际上这些选项很少被使用。

(14) 填充: 任意数据,使头部的总长度为32位的整数倍。

(15) 数据部分: 具体需要传输的数据。


2. 数据报的封装与分片

IP数据报需要进行分片有以下两个原因。

(1) 不同的网络MTU值不同,如以太网的MTU为1500B,PPP的MTU为296B,FDDI的MTU为4352B,令牌环的MTU为4464B。

(2) 太长的IP数据报不能够封装到较短的数据链路层帧中进行传送。

所以,需要对IP数据报进行分片。如果IP数据报进行了分片,IP首部中的“总长度”字段是指分片后的每片的首部长度与数据长度的总和,而不是未分片前的数据报长度。图511给出了一个数据部分长度为3800字节的IP数据报的分片与封装的情况。




图511IP数据报的分片与封装


5.2.4ICMP协议

在当今如此复杂的网络环境中,可能会有各种各样影响数据报传输的问题出现。例如,通信线路可能会断、处理器可能出现故障、路由器可能负载太高、目的主机可能出现临时或永久的断链、计时器出现超时等情况,这些状况的发生都无法确保IP能够进行正常通信。由于IP协议提供的是一种无连接的、不可靠、尽力而为的服务,它并不会关心网络服务是否处于正常状态,因此,需要设计某种机制来侦测或通知各种各样可能发生的状况,包括路由、拥塞和服务质量等问题。利用这种机制来帮助人们对网络的状态有一些了解。Internet控制报文协议(Internet Control Message Protocol,ICMP)由此提出。

ICMP协议是TCP/IP协议族中的一个子协议,与IP协议同属于网络层,但是它不能够独立于IP协议而存在。ICMP主要是通过差错报告与查询、控制机制来保证IP协议的可靠运行。ICMP不仅是一个管理性协议,并且也是一个IP信息服务的提供者,它的报文是被封装在IP数据报中进行传送的,因而也不保证可靠地提交。ICMP报文的格式如图512所示。



图512ICMP报文的格式


ICMP报文各个字段的具体含义如下。

(1) 类型字段。类型字段表示ICMP报文的类型。

(2) 代码字段。代码字段表示报文的少量参数。

(3) 校验和字段。校验和字段用于进行ICMP报文的校验,覆盖整个ICMP报文。使用的算法和IP首部校验和算法相同。ICMP的校验和字段是必须的。

ICMP报文的前4B是统一的格式,共有3个字段,即类型、代码和校验和。接着的4B的内容与ICMP的类型有关。最后面是数据字段,其长度取决于ICMP的类型。类型字段可以有15个不同的值,以便描述特定类型的ICMP报文。某些ICMP报文还使用代码字段的值来进一步描述不同的条件。ICMP类型字段的具体含义如表53所示。





表53ICMP类型字段的具体含义


类 型 字 段ICMP报文类型

0
回送应答

3
目的地不可达

4
源站抑制(Source Quench)

5
重定向(改变路由)
8
回送请求

9
路由器通告(Advertisement)
10
路由器请求(Solicitation)

11
超时12
数据报参数错
13
时间戳请求
14
时间戳应答
15
信息请求(已过时)

16
信息应答(已过时)

17
地址掩码(Address Mask)请求
18
地址掩码(Address Mask)应答


ICMP报文种类很多,可大致分为两类,即ICMP差错报告报文和ICMP查询报文。ICMP差错报告报文分为5类: 目标不可达、源站抑制、超时、参数问题、路由重定向。ICMP查询报文分为4类: 回送请求与应答、时间戳请求与应答、地址掩码请求与应答、路由询问和报告。其对应关系如图513所示。




图513ICMP报文的种类



ICMP各类报文的含义如下。

(1) 目标不可达。一般出现这种报文的情况大致可分为两类: ①路由器寻址失败。如果路由器发现找不到送达IP数据报到达目标主机的路径,就丢弃该IP数据报,然后这个路由器就向源主机返回ICMP差错报文。②路由器寻址成功,但是目标主机找不到有关的用户协议或上层服务访问点。出现这种情况的原因可能是IP头中的字段不正确; 也可能是路由器必须把数据报分段,但IP头中的D标志已置位。

(2) 源站抑制。由于IP协议中没有流量控制机制,当路由器的处理速度太慢或者路由器传入数据速率大于传出数据速率时就有可能造成拥塞。为了控制拥塞,IP软件采用了“源站抑制”技术,利用ICMP源抑制报文抑制源主机发送IP数据报的速率。路由器对每个接口进行密切监视,一旦发现拥塞,立即向相应源主机发送ICMP源抑制报文,请求源主机降低发送IP数据报的速率。

(3) 超时。在IP网络中经常会出现由于路由表的错误而导致网络的转发也出现错误,由此可能发生某些数据报在网络内的路由器间出现“兜圈子”的情况。为了避免IP数据报在网络内无休止地循环传输,从而占用网络流量,在IP协议中设置了每个数据报的生存周期(TTL); 路由器如果发现IP数据报的生存时间已超时,或者目标主机在一定时间内无法完成重装配,就发回一个ICMP超时差错报告,通知源主机该数据报已被抛弃。

(4) 参数问题。当数据报在传输时,路由器或主机会自动判断数据报头或报头选项是否出现错误; 如果报头缺少某个域、IP头中的字段或语义出现错误等,路由器便向源主机发送ICMP参数出错报文,报告错误的IP数据报报头和错误的IP数据报选项参数等情况。

(5) 路由重定向。在互联网中,主机可以在数据传输过程中不断地从相邻的路由器获得新的路由信息。通常,主机在启动时都具有一定的路由信息,这些信息可以保证主机将IP数据报发送出去,但经过的路径不一定是最优的。路由器一旦检测到某IP数据报经非优路径传输,它一方面继续将该数据报转发出去,另一方面将向主机发送一个路由重定向ICMP报文,通知主机去往相应目标主机的最优路径。这样主机经过不断积累便能掌握越来越多的路由信息。ICMP重定向机制的优点是,保证主机拥有一个动态的、既小且优的路由表。

(6) 回送请求与应答。回送请求主要是测试两个网络结点之间的线路是否畅通。它是由主机或路由器向一个特定的目的主机发出询问。收到此报文的主机必须给源主机发送ICMP回送应答报文。有些资料中也形象地将此过程称为回声。通常为了测试两个主机之间的连通性,会使用一种称为PING的命令,PING的过程实际就使用了ICMP回送请求与回送应答报文。不过值得注意的是,PING是应用层直接使用网络层ICMP的一个例子。它没有通过传输层的TCP或UDP。图514所示的是一个用PING进行测试的具体实例。




图514PING测试实例


(7) 时间戳请求与应答。时间戳请求与应答可用来进行时钟同步和测量时间。请求方发出本地的发送时间,应答方返回自己的接收时间和发送时间。这种应答过程如果结合强制路由的数据报实现,则可以测量出指定线路上的延迟。

(8) 地址掩码请求与应答。当主机不知道自己所在的局域网中的子网掩码时则可以使用地址掩码请求报文,最常见的是无盘系统在系统引导时获取自己的子网掩码,具体过程非常类似于无盘系统使用RARP获取自己的IP地址。首先主机向同一局域网内的路由器发送地址掩码请求报文,路由器在获得请求后以地址掩码响应报文回答,告诉对方所需要的子网掩码。知道子网掩码主要是为了判断出数据包的目标结点与源结点是否在同一个局域网中。

(9) 路由询问和报告。主要是为了掌握在局域网中的路由器的工作信息,简单地说就是为了测试路由器是否工作正常; 主机将路由器询问报文进行广播(或多播)。收到询问报文的一个或几个路由器就使用路由器通告报文广播其路由选择信息; 另外,当主机没有进行询问时,路由器也会自动地、周期性地发送路由通告报文。路由器在通告报文中不仅会报告自己的存在,同时也会通告它所知道的在这个局域网内的所有路由器。

5.3路由选择算法与路由协议


Internet是由许多分布于世界各地的互联网(internet)相互连接构成的,在Internet上负责实现连接并进行数据包转发的设备就是路由器。路由器以网络(间接地是指负责网络连接的路由器)而不是以主机作为路由选择的单位。路由器根据自己选用的路由协议生成路由表,而路由协议是依据特定的路由选择算法实现的。工作过程中,路由器通过查找路由表中的记录来决定IP数据报的转发路径。那么,当数据包要到达目的地时,很可能要经过多个网络。问题是应该如何选择数据包的路由路径呢?选择的依据又是什么?这就是路由选择算法需要解决的问题。在Internet中,因为网络规模及要求的不同,路由选择算法及协议也有所差别,本节主要介绍几个典型的路由选择协议(RIP、OSPF和BGP)。

首先,学习一下路由选择算法(经常简称为路由算法)。路由选择算法是路由器产生和不断更新路由表的依据,它是路由选择协议的核心内容。一个理想的路由选择算法应该具有如下5个特点。

(1) 正确性。正确是指沿着路由表所给出的路径,分组一定能够到达目的地。

(2) 简单性。路由算法的计算必然会消耗一定的软、硬件资源,从而增加了分组转发的延时,所以算法要尽量简单,才可能更有实用价值。

(3) 健壮性。路由算法应该能适应网络拓扑结构及流量的变化,在外部条件发生变化时仍能正确地实现预定的数据转发功能,而不发生剧烈的振荡变化,实现各链路之间的负载均衡。

(4) 公平性。路由算法应对所有用户(一些优先级较高的用户除外)都是平等的,不能因为一些原因忽视了一些源结点的转发需求。

(5) 最佳性。所谓“最佳”,是指分组转发过程中的最低开销。开销中涉及的考虑因素有很多,如数据传输速率、传播时延、占用带宽、通信费用、安全可靠等。

在实际的路由过程中,由于网络的复杂多变性和用户需求的多样性,想寻找一条能够满足各个方面需求的路径往往是比较困难甚至是不可能的。例如,找到了一条传输时间最短的路径,但这条路径不一定是费用最省、安全性最好的路径; 同样的道理,费用最省的路径也不一定是传输时间最短的路径。所以在实际应用中,只能依据用户的需求,找出一条相对较为合理的路径,但不一定是各方面都最优的路径。可以说,“最佳”路径只是相对于某一种特定要求下得出的较为合理的选择。

从路由选择算法对网络通信量和网络拓扑变化的自适应能力的角度划分,可以将路由选择算法分为静态路由选择算法和动态路由选择算法两大类。静态路由选择算法也称为非自适应路由选择算法,其特点是简单、易于实现,开销较小,但是不能随着网络状况的变化进行动态调整; 动态路由选择算法也称为自适应路由选择算法,其特点是能够较好地适应网络状况的变化,但实现过程相对复杂,开销较大。在使用过程中,可以依据实际需要选择决定路由算法的种类。一般地,一些小型的、变化不是很频繁的网络宜选用静态路由选择算法; 而一些大型的、变化较为频繁的网络则应该选用动态路由选择算法。

在路由协议中,自治系统是一个常用的概念。Internet规模的不断扩大给路由技术提出了巨大的挑战。试想,让每一台路由器都保存一张具有全网信息的路由表是一件多么困难的事情,即便是勉强做到了,这张路由表中的记录数也是巨大的,给后期的查找与更新带来许多不便。由此可见,让每一台路由器都保存一张具有全部网络信息的路由表是不现实的,也是低效的。同时,许多连接到Internet上的部门及网络在享用各种网络服务的同时,并不愿意让外界了解本单位的网络布局细节及采用何种路由选择协议等信息。因此,将Internet划分成许多较小的自治系统(Autonomous System,AS)。

自治系统(AS)是在单一技术管理下的一组路由器,这些路由器使用同一种AS内部的路由选择协议和共同的度量以确定分组在AS内的路径,同时还使用一种AS之间的路由选择协议用以确定分组在AS之间的路由。这样一来,每个AS可以使用与其他AS不同的路由协议,具有较高的自主性。一般地,将自治系统内部使用的路由协议称为内部网关协议(如RIP、OSPF),把自治系统内部的路由选择称为域内路由选择(Intradomain Routing); 将自治系统之间使用的路由协议称为外部网关协议(如BGP),把自治系统之间的路由选择称为域间路由选择(Interdomain Routing)。自治系统的结构如图515所示。




图515自治系统的结构


每一个自治系统都有一个唯一的标识,称为AS号。它是由IANA(Internet Assigned Numbers Authority)来授权分配的。这是一个16位的二进制数,数值范围为1~65535,其中65412~65535为AS专用组(RFC2270)。自治系统概念的提出,实际上是将Internet分成了两层。第一层是自治系统内部的网络,另一层是它外部的主干网络。自治系统内部的路由器完成自治系统中主机之间的分组交换; 而整个自治系统又通过一个主干路由器连接到外部的主干网络。




视频讲解

5.3.1路由信息协议
1. 基本工作原理

路由信息协议(Routing Information Protocol,RIP)是内部网关协议IGP中最先得到广泛应用的一个协议。现在较新的RIP版本是1998年11月公布的RIP2版本,较之早先的版本,RIP2本身并没有多大变化,但性能上出现了一些改进。RIP2支持变长子网掩码(VLSM)和CIDR,而且还提供简单的鉴别过程支持多播。

RIP是一个基于距离向量选择的路由协议,使用Bellman Ford算法。Bellman Ford算法也称为距离矢量算法,简称VD算法。其工作原理是: 路由器周期性地向外广播最新的路径信息,主要包括由(V,D)序偶表组成的路由更新报文,其中V代表可到达的信宿,D代表该路由器到达信宿所经过的距离。距离D按照经过的路由器的个数计算,其他路由器收到此更新报文后,按照最短路径原则对各自的路由表进行更新。

RIP中的距离是指“跳数”,也可以简单地理解为链路数,每经过一个路由器,跳数就增加1。与该路由器直接相连的网络,“距离”定义为1。RIP仅以跳数作为度量标准,它允许的最大跳数为15(16表示不可达),任何超过15个站点的目的地的“距离”均被标记为16,即不可达,这也决定了RIP只适用于规模较小的网络。当系统变大后受到无穷计算问题的困扰,且往往收敛很慢,现已被OSPF所取代。现在一些新的路由器,所允许的最大距离为31。

RIP协议会在每个路由器上保存一张从本地路由器到其他每个网络的地址表,其表结构如表54所示。RIP规定,在路由表中只能为每一个目的网络保存一条路由记录,即使存在有多条路径。


表54简化的RIP路由表


目 的 网 络下一跳路由器距离


219.230.80.0
219.230.81.2
3

…
…
…



RIP报文格式如图516所示,从图516中可以看到,RIP报文借助UDP协议进行封装,使用UDP协议的520端口。事实上,RIP协议是一个应用层协议。




图516RIP2报文格式


RIP报文由首部和路由部分组成。首部中的命令字段指出RIP报文的类型。如果是1,表示请求路由信息; 如果是2,表示对请求的响应。路由部分中的地址族标识符字段用来标识所使用的地址协议,如使用IP地址时,该字段值为2; 路由标记字段填入的是AS号,指明了始发报文来自哪个自治系统; 网络地址字段标识要到达的目的网络的地址; 子网掩码字段用来标识目的网络的子网掩码; 下一跳路由器地址指明数据包应该被送往的下一跳的路由器的地址; 距离字段标识到达目的网络的跳数值。一个RIP报文最多可包含25条路由信息,每条路由信息占20B。因此,一个RIP报文最大长度应该为504B(包含4B的首部及最多可重复出现25个的路由信息,每个路由信息占20B)。

使用RIP协议的网络中,路由器在交换信息时,遵循以下3点规则。

(1) 每一个路由器都与自己的邻居路由器共享自己的路由表信息,不相邻的路由器不准交换路由信息。

(2) 按固定的时间间隔交换路由信息。每一个路由器在经过一定的时间间隔后将其信息发送给邻居路由器,一般的时间间隔为30s。但当网络拓扑发生变化时,路由器要及时地向邻居路由器发送变化后的路由更新信息。如果一个路由器在180s内未收到邻居路由器的状态信息,就可以将该邻居路由器标记为不可达。

(3) 路由器交换的信息是自己所知道的所有信息,也就是自身全部的路由表。

2. 路由表的生成与更新

每个路由器在开始工作时,都需要首先将自己的路由表进行初始化。初始化过程中规定,每个与当前路由器直接相连的网络的距离值为1。如前所述,每个路由器周期性地向与之直接相连的邻居路由器广播自己的路由表,告知邻居路由器自己到达各个网络所需要经过的距离(链路数)。当一个路由器接收到来自其他路由器的路由表时,需要对自己的路由表进行必要的更新,更新算法如下。

(1) 收到邻居路由器A的路由表A_table后,将其中的“下一跳路由器地址”字段都更改为A,并将所有的“距离”都加1。这样做的原因是对于当前接收路由器而言,下一跳转发路由器就是A,相对于路由器A来说,当前路由器到达目的网络的距离是路由器A到达目的网络的距离加上本路由器到达路由器A的距离1。

(2) 依据更改后的路由表A_table,依次检查其中的每一行记录。若当前行中的目的网络不在本地路由表中,则将该行添加到本地路由表中; 否则,若下一跳中记录的内容与本地路由表当中的内容相同,则替换本地路由表中对应的记录; 若该行的“距离”小于本地路由表中相应行的“距离”,则用该行更新本地路由表当中对应的记录; 若该行的“距离”大于本地路由表中相应行的“距离”,且与“下一跳路由器地址”中的内容不同时,不做任何处理返回。

(3) 若超过180s后仍未收到邻居路由器A的路由表,则将到达邻居路由器A的距离设置为16(不可达)。

图517说明了RIP协议的路由表更新过程。在开始时,所有路由器中的路由表只记录与路由器直接相连的网络的情况,包括目的网络的地址和相应的距离; 图517中“下一站路由器”项目中有符号“”,表示直接交付,因为路由器和同一网络上的主机可直接通信而不需要再经过其他路由器进行转发。接着,各路由器都向其相邻路由器广播自己路由表中的信息,接收到来自邻居路由器的更新信息后,依据上述算法更新自己的路由表。R2收到了路由器R1和R3的路由表更新信息,随后更新自己的路由表; 更新后的路由表再发送给路由器R1和R3,路由器R1和R3依据相同的更新算法对自己的路由表进行更新。



图517RIP协议的路由表更新过程


RIP协议最大的优点是实现简单,开销较小; 但它也有一些固定的缺点,主要是好消息传播得快,而坏消息传播得慢,以及存在无穷计算的问题。好消息传播得快,坏消息传播得慢主要是指当网络出现故障时,要经过比较长的时间才能将此故障消息传送至所有的路由器,产生这一现象的根本原因在于RIP的工作机制; 相反,如果一个路由器发现了一条更短的路由,那么这种更新信息可以迅速得到传播。

针对这些问题,RIP有一些解决方案,主要包括设置最大距离值(一般设置为15)、触发更新、水平分割、毒性逆转等。遗憾的是,这些办法在解决一些问题的同时,又带来了一些新的问题,如由触发更新技术引发的广播雪崩等。所以,当网络规模较大时,RIP协议就已经不是最好的选择,OSPF协议可以较好地运行在较大规模的网络中。


5.3.2开放最短路径优先协议

开放最短路径优先协议(Open Shortest Path First,OSPF)是一个基于链路状态算法的路由协议。OSPF是为克服RIP的缺点于1989年开发出来的。OSPF的原理很简单,但实现起来却较复杂。OSPF协议是通过使用Dijkstra提出的最短路径算法SPF来工作的。首先,构建一个以本路由器为根的最短路径树,然后根据最短路径树来组建路由表。OSPF的第二个版本OSPF2已成为因特网标准协议。事实上,Internet上的路由协议基本上都是基于最短路径算法的,只是OSPF使用了所谓的“最短路径优先”的名称而已。OSPF规定每个路由器保存一个链路状态数据库,实质上就是一张链路状态表,其中链路状态值(Cost)一般设置为链路通断,用1表示链路是连通的,用∞表示链路不存在或者不通。

1. 基本工作原理

OSPF遵循如下的规定。

(1) 每个路由器向本自治系统(AS)内的所有路由器广播路由信息,而不仅仅是只向邻居路由器广播路由信息。

(2) 发送给其他路由器的是与本路由器相邻的所有路由器的链路状态信息。

(3) 只有当链路状态发生变化时,路由器才用洪泛法向所有路由器发送信息。

(4) 不同的链路可以使用不同的成本度量值,一般都选用链路进行度量。

以上规定(3)中提到的洪泛法是指路由器通过所有的输出端口向它所有的邻站发送信息,而所有站又将其信息发送给自己的所有相邻路由器(但不再发送给刚刚发信息的那个路由器)。以上4点规定的目的是要让每个路由器都有整个网络或AS每一时刻的准确拓扑图,从而计算出到达目的网络的最短路径。经过路由器之间频繁地交换链路状态信息,网络中的所有路由器最终都能建立一个链路状态数据库(Linkstate Database),这个链路状态数据库反映的正是全网的拓扑结构图。我们期望的是,链路状态数据库中的信息在全网所有路由器中是一致的,因为每一时刻的网络拓扑图只有一个。所以,OSPF协议在工作过程中需要经常交换各自的链路状态信息以期尽快实现全网同步。根据链路状态数据库中的数据可以构造出自己的路由表,进而计算出到达目的网络的最短路径。

随着网络规模的不断增大,全网链路状态信息也会急剧增加,频繁的链路状态信息交换势必会给网络带来沉重甚至是不可接受的负担,同时也增大了计算工作量。为了能够让OSPF协议工作于大规模网络,OSPF将一个自治系统AS再划分为一些更小的范围,称为区域(Area)。每一个区域都有一个32位的区域标识符,一般采用点分十进制记法表示。上层区域称为主干区域(Backbone Area),标识符规定为0.0.0.0,用来连通其他下层的区域。区域不能太大,通常在一个区域中路由器的数目不超过200个。

区域划分的示例图如图518所示。划分区域后,洪泛法交换链路状态信息的范围将局限于每一个区域而不是整个的自治系统,这就减少了整个网络上的通信量。相应地,每个路由器也只知道本区域的完整网络拓扑图,而不知道其他区域的网络拓扑情况。如果需要与其他区域中的路由器进行通信,必须借助主干区域中的路由器。在一个区域的边界把有关本区域的信息汇总起来发送到其他区域的路由器称为区域边界路由器,区域边界路由器至少要有一个接口在主干区域中; 在主干区域中的路由器称为主干路由器,主干路由器也可以同时是区域边界路由器。在图中的R3、R4和R7都是区域边界路由器,R3、R4、R5、R6和R7都是主干路由器。在主干区域内,还应专门有一个路由器负责与其他自治系统的信息交换,这个路由器称为AS边界路由器,如R6就是一个AS边界路由器。




图518OSPF 区域划分示例


OSPF协议数据直接使用IP数据报进行封装,使用IP中的协议字段值是89,称为OSPF分组。这一点不同于RIP路由协议(RIP使用UDP协议进行数据封装),从这一角度分析,OSPF是网络层的协议。绝大多数资料都将路由协议放在网络层这一部分进行讲解,但读者需要明白,这并不意味着所有的路由协议都位于网络层中。事实上,RIP协议和后面要讲到的BGP协议,都是应用层的协议。一些新型的路由协议,也都工作于应用层中而非网络层。熟悉网络分层结构的读者一定会有疑问,路由协议是工作在路由器中的,而路由器明确是一种网络层设备,网络层的设备怎么会运行应用层的协议呢?以至于大多数的读者都认定路由协议是网络层的协议。实际上,路由器中运行了相关的应用层进程,由这些进程负责路由协议数据的封装及处理。换言之,路由器中加载了需要运行路由协议的应用层进程。

OSPF分组的首部固定为24B,分组很短,便于在网络中快速传播,其格式如图519所示。OSPF分组中各部分的含义如下。



图519OSPF分组格式


(1) 版本。定义所使用的OSPF协议的版本,对于OSPFv2来说其值为2。

(2) 类型。说明OSPF数据包的类型,其数值为1~5。OSPF数据包共有5种分组类型,依次为Hello报文、DD报文、LSR报文、LSU报文、LSAck报文。

① 问候(Hello)分组。用来发现和维持邻站的可达性,以建立和维护相邻的两个OSPF路由器的关系。

② 数据库描述(Database Description,DD)分组。向邻站给出自己的链路状态数据库中的所有状态项目的摘要信息。

③ 链路状态请求(Link State Request,LSR)分组。向对方请求发送某些链路状态项目的详细信息。

④ 链路状态更新(Link State Update,LSU)分组。用洪泛法对全网更新链路状态,这种分组是最重要、也是最复杂的一种分组。

⑤ 链路状态确认(Link State Acknowledgment,LSAck)分组。对链路更新分组的确认。

(3) 分组长度。说明包括首部在内的整个分组的长度,单位是字节。

(4) 路由器标识符。描述数据包的源地址,以IP地址的形式表示,是始发该数据包的路由器的ID。

(5) 区域标识符。用于区分OSPF数据包所属的区域号,它是始发该LSA的路由器所在的区域号。

(6) 校验和。用补码加法生成的校验和,用来检测分组中的差错。

(7) 鉴别类型。目前只有两种,0表示不用,1表示口令。

(8) 鉴别。包含OSPF鉴别类型,其值按鉴别类型所定,共有8B。当鉴别类型为0时不作定义,类型为1时此字段为密码信息,类型为2时此字段包括Key ID、MD5验证数据长度和序列号的信息。MD5鉴别数据添加在OSPF报文后面,不包含在鉴别字段中。




OSPF使用洪泛法发送链路状态信息,收到信息的路由器需要回送确认信息,因此这种洪泛法是可靠可信的。

2. 链路状态表的生成与更新

路由器初始化时,每个路由器的链路状态表中只有与其直接相连的路由器的链路状态信息,该状态信息是对路由器进行初始配置时进行设置的,并不是当前网络的最新状态信息。路由器运行过程中,会不断地更新链路状态表中的内容,以期与当前网络拓扑结构一致。OSPF协议规定,每两个相邻路由器每隔10s要交换一次问候(Hello)分组,这样就能知道哪些邻站是可达的。在正常情况下,网络中传送的绝大多数OSPF分组都是问候分组。如果40s都还没有收到邻居路由器的Hello分组信息,则认为该邻居路由器是不可达的,随即修改链路状态数据库中所对应的记录,用洪泛法传播相应的链路状态信息,并重新计算路由表。

由于一个路由器发送出的更新信息不可能同时到达所有的路由器,这样就有可能造成各路由器中保存的链路状态数据库不一致。在这种情况下,就需要进行同步。所谓同步,就是指不同路由器的链路状态数据库的内容是一样的。在OSPF协议中,使用数据库描述分组(Database Description)交换状态信息,实现各方的同步。即使没有链路状态的变化,每隔30min也要进行一次全网同步,这样可以保证各方路由器的一致。

5.3.3边界网关协议

边界网关协议(Border Gateway Protocal,BGP)是在1989年问世的,现今最新的版本是BGP4,它已成为因特网草案标准协议。BGP完成了AS之间的路由选择,可以说它是现今整个因特网的支架。

这里首先需要说明一个问题,就是AS之间的路由能否使用内部网关协议(如RIP、OSPF),答案是否定的。RIP和OSPF主要用于AS内部,在AS内部选择最佳路由。它们没有什么特别的限制性条件,也没有人为因素,只是依据相关路由信息和事先制定好的路由策略寻找最佳路由。然而,Internet是一个规模巨大、环境复杂的互联网,在AS之间进行路由选择是一件非常困难的事情。更为重要的是,自治系统间的路由选择要受到很多的约束限制,包括人为因素,如存在政治原因或者经济原因,可能会规定从A到B的信息必须经由哪些路由器而不能经由哪些路由器等,这一系列的原因都说明RIP和OSPF协议不适合工作于自治系统之间。通常,在自治系统之间一般只需要找到可行的路由而不一定是最佳的路由,这也与RIP和OSPF的工作机制不同。这就要求有一种能够较好地工作于自治系统之间的外部网关协议。

1.  BGP4的工作原理

每一个自治系统需要选择至少一个路由器作为该自治系统的“BGP发言人”,BGP发言人一般是AS的边界路由器。两个BGP发言人通过一个共享网络连接在一起,如图520所示。在520图中画出了3个AS中的5个BGP发言人,每一个BGP发言人除了必须运行BGP协议外,也需要运行AS内部的路由协议,如RIP、OSPF等。



图520BGP发言人


一个BGP发言人与其他自治系统中的BGP发言人要交换路由信息,就要先建立TCP连接(端口号为179),然后在此连接上交换BGP报文以建立BGP会话(Session),利用BGP会话交换路由信息。使用TCP连接能够提供可靠的服务,简化了路由选择协议,BGP协议中不再使用差错控制和重传机制。使用TCP连接交换路由信息的两个BGP发言人,彼此成为对方的邻站或对等站(Peer)。

BGP路由表类似于RIP的路由表,但BGP计算出的路由与RIP不同,RIP只是指出下一跳地址,而BGP指明的是一条完整的路径,因此也将BGP这样的协议称为路径向量协议。BGP所交换的网络可达性信息就是要到达某个网络(用网络前缀表示)所要经过的一系列的自治系统。BGP发言人互相交换从本AS到邻居AS的可达信息,随着该信息的传播,从一个AS到其他AS的可达信息被记录下来,进而得到了不同AS之间的一条可达路径信息。由此可以看到,AS之间的路由包含了一系列的AS地址,表示从源AS到目的AS之间经过的AS列表。如图521所示,表示了图520中的AS1上的BGP发言人构造出的AS连通图,据此可以实现AS1至其他AS间的数据传播。注意,这个连通图是树状结构,不存在回路。



图521AS的连通图


BGP具备负载均衡能力,可以将负载合理地分配到多条路径上进行传输,从而更好地利用网络带宽,实现QoS路由。

BGP4协议的报文格式如图522所示,各字段的含义如下。



图522BGP4协议报文格式


(1) 标记。16B,用于鉴别收到的BGP报文,当这个字段不使用时,全部置1。

(2) 长度。2B,定义包括首部在内的报文的长度,最小值为19,最大值为4096。

(3) 类型。1B,定义分组的类型,其值为1~4。

BGP4使用4种不同类型的报文: 打开(Open)报文、更新(Update)报文、保活(Keepalive)报文和通知(Notification)报文。打开报文用来与相邻的另一个BGP发言人建立联系,初始化通信; 更新报文用来发送某一路由信息,以及列出要撤销的多条路由; 保活报文用来确认打开报文和周期性地证实邻站关系; 通知报文用来发送检测到的差错。


2.  BGP4的工作过程

在BGP刚刚运行时,BGP的邻站要交换整个的BGP路由表,但以后只需要在发生变化时更新有变化的部分,这样做对节省网络带宽和减少路由器的处理开销方面都有好处。具体的工作过程如下所述。

(1) 当一个BGP发言人需要与另一个自治系统中的BGP发言人进行通信时,首先向其发送打开报文,对方进行确认后成为对等站(邻站),之后便可以相互发送路由信息。

(2) 对等站(邻站)关系建立后,对方需要确认对方是存活的。为此,两个BGP发言人需要周期性地交换保活报文(一般间隔为30s)。保活报文只有19字节长(仅含有BGP报文的通用首部),不会给网络造成太大的开销。

(3) 一个BGP发言人可以向对等站(邻站)发送更新报文,告知对方路由信息,同时也可以撤销先前的路由。撤销路由可以一次撤销多条,但增加新路由时,每个更新报文只能增加一条。

(4) 收到更新报文的BGP发言人更新路由信息,并将这些信息发送给自己的其他对等站(邻站)。

(5) 每个BGP发言人根据自己保存的路由信息,为两个不同的AS之间确定一条可行的路由。


5.4路由器与第三层交换技术

路由器是一种有多个输入和输出端口的专用计算机,其主要任务是实现路由协议,完成数据转发。数据分组在网络中经由路由器的连续逐跳转发最终交付给目的网络。路由器工作于网络层中,依靠网络层的逻辑地址实现寻址。路由器的常见连接形式有如下3种。

(1) 连接交换机。计算机首先组成小范围的局域网(一般通过交换机实现),局域网通过路由器连接成为广域网,如图523所示。




图523路由器连接交换机


(2) 连接远程计算机。远程计算机(如家庭中的计算机、某单位的服务器等)通过调制解调器、远程线路连接到接入路由器(前端有Modem池)上实现联网,如图524所示。




图524路由器连接远程计算机


(3) 混合式连接。这种连接方式可以组合使用前两种连接方式,也是实际中使用较多的一种连接方式。

一般说来,路由器可以实现以下3种主要功能。

(1) 网络互联。实现局域网局域网、局域网广域网、广域网广域网3种类型的网络互联。

(2) 分组转发。对接收到的数据分组,路由器检查分组中的源地址与目的地址,然后根据路由表中的相关信息,决定该数据分组的输出路径。

(3) 数据记录。路由器会记录用户访问网络的相关数据,如每次访问的时间、发送/接收的字节数、访问的源地址/目的地址等信息。


5.4.1路由器的构成

整个路由器可以划分为两大部分: 路由选择部分和分组转发部分,如图525所示。




图525路由器的构成


路由选择部分也称控制部分,核心部件是路由选择处理机。路由选择处理机依据一定的路由协议生成并维护路由表。分组转发部分由3部分组成,即交换结构、一组输入端口和一组输出端口。交换结构根据转发表对分组进行处理,将某个输入端口进入的分组从一个合适的输出端口转发出去。交换结构本身就是一种网络,但这种网络完全包含在路由器之中。

从网络术语的角度来讲,“转发”和“路由选择”是有区别的。在互联网中,“转发”就是路由器根据转发表把收到的IP分组从本路由器合适的端口转发出去,仅仅只涉及当前路由器; 而“路由选择”则涉及多个路由器,路由表也是由许多路由器进行协同工作后的结果,是一个全局性的工作,考虑到了整个网络当前的状况,路由选择的目标是依据路由协议选出一条较为合理的传输路径。转发表是从路由表得到的,转发表包含了完成本次转发所必需的信息(如MAC地址等)。虽然在讨论路由算法工作原理时,可以不区分两者,但是作为学习,还是有必要将两者进行区别的。转发表和路由表使用不同的数据结构,转发表的结构应当使查找过程最优化,但路由表则需要对网络拓扑变化的计算进行最优化。路由表是用软件实现的,转发表可以用特殊的硬件来实现。

路由器接收到数据分组后,根据网络物理接口的类型,调用相应的数据链路层功能模块对数据分组进行处理,完成CRC校验、帧长度检查等工作; 通过数据链路层的完整性验证后,路由器开始处理数据分组的网络层协议头部分,根据分组头中的目的IP地址,路由器在路由表中查找下一跳的IP地址; 路由器将数据分组头部中的TTL字段值减1,并重新计算校验和; 根据已确定的下一跳的IP地址,将IP数据分组送往相应的输出端口,进而封装上相应的数据链路层协议头部,最后由网络物理接口发送出去。

5.4.2路由器的分类

路由器产品有多种分类方法,常见的分类方式如下。

1. 按性能档次划分

按性能档次可将路由器划分为高、中、低档,主要的依据是背板交换速率和包转发速率(吞吐量)。通常高档路由器其背板交换能力能够达到上百Tb/s,包转发能力能够达到上万Mp/s; 中档路由器背板交换能力能够达到几百Gb/s,包转发能力可以达到几十Mp/s; 性能更低的路由器则可以看作低档路由器。当然这只是一种宏观上的划分标准,各厂家划分并不完全一致,这种标准也会随着技术的进步而不断变化。

事实上,仅以背板带宽作为划分依据也是不全面的,常常需要考虑多种因素,如端口数量、支持的协议种类多少、支持的传输介质类型、安全性、网络管理功能等。以华为公司的路由器产品为例,NE9000系列路由器为高端路由器,AR3200、AR2200和AR1200系列路由器为中低端路由器。

按转发包的速率,路由器可以划分为线速路由器和非线速路由器。线速(Line Speed)是指完全可以按传输介质带宽进行包的转发,没有间断及时延。一般地,线速路由器是高端路由器,具有较为理想的传输效率,能以介质速率进行分组转发; 非线速路由器是中低端路由器。

2. 按结构划分

从结构上分为模块化路由器和非模块化路由器。模块化结构可以灵活地配置路由器,以适应企业不断增加的业务需求,非模块化的路由器就只能提供固定的端口。通常中高端路由器为模块化结构,低端路由器为非模块化结构。

3. 按功能划分

从功能上划分,可将路由器分为核心层(骨干级)路由器、分发层(企业级)路由器和访问层(接入级)路由器。

核心层路由器是实现企业级网络互联的关键设备,数据吞吐量大。对核心层路由器的基本性能要求是高速率和高可靠性。为了获得高可靠性,网络系统普遍采用诸如热备份、双电源、双数据通路等传统冗余技术,从而使得核心层路由器的可靠性一般不成问题。分发层路由器连接许多中小型网络,连接对象较多,但系统相对简单,且数据流量较小,对这类路由器的要求是以适中的价格实现尽可能多的网络互联,同时还要求能够支持不同的服务质量。访问层路由器主要应用于连接家庭或ISP内的小型企业客户群体。

4. 按所处网络位置划分

按路由器所处的网络位置,通常把路由器划分为边界路由器和中间结点路由器。边界路由器处于网络边缘,用于不同网络路由器的连接; 中间结点路由器处于网络的中间,用于连接不同网络,起到一个数据转发的桥梁作用。由于各自所处的网络位置有所不同,其主要性能也就有相应的侧重,如中间结点路由器因为要面对各种各样的网络,需要识别这些网络当中的结点,选择中间结点路由器时就需要在MAC地址记忆功能上更加注重,选择缓存更大的路由器。边界路由器由于它可能要同时接收来自许多不同网络路由器发来的数据,要求边界路由器的背板带宽要足够大。

5.4.3第三层交换
1. 第三层交换的基本概念

20世纪90年代中期,网络设备制造商提出了“第三层交换”的概念。简单地说,第三层交换技术是二层交换技术与三层路由技术的结合。目标是实现快速转发分组,保证QoS服务质量,提高交换结点的稳定性及可靠性等。实现了第三层交换技术的交换机称为第三层交换机。

在第三层交换技术的发展过程中,不少公司都提出了自己的交换技术,主要有以下几种: Ipsilon公司首倡的Ipsilon IP交换技术,这也是最早的第三层交换技术,该技术通过识别数据包流,使得数据包尽量在第二层进行交换,以绕过路由器,改善网络性能; Cisco公司研发的Cisco标签交换技术,通过给数据包贴上标签实现,此标签在交换结点读出,判断包传送路径,该技术适用于大型网络和Internet; 3Com公司提出的Fast IP技术,该技术侧重数据策略管理、优先原则和服务质量,保证实时音频或视频数据流能得到所需的带宽; IBM公司提出的ARIS技术(Aggregate Routebased IP Switching),该技术与Cisco的标签交换技术相似,包上附上标记,借以穿越交换网,一般用于ATM网络; Toshiba公司的信元交换技术,Cascade公司的IP导航器等也都是第三层交换技术的代表。当时,Cisco、3Com、北电网络、朗讯、Cabletron、Foundry和Extreme等公司都有比较成熟的第三层交换产品和模块推出。这些技术各有所长,都在一定程度上提高了IP分组的转发速率,改善了网络性能。

第三层交换技术是在市场需求和设备制造商的共同推动下产生发展起来的。那么,为什么有了集线器、网桥、二层交换机、路由器等设备后,还要研发第三层交换机呢?早期的局域网大都使用集线器将计算机连接在一起,所有的计算机共享同一个“冲突域”,因此在介质争用的过程中浪费了网络的共享带宽。

为解决冲突域问题,可以考虑使用网桥来分隔网段中的流量,网桥根据硬件地址过滤和转发数据帧,网桥建立了分离的冲突域。但是网桥存在“广播风暴”的问题,同时网桥让网络上的所有计算机共享同一个“广播域”。

为解决广播域的问题,引入了路由器,为互联网之间的数据转发提供了路由,路由器可以建立分离的广播域,根据分组报头中的IP地址决定分组的转发路径,但是路由器处理数据分组的速率较低,因为路由器需要使用软件来实现处理功能,不同的数据分组经由不同的路由器所需要的处理时间也大不相同。

在网桥的基础上,结合硬件交换技术,人们制造出了第二层交换机(简称为交换机)。第二层交换机实现了网桥的基本功能,同时提高了传输性能。同样地,人们考虑能否将硬件交换技术与路由器相结合,研发第三层交换机,使之具有路由器和交换机共同的优点。第三层交换机本质上是一种用硬件实现了的高速路由器,工作于网络层,依据IP地址实现数据分组的转发。较之一般的路由器,第三层交换机转发数据分组的速率较高,但实现的额外功能要比路由器少,工作时不如路由器灵活、容易控制。

第三层交换机通常可以提供如下功能。

(1) 分组转发。分组转发是第三层交换机的主要功能,第三层交换机依据目的IP地址决定转发路径。

(2) 路由处理。第三层交换机通过内部路由选择协议(如RIP、OSPF)创建并维护路由表。

(3) 安全服务。第三层交换机也会提供一些简单的安全服务,如防火墙、分组过滤等服务功能。

除此之外,第三层交换机一般还可以实现流量工程、拥塞控制等额外功能。

2. 第三层交换机的工作原理

一个具有三层交换功能的设备,是一个带有第三层路由功能的第二层交换机,但它是二者的有机结合,并不是简单地把路由器设备的硬件及软件叠加在局域网交换机上。与二层交换机类似,三层交换机也需要建立MAC地址转发表,记录MAC地址与端口的映射关系。

假设发送站A要向目的站B发送信息,三层交换机的工作原理如下。

(1) 发送站A在开始发送时,把自己的IP地址与目的站B的IP地址进行比较,判断目的站B是否与自己在同一子网内。

(2) 若目的站B与发送站A在同一子网内,则进行二层转发。

(3) 若两个站不在同一子网内,发送站A要向“默认网关”发出ARP请求包,而“默认网关”的IP地址其实是三层交换机的三层交换模块; 如果三层交换模块在以前的通信过程中已经知道目的站B的MAC地址,则向发送站A回复目的站B的MAC地址,否则三层交换模块根据路由信息向目的站B广播一个ARP请求,目的站B得到此ARP请求后向三层交换模块回复其MAC地址,三层交换模块保存此MAC地址并回复给发送站A,同时将目的站B的MAC地址发送到二层交换引擎的MAC地址表中。

(4) 自此之后,发送站A向目的站B发送的数据包便全部交给二层交换处理,信息得以高速传输。

由此可以看出,第三层交换机在工作时是“一次路由,处处交换”。由于仅仅在路由过程中才需要三层处理,绝大部分数据都通过二层交换转发,因此三层交换机的速度很快,接近二层交换机的速度。

特别指出,第三层交换技术在不同时期、不同公司有着不同的实现,如Cisco公司的MPLS技术与IBM的ARIS技术在实现细节上就有所不同; 即便同是Cisco公司的三层交换技术(有早期的标签交换Tag Switching和后期的多协议标签交换MPLS),在实现细节上也有所区别。所以,这里只是介绍第三层交换的一般性原理,具体细节就不进行详细讨论了。

3. 第三层交换机的应用

在一些需要高速转发而对网络管理和安全又有很高要求的场合,使用第三层交换机是最好的选择,如一些重要部门的内部主干网络。然而,当需要接入Internet并对网络进行必要的控制管理时,路由器仍是最好的选择。

图526给出了一个以路由器为核心的网络结构示意图。从图526中可以看到,路由器在这个网络中的地位非常重要,不但担负着接入Internet的任务,同时也担负着内网通信的任务。路由器不仅仅是连接的中心点,也是全网的瓶颈。如果路由器出现故障或者路由器的性能不良,不但会影响到全网的Internet接入,还会影响到内网之间的通信。



图526以路由器为核心的网络结构示意图


为了解决这样的问题,可以考虑在主干结点部分增加一个第三层交换机,如图527所示。采用这种连接方式可以有效提高全网的性能。因为第三层交换机承担了主要的内网通信任务,只有当需要接入Internet时,才使用到路由器。也就是说,第三层交换机主要负责了内网的通信工作,而路由器主要负责与外网的通信。通过这样合理地分工,提高了整个系统的运作效率。




图527第三层交换机加入主干结点的网络结构



5.5IP多播与IGMP协议


IP多播(Multicast,曾译为组播)已成为当今网络应用领域中的一个热点话题。IP多播的概念首次于1988年提出,1992年3月IETF在Internet范围内尝试了会议声音的多播,当时一共有20个结点可以同时接收到会议的声音。IP多播在网络电话、视频会议、股市行情、网络教学等领域中都有应用。

5.5.1IP多播的基本概念

IP多播是指由一个源点发送数据,多个终点同时接收数据的通信方式,即一对多的通信。在Internet中,实现一对多通信可以有两种方式: 一种是由源结点采用点对点的方式,依次向目标结点发送同一分组; 另一种方法就是采用多播。采用多播方式可以节省网络资源,简化传输过程。能够运行多播协议的路由器称为多播路由器(Multicast Router)。多播路由器可以是单独的路由器,也可以是运行多播软件的普通路由器。所有的多播路由器都同时可以转发普通的单播IP数据报。

IP多播实现了一种高效的一点对多点传输的工作模式,主要包括以下几方面的内容。

(1) 定义了一个组地址,每个组代表了一个或多个发送者与一个或多个接收者的一个会话(Session)。

(2) 接收者可以自主地选择自己所希望加入或者退出的多播组,可以用多播地址通知相应的多播路由器来实现。

(3) 发送者使用多播地址作为目的地址以发送分组,发送者不需要了解接收者的位置与状态等信息。

(4) 多播路由器建立一棵从发送者分支出去的多播路由传递树,这棵树延伸至所有的IP多播成员涉及的网络中。利用这棵树,多播路由器将多播数据分组转发至所有的相关网络中。

1.  IP多播地址

Internet中的主机都有一个全球唯一的IP地址。那么,当主机需要加入多播组工作时,应该使用什么样的地址呢?

D类IP地址是为IP多播专门定义的。每个多播地址都会在224.0.0.0到239.255.255.255之间。每一个D类IP地址代表一个多播组,如此一来,D类地址一共可以表示228个多播组。不过,其中也有一些地址被保留用于一些特殊的用途,如224.0.0.1用来表示在本子网上所有加入多播的主机,224.0.0.2用来表示在本子网上所有加入多播的路由器,224.0.0.3没有进行指派,224.0.0.11用来当作移动代理的地址,224.0.1.1~224.0.1.18的地址预留给电视会议等多播应用。完整的多播地址表可以从IANA授权的网站(http://www.iana.org/numbers)上获取。

显然,多播地址只能用作目的地址,而不能用作源地址。在多播数据分组的目的地址字段写入多播地址(而不是每一单个主机的IP地址),然后设法让加入到这个多播组的主机IP地址与多播地址相关联。

2.  IP多播的工作过程

多播数据报也是采用“尽最大努力交付”的原则,在传输过程中,并不保证能够将多播数据报交付给多播组内的所有成员。在多播数据报的传输过程中,不产生ICMP差错报文。因此,若在PING命令后面输入多播地址,将永远不会收到响应。

图528给出了IP多播的工作过程。主机A需要发送多播数据报时,只需要发送一个多播数据报,多播路由器1进行复制后,发送至多播路由器2和多播路由器3; 多播路由器2和多播路由器3接收后再分别进行复制,将多播数据报发送至多播路由器4、多播路由器5和多播路由器6; 进而将多播数据报交付给所有的多播组目标主机。




图528IP多播的工作过程


IP多播在工作时需要运行两种不同的协议,即网际组管理协议(IGMP)和多播路由选择协议。图529所示为IGMP协议的工作过程。图529中,标有IP地址的4台主机都参加了多播组230.0.0.1,多播数据报应传送到路由器R1、R3和R4,而不应传送到路由器R2,因为与R2连接的局域网上目前没有该多播组的成员。而IGMP协议的作用就是要让这些路由器知道它们所连接的网络上有没有多播组的成员。




图529IGMP协议的工作过程


由此可以看出,加入多播组230.0.0.1的成员有{R1[202.201.3.63],R3[160.36.8.1],R4[132.6.2.75,132.6.2.77]}。此处需要注意的是,IGMP并不知道IP多播组所包含的成员的具体数量,也不知道这些成员分布在哪些网络上,IGMP协议只是让连接在本地局域网上的多播路由器知道本网络上是否有加入多播组的主机(更具体地说,是主机上的某个进程)。当某台主机加入了新的多播组时,该主机会向多播组的多播地址发送一个IGMP报文,声明自己要成为该多播组的成员。本地的多播路由器收到IGMP报文后,还要利用多播路由选择协议(如距离矢量多播路由选择协议DVMRP),把该组的成员关系转发给互联网上的其他多播路由器。


多播数据报的发送者和接收者永远都不知道(也无法找出)一个多播组的成员有多少个,以及这些成员是哪些主机。互联网中的路由器和主机都不知道哪个应用程序进程将要向哪个多播组发送多播数据报,因为任何一个应用程序进程都可以在任何时刻向任何一个多播组发送多播数据报,而这个应用程序进程并不需要加入这个多播组。

仅有IGMP协议仍然无法完成多播任务,连接在局域网上的多播路由器还必须和互联网上的其他多播路由器协同工作,以便把多播数据报用最小的代价传送给所有的组成员,这就需要使用多播路由选择协议[常见的有距离矢量多播路由协议(Distance Vector Multicast Routing Protocol,DVMRP)、多播开放最短路径优先协议(Multicast Open Shortest Path First,MOSPF)和密集模式独立多播协议(ProtocolIndependent MulticastDense Mode,PIMDM)等]。多播路由选择协议要比单播路由选择协议复杂得多,这是因为多播的转发必须动态地适应多播组成员的动态变化(而此时网络拓扑并未发生改变)。与多播路由选择协议不同,单播路由选择协议通常在网络拓扑发生变化时才会更新路由。目前,还没有在整个互联网范围内使用的多播路由选择协议,多播路由选择协议也尚未标准化。

为了适应交互式音频和视频信息的多播,从1992年起,在Internet上开始试验虚拟的多播主干网(Multicast Backbone On the Internet,Mbone)。Mbone可以将分组发送到不在一个网络,但属于同一个多播组的多个主机。现在多播主干网的规模已经很大,拥有几千台多播路由器。

5.5.2以太网物理多播

在网络层中,IP多播数据报可以借助D类IP地址实现。但是,由于多播数据报使用的是多播IP地址,ARP协议将无法找出相对应的物理地址,而在数据链路层转发数据报时需要用到物理地址。现在大部分主机都是通过局域网接入到Internet中的,在Internet进行多播的最后阶段,需要使用硬件多播将多播数据报交付给多播组的所有成员。

以太网支持物理多播编址。以太网的物理地址(MAC)长度为6B(48位),若MAC地址中的前25位是0000000100000000010111100,则这个地址定义TCP/IP协议中的多播地址,剩下的23位用来定义一个多播组。要把IP多播地址转换为以太网地址,多播路由器需要提取D类IP地址中的最低的23位,将它们放到多播以太网物理地址中,如图530所示。由此可以看到,以太网多播物理地址块的范围为01005E000000~01005E7FFFFF。




图530D类IP地址映射为以太网物理地址


在这个映射过程中,有一点问题需要指出: D类IP地址的可用长度为28位(前4位为固定的1110),而每一个物理多播地址中只有23位可用作多播,这意味着有5位没有使用。也就是说,将会有32(25)个IP多播地址映射为单个的物理多播地址。整个的映射过程是多对一的,而并非一对一。例如,IP多播地址224.128.60.5(E0803C05)和224.0.60.5(E003C05)转换为物理多播地址后都是01005E003C05。由于映射关系的不唯一性,因此收到多播数据报的主机还需要在网络层利用软件进行过滤,把不是本主机要接收的数据报丢弃。当加入多播的位于以太网中的主机接收到基于转换后的MAC地址为目的地址的帧后,由于在加入多播组时链路层已经被通知接收该目的MAC地址的帧,所以该帧就会被主机的数据链路接收并处理。


5.5.3Internet组管理协议

Internet组管理协议(Internet Group Management Protocol,IGMP)是在多播环境下使用的协议,正在发挥着越来越重要的作用。IGMP用来帮助多播路由器识别加入一个多播组的成员主机。IGMP协议共有3个版本: 1989年公布的RFC1112文档是IGMP的第1个版本; 1997年公布的RFC2236文档是IGMP协议的第2个版本,已成为Internet的建议标准协议; 2002年10月公布的RFC3376文档是IGMP协议的第3个版本,宣布RFC2236(IGMPv2)是陈旧的版本。

类似于ICMP协议,IGMP也被当作IP协议的一部分,IGMP使用IP数据报传递其报文,IGMP报文通过IP首部中协议字段值为2来指明。IGMP有固定的报文长度(8B),没有可选数据项。图531表示了IGMPv1的报文格式。




图531IGMPv1的报文格式


IGMP协议执行过程可以分为以下两个阶段。

(1) 当有主机加入新的多播组时,该主机按照多播组的多播地址发送一个IGMP报文,声明自己想加入该多播组。本地多播路由器接收到IGMP报文后,将组成员关系转发给Internet上的其他多播路由器。

(2) 由于组成员关系是动态变化的,本地多播路由器需要周期性地探询本地网络上的主机,以确认这些主机是否还继续是组成员。只要有一个主机对某个组响应,多播路由器就认为这个组是活跃的。但一个组在经过几次探询后仍然没有一个主机响应,多播路由器就认为本网络上的主机都已经离开了这个组,因此也就不再将该组的成员关系转发给其他的多播路由器。

多播路由器在探询组成员关系时,只需要对所有的组发送一个请求信息的询问报文,而不需要对每一个组发送一个询问报文。默认的询问频率是每125s发送一次。当同一个网络上连接有多个多播路由器时,它们能够迅速且有效地选择其中的一个来探询主机间的成员关系。因此,网络上的多个多播路由器或者多个多播组不会带来过大的通信量。

在IGMP的询问报文中有一个数值N,它指明一个最长的响应时间(默认值为10s)。当收到询问时,主机在0~N之间随机选择一个数值作为发送响应报文的时延。因此,若一个主机同时加入了几个多播组,则主机对每一个多播组选择不同的随机数,对应于最小时延的响应报文最先被发送。

同一个组内的每一个主机都要监听响应,只要有本组的其他主机先发送了响应,自己就不必再发送响应了。这样可以有效地控制通信量。

多播数据报的发送者和接收者都不知道一个多播组的成员数有多少,以及这些成员是哪些主机。Internet中的路由器和主机都不知道哪个应用进程将向哪个多播组发送多播数据报,因为任何应用进程都可以在任何时候向任何一个多播组发送多播数据报。多播数据报可以由没有加入多播组的主机发出,也可以通过没有组成员接入的网络。

5.6IPv6技术
5.6.1IPv6概述

IPv6是Internet Protocol Version 6的缩写,是互联网协议的第6版,也称为下一代互联网协议。它是由互联网工程任务组(Internet Engineering Task Force,IETF)设计的用来替代现行IPv4协议的一种新的IP协议,是IPv4协议的后继者。IPv6的提出主要是为了解决IPv4所存在的一系列问题,主要表现在以下几方面。

(1) 目前使用的第二代互联网IPv4协议,是在20世纪70年代末期设计的,它现存的最大问题就是网络地址资源匮乏。从理论上讲,IPv4的32位地址结构可以编址1600万个网络,大约有43亿台主机。但是,为了使用方便,设计者采用了A、B、C、D、E共5类的分类编址方式。其中,将A、B、C三类地址用于实际的网络中,同时特意预留出一部分地址及E类IP地址以备后用。但是,Internet突飞猛进的发展使这种灵活、易用的编址方式成为IPv4的一个缺陷,它使得可用的网络地址和主机地址的数量大打折扣。事实上,大约只有2.5亿个地址可以分配给网络设备使用,且这些可用地址大多分布于北美地区。负责英国、欧洲、中东和部分中亚地区互联网资源分配的欧洲网络协调中心通过邮件确认,其最后的 IPv4 地址储备池已于2019年11月25日完全耗尽,这样,将迫使人们更快地迁移到IPv6。
中国所拥有的IP地址数量只相当于美国麻省理工学院的IP地址数量。地址数量不足,严重地制约了我国及一些发展中国家互联网的应用与发展。

(2) 随着Internet业务的不断发展普及,人们对网络服务质量QoS也提出了更高的要求。而IPv4所提供的“尽最大努力”(Best Effort)传输的方式已不能满足人们更高的需求。事实上,无论对IPv4协议作如何的改进与优化,都很难满足新型业务对QoS的要求。同时,IPv4协议的设计并没有考虑音频流和视频流的实时传输问题。诸多现存问题都使得IPv6协议全面应用成为必然。

(3) 安全问题是当代网络中的重要内容。IPv4的设计较少涉及安全性问题,没有提供加密和认证机制,并且不能保证重要数据的安全机密传输。IPv4也制定了一些关于安全通信的服务标准,但这些标准是具有可选择性的,在实现过程中可操作性并不强。

(4) 一些技术(如VLSM、CIDR、NAT等)可以部分缓解地址不足的问题,但是相应地也带来一些新的问题,会对网络性能、安全和应用产生负面影响,同时也使得路由策略变得十分复杂。

(5) 计算机的日益普及使得网络规模不断扩大,这也就在一定程度上使得网络管理人员在网络配置、管理、维护方面形成一定的困难,使得他们工作量加大。现有的IP地址在多数情况下都是手工配置或者使用DHCP动态主机配置协议,如果能够出现一种即插即用的联网方式,只要计算机一连接上网络便可自动设定地址,这对一般用户而言使他们不必知道太多的专业知识便可以进行地址设定,对于网络管理者来说可以减轻他们的工作负担。

当然,IPv4中的问题还有很多,以上只是列举了一些主要的问题以说明IPv6应用的必要性和紧迫性。为了解决这一系列的问题,IETF早在1992年6月就提出要制定下一代的IP协议,并在1993年成立了研究下一代IP协议的IPng工作组; 1994年,IETF的IPng项目管理者们在多伦多举行的IETF会议上提出了构建IPv6的建议。1994年11月17日,因特网工程指导小组(Internet Engineering Steering Group,IESG)起草了IPv6提议标准; 1995年12月在RFC1883中公布了建议标准(Proposal Standard); 1996年7月,发布了版本2的草案标准(Draft Standard); 1997年11月,发布了版本2.1的草案标准; 1998年8月10日,IPv6核心协议成为IETF草案标准; 1998年12月,发布了标准RFC2460; 1999年,完成了IETF要求的IPv6协议的审定,成立了IPv6论坛,正式分配IPv6地址,IPv6协议成为标准草案; 2001年,主要的计算机操作系统(如Windows,Unix,Solaris等)开始支持IPv6协议; 2003年主要网络产品制造商开始推出支持IPv6协议的产品。我国IPv6部署和应用相对较快,截至2023年10月,我国拥有近7万个IPv6地址块,位居世界第一,IPv6活跃用户数已达7.63亿。

与IPv4相比,IPv6具有以下几个优势。

(1) IPv6具有更大的地址空间。IPv6中IP地址的长度为128位,即有3.4×1038个地址。难以想象这是一个多么庞大的数字。曾经有人这样比喻——即使是地球上的每一粒沙子,我们也可以给它分配一个IP地址。IPv6所提供的充足的地址空间决定了今后接入Internet的设备将不会再受IP地址数量不足的限制,这将促使Internet在各个领域中的迅速普及。

(2) IPv6使用更小的路由表。根据IPv4所形成的地址分配方案使得在Internet上的骨干路由器的路由表中通常都有超过80 000条的路由和状态信息记录。而IPv6的地址分配方案一开始就遵循聚类(Aggregation)的原则。这使得路由器能在路由表中用一条记录(Entry)来表示一片子网,大大减小了路由器中路由表的长度,提高了路由器转发数据包的效率。IPv6所提供的巨大地址空间,使得我们能够在地址空间内设计更多的层次和更灵活的地址结构,以更好地适应Internet的ISP层次结构。

(3) IPv6增加了增强的多播(Multicast)。多播技术的出现,改变了数据流的传统传输方式,克服了单播和广播的不足。多播技术允许路由器一次将数据包复制给多个数据通道,实现了一点对多点或多点对多点的数据传输方式。多播可以大大节省网络的传输资源,因为无论有多少个目的地址,在整个网络的任何一条链路上只传送一个数据包,从而减轻了网络负载,减少了网络出现拥塞的概率。当IPv6全面普及时,将会有更多的设备使用IP地址,网络规模进一步增大,那时必将造成更大的网络负载,因此对多播的依赖性也将进一步增强。

(4) IPv6加入了自动配置(Auto Configuration)功能。自动配置功能的出现简化了网络内主机的配置过程。网络内的主机会根据自己所处的链路的具体状况配置适合自己的本地链路地址。当处于同一个网络的同一链路上的所有主机都可以自动配置本地链路地址时,就可以实现即插即用功能了。自动配置功能是IPv6所具备的标准功能,这是对DHCP协议的改进和扩展,使得网络(尤其是局域网)的管理更加方便和快捷。为了与IPv4中的DHCPv4有一定的区别,把这种DHCP方式称为DHCPv6。它与DHCPv4最大的不同是它可以支持IPv6寻址方案。

(5) IPv6具有更高的安全性。安全问题是IPv6协议设计时着重考虑的一个方面,早期的IP协议在这方面做得并不完善,致使Internet时常发生机密数据被窃取、网络遭受攻击等事件。IPv6协议使用了对用户数据在网络层进行加密并对IP报文进行校验的机制,极大地增强了网络的安全性。IP安全(IPSec)协议只是作为IPv4的一个可选扩展协议,但在IPv6中成为了一个必须的组成部分。另外,作为IPSec的一项重要应用,IPv6集成了虚拟专用网(VPN)的功能,使用IPv6可以更容易地实现安全可靠的虚拟专用网。

(6) IPv6可以提供较高的网络服务质量QoS。服务质量是一项综合指标,是用于衡量所提供的网络服务质量好坏的性能指标。IPv6可以提供不同水平的服务质量; IPv6在保证服务质量方面,主要依靠“流标记”和“业务级别”来实现,与IPv4的QoS机制相比,新增了流标记功能,扩大了业务级别的范围。这种能力对支持需要固定吞吐量、时延和时延抖动的多媒体应用,特别是动态视频传输非常有用。


5.6.2IPv6分组

IPv6的数据报主要由三部分构成,分别为固定大小的基本首部、可有可无的扩展首部与数据部分,如图532所示。



图532IPv6报头的基本结构


1.  IPv6基本首部

IPv6基本首部长度固定为40B,去掉了IPv4中可选字段。IPv6基本首部也称为固定首部,共包含8个字段,分别为版本、通信量类、流标号、有效载荷长度、下一个首部、跳数限制、源地址、目的地址等。尽管IPv6地址长度是IPv4的4倍,但IPv6数据报头部长度仅为IPv4数据报头部长度的2倍。

(1) 版本(Version): 长度为4位,指明了数据报协议的版本号。对于IPv6,该字段值为6。

(2) 通信量类(Traffic Class): 长度为4位,用来标识IPv6分组类别和优先级。发送结点和转发结点可以根据该字段的值来决定发生拥塞时如何更好地处理分组。例如,若由于存在拥塞,两个连续的数据报中必须丢弃一个,那么具有较低优先级的数据报将被丢弃。

(3) 流标号(Flow Label): 该字段是IPv6的新增字段。这里的“流”是指从特定的源结点到目标结点的单播或多播分组,所有属于同一个流的数据分组都具有相同的流标号。源结点使用这20位字段,为特定序列的包请求特殊处理(效果好于尽力转发)。实时数据传输(如语音和视频)可以使用流标号字段以确保QoS并且可以支持资源预留。流标号允许路由器将每一个数据分组与一个给定的资源分配相关联,数据分组所经过路径上的每一个路由器都要保证其所指明的服务质量。

(4) 有效载荷长度(Payload Length): 长度为16位,表示IPv6数据报除基本头部以外的字节数。该字段能表示的最大长度为65535字节的有效载荷,如果超过这个值,则该字段会置0。

(5) 下一个首部(Next Header): 长度为8位。如果存在扩展首部,则用该字段值表示下一个扩展首部的类型; 如果不存在扩展首部,则该值表示下一个传输层报头是TCP、UDP还是ICMPv6报头。

(6) 跳数限制(Hop Limit): 长度为8位,该字段用来保证分组不会无限期地在网络中生存,相当于IPv4中的生存时间。分组每经过一个路由器,该字段的值递减1。当跳数限制值降为0时,分组将会被丢弃。

(7) 源地址与目的地址: 长度分别为128位,用来标识发送分组的源主机和接收分组的目标主机。

2.  IPv6扩展首部

IPv6报头设计中对原IPv4报头所做的一项重要改进就是将所有可选字段移出IPv6报头,置于扩展首部中。使用IPv6扩展首部,可以在不影响性能的前提下实现选项。由于在IPv4的报头中包含了所有的选项,因此每个中间路由器都必须检查这些选项是否存在,如果存在,则必须处理它们。这种设计方法会降低路由器转发IPv4数据报的效率。在IPv6中,相关选项都被移到了扩展首部中。由于扩展首部不被中转路由器检查或处理,加之省略了首部的校验和字段,这样就能减少IPv6数据报中途经过路由器时的处理时间。

可以将一些网络层需要的额外信息置于IPv6的扩展首部中,扩展首部(EH)可位于IPv6报头和上层协议数据之间,报头之间由下一个报头字段值进行标识,这样组成一个链式结构。一个IPv6数据报可以有0个、1个或几个扩展首部。通常,一个典型的IPv6数据报,没有扩展首部,仅当需要路由器或目的结点做某些特殊处理时,才由发送方添加一个或多个扩展首部。与IPv4不同,IPv6扩展首部长度任意(不受40字节限制),以便于日后扩充新增选项,增强IPv6协议的可扩展性。但是,为了提高处理选项首部和传输层协议的性能,扩展首部总是8字节长度的整数倍。

目前,RFC2460中定义了以下6个IPv6扩展首部: 逐跳选项首部、目的选项首部、路由首部、分段首部、认证首部和封装安全性净荷(ESP)协议首部。

(1) 逐跳选项首部(HopbyHop)。逐跳选项首部是所有扩展首部中的第1个首部,是转发路由器唯一需要处理的一个扩展首部。逐跳选项首部由8b的下一个首部、8b的扩展报头长度与选项三部分组成。首部长度依然是8B的整数倍。

(2) 目的选项首部。目的选项首部包含只能由最终目的结点处理的选项,有两种用法,如果存在路由扩展首部,则每一个中转路由器都要处理这些选项; 如果没有路由扩展首部,则只有最终目的结点需要处理这些选项。

(3) 路由首部。类似于IPv4的松散源路由。IPv6的源结点可以利用路由扩展首部指定一个松散源路由,即分组从信源到信宿需要经过的中转路由器列表。

(4) 分段首部。分段首部包含一个分段偏移值、一个“更多段”标志和一个标识字段,用于提供分段和重装服务。当分组大于链路最大传输单元(MTU)时,源结点负责对分组进行分段,并在分段扩展报头中提供重装信息。

(5) 认证首部(AH)。认证首部提供了一种机制来进行数据源认证、数据完整性检查和反重播保护,对IPv6基本首部、扩展首部、净荷的某些部分进行加密的校验和计算。认证首部不提供数据加密服务,需要加密服务的数据包,可以结合使用ESP协议。

(6) 封装安全性净荷(ESP)协议首部。封装安全性净荷协议首部是最后一个扩展首部,它指明剩余的净荷已经加密,并为已获得授权的目的结点提供解密信息。


5.6.3IPv6地址

由于IPv6地址拥有128位,因此IPv6的最大优势在于可以提供巨大的地址空间,大约有3.4×1038个IP地址,这是一个难以想象的庞大数目。但同时对于它的读取则出现了一些问题。在IPv4的32位地址中,使用了点分十进制的方式来简化地址的表示。显然,这样的方式并不适合于IPv6地址。

为此,引入了冒号十六进制的表示方式(参照MAC地址的格式),每4个十六进制数为一组,将128位地址划分为8组,组之间用冒号隔开,如FEEA:0000:ABBD:0000:0000:00AE:00AC:1EAC。

这样的表示方式显然不够简练,进一步地,可以采用两种方式来压缩地址长度。第一种方式是省略前面的0,如上面所举例子中的地址可以压缩为“FEEA:0:ABBD:0:0:AE:AC:1EAC”; 第二种方式是用双冒号代替多组0,规定双冒号只能出现一次,上例可进一步简化为“FEEA:0:ABBD::AE:AC:1EAC”,这种方法也称为双冒号表示法(Double Colon)。

IPv6地址的使用过程中,有以下几个需要注意的问题。

(1) 使用第一种方法省略前面的0时应注意,不能把位段内部的0也给省略了。例如,地址EE02:60:0:0:0:0:0:2进行简写时,不能简写为EE2:6::2,而应该简写为EE02:60::2。

(2) 在双冒号表示法中应注意,在一个地址中双冒号只能出现一次。例如,地址0:0:0:4AE:23:0:0:0,它有两种简化写法。一种简化写法是::4AE:23:0:0:0; 另一种写法是0:0:0:4AE:23::,但不能写成::4AE:23::。

(3) 有时可能需要去算出一个IPv6地址在使用双冒号表示法进行简化时到底压缩了多少个0。其实方法很简单,只要计算一下除::外,还有多少个位段,然后用8减去这个位段数,再将结果乘以16。例如,EE04:EE03::EE02中有3个位段(EE04、EE03和EE02),就可以计算出双冒号::表示的0的个数为(8-3)×16=80。

(4) IPv6地址不支持子网掩码,它只支持前缀长度表示法。前缀表示法与IPv4的无类域间路由CIDR表示方法基本相似。前缀是IPv6地址的一部分,用作IPv6路由或子网标识。IPv6的前缀表示方法为“地址/前缀长度”,如55DF::A3:0:0/48、F0C0::4F:0/64。

IPv6地址与IPv4的两级层次结构(即网络前缀和主机前缀)不同,它的巨大地址空间支持多级层次结构。怎样对IPv6地址空间进行划分、管理地址分配及设计地址与路由之间的映射关系都是值得进一步探讨的问题。IPv6地址空间分成两部分: 第一部分是可变长度的类型前缀,它定义了地址的类型; 第二部分是地址的其余部分,其长度也是可变的。当分配到一个IPv6地址时,由地址的前缀决定地址的类型,IPv6地址类型前缀如表55所示。


表55IPv6地址类型前缀


二进制地 址 类 型地址空间所占份额


0000 0000
保留(IPv4兼容)
1/256
0000 0001
未分配
1/256
0000 001
NSAP地址
1/128
0000 010
IPX地址
1/128
0000 011
未分配
1/128
0000 1
未分配
1/32
0001
未分配
1/16
001
聚集全球单播地址
1/8
010
未分配
1/8
011
未分配
1/8
100
未分配
1/8
101
未分配
1/8
110
未分配
1/8
1110
未分配
1/16
1111 0
未分配
1/32
1111 10
未分配
1/64
1111 110
未分配
1/128
1111 1110 0
未分配
1/512
1111 1110 10
本地链路单播地址
1/1024
1111 1110 11
本地网点单播地址
1/1024

1111 1111
多播地址
1/256


目前,IPv6地址差不多只分配了15%,当地址的需求超过目前所分配的数目时,IETF将扩充地址空间使用其余未分配的区域。从表55中可以看出,地址的分配相对较为稀疏,没有进行连续分配,但是由于已经对地址进行了选择,因此有着较高的处理效率。

与大家所熟知的IPv4的3种地址类型(单播、广播、多播)不同,在IPv6中取消了效率低下的广播地址,新增了任意播地址,使之也有了3种地址类型。

1. 单播地址

单播地址(Unicast Address)标识了IPv6网络中一个区域中的单个网络接口地址。在这个区域中该地址是唯一的,目的地址为单播地址的数据分组,最终会被送到这个唯一的网络接口上。单播IPv6地址的主要类型有聚集全球单播地址、本地链路单播地址、本地网点单播地址等。聚集全球单播地址可以用于全球范围,而链路本地地址往往仅用于有限的范围中。

(1) 聚集全球单播地址。有时也简称为全球单播地址或单播地址,同IPv4中的单播地址一样,IPv6中的全球单播地址是公网通用地址,全球单播地址在整个网络中有效且唯一。全球单播地址起始3位为“001”,每个全球单播IPv6地址有3个字段: 全球路由前缀、子网ID、接口ID,如图533所示。




图533聚集全球单播地址的结构



全球路由前缀部分用来指明全球都清楚的公共拓扑结构,主要是提供商分配给组织机构的前缀。子网ID部分也称为地点级标识,和IPv4中的子网字段相似,是ISP在自己管理的网络中建立的多级寻址机构,以便于组织管理下级机构寻址、路由、划分子网等,具有很大的灵活性。ISP可以利用前缀中的49~64位(共16位)将网络划分为最多65535个子网。接口ID用来标识单个的网络接口,一般会将48位的以太网地址放于此处。为了达到64位的长度,还应另外增加16位,IPv6规定了这16位的值是0xFFFE,并且该值应该插入在以太网地址的前24位公司标识符之后。

(2) 本地链路单播地址。本地链路单播地址的前缀是“1111 1110 10”,即FE80::/10,其结构如图534所示。本地链路单播地址是由结点启用IPv6时自动按照EUI64的规则生成的(每个结点可以配置多个IPv6地址,而这个地址类似于IPv4中,当DHCP分配失败时自动生成的类似169.254.x.x的地址),主要用于同一链路上相邻结点间的通信,该类地址仅用于单个链路(链路层不能跨VLAN),不能在不同子网中路由。使用本地链路单播地址作为源或目的地址的数据包不会被转发到其他链路上,即本地链路单播地址只在本链路上有效。该类地址主要用于邻居发现协议和无状态自动配置中链路本地上结点之间的通信。



图534本地链路单播地址结构


(3) 本地网点单播地址。本地网点单播地址的前缀是“1111 1110 11”,即FEC0::/10,目前,该类地址已被唯一本地地址FD00::/8所替代,这类地址类似于IPv4中的私有地址,仅能够在本地网络使用,在IPv6 Internet上不可被路由。该类地址的有效域限于一个网点内部(相当于一个私有网络,其覆盖范围要大于本地链路,可跨越私有网络内的路由器),同时含此类地址的包也不会被路由器转发到本地网点以外。该地址配置时通过在路由器上配置本地前缀(Router Advertisement)或通过DHCPv6来分配,这类地址通常很少使用。

2. 多播地址

多播地址(Multicast Address)也可以称为组播地址,是指一个源结点发送一个数据分组能够被多个特定的目的结点所接收,可以简单地理解为一点对已标识多点的通信。这“多个特定的目的结点”构成了一个有组织的多播组,IPv6的结点可以随时加入或离开某一个多播组。与传统广播方式不同的是,多播的效率更高,且对网络本身的影响很小。可以看到,广播可以作为多播的一个特例进行处理。IPv6多播数据流的运行方式与IPv4基本相似,其地址结构如图535所示。




图535IPv6多播地址结构



3. 任意播地址

任意播地址(Anycast Address)有时也称为任播或泛播地址,是IPv6中新增的一种地址类型。多播地址主要用于一点对多点的通信,而任播地址则主要用于一点对多点中的一个结点的通信。任播可以理解为属于不同结点的一组接口的标识符,送往一个任播地址的数据分组将被传送至该地址标识的任意一个接口上。一般来说,都会选择距离最近的网络接口进行数据交付。任播地址对于移动通信是有利的,当一个移动用户需要接入网络时,因为地理位置的变化,它需要实时地寻找一个距离最近的接收结点。

4. 特殊地址

为了一些特定的用途,IPv6专门保留了一些地址。由于IPv6地址空间巨大,因此保留一些地址对于IPv6的地址空间来说影响并不大。以下介绍两种IPv6特殊地址。

(1) “0:0:0:0:0:0:0:0”等价于“::”,其含义与IPv4中的0.0.0.0相同,称为不确定地址。这个地址不可以指定给任何网络结点使用,只有在主机不知道其来源IP地址时,才可以在它发送的IPv6数据包中的源地址字段输入不确定地址。

(2) “0:0:0:0:0:0:0:1”等价于“::1”,其含义与IPv4中的127.0.0.1相同,称为回环地址,不能分配给任何物理接口。


5.6.4IPv4到IPv6的过渡

尽管IPv6拥有众多优势,但是IPv6要完全替代主流的IPv4,仍需要一段时间。自从20世纪80年代初期IPv4开始实施,早期Internet的一些基础设备以及一些主干网络都是以IPv4为基础的,并且经过这么长时间的发展使得目前因特网中存在着数量庞大的IPv4用户。所以,IPv4到IPv6的过渡必将需要一个过程。IPv4到IPv6的过渡也应该是一个循序渐进的过程。IETF成立了专门的工作组,研究IPv4到IPv6的转换问题,并且提出了一些方案,主要包括双栈技术、隧道技术等。2012年6月6日,国际互联网协会举行了世界IPv6启动纪念日,全球IPv6网络正式启动,此后,IPv6的发展逐渐加快。令人欣慰的是,我国在IPv6的建设上步伐较快,到2021年8月,IPv6“高速公路”全面建成,IPv6网络基础设施规模全球领先,已申请的IPv6地址资源位居全球第一,制定发布了120多项IPv6标准。

1. 双栈技术

双栈技术也许是实现IPv6最简单、最常见、最容易的一种方式。通过在网络设备上安装IPv4和IPv6两个协议栈,使得这些设备既支持IPv4协议,也支持IPv6协议。在IPv6推广的早期,这些设备可以主要采用IPv4协议进行通信; 随着网络的不断升级,当通信网络全面迁移到IPv6环境中时,该设备便可以立即更换为全IPv6协议进行通信。图536所示为IPv4/IPv6的双协议栈结构示意图。




应用程序
TCP/UDP

IPv6协议IPv4协议

物理网络


图536IPv4/IPv6的双协议栈结构示意图


双协议栈的工作机制可以简单描述如下: 当主机或路由器采用双协议栈后,双协议栈主机为了知道目的主机采用的是哪一个版本的IP地址,会利用域名系统DNS进行查询,根据DNS的查询结果来判断地址类型。若DNS返回的是IPv4地址,双协议栈就使用IPv4地址; 否则使用IPv6地址。IPv4/IPv6双协议栈的工作过程如图537所示。




图537IPv4/IPv6双协议栈的工作过程


双协议栈机制是使IPv6结点与IPv4结点兼容的最直接方式,互通性好,易于理解。但是双栈策略也存在一些缺点,如对网元设备性能要求较高,需要维护大量的协议及数据。另外,网络升级改造将涉及网络中的所有设备,投资大,建设周期比较长。

2. 隧道技术

隧道技术是一种通过在其他协议的数据报中重新封装新的报头形成新的协议数据报的数据传送方式。所以,IPv4到IPv6的隧道技术是指IPv6分组进入IPv4网络时,将IPv6分组封装成IPv4分组,使整个IPv6分组成为IPv4分组的数据部分,从而对外隐藏了IPv6分组的格式及内容,使之呈现为IPv4分组的形式在IPv4网络中进行传输,就好比在IPv4的网络中建立起一条用来传输IPv6数据分组的隧道。在IPv6普及的初期,必然会呈现出大块的IPv4网络包围小块的IPv6网络,利用隧道技术可以通过现有运行IPv4协议的Internet骨干网络(即隧道)将局部的IPv6网络连接起来,因而是IPv4向IPv6过渡的初期最易于采用的技术。图538说明了隧道技术的工作原理。




图538隧道技术的工作原理


由此可以看出,一般是由一个双栈路由器将IPv4网络与IPv6网络连接起来。当有数据要从IPv6网络通过IPv4网络到达另一端IPv6网络时,该路由器就会将IPv6数据报封装入IPv4数据报中,IPv4数据报的源地址和目的地址分别是隧道入口和出口的IPv4地址。在隧道的出口处再将IPv6数据报取出转发给IPv6目的结点。

目前应用较多的隧道技术包括构造隧道、6to4隧道、6over4隧道及MPLS隧道等。利用隧道来构造大规模的IPv6网络,是目前常用的一种过渡方法。本质上,隧道方式只是把IPv4网络作为一种传输介质。在IPv6网络建设的初期,其网络规模和业务量都较小,这是经常采用的连接方式。目前的隧道技术主要实现了在IPv4数据报中封装IPv6数据报,随着IPv6技术的发展和广泛应用,未来也将会出现在IPv6数据报中封装IPv4数据报的隧道技术。但是,在隧道的入口处会出现负载协议数据报的拆分,在隧道出口处会出现负载协议数据报的重装,这都增加了隧道出入口的实现复杂度,不利于大规模的普及应用。

另外需要指出的是,与IPv4一样,IPv6也不保证数据报的可靠交付,因为互联网中的路由器可能会丢弃数据报,所以IPv6也需要使用ICMP协议来反馈一些差错信息,该协议新的版本称为ICMPv6,它比ICMPv4要复杂得多。在网际报文控制协议ICMPv4中的一些独立的协议,现在已经成为ICMPv6协议中的一部分了。ICMPv6还增加了一些新的报文,因此其功能更多。图539所示的是新旧版本中网络层协议组成的比较,显然,新版本的网络层中,地址解析协议ARP和网际组管理协议IGMP的功能均已被合并到了ICMPv6中。




图539新旧版本中网络层协议组成的比较



5.6.5IPv6的应用

IPv6自诞生至今,已经历了20多年的发展。应该说,其初期发展速度还是较为缓慢的。近年来,在IPv4地址相对匮乏的欧洲和亚洲,IPv6标准化进程及推进速度明显加快,开展了大量的科研工作并且部署了一些示范型网络,相关的技术标准及软、硬件平台都得到了快速发展。目前,设备制造商已经全面生产和制造了IPv6网络设备,运营商也建成了基于IPv6的电信级下一代互联网。事实上,IPv6的应用领域远不止传统的电信行业,在人们工作生活的诸多领域中都有着广阔的应用前景。

(1) 6G业务。现在的PSTN电信网络的下一代网络是NGN,Internet的下一代网络就是NGI,移动网的下一代则要走向5G或者6G。为了满足永远在线的需要,每一个要接入Internet的移动设备都将需要两个唯一的IP地址来实现移动Internet连接,本地网络分配一个静态IP地址,连接点分配第二个IP地址用于漫游。5G和6G作为未来移动通信蓝图中的核心组成部分,对IP地址的需求量极大,只有IPv6才能满足这样的需求。网络运营商都一致认为,IPv6将是发展5G、6G移动通信的有力工具。

(2) 宽带多媒体。随着IP宽带业务的不断发展与普及,宽带多媒体应用正在向更广泛、更深入的领域发展。数字监控、数字电视、远程教学、视频会议等产品和应用都有着广阔的发展前景。IPv6提供的巨大地址空间,解决了地址不足的问题。优化的地址结构极大地提高了路由选择的效率及数据传输量,这对于需要传输大信息量的多媒体业务来说是极其重要的; IPv6加强的协议多播功能可以更加有效地利用网络带宽,实现基于多播、具有网络服务质量保障的大规模视频会议和高清晰度电视广播应用。

(3) 家庭网络。Internet的普及对于家庭网络的发展提供了巨大商机。由于IPv6拥有巨大的地址空间、即插即用的便捷配置、对移动性的内在支持等,使IPv6非常适合于拥有巨大数量的各种家用设备网络。一般可以通过个人计算机、PDA等设备对连接在家庭网络中的电话、空调、冰箱等家电设备进行远距离操控。大容量IP地址结构能够实现每一个家用电器获得一个IP地址,并可以通过网络把这些家电管理起来,方便用户随时掌握家中状况,体验全新的生活模式。

(4) 传感器网络。传感器网络已经逐渐深入到社会的多个角落中,以传感器网络为物理基础的物联网近年来也成为了新的研究热点。IPv6中的大容量地址空间,可以为每个传感器分配一个IP地址,通过IPv6互联网络,实时采集地震、大气、水文等各种环境监测数据,进行分析研究。IPv6也可以用于射频识别技术中,方便人们的工作生活。

(5) 军事应用。军事应用是网络发展永恒的原动力,IPv6技术也必将应用于军事领域中。军事网络大多是相对独立的物理网络,全面普及IPv6技术相对更为容易一些; IPv6所内建的安全功能将是军事应用更为关注的内容。

(6) 智能交通系统。智能交通系统的优势已经为世界各国所认可,其在解决交通拥挤、行车安全、智能驾驶等方面都将有所作为。智能交通系统中涉及大量的通信实体,信息点众多,类型复杂。IPv6可以使智能交通系统中的每一个实体(信号灯、监视器、传感器、车辆等)都获得一个单独的IP地址,进而实现智能交通系统的整体联网,解决结点间的无障碍通信难题。


5.7虚拟专用网(VPN)和网络地址转换(NAT)


5.7.1虚拟专用网
1.  VPN的功能

由于IP地址的紧缺,一个机构能够申请到的IP地址数量要远少于该机构所拥有的主机数量,这样就存在IP地址不够用的问题。另外,考虑到互联网并不安全,一个机构也并不需要把所有的主机都接入外部的互联网中。在很多情况下,大多数主机也是要和该机构内部的其他主机进行通信(如大型企业中很多主机需要经常访问企业内部的各种服务器,而并不需要访问外部网络)。这样,对于采用TCP/IP协议联网的机构内部网络,可以让其使用仅在该机构内部有效的IP地址(该类地址称为本地地址、专用地址或私有地址,如表52所示),而不需要向互联网的管理机构申请全球唯一的IP地址(该类地址称为全球地址),这样就可以大大节约全球IP地址资源。

私有地址只能用于机构内部的通信,而不能用于与互联网上的主机进行通信。即在互联网中的所有路由器,对目的地址是私有地址的数据报一律不进行转发。采用这样的私有IP地址的网络称为专用网。显然,全球范围内有很多的专用网使用相同的私有IP地址,但并不会引起地址冲突,因为这些私有地址仅在本机构内部使用,所以私有IP地址也称为可重用地址。

在传统的大型企事业单位的组网方案中,为了实现处于不同地理位置的部门、分支机构LAN与LAN之间的远距离通信,一种方式就是采用租用线路的方式,在这种方式下,用户除了要承担昂贵的专线租金外,还要承担繁杂的调制解调器与接入设备的管理任务,并且这种方法的扩展性与灵活性差。另一种方式则是利用接入互联网的条件,构建企业的虚拟专用网(Virtual Private Network),利用互联网作为该机构位于不同地点的专用网通信的载体实现机构内部各个专用网的网络互联。

之所以称其为“专用网”是因为这种网络是用于该机构内部的通信,而不是用于和网络外其他机构的主机通信。若专用网不同网点之间的通信必须通过公用互联网,而通信又有保密的要求,那么所有通过互联网传送的数据都必须进行加密处理。“虚拟”表示好像是,但本质上并不是,因为并未使用通信专线,VPN所达到的效果和真正的专用网是一样的。一个机构要构建自己的VPN,就必须为它的每一个场所购买专门的硬件和软件,并进行相关的配置,使得每个场所的VPN系统都知道其他场所的地址。

VPN至少应提供以下3方面的功能。

(1) 加密数据,以保证通过公共网络传输信息即使被他人截获也不会泄露。

(2) 信息认证和实体认证,保证信息的完整性、真实性,并能认证用户的身份。

(3) 提供访问控制,不同的用户有不同的访问权限。

2. VPN的解决方案

目前,VPN主要采用4种技术来保证安全,即隧道技术、加解密技术、密钥管理技术、身份认证技术,其中隧道技术是VPN的基本技术。图540所示的是一个一般的VPN结构示意图。




图540一般的VPN结构示意图



在这个方案中,每个办公场所配备一个防火墙,并且通过Internet在所有这些办公场所两两之间建立隧道,这个隧道的建立需要进行加密验证,只有密钥正确,隧道才能建立起来,加密验证保证了隧道是和正确的对方建立的。在建立隧道之后,明文的数据经过加密后才会被传送,加密密钥和加解密算法也是需要双方配置正确,这样可以保证数据即使被中途截获,如果不知道密钥和加解密算法,依然难以还原数据。

许多防火墙具有内置的VPN功能,有些普通路由器也具有VPN功能,但是,由于防火墙的主要任务在于提供安全服务,因此,只要公司与Internet之间有非常清晰的隔离边界,则让隧道起止于防火墙是非常自然的做法。

根据形成隧道协议的不同,VPN分为第二层隧道和第三层隧道。由数据链路层协议形成的隧道称为第二层隧道,主要包括PPTP协议和L2TP协议; 由网络层IP协议形成的隧道称为第三层隧道,主要包括IPSec。

1996年Microsoft与Ascend(现在是Lucent科技的一部分)提出了在PPP协议基础上的PPTP(PointtoPoint Tunneling Protocol)隧道协议,同年Cisco提出了将PPTP隧道协议与L2F(Layer 2 Forwarding)协议结合起来,研究L2TP(Layer 2 Tunneling Protocol)协议。PPTP和L2TP隧道协议的优点,是支持流量控制,通过减少丢弃包来改善网络的性能; 其缺点是,两种协议只支持对隧道两端设备的认证,不能对隧道中通过的每个数据报文进行认证,因此无法抵御插入攻击、地址欺骗攻击与拒绝服务攻击。PPTP和L2TP隧道协议比较适合远程访问的VPN。


与PPTP和L2TP相比,IPSec的功能更丰富,而且也更复杂,它通过使用隧道模式,来建立VPN服务。IPSec支持主机与主机、主机与路由器、路由器与路由器之间,以及远程访问用户之间的安全服务。由于IPSec出众的加密能力及极强方便性,因此IPSec是人们构建VPN的首选方法。


3.  VPN的应用方式

VPN作为一种组网技术,有3种应用方式: 远程访问虚拟专用网(Access VPN)、企业内部虚拟专用网(Intranet VPN)、扩展的企业内部虚拟专用网(Extranet VPN)。

(1) Access VPN。Access VPN主要解决远程用户安全办公问题,用户既要能远程获取企业内部网信息,又要能够保证用户和企业内部网的安全。远程用户利用VPN技术,采用ADSL、LAN或WLAN接入技术通过Internet方式接入公司内部网。Access VPN一般包含两部分,即远程用户VPN客户端软件和VPN接入设备,其组成结构如图541所示。



图541Access VPN的组成结构


(2) Intranet VPN。随着企业业务的发展变化,企业办公地点不再集中在一个地点,而是分布在各个不同的地理区域,甚至是跨越不同的国家。因而,企业的信息环境也随之变化,针对企业的这种情况,Intranet VPN的用途就是通过公用网络,如Internet,把分散在不同地理区域的企业办公点的局域网安全地互联起来,实现企业内部信息的安全共享和企业办公自动化。Intranet VPN一般的组成结构如图542所示。




图542Intranet VPN的组成结构


(3) Extranet VPN。由于企业合作伙伴的主机和网络分布在不同地理位置上,传统上一般通过专线互联实现信息交换,但是如此一来网络建设与管理维护都非常困难,造成企业间的商业交易程序复杂化。Extranet VPN则是利用VPN技术,在公共通信基础设施(如Internet)上把合作伙伴的网络或主机安全接入到企业内部网,以方便企业与合作伙伴共享信息和服务。Extranet VPN解决了企业外部机构的接入安全和通信安全,同时也降低了网络建设成本。Extranet VPN的一般结构如图543所示。在这种方式中出于对企业内网资源的保护,通常把对企业合作伙伴提供的服务放在DMZ(非军事化区)中。



图543Extranet VPN的一般结构




5.7.2网络地址转换

在专用网内部的一些主机上本来已经分配到了本地私有IP地址,但现在又想和互联网上的主机进行通信,且无保密要求,这种情况下,就需要网络地址转换(Network Address Translation,NAT)。

通常,路由器和一些专用NAT设备都具备IP地址转换功能,且这些使用本地地址的专用网络在连接到Internet时,都会安装相应的NAT设备(一般是NAT路由器),这些设备至少具有一个有效的外部全球地址。

NAT有3种实现方式: 静态NAT、动态NAT、端口地址转换PAT。

(1) 静态NAT。实现起来较为简单容易,内部网络中的每个主机都被永久映射成某个全球地址。一般用于全球地址足够多的情况。

图544给出了一个静态NAT路由器的工作原理。专用网192.168.1.0中所有主机的IP地址都是私有IP地址192.168.1.x,NAT路由器至少有一个全球IP地址(当然也可以有多个)才能和互联网相连。NAT路由器的全球IP地址是170.1.3.8。



图544静态NAT路由器的工作原理


NAT路由器收到从专用网内部的主机A发往互联网上的主机B的数据报,该数据报的源IP地址是192.168.1.1,目的IP地址是202.201.32.1。NAT路由器把IP数据报的源IP地址192.168.1.1转换为新的源IP地址(即NAT路由器的全球IP地址)170.1.3.8,然后转发出去。当主机B收到该数据报时,认为A的IP地址是170.1.3.8。当主机B给主机A发送应答信息时,IP数据报的目的IP地址就是NAT路由器的全球IP地址170.1.3.8,此时主机B并不知道主机A的私有地址192.168.1.1。即使知道了也不能使用,因为互联网上的路由器都不转发目的地址是私有IP地址的IP数据报。


当NAT路由器收到从互联网上的主机B发来的IP数据报时,还要进行一次IP地址的转换,这种转换可以根据NAT路由器中的NAT地址转换表进行,该表的一个例子如表56所示,根据转换表把目的地址170.1.3.8转换为主机A的真实私有地址192.168.1.1。


表56NAT地址转换对照表


内部私有地址对应的全球IP地址


192.168.1.1
170.1.3.8
192.168.1.2
170.1.3.9
192.168.1.3
170.1.3.10



由此可见,当NAT路由器具有n个全球IP地址时,专用网内最多可以同时有n台主机接入互联网。另外,通过NAT路由器的通信必须是由专用网内部的主机发起的,因为若互联网上的主机要发起通信,当IP数据报到达NAT路由器时,该路由器就不知道应当把目的IP地址转换成专用网内的哪一个私有IP地址,这表明,这种专用网内部的主机不能充当互联网上被其他主机访问的服务器,因为互联网上的客户无法请求专用网内的服务器提供服务,但其可以作为内部网络的服务器来使用。

(2) 动态NAT。可以将多个内部地址映射为多个全球地址,一般设有一个地址池,地址之间的映射关系不固定绑定。

(3) 端口地址转换PAT。也称为NAPT(Network Address Port Translation),可以将多个内部地址映射为一个全球地址,但以不同的协议端口号与不同的内部地址相对应。这种方式常用于全球地址不是很充足的情况。

PAT方式应用较为广泛,具体的实现过程如下。

设内部地址分别为A1、A2、…,在每个Ai上有多个应用,其端口号为P1、P2、…,PAT的全球地址为B,建立一张对照表,其形式如表57所示。


表57PAT对照表


内部IP
端口号
变换端口号


A1
P1
30000
A2
P2
30001

…
…
…



以A1为例,A1组成一个IP包,其目的地址和目的端口号指向一个合法的服务器地址,其源地址为A1,源端口号为P1。如果该IP包直接发送给服务器,则服务器送回的应答包中的目的地址为A1,路由器不会进行转发,A1不可能收到应答包。所以A1不能实现与该服务器的通信。现在,A1的包经过PAT时,PAT对该包进行了修改,具体方法如下。

(1) PAT查找对照表,查看A1+P1是否存在。

(2) 若不存在,生成一个新的变换端口号(如30000),将A1、P1和新的变换端口号存入对照表,转(3)。

(3) 取出变换端口号P,将IP包中的源地址改为B,源端口号改为P,将数据包转发出去。

(4) PAT收到一个应答包后,用包中的目的端口号(目的地址肯定是B)到对照表中查找对应的内部IP和端口号。

(5) 将应答包的目的地址改为查到的内部IP地址A1,目的端口号改为查到的端口号P1,然后将修改后的应答包发送到内部网络上。

通过这样的方式,可以实现内部网络的所有主机通过一个全球IP地址实现Internet的接入。虽然对NAT技术的褒贬不一,但事实上,NAT技术确实方便了人们的应用,在一定程度上缓解了IP地址空间不足的问题。

另外,从层次的角度看,PAT的机制有些特殊。第一,普通路由器在转发IP数据报时,对于源IP地址或目的IP地址都是不改变的; 但NAT路由器在转发IP数据报时,一定会更改其IP地址(从专用网到互联网时转换源IP地址,从互联网到专用网时转换目的IP地址)。第二,普通路由器在转发分组时,是工作在网络层,但PAT在工作时还要查看和转换传输层的端口号,而这应属于传输层的范畴,因此受到了一些人的质疑,但其主要工作仍然属于网络层的范畴,且这些质疑并未影响PAT的使用。