当前位置: 首页 > news >正文

二、计算机网络技术——第4章:网络层

目录

4.1网络层的功能

4.1.1异构网络互连

4.1.2路由与转发

4.1.3网络层提供的两种服务

1.虚电路

2.数据报

4.1.4 SDN的基本概念

4.1.5拥塞控制

4.2 IPv4

4.2.1 IPv4分组

1.IPv4分组的格式

2.IP数据报分片

4.2.2 IPv4地址与NAT

1.IPv4地址

2.网络地址转换(NAT)

3.NAT的原理和应用

4.2.3划分子网与路由聚合

1.划分子网

2.子网掩码和默认网关

3.无分类编址CIDR

4.子网划分的应用举例

4.2.4网络层转发分组的过程

4.2.5地址解析协议

1.IP地址与硬件地址

2.地址解析协议

4.2.6动态主机配置协议DHCP

4.2.7网际控制报文协议ICMP

4.3 IPv6

4.3.1 IPv6的特点

4.3.2 IPv6数据报的基本首部

4.3.3 IPv6地址

4.3.4从IPv4向IPv6过渡

4.4路由算法与路由协议

4.4.1路由算法

1.静态路由与动态路由

2.距离-向量路由算法

3.链路状态路由算法

4.4.2分层次的路由选择协议

4.4.3路由信息协议

1.RIP的规定

2.RIP的特点

3.RIP的距离向量算法

4.RIP的优缺点

4.4.4开放最短路径优先协议

1.开放最短路径优先(OSPF)的基本特点

2.OSPF的基本工作原理

3.OSPF的分组类型

4.4.5边界网关协议

1.BGP的基本特点

2.BGP路由

3.BGP路由选择

4.BGP的四种报文

4.5 IP多播

4.5.1多播的概念

4.5.2 IP多播地址

4.5.3在局域网上进行硬件多播

4.5.4 IGMP与多播路由协议

4.6移动IP

4.6.1移动IP的概念

4.6.2移动IP通信过程

4.7网络层设备

4.7.1冲突域和广播域

1.冲突域

2.广播域

4.7.2路由器的组成和功能

4.7.3路由表与分组转发

4.8本章小结及疑难点




4.1网络层的功能

网络层提供主机到主机的通信服务,主要任务是将分组从源主机经过多个网络和多段链路传输到目的主机。

OSI参考模型曾主张在网络层使用面向连接的虚电路服务,认为应由网络自身来保证通信的可靠性。TCP/IP体系的网络层提供的是无连接的数据报服务,其核心思想是应由用户主机来保证通信的可靠性。

在互联网采用的TCP/IP体系结构中,网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。也就是说,所传送的分组可能出错、丢失、重复、失序或超时,这就使得网络中的路由器可以做得比较简单,而且价格低廉。通信的可靠性可以由更高层的传输层来负责。采用这种设计思路的好处是:网络的造价大大降低,运行方式灵活,能够适应多种应用。互联网能够发展到今日的规模,充分证明了当初采用这种设计思想的正确性。


4.1.1异构网络互连

互联网是由全球范围内数以百万计的异构网络互连起来的。这些网络的拓扑结构、寻址方案、差错处理方法、路由选择机制等都不尽相同。网络层所要完成的任务之一就是实现这些异构网络的互连。网络互连是指将两个以上的计算机网络,通过一定的方法,用一些中继系统相互连接起来,以构成更大的网络系统。根据所在的层次,中继系统分为以下4种:

1)物理层中继系统:转发器,集线器。

2)数据链路层中继系统:网桥或交换机。

3)网络层中继系统:路由器。

4)网络层以上的中继系统:网关。

当使用物理层或数据链路层的中继系统时,只是把一个网络扩大了,而从网络层的角度看,它仍然是同一个网络,一般并不称为网络互连。因此,网络互连通常是指用路由器进行网络连接和路由选择。路由器是一台专用计算机,用于在互联网中进行路由选择。   

(注意:由于历史原因,许多有关TCP/IP的文献也将网络层的路由器称为网关。)

TCP/IP在网络互连方面的做法是在网络层采用标准化协议,但相互连接的网络可以是异构的。IP网络的概念(如图4.1)所示。图4.1(a)表示许多计算机网络通过一些路由器进行互连。因为参与互连的计算机网络都使用相同的IP,通过IP就可使这些性能各异的网络在网络层上看起来像是一个统一的网络,所以可把互连后的网络视为(如图4.1(b)所示)的一个虚拟互连网络,简称IP网络。

使用IP网络的好处是:当IP网上的主机进行通信时,就好像在单个网络上通信一样,而看不见互连的各个网络的具体异构细节(如具体的编址方案、路由选择协议等)。


4.1.2路由与转发

路由器主要完成两个功能:一是路由选择(确定哪一条路径),二是分组转发(当一个分组到达时所采取的动作)。前者根据路由选择协议构造并维护路由表。后者处理通过路由器的数据流,关键操作是转发表查询、转发及相关的队列管理和任务调度等。

1)路由选择。根据路由协议构造路由表,同时经常或定期地与相邻路由器交换信息,获取网络最新拓扑,动态更新维护路由表,以决定分组到达目的地节点的最优路径。

2)分组转发。指路由器根据转发表将分组从合适的端口转发出去。

路由表是根据路由选择算法得出的,而转发表是从路由表得出的。转发表的结构应使查找过程最优化,路由表则需要最优化网络拓扑变化的计算。在讨论路由选择的原理时,往往不区分转发表和路由表,而笼统地使用路由表一词。


4.1.3网络层提供的两种服务

分组交换网根据其通信子网向端点系统提供的服务,还可进一步分为面向连接的虚电路服务和无连接的数据报服务。这两种服务方式都是由网络层提供的。

1.虚电路

在虚电路方式中,当两台计算机进行通信时,应当先建立网络层的连接,也就是建立一条逻辑上的虚电路(Virtual Circuit,VC),连接一旦建立,就固定了虚电路对应的物理路径。与电路交换类似,整个通信过程分为三个阶段:虚电路建立、数据传输与虚电路释放。

每次建立虚电路时,将一个未用过的虚电路号(VCID)分配给该虚电路,以区别于本系统中的其他虚电路,然后双方就沿着已建立的虚电路传送分组。分组的首部仅在连接建立时使用完整的目的地址,之后每个分组的首部只需携带这条虚电路的编号即可。在虚电路网络中的每个节点上都维持一张虚电路表,表中每项记录一个打开的虚电路的信息,包括在接收链路和发送链路上的虚电路号、前一节点和下一节点的标识,它是在虚电路建立过程中确定的。

虚电路方式的工作原理如图4.2所示。

1)数据传输前,主机A与主机B先建立连接,主机A发出“呼叫请求”分组,该分组通过中间节点送往主机B,若主机B同意连接,则发送“呼叫应答”分组予以确认。

2)虚电路建立后,主机A和主机B就可相互传送数据分组。

3)传送结束后,主机A通过发送“释放请求”分组来拆除虚电路,逐段断开整个连接。

通过上面的例子,可总结出虚电路服务具有如下特点:

1)虚电路通信链路的建立和拆除需要时间开销,对交互式应用和少量的短分组情况显得很浪费,但对长时间、频繁的数据交换效率较高。

2)虚电路的路由选择体现在连接建立阶段,连接建立后,就确定了传输路径。

3)虚电路提供了可靠的通信功能,能保证每个分组正确且有序到达。此外,还可对两个端点的流量进行控制,当接收方来不及接收数据时,可以通知发送方暂缓发送。

4)虚电路有一个致命的弱点,即当网络中的某个节点或某条链路出现故障而彻底失效时,所有经过该节点或该链路的虚电路将遭到破坏。

5)分组首部不包含目的地址,包含的是虚电路号,相对于数据报方式,其开销小。虚电路之所以是虚,是因为这条电路不是专用的,每个节点到其他节点之间的链路可能同时有若干条虚电路通过,也可能同时在多个节点之间建立虚电路。

注意,图4.2所示的数据传输过程是有确认的传输,B收到分组后要发回相应的确认。

2.数据报

图4.3中的例子来说明数据报服务的原理。假定主机A向主机B发送分组。

1)主机A先将分组逐个发往与它直接相连的交换节点A,交换节点A缓存收到的分组。

2)然后查找自己的转发表。因为不同时刻的网络状态不同,所以转发表的内容可能不完全相同,所以有的分组转发给交换节点C,有的分组转发给交换节点D。

3)网络中的其他节点收到分组后,类似地转发分组,直到分组最终到达主机B。

当分组正在某一链路上传送时,分组并不占用网络其他部分的资源。因为采用存储转发技术,资源是共享的,所以主机A在发送分组时,主机B也可同时向其他主机发送分组。

通过上面的例子,我们可以总结出数据报服务具有如下特点

1)发送分组前不需要建立连接。发送方可随时发送分组,网络中的节点可随时接收分组。

2)网络尽最大努力交付,传输不保证可靠性,所以分组可能出错或丢失;网络为每个分组独立地选择路由,转发的路径可能不同,因此分组不一定按序到达目的节点。

3)发送的分组中要包括发送方和接收方的完整地址,以便可以独立传输

4)当分组在交换节点存储转发时,需要排队等候处理,这会带来一定的时延。当网络发生拥塞时,这种时延会大大增加,交换节点还可根据情况丢弃部分分组

5)网络具有冗余路径,当某个交换节点或一条链路出现故障时,可相应地更新转发表,寻找另一条路径转发分组,对故障的适应能力强

6)收发双方不独占某条链路,资源利用率较高

采用这种设计思想的好处是:网络的造价大大降低、运行方式灵活、能够适应多种应用。互数据报服务和虚电路服务的比较见表4.1。


4.1.4 SDN的基本概念

可以将网络层抽象地划分为数据平面(也称转发层面)控制平面,转发是数据平面实现的功能,而路由选择是控制平面实现的功能。

软件定义网络(Software Defined Network,SDN)是近年流行的一种创新网络架构,它采用集中式的控制平面和分布式的数据平面,两个平面相互分离,控制平面利用控制-数据接口对数据平面上的路由器进行集中式控制,方便软件来控制网络。传统网络中的路由器既有转发表,又有路由选择软件,即既有数据平面,又有控制平面。但是在图4.4所示的SDN结构中,路由器都变得简单了,它的路由选择软件都不需要了,因此路由器之间不再相互交换路由信息。在网络的控制平面有一个逻辑上的远程控制器(可由多个服务器组成)。远程控制器掌握各主机和整个网络的状态,为每个分组计算出最佳路由,通过Openflow协议(或其他途径)将转发表(在SDN中称为流表)下发给路由器。路由器的工作很单纯,即收到分组、查找转发表、转发分组。

这样,网络又变成集中控制的,而本来互联网是分布式的。SDN并非要把整个互联网都改造成如图4.4所示的集中控制模式,这是不现实的。然而,在某些具体条件下,特别是像一些大型的数据中心之间的广域网,使用SDN模式来建造,就可使网络的运行效率更高。

SDN的南向接口的定义:SDN的可编程性通过为开发者提供强大的编程接口,使得网络具有很好的编程性。对上层应用的开发者,SDN提供的编程接口称为北向接口,北向接口提供了一系列丰富的API,开发者可以在此基础上设计自己的应用,而不必关心底层的硬件细节。SDN控制器和转发设备建立双向会话的接口称为南向接口,通过不同的南向接口协议(如Openflow),SDN控制器就可兼容不同的硬件设备,同时可在设备中实现上层应用的逻辑。SDN控制器集群内部控制器之间的通信接口称为东西向接口,用于增强整个控制平面的可靠性和可拓展性。

SDN的优点:①全局集中式控制和分布式高速转发,既利于控制平面的全局优化,又利于高性能的网络转发。②灵活可编程与性能的平衡,控制和转发功能分离后,使得网络可以由专有的自动化工具以编程方式配置。③降低成本,控制和数据平面分离后,尤其是在使用开放的接口协议后,就实现了网络设备的制造与功能软件的开发相分离,从而有效降低了成本。

SDN的问题:①安全风险,集中管理容易受攻击,若崩溃,则整个网络会受到影响。②瓶颈问题,原本分布式的控制平面集中化后,随着网络规模扩大,控制器可能成为网络性能的瓶颈。


4.1.5拥塞控制

因出现过量的分组而引起网络性能下降的现象称为拥塞。判断网络是否进入拥塞状态的方法是,观察网络的吞吐量与网络负载的关系:若随着网络负载的增加,网络的吞吐量明显小于正常的吞吐量,则网络就可能已进入轻度拥塞状态;若网络的吞吐量随着网络负载的增大而下降,则网络就可能已进入拥塞状态。拥塞控制主要解决的问题是如何获取网络中发生拥塞的信息,从而利用这些信息进行控制,以避免因拥塞而出现分组的丢失。

拥塞控制的作用是确保网络能够承载所达到的流量,这是一个全局性的过程,涉及网络中所有的主机、路由器及导致网络传输能力下降的所有因素。单一地增加资源并不能解决拥塞。

与流量控制的区别:流量控制往往是指在发送方和接收方之间的点对点通信量的控制。流量控制所要做的是抑制发送方发送数据的速率,以便使接收方来得及接收。拥塞控制的方法有两种:

1)开环控制。在设计网络时事先将有关发生拥塞的因素考虑周到,力求网络在工作时不产生拥塞。这是一种静态的预防方法。一旦整个系统启动并运行,中途就不再需要修改。开环控制手段包括确定何时可接收新流量、何时可丢弃分组及丢弃哪些分组,确定何种调度策略等。所有这些手段的共性是,在做决定时不考虑当前网络的状态。

2)闭环控制。事先不考虑有关发生拥塞的各种因素,采用监测网络系统去监视,及时检测哪里发生了拥塞,然后将拥塞信息传到合适的地方,以便调整网络系统的运行,并解决出现的问题。闭环控制是基于反馈环路的概念,是一种动态的方法。




4.2 IPv4

4.2.1 IPv4分组

IPv4(版本4)即现在普遍使用的网际协议。IP定义数据传送的基本单元——IP分组及其确切的数据格式。

1.IPv4分组的格式

一个IP分组(或称IP数据报)由首部和数据部分组成。首部前一部分的长度固定,共20B,是所有IP分组必须具有的。在首部固定部分的后面是一些可选字段,其长度可变,用来提供错误检测及安全等机制。IP数据报的格式如图4.5所示。

IPv4首部的部分重要字段含义如下:

1)版本占4位。指IP的版本,IPv4数据报中该字段的值是4

2)首部长度占4位。以4B为单位,最大可表示的首部长度为60B(15×4B)。最常用的首部长度是20B(5×4B),该字段的值是5,此时不使用任何可选字段。

注意:IP首部前两个字节往往以0x45开头,解题时可用于定位IP数据报的开始位置。

3)总长度占16位,指首部和数据之和的长度,单位为字节,因此数据报的最大长度为2¹⁶-1=65535B。以太网帧的最大传送单元(MTU)为1500B,因此当一个IP数据报封装成帧时,数据报的总长度(首部加数据)一定不能超过下面的数据链路层的MTU值。

4)标识占16位。它是一个计数器,每产生一个数据报就加1,并赋值给标识字段。但它并不是“序号”(因为IP是无连接服务)。当一个数据报的长度超过网络MTU时,必须分片,此时每个数据报片都复制一次标识号,以便能正确地重装成原来的数据报。

5)标志(Flag)占3位。标志字段的最低位为MF,MF=1表示后面还有分片,MF=0表示最后一个分片。标志字段中间的一位是DF,只有当DF=0时才允许分片。

6)片偏移。占13位。它指出较长的数据报在分片后,某片在原数据报中的相对位置,片偏移以8B为偏移单位。除最后一个分片外,每个分片的长度一定是8B的整数倍。

7)生存时间(TTL)占8位。数据报在网络中可通过的路由器数的最大值,标识数据报在网络中的寿命,以确保数据报不会永远在网络中循环。路由器在转发数据报前,先将TTL减1。若TTL被减为0,则该数据报必须丢弃。

8)协议占8位指出此数据报携带的数据使用何种协议,即数据报的数据部分应上交给哪个协议进行处理,如TCP、UDP等。其中值为6表示TCP,值为17表示UDP。

9)首部检验和占16位。它只检验数据报的首部,不包括数据部分,不检验数据部分可减少计算的工作量。数据报每经过一个路由器,其首部中的某些字段(如生存时间、总长度、标志、片偏移、源/目的地址)都可能发生变化,因此路由器都要重新计算首部检验和。

10)源地址字段占4B,标识发送方的IP地址

11)目的地址字段占4B,标识接收方的IP地址

注意:①在IP数据报首部中有三个关于长度的标记,即首部长度、总长度、片偏移,它们的基本单位分别为4B、1B、8B(需记住)。题中常出现这几个长度之间的加减运算。另外,读者要熟悉IP数据报首部中给出。第5章学习的TCP、UDP的首部也是一样的。②在分析IP首部时,IP地址通常是用十六进制表示的各个字段的意义和功能,但不需要记忆IP数据报的首部,正常情况下若需要参考首部,则题目会直接的,要注意其与十进制之间的转换。

2.IP数据报分片

一个链路层数据帧能承载的最大数据量称为最大传送单元(MTU)。因为IP数据报被封装在链路层的帧中,因此链路层的MTU严格地限制了IP数据报的长度,而且在IP数据报的源与目的地路径上的各段链路可能使用不同的链路层协议,有不同的MTU。例如,以太网的MTU为1500B,而许多广域网的MTU不超过576B。当IP数据报的总长度大于链路MTU时,就需要将IP数据报中的数据分装在多个较小的IP数据报中,这些较小的数据报称为片。

1).分片时会影响首部中的哪些字段?  

片在目的地的网络层被重新组装。目的主机使用IP首部中的标识、标志和片偏移字段来完成对片的重组。创建一个IP数据报时,源主机为该数据报加上一个标识号。当一个路由器需要将一个数据报分片时,形成的每个数据报(片)都具有原始数据报的标识号。当目的主机收到来自同一发送主机的一批数据报时,它可通过检查数据报的标识号来确定哪些数据报属于同一个原始数据报的片。IP首部中的标志位占3位,但只有后2位有意义,分别是DF(Don't Fragment)位和MF(More Fragment)位。只有当DF=0时,该IP数据报才可被分片。MF则用来告知自的主机该IP数据报是否为原始数据报的最后一个片。当MF=1时,表示相应的原始数据报还有后续的片;当MF=0时,表示该数据报是相应原始数据报的最后一个片。目的主机在对片进行重组时,使用片偏移字段来确定片应放在原始IP数据报的哪个位置。

2)IP分片的原理及相关字段的分析

IP分片涉及一定的计算。例如,一个长4000B的IP数据报(首部20B,数据部分3980B)到达一个路由器,需要转发到一条MTU为1500B的链路上。这意味着原始数据报中的3980B数据必须分配到3个独立的片中(每片也是一个IP数据报),每片的数据部分依次为1480B、1480B和1020B。假定原始数据报的标识号为777,则分成的3片如图4.6所示。可见,因为偏移值的单位是8B,所以除最后一个片外,其他所有片中的数据部分都为8B的倍数。


4.2.2 IPv4地址与NAT

1.IPv4地址

IP地址是给连接到互联网上的每台主机(或路由器)的每个接口,分配的一个在全球范围内唯一的32位标识符。IP地址由互联网名字和数字分配机构ICANN进行分配。为方便书写和记忆,常把32位IP地址分成4段,每段8位,用等效的十进制数表示,并在每段数字之间加一个小数点,即一个IP地址用4段十进制数表示,称为点分十进制记法。互联网早期采用的是分类的IP地址,如图4.7所示。

无论哪类IP地址,都由网络号和主机号两部分组成。即IP地址::={<网络号>,<主机号>}。其中网络号标志主机(或路由器)所连接到的网络。一个网络号在整个互联网范围内必须是唯一的。主机号标志该主机(或路由器)。一个主机号在它前面的网络号所指明的网络范围内必须是唯一的。由此可见,一个IP地址在整个互联网范围内是唯一的。

在各类IP地址中,有些IP地址具有特殊用途,不用作主机的IP地址:

主机号全为0表示本网络本身,如202.98.174.0。

主机号全为1表示本网络的广播地址,也称直接广播地址,如202.98.174.255。

127.××.x保留作为本地软件环回测试(Loopback Test)本主机的进程之间的通信用,本主机不会将目的地址为环回地址的IP数据报发送到任何网络

32位全为0,即0.0.0.0,表示本网络上的本主机(见DHCP)

32位全为1,即255.255.255.255,表示受限广播地址,只在本网络上进行广播。常用的三种类别IP地址的使用范围见表4.2。

在表4.2中,A类地址可用的网络数为2⁷-2,减2的原因是:第一,网络号字段全为0的IP地址是保留地址,意思是“本网络”;第二,网络号为127的IP地址是环回自检地址。每个网络中的最大主机数减2的原因是:全0和全1的主机号一般不指派。

IP地址有以下重要特点:

1)每个IP地址都由网络号和主机号两部分组成,因此IP地址是一种分等级的地址结构。分等级的好处是:①IP地址管理机构在分配IP地址时只分配网络号,而主机号则由得到该网络的单位自行分配,方便了IP地址的管理;②路由器仅根据目的主机所连接的网络号来转发分组(而不考虑目标主机号),从而减小了路由表所占的存储空间。

2)IP地址是标志一台主机(或路由器)和一条链路的接口。当一台主机同时连接到两个网络时,该主机就必须同时具有两个相应的IP地址,其网络号必须是不同的。因此路由器至少应具有两个或两个以上的IP地址,每个端口都有一个不同网络号的IP地址。

3)用转发器或桥接器(网桥等)连接的若干LAN仍然是同一个网络(同一个广播域),因此该LAN中所有主机的IP地址的网络号必须相同,但主机号必须不同。

4)在IP地址中,所有分配到网络号的网络(无论是LAN还是WAN)都是平等的。

5)在同一个局域网上的主机或路由器接口的IP地址中的网络号必须是相同的。近年来,因为广泛使用无分类IP地址进行路由选择,这种传统分类的IP地址已成为历史。

2.网络地址转换(NAT)

网络地址转换(Network Address Translation,NAT)是指通过将专用网络地址(如Intranet)转换为公用地址(如Internet),从而对外隐藏内部管理的IP地址。它使得整个专用网只需要一个全球IP地址就可与互联网连通,因为专用网本地IP地址是可重用的,所以NAT大大节省了IP地址的消耗。同时,它隐藏了内部网络结构,从而降低了内部网络受到攻击的风险。

私有IP地址访问Internet的处理:为了网络安全,划出了三个私有IP地址块。私有IP地址只用于LAN,不用于WAN连接(因此私有IP地址不能直接用于互联网,必须通过网关利用NAT将私有IP地址转换为互联网中合法的全球IP地址后,才能出现在互联网上),并且允许私有IP地址被LAN重复使用。这有效地解决了IP地址不足的问题。这三个私有IP地址块如下:

1)10.0.0.0/8,即10.0.0.0~10.255.255.255,相当于1个A类网络。

2)172.16.0.0/12,即172.16.0.0~172.31.255.255,相当于16个连续的B类网络。

3)192.168.0.0/16,即192.168.0.0~192.168.255.255,相当于256个连续的C类网络。

在互联网中的所有路由器,对目的地址是私有地址的数据报一律不进行转发。这种采用私有IP地址的互联网络称为专用互联网或本地互联网。私有IP地址也称可重用地址。

使用NAT时需要在专用网连接到互联网的路由器上安装NAT软件,NAT路由器至少有一个有效的外部全球IP地址。当使用本地地址的主机和外界通信时,NAT路由器使用NAT转换表进行本地IP地址和全球IP地址的转换。NAT转换表中存放着{本地IP地址:端口}到{全球IP地址:端口}的映射。通过这种映射方式,可让多个私有IP地址映射到一个全球IP地址。

3.NAT的原理和应用

如图4.8所示,假设某家庭办理了10Mb/s的电信宽带,那么该家庭就获得一个全球IP地址(如138.76.29.7),而家庭网络内3台主机使用私有地址(如10.0.0.0网段),家庭网关路由器应开启NAT功能。NAT路由器的工作原理:①假设用户主机10.0.0.1(随机端口3345)向Web服务器128.119.40.186(端口80)发送请求。②NAT路由器收到IP分组后,为该IP分组生成一个新端口号5001,将IP分组的源地址改为138.76.29.7(NAT路由器的全球IP地址),将源端口号改为5001。NAT路由器在NAT转换表中增加一个表项。③Web服务器并不知道刚抵达的IP分组已被NAT路由器改装,更不知道用户的专用地址,它响应的IP分组的目的地址是NAT路由器的全球IP地址138.76.29.7,目的端口号是5001。④响应分组到达NAT路由器后,通过NAT转换表将IP分组的目的IP地址改为10.0.0.1,将目的端口号改为3345。

这样,只需要一个全球IP地址,就可让多台主机同时访问互联网。

注意:普通路由器在转发IP分组时,其源IP地址和目的IP地址都不会改变。而NAT路由器在转发IP分组时,一定要更换其IP地址(转换源IP地址或目的IP地址)。普通路由器仅工作在网络层,而NAT路由器转发数据报时需要查看和转换传输层的端口号。

在某些场合,内网中的一些服务器需要向公网用户提供服务,比如私网中部署的一些Web服务器、FTP服务器等。此时,可在NAT表中配置“公网IP地址+端口号”与“私网IP地址+端口号”的映射关系,实现公网用户通过该映射关系访问私网服务器的功能。


4.2.3划分子网与路由聚合

1.划分子网

两级IP地址的缺点:IP地址空间的利用率有时很低;给每个物理网络分配一个网络号会使路由表变得太大,进而使网络性能变坏;两级IP地址不够灵活。

划分子网的基本思路如下:

●划分子网纯属一个单位内部的事情。单位对外仍然表现为没有划分子网的一个网络。

●划分子网的方法是从网络的主机号借用若干位作为子网号,当然主机号也相应减少了相同的位数。三级IP地址的结构:IP地址::={<网络号>,<子网号>,<主机号>}。

●路由器转发分组根据的仍然是IP数据报的目的网络号,本单位的路由器收到IP数据报后,再按目的网络号和子网号找到目的子网。最后把IP数据报交付给目的主机。

例如,将一个C类网络208.115.21.0划分为4个子网,子网号占用2位,因此主机号就只有6位,各子网的网络地址分别为208.115.21.0、208.115.21.64、208.115.21.128、208.115.21.192。每个子网可分配的IP地址数为2⁶-2=62。

注意:①划分子网只是把IP地址的主机号部分进行再划分,而不改变IP地址原来的网络号。因此,从一个IP地址本身无法判断该主机所连接的网络是否进行了子网划分。②子网中的主机号全0或全1的地址不能被指派,其中主机号全0的地址为子网的网络地址,主机号全1的地址为子网的广播地址。③划分子网增加了灵活性,但减少了能够连接在网络上的主机总数。

2.子网掩码和默认网关

子网掩码可用来指明分类IP地址的主机号部分被借用了多少位作为子网号。子网掩码是一个与IP地址相对应的、长32位的二进制串,它由一串1和跟随的一串0组成。其中,1对应于IP地址中的网络号及子网号,而0对应于主机号。主机或路由器只需将IP地址和其对应的子网掩码逐位“与”(AND运算),就可得出相应子网的网络地址。

默认网关是子网与外部网络连接的设备,也就是连接本机或子网的路由器接口的IP地址。当主机发送数据时,根据所发送数据的目的IP地址,通过子网掩码来判定目的主机是否在子网中,若目的主机在子网中,则直接发送。若目的主机不在子网中,则将该数据发送到默认网关,由网C关(路由器)将其转发到其他网络,进一步寻找目的主机。

现在的互联网标准规定:所有网络都必须使用子网掩码。若一个网络未划分子网,则该网络的子网掩码就使用默认子网掩码。A、B、C类地址的默认子网掩码分别为255.0.0.0、255.255.0.0、255.255.255.0。例如,某主机的IP地址为192.168.5.56,子网掩码为255.255.255.0,进行逐位“与”运算后,得出该主机所在子网的网络号为192.168.5.0。

子网掩码是一个网络的重要属性,路由器相互之间交换路由信息时,必须将自己所在网络的子网掩码告诉对方。分组转发时,路由器将分组的目标地址和某网络的子网掩码按位相与,若结果与该网络地址一致,则路由匹配成功,路由器将分组转发至该网络。

在使用子网掩码的情况下:

①一台主机在设置IP地址信息的同时,必须设置子网掩码。

②同属于一个子网的所有主机及路由器的相应端口,必须设置相同的子网掩码。

③路由器的路由表中所包含的信息主要内容有目的网络地址、子网掩码、下一跳地址。

3.无分类编址CIDR

无分类域间路由选择(Classless Inter-Domain Routing,CIDR)是在变长子网掩码的基础上,提出的一种消除传统A、B、C类地址及划分子网的概念。例如,若一个单位需要2000个地址,则给它分配一个2048地址的块,而不是分配一个完全的B类地址,因此可更有效地分配IPv4的地址空间。CIDR使用网络前缀的概念代替网络的概念,与传统分类IP地址最大的区别就是,网络前缀的位数不是固定的,可以任意选取。CIDR的记法是

IP地址::={<网络前缀>,<主机号>}。CIDR还使用斜线记法(或称CIDR记法),即记为“IP地址/网络前缀所占的位数”。其中,网络前缀所占的位数对应网络号的部分,等效于子网掩码中连续1的部分。例如,对于128.14.32.5/20这个地址,它的掩码是20个连续的1和后续12个连续的0,通过逐位“与”的方法可得该地址的网络前缀(或直接截取前20位):

斜线记法不仅能表示其IP地址,还能表示这个地址块的网络前缀有多少位。采用CIDR后,斜线及后面的数字一定不能省略,否则仅从斜线左边的IP地址无法知道其网络地址。

CIDR将网络前缀都相同的连续IP地址组成一个CIDR地址块。只要知道CIDR地址块中的任何一个地址,就能知道这个地址块的最小地址和最大地址,以及地址块中的地址数。上例的地址128.14.32.5/20所在CIDR地址块中的最小地址和最大地址为

主机号全0或全1的地址一般不使用,通常只使用在这两个特殊地址之间的地址。

CIDR虽然不使用子网,但仍然使用“掩码”一词。“CIDR不使用子网”是指CIDR并没有在32位地址中指明若干位作为子网字段。但分配到一个CIDR地址块的单位,仍可在本单位内根据需要划分出一些子网。例如,某单位分配到地址块/20,就可继续划分为8个子网(从主机号中借用3位来划分子网),这时每个子网的网络前缀就变成了23位。

CIDR地址块中的地址数一定是2的整数次幂,实际可指派的地址数通常为2N-2,N表示主机号的位数,主机号全0代表网络号,主机号全1为广播地址。网络前缀越短,其地址块包含的地址数就越多。而在三级结构的IP地址中,划分子网使网络前缀变长。一个大的CIDR地址块中包含很多小地址块,因此在路由表中就可利用较大的一个CIDR地址块来代替许多较小的地址块。这种方法称为路由聚合,它使得路由表中的一个项目可以表示原来传统分类地址的多条路由项目,压缩了路由表所占的空间,从而提高了网络性能。

例如,在如图4.9所示的网络中,若不使用路由聚合,则R1的路由表中需要分别有到网络1和网络2的路由表项。不难发现,网络1和网络2的网络前缀在二进制表示的情况下,前16位都是相同的,第17位分别是0和1,并且从R1到网络1和网络2的路由的下一跳皆为R2。若使用路由聚合,则在R1看来,网络1和网络2可以构成一个更大的地址块206.1.0.0/16,到网络1和网络2的两条路由就可聚合成一条到206.1.0.0/16的路由。

最长前缀匹配(也称最佳匹配):使用CIDR时,路由表中的表项由“网络前缀”和“下一跳地址”组成。在查找路由表时可能会得到不止一个匹配结果。此时,应当从匹配结果中选择具有最长网络前缀的路由,因为网络前缀越长,其地址块就越小,因而路由就越具体。

CIDR查找路由表的方法:为了更有效地查找最长前缀匹配,通常将无分类编址的路由表存放在一种层次式数据结构(通常采用二叉线索)中,然后自上而下地按层次进行查找。

CIDR的优点在于网络前缀长度的灵活性。因为上层网络的前缀长度较短,所以相应的路由表的项目较少。而内部又可采用延长网络前缀的方法来灵活地划分子网。

4.子网划分的应用举例

通常有两类划分子网的方法:采用定长的子网掩码,采用变长的子网掩码。

(1)采用定长的子网掩码划分子网

当采用定长的子网掩码划分子网时,所划分的每个子网使用相同的子网掩码,并且每个子网所分配的IP地址数量也相同,因此容易造成地址资源的浪费。假设某单位拥有一个CIDR地址块为208.115.21.0/24,该单位有三个部门,各部门的主机台数分别为50、20、5,采用定长的子网掩码给各部门分配IP地址。部门1需要51个IP地址(含一个路由器接口地址);部门2需要21个IP地址;部门3需要6个IP地址。接下来,从给定地址块208.115.21.0/24的主机号部分借用2位作为子网号,这样可以划分为2²=4个子网,每个子网可分配的IP地址数为28-²-2=62,可满足各部门的需求。各子网的划分如下(为书写方便,只把IP地址的后8位用二进制展开):

208.115.21.00000000~208.115.21.00111111,地址块“208.115.21.0/26”,分配给部门1。

208.115.21.01000000~208.115.21.01111111,地址块“208.115.21.64/26”,分配给部门2。

208.115.21.10000000~208.115.21.10111111,地址块“208.115.21.128/26”,分配给部门3。

208.115.21.11000000~208.115.21.11111111,地址块“208.115.21.192/26”,留作以后用。

子网掩码:255.255.255.11000000,即255.255.255.192。

(2)采用变长的子网掩码划分子网

采用变长的子网掩码划分子网时,所划分的每个子网可以使用不同的子网掩码,并且每个子网所分配的IP地址数量可以不同,这样就尽可能地减少了对地址资源的浪费。假设各种条件与上一节的相同,下面采用变长的子网掩码给该单位分配IP地址。部门1的主机号需6位,剩余26(32-6=26)位作为网络前缀;部门2的主机号需5位,剩余27(32-5=27)位作为网络前缀;部门3的主机号需3位,剩余29(32-3=29)位作为网络前缀。接下来,从地址块208.115.21.0/24中划分出3个子网(1个“/26”地址块,1个“/27”地址块,1个“/29”地址块),并按需分配给三个部门。每个子网的最小地址只能选取主机号全0的地址。划分方案不唯一,建议从大的子网开始划分。以下是一种划分方案:

子网主机号全0或全1的地址通常不分配。对于一段连接两个路由器的链路,可以分配一个“/30”地址块,这样可分配地址为2个,恰好可分配给链路两端的路由器接口。

注意:最新标准规定:为了节省IP地址资源,直接连线的两个路由器的接口可以不分配IP地址。若分配了IP地址,则这一段连接就构成一种只包含一段点对点链路的特殊“网络”,这种网络仅需两个IP地址,

主机号可以是0或1,因此可以使用“/31”地址块。


4.2.4网络层转发分组的过程

分组转发都是基于目的主机所在网络的,这是因为互联网上的网络数远小于主机数,这样可以极大地压缩转发表的大小。当分组到达路由器后,路由器根据目的IP地址的网络前缀来查找转发表,确定下一跳应当到哪个路由器。因此,在转发表中,每条路由必须有下面两条信息:(目的网络地址,下一跳地址)

这样,IP数据报最终一定可以找到目的主机所在目的网络上的路由器(可能要通过多次间接交付),当到达最后一个路由器时,才试图向目的主机进行直接交付。

采用CIDR编址时,若一个分组在转发表中可以找到多个匹配的前缀,则应当使用最长前缀匹配。为了更快地查找转发表,可以按照前缀的长短,将前缀最长的排在第1行,按前缀长度的降序排列。这样,从第1行最长的开始查找,只要检索到匹配的,就不必再继续查找。

此外,在路由表中还可以增加两种特殊的路由:

1)特定主机路由:对特定目的主机的IP地址专门指明一个路由,以方便网络管理员控制和测试网络。若特定主机的IP地址是a.b.c.d,则转发表中对应项的目的网络是a.b.c.d/32。/32表示的子网掩码没有意义,但是,这个特殊的前缀可以用在转发表中。

2)默认路由:用特殊前缀0.0.0.0/0表示默认路由,全0掩码和任何目的地址进行按位与运算,结果必然为全0,即必然和前缀0.0.0.0/0相匹配。只要目的网络是其他网络(不在转发表中),就一律选择默认路由。默认路由通常用于路由器到互联网的路由,互联网包括无数的网络集合,不可能在路由表项中一一列出,因此只能采用默认路由的方式。特定主机路由条目的匹配优先级最高,默认路由条目的匹配优先级最低

综上所述,归纳出路由器执行的分组转发算法如下:

1)从收到的IP分组的首部提取目的主机的IP地址D(目的地址)。

2)若查找到特定主机路由(目的地址为D),则按照这条路由的下一跳转发分组;否则从转发表中的下一条(按前缀长度的顺序)开始检查,执行步骤3)。

3)将这一行的子网掩码与目的地址D逐位“与”(AND操作)。若运算结果与本行的前缀匹配,则查找结束,按照“下一跳”指出的进行处理(或者直接交付本网络上的目的主机,或通过指定接口发送到下一跳路由器)。否则,若转发表还有下一行,则对下一行进行检查,重新执行步骤3)。否则,执行步骤4)。

4)若转发表中有一个默认路由,则把分组传送给默认路由;否则,报告转发分组出错。

值得注意的是,转发表(或路由表)并没有给分组指明到某个网络的完整路径(先经过哪个路由器,后经过哪个路由器等)。转发表指出,到某个网络应当先到某个路由器(下一跳路由器),到达下一跳路由器后,再继续查找其转发表,知道再下一步应当到哪个路由器。这样一步一步地查找下去,直到到达目的网络。

注意:得到下一跳路由器的IP地址后,并不是直接将该地址填入待发送的数据报,而是将该IP地址转换成MAC地址(通过ARP),将此MAC地址填入MAC帧首部,然后根据这个MAC地址找到下一跳路由器。在不同网络中传送时,MAC帧的源地址和目的地址要发生变化。


4.2.5地址解析协议

1.IP地址与硬件地址

IP地址是网络层及网络层之上使用的地址,它是分层式的硬件地址(MAC地址)是数据链路层使用的地址,它是平面式的。IP地址放在IP数据报的首部,而MAC地址放在MAC帧的首部。把IP数据报封装为MAC帧后,数据链路层看不见IP数据报中的IP地址。

因为路由器的隔离,IP网络中无法通过广播MAC地址来完成跨网络的寻址,所以在网络层只使用IP地址来完成寻址。寻址时,每个路由器依据其路由表(依靠路由协议生成)选择到目标网络(主机号全为0的网络地址)需要转发到的下一跳(路由器的物理端口号或下一网络地址),而IP数据报通过多次路由转发到达目标网络后,改为在目标局域网中通过数据链路层的MAC地址以广播方式寻址。这样可以提高路由选择的效率。

下列几个性质是计算机网络的精髓,有必要特别强调:

1)在IP层抽象的互联网上只能看到IP数据报。

2)虽然在IP数据报首部中有源IP地址,但路由器只根据目的IP地址进行转发。

3)在局域网的链路层,只能看见MAC帧。IP数据报被封装在MAC帧中。通过路由器转发时,IP数据报在每个网络中都被路由器解封装和重新封装,其MAC帧首部中的源地址和目的地址会不断改变。这也决定了无法使用MAC地址跨网络通信。

4)尽管互连在一起的网络的硬件地址体系各不相同,但IP层抽象的互联网屏蔽了下层这些复杂的细节。只要我们在网络层上讨论问题,就能够使用统一的、抽象的IP地址研究主机与主机或路由器之间的通信。

注意:ARP用于解决同一局域网上的主机或路由器的IP地址和硬件地址的映射问题。若目的主机和源主机不在同一个局域网上,则要通过ARP找到本局域网上的某个路由器的硬件地址,然后把分组发送给这个路由器,让这个路由器把分组转发给下一个网络,剩下的工作就由下一个网络来做。尽管ARP请求分组是广播发送的,但ARP响应分组是普通的单播。

注意:路由器因为互连多个网络,所以它不仅有多个IP地址,还有多个硬件地址。

2.地址解析协议

无论网络层使用什么协议,在实际网络的链路上传送数据帧时,最终必须使用硬件地址。

ARP工作在网络层,其工作原理如下:主机A欲向本局域网上的某台主机B发送IP数据报以需要一种方法来完成IP地址到MAC地址的映射,这就是地址解析协议(Address Resolution时,先在其ARP高速缓存中查看有无主机B的IP地址。若有,则可以查出其对应的硬件地址,Protocol,ARP)。每台主机都设有一个ARP高速缓存,用来存放本局域网上各主机和路由器的再将此硬件地址写入MAC帧,然后通过局域网将该MAC帧发往此硬件地址。若没有,则通过IP地址到MAC地址的映射表,称ARP表。使用ARP来动态维护ARP表。ARP对高速缓存中的使用目的MAC地址为FF-FF-FF-FF-FF-FF的帧来封装并广播ARP请求分组(广播发送),使同每个映射表项都设置了生存时间(如20min),超时的项目会从高速缓存中删除。一个局域网里的所有主机都收到此ARP请求。主机B收到该ARP请求后,向主机A发出ARP响应分组(单播发送),分组中包含主机B的IP地址与MAC地址的映射关系,主机A收到ARP响应分组后就将此映射写入ARP缓存,然后按查询到的硬件地址发送MAC帧。ARP因为“看到了”IP地址,所以它工作在网络层,而NAT路由器因为“看到了”端口,所以它工作在传输层。对于某个协议王作在哪个层次,读者应该能通过协议的工作原理进行推测。使用ARP的4种典型情况总结如下(见图4.10)。

1)发送方是主机(如H1),要把IP分组发送到本网络上的另一台主机(如H2)。这时H1在网1用ARP找到目的主机H2的硬件地址。

2)发送方是主机(如H1),要把IP分组发送到其他网络上的一台主机(如H4)。这时H1用ARP找到与网1连接的路由器R1的硬件地址(默认网关),剩下的工作由R1来完成。

注意:开始在H1和R1之间传送时,MAC帧首部中的源地址是H1的MAC地址,目的地址是L1的硬件地址,路由器R1收到此MAC帧后,在数据链路层,要丢弃原MAC的首部和尾部。这时首部中的源地址和目的地址分别为L2和L3的MAC地址。路由器R2收到此帧后,再次更换MAC帧的首部和尾部,首部中的源地址和目的地址分别变为L4和H4的MAC地址。MAC帧首部的这种变化,在上面的IP层中是看不见的。

3)发送方是路由器(如R1),要把IP分组转发到与R1连接的网络(网2)上的一台主机(如H3)。这时R1在网2用ARP找到目的主机H₃的硬件地址。

4)发送方是路由器(如R1),要把IP分组转发到网3上的一台主机(如H4)。这时R1在网2用ARP找到与网2连接的路由器R2的硬件地址,剩下的工作由R2来完成。从IP地址到硬件地址的解析是自动进行的,主机的用户并不知道这种地址解析过程。只要主机或路由器和本网络上的另一个已知IP地址的主机或路由器进行通信,ARP就自动地将这个IP地址解析为数据链路层所需的硬件地址,然后插入MAC帧。


4.2.6动态主机配置协议DHCP

动态主机配置协议(Dynamic Host Configuration Protocol,DHCP)常用于给主机动态地分配IP地址,它提供了即插即用的联网机制,这种机制允许一台计算机加入新的网络和自动获取IP地址而不用手工参与。DHCP是应用层协议,它是基于UDP的。

注意:连接到互联网的计算机需要配置的项目包括:①IP地址,②子网掩码,③默认路由器的IP地址(默认网关),④域名服务器的IP地址。

DHCP使用客户/服务器模型。其工作原理:需要IP地址的主机在启动时就向DHCP服务器广播发送发现报文,这时该主机就成为DHCP客户。本地网络上的所有主机都能收到这个广播报文,但只有DHCP服务器才能回答该广播报文。DHCP服务器先在其数据库中查找该计算机的配置信息。若找到,则返回找到的信息;若找不到,则从服务器的IP地址池中取一个地址分配给该主机。DHCP服务器的回答报文称为提供报文,包含提供的IP地址等配置信息。

DHCP服务器和DHCP客户的交换过程如下:

1)DHCP客户广播“DHCP发现”消息,试图找到网络中的DHCP服务器,以便从DHCP服务器获得一个IP地址。源地址为0.0.0.0,目的地址为255.255.255.255。

2)DHCP服务器收到“DHCP发现”消息后,广播“DHCP提供”消息,其中包括提供给DHCP客户机的IP地址。源地址为DHCP服务器地址,目的地址为255.255.255.255。

3)DHCP客户收到“DHCP提供”消息,若接受该IP地址,则广播“DHCP请求”消息向DHCP服务器请求提供IP地址。源地址为0.0.0.0,目的地址为255.255.255.255。

4)DHCP服务器广播“DHCP确认”消息,将IP地址分配给DHCP客户。源地址为DHCP服务器地址,目的地址为255.255.255.255。

DHCP服务器分配给DHCP客户的IP地址是临时的,因此DHCP客户只能在一段有限的时间内使用这个分配到的IP地址。DHCP称这段时间为租用期。租用期的数值应由DHCP服务器自己决定,DHCP客户也可在自己发送的报文中提出对租用期的要求。DHCP客户可随时提前终止服务器提供的租用期,这时只需向DHCP服务器发送释放报文。

DHCP客户和服务器端需要通过广播方式来进行交互,原因是在DHCP执行初期,客户机不知道服务器端的IP地址,而在执行中间,客户机并未被分配IP地址,从而导致两者之间的通信必须采用广播的方式。采用UDP而不采用TCP的原因也很明显:TCP需要建立连接,若连对方的IP地址都不知道,则更不可能通过双方的套接字建立连接。


4.2.7网际控制报文协议ICMP

为了有效地转发IP数据报和提高交付成功的机会,在网络层使用了网际控制报文协议(Internet Control Message Protocol,ICMP),让主机或路由器报告差错和异常情况。ICMP报文被封装在IP数据报中发送,但ICMP不是高层协议,而是网络层的协议。

ICMP报文有两种,即ICMP差错报告报文和ICMP询问报文。

ICMP差错报告报文用于目标主机或到目标主机路径上的路由器,向源主机报告差错和异常情况。共有以下5种常用的类型:

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

2)源点抑制②。当路由器或主机因为拥塞而丢弃数据报时,就向源点发送源点抑制报文,使源点知道应当把数据报的发送速率放慢。

3)时间超过。当路由器收到一个数据报时,会将其首部中生存时间(TTL)的值减1。若结果不为0,则路由器将该数据报转发出去。若结果为0,则路由器不但要丢弃该数据报,而且要向源点发送时间超过报文。当终点在预先规定的时间内不能收到一个数据报的全部数据报片时,就把已收到的数据报片都丢弃,并向源点发送时间超过报文。

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

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

对于以下几种情况,不应发送ICMP差错报告报文:

1)对ICMP差错报告报文,不再发送ICMP差错报告报文。

2)对第一个分片的数据报片的所有后续数据报片,都不发送ICMP差错报告报文。

3)对具有多播地址的数据报,都不发送ICMP差错报告报文。

4)对具有特殊地址(如127.0.0.0或0.0.0.0)的数据报,不发送ICMP差错报告报文。

常用的ICMP询问报文有两种类型:

1)回送请求和回答报文。用来测试目的主机是否可达以及了解其有关状态。

2)时间戳请求和回答报文。利用报文中记录的时间戳,发送方可计算出当前的往返时延。

ICMP的两个常见应用是分组网间探测PING(用来测试两台主机之间的连通性)和Traceroute(UNIX中的名字,在Windows中是Tracert,可以用来跟踪分组经过的路由)。其中PING使用了ICMP回送请求和回答报文,Traceroute(Tracert)使用了ICMP时间超过报文。注意PING工作在应用层,它直接使用网络层的ICMP;Traceroute/Tracert工作在网络层。




4.3 IPv6

4.3.1 IPv6的特点

为了解决“IP地址耗尽”问题,有以下三种措施:

1)采用无类别编址CIDR,使IP地址的分配更加合理。

2)采用网络地址转换(NAT)方法以节省全球IP地址。

3)采用具有更大地址空间的新版本的IPv6。

前两种方法只是延长了IPv4使用寿命,只有第三种方法能从根本上解决IP地址耗尽问题。

IPv6的主要特点如下:

1)更大的地址空间。这是最重要的。IPv6将地址从IPv4的32位增大到128位,IPv6的地址空间是IPv4的2¹28/2³²=2⁹6倍,从长远来看,这些地址是绝对够用的。

2)扩展的地址层次结构。IPv6因为地址空间很大,所以可以划分为更多的层次。

3)灵活的首部格式。IPv6定义了许多可选的扩展首部,不仅可提供比IPv4更多的功能,还能提高路由器的处理效率,这是因为路由器对扩展首部不进行处理。

4)改进的选项。IPv6首部长度是固定的,其选项放在有效载荷中,选项是灵活可变的。而IPv4所规定的选项是固定不变的,其选项放在首部的可变部分。

5)允许协议继续扩充。IPv6允许不断扩充功能,而IPv4的功能是固定不变的。

6)支持即插即用(自动配置)。因此IPv6不需要使用DHCP。

7)支持资源的预分配。IPv6支持实时音/视频等要求保证一定带宽和时延的应用。

8)IPv6只有源主机才能分片,是端到端的,不允许类似IPv4在中间路由器进行分片

9)IPv6首部长度是固定的40B,而IPv4首部长度是可变的(必须是4B的整数倍)。

10)增大了安全性。身份鉴别和保密功能是IPv6的扩展首部。

虽然IPv6与IPv4不兼容,但总体而言它与所有其他的互联网协议兼容,包括TCP、UDP、ICMP、IGMP和DNS等,只是在少数地方做了必要的修改(大部分是为了处理长地址)。


4.3.2 IPv6数据报的基本首部

IPv6数据报由两部分组成:基本首部和有效载荷(也称净负荷)。有效载荷由零个或多个扩展首部(扩展首部不属于IPv6数据报的首部)及其后面的数据部分构成,如图4.11所示。

与IPv4相比,IPv6对首部中的某些字段进行了如下更改:

●取消了首部长度字段,因为它的首部长度是固定的(40B)。

●取消了服务类型字段,因为优先级和流标号字段实现了服务类型字段的功能。

●取消了总长度字段,改用有效载荷长度字段。

●取消了标识、标志和片偏移字段,因为这些功能已包含在分片扩展首部中。

●把TTL字段改称为跳数限制字段,但作用是一样的(名称与作用更加一致)。

●取消了协议字段,改用下一个首部字段。

●取消了检验和字段,毕竟在传输层有差错检验功能,这样就加快了路由器的处理速度。

●取消了选项字段,而用扩展首部来实现选项功能。

下面简单介绍IPv6基本首部中各字段的含义:

1)版本占4位,指明协议的版本,对于IPv6该字段的值是6。

2)通信量类占8位,用来区分不同的IPv6数据报的类别或优先级

3)流标号占20位,IPv6提出流的抽象概念。流是指互联网上从特定源点到特定终点(单播或多播)的一系列数据报(如实时音/视频传输),而在这个“流”所经过的路径上的路由器都保证指明的服务质量。所有属于同一个流的数据报都具有相同的流标号。

4)有效载荷长度占16位,指明IPv6数据报除基本首部以外的字节数(所有扩展首部都算在有效载荷之内)。这个字段的最大值是65535(单位为字节)。

5)下一个首部占8位,该字段相当于IPv4首部中的协议字段或可选字段。当IPv6没有扩展首部时,其作用与IPv4的协议字段一样,它指明IPv6数据报所运载的数据是何种协议数据单元;当IPv6带有扩展首部时,它就标识后面第一个扩展首部的类型。

6)跳数限制占8位,类似于IPv4首部的TTL字段。源点在每个数据报发出时即设定某个限制值(最大为255)。路由器每次转发时将其值减1,减为0时就将该数据报丢弃。

7)源地址和目的地址占128位,是数据报的发送端/接收端的IP地址


4.3.3 IPv6地址

IPv6数据报的目的地址有以下三种基本类型:

1)单播。就是传统的点对点通信。

2)多播。一点对多点的通信,数据报发送到一组计算机中的每一台。

3)任播。这是IPv6增加的一种类型。任播的终点是一组计算机,但数据报只交付其中的一台计算机,通常是距离最近的一台计算机。

对表4.3给出的五类地址简单解释如下:

1)未指明地址:该地址不能用作目的地址,只能用于还未配置IPv6地址的主机作为源地址。

2)环回地址:该地址的作用与IPv4的环回地址相同,但IPv6的环回地址仅此一个。

3)多播地址:该地址的作用和IPv4的一样。这类地址占IPv6地址空间的1/256。

4)本地链路单播地址:该地址的作用类似于IPv4的私有IP地址。

5)全球单播地址:用得最多的地址。IPv6全球单播地址采用三级结构(见图4.13):第一级为全球路由选择前缀,占48位,用于互联网中的路由选择,相当于IPv4分类地址中的网络号;第二级为子网标识符,占16位,用于各机构构建自己的子网;第三级为接口标识符,用于指明主机或路由器的单个网络接口,相当于IPv4分类地址中的主机号。

与IPv4不同,IPv6地址的接口标识符有64位之多,足以对各种接口的硬件地址直接进行编码。这样,IPv6就可直接从128位地址的最后64位中直接提取出相应的硬件地址,而不需要使用地址解析协议(ARP)进行地址解析。


4.3.4从IPv4向IPv6过渡

从IPv4向IPv6过渡只能采用逐步演进的办法,同时还必须使新安装的IPv6系统能够向后兼容。IPv6系统必须能够接收和转发IPv4分组,并且能够为IPv4分组选择路由。

从IPv4向IPv6过渡可以采用下列两种策略:

1)双协议栈是指在一台设备上同时装有IPv4和IPv6两个协议栈,分别配置了一个IPv4地址和一个IPv6地址,因此这台设备既能和IPv4网络通信,又能和IPv6网络通信。双协议栈主机在与IPv6主机通信时采用IPv6地址,而在与IPv4主机通信时采用IPv4地址,双协议栈主机使用应用层的域名系统(DNS)获知目的主机采用的是哪种地址。若DNS返回的是IPv4地址,则双协议的源主机就使用IPv4地址。若DNS返回的是IPv6地址,则双协议栈的源主机就使用IPv6地址。

2)隧道技术是指在IPv6数据报要进入IPv4网络时,把整个IPv6数据报封装成IPv4数据报的数据部分,使原来的IPv6数据报就好像在IPv4网络的隧道中传输。当IPv4数据报离开IPv4网络时,再将其数据部分交给主机的IPv6协议。




4.4路由算法与路由协议

4.4.1路由算法

路由选择协议的核心是路由算法,即需要何种算法来获得路由表中的各个项目。路由算法的目的很简单:给定一组路由器及连接路由器的链路,路由算法要找到一条从源路由器到目的路由器的“最佳”路径。通常,“最佳”路径是指具有最低费用的路径

1.静态路由与动态路由

路由器转发分组是通过路由表转发的,而路由表是通过各种算法得到的。从能否随网络的通信量或拓扑自适应地进行调整变化来划分,路由算法可以分为如下两大类。

1)静态路由算法。指由网络管理员手工配置每一条路由。

2)动态路由算法。根据网络流量负载和拓扑结构的变化来动态调整自身的路由表。

静态路由算法的特点是简单和开销较小,但不能及时适应网络状态的变化,适用于简单的小型网络。动态路由算法能较好地适应网络状态的变化,但实现复杂,开销也大,适用于较复杂的大型网络。常用的动态路由算法可分为两类:距离-向量路由算法和链路状态路由算法。

2.距离-向量路由算法

距离-向量算法的基础是Bellman-Ford算法,它用于计算单源最短路径。每个节点以自身为源点执行Bellman-Ford算法,所以全局上可以解决任意节点对之间的最短路径问题。下面讨论Bellman-Ford算法的基本思想。假设d(v)表示从节点x到节点y的带权最短路径的费用,则有d(V)=min{c(x,V)+d,()},  v是x的所有邻居式中,c(x,v)是从x到其邻居v的费用。已知x的所有邻居到y的最短路径费用后,从x到y的最短路径费用是对所有邻居v的dx,v)+d,(v)的最小值,如图4.14所示。所有最短路径算法都依赖于一个性质:“两点之间的最短路径也包含了路径上其他顶点间的最短路径。”

对于距离-向量算法,每个节点x维护下列路由信息:

1)从x到每个直接相连邻居v的链路费用c(x,v)。

2)节点x的距离向量,即x到网络中其他节点的费用。这是一组距离,因此称为距离向量。

3)它收到的每个邻居的距离向量,即x的每个邻居到网络中其他节点的费用。在距离-向量算法中,每个节点定期地向它的每个邻居发送它的距离向量副本。当节点x从它的任何一个邻居v接收到一个新距离向量时,它首先保存v的距离向量,然后使用Bellman-Ford公式d₂(V)=min{c(x,v)+d,(v)}更新自己的距离向量。若节点x的距离向量因这个更新步骤而改变,则节点x接下来继续向它的每个邻居发送其更新后的距离向量。

下面以图4.14顶部三个节点的简单网络为例,说明距离-向量算法的实现。图4.15(a)中的各列依次是三个节点的初始化距离向量,此时各节点之间尚未交换过任何路由信息,因此各节点的初始化距离向量就等于它到每个直接相连邻居v的费用。

初始化后,每个节点第一次向它的所有邻居发送其距离向量,在接收到该更新报文后,每个节点重新计算自己的距离向量。例如,节点x计算的过程为:d(x)=0;d₂(V)=min{d(x,y)+d,(v),c(x,z)+d(v)}=min{2+0,7+1}=2;dx(z)=min{c(x,y)+d,(z),c(x,z)+d₂(2)}=min{2+1,7+0}=3。注意到节点x到节点z的最低费用从7变成了3,节点z到节点x的最低费用也从7变成了3,如图4.15(b)所示。节点的距离向量变化后,再次向它们的邻居发送它们更新的距离向量,而没有变化的节点y不用发送更新报文。接收到邻居的更新报文后,节点又重新计算它们的距离向量,此次没有节点更新,因此也无更新报文发送,算法进入静止状态,如图4.15(c)所示。显然,更新报文的大小与网络中的节点数量成正比,大型网络将导致很大的更新报文。最常见的距离-向量路由算法是RIP算法,它采用跳数作为距离的度量。

3.链路状态路由算法

链路状态是指本路由器都和哪些路由器相邻,以及相应链路的代价。链路状态算法要求每个节点都具有全网拓扑结构图(这个拓扑结构图在全网范围内是一致的),它们执行下列两项任务

第一,主动测试所有相邻节点的状态;第二,定期地将链路状态传播给所有其他节点。因此每个节点都知道全网共有多少个节点、哪些节点是相连的、其代价是多少等,于是每个节点都可使用Dijkstra最短路径算法计算出到达其他节点的最短路径。在链路状态算法中,节点每收到一个链路状态报文,便用其更新自己的网络状态“视野图”,一旦链路状态发生变化,就使用Dijkstra算法重新计算到达所有其他节点的最短路径。因为一个节点的链路状态只涉及相邻节点的连通状态,而与整个互联网的规模并无直接关系,所以链路状态算法适用于大型的或路由信息变化聚敛的互联网环境。

链路状态算法的主要优点是,每个节点都使用同样的链路状态数据独立地计算路径,而不依赖中间节点的计算;链路状态报文不加改变地传播,因此采用该算法易于查找故障。当一个节点从所有其他节点接收到报文时,它就在本地立即计算出正确的路径,保证一步汇聚。最后,因为链路状态报文仅运载来自单个节点关于直接链路的信息,其大小与网络中的节点数量无关,所以链路状态算法比距离-向量算法有更好的规模可伸展性。

两种路由算法的比较:在距离-向量算法中,每个节点仅与它的直接邻居交谈,向它的邻居发送自己的路由表,其大小取决于网络中的节点数量,代价较大。在链路状态算法中,每个节点通过广播的方式与所有其他节点交谈,但它只告诉它们与它直接相连的链路的费用。典型的链路状态路由算法是OSPF算法。


4.4.2分层次的路由选择协议

互联网采用的是自适应的、分布式路由选择协议。因为互联网的规模非常大,许多联网单位不愿让外界了解自己单位网络的布局细节,所以互联网采用分层次的路由选择协议。为此,可以把整个互联网划分为许多较小的自治系统(Autonomous System,AS)。自治系统是在单一技术管理下的一组路由器,这些路由器使用一种AS内部的路由选择协议和共同的度量。一个AS对其他AS表现出的是一个单一的和一致的路由选择策略。这样,互联网就把路由选择协议划分为两大类。

1.内部网关协议(Interior Gateway Protocol,IGP)

内部网关协议即在一个自治系统内部使用的路由选择协议,它与在互联网中的其他自治系统选用什么路由选择协议无关。目前这类路由选择协议使用得最多,如RIP和OSPF。

2.外部网关协议(External Gateway Protocol,EGP)

若源主机和目的主机处在不同的自治系统中(两个自治系统可能使用不同的IGP),则当数据报传到一个自治系统的边界时,就需要使用一种协议将路由选择信息传递到另一个自治系统中。这样的协议就是外部网关协议。目前使用最多的外部网关协议是BGP-4。

自治系统之间的路由选择也称域间路由选择,自治系统内部的路由选择也称域内路由选择。图4.16是两个自治系统互连的示意图。每个自治系统自己决定在本自治系统内部运行哪个内部网关协议(可以是RIP或OSPF)。但每个自治系统都有一个或多个路由器(图中的路由器R1和R2)除运行本系统的内部网关协议外,还要运行外部网关协议(如BGP-4)。


4.4.3路由信息协议

路由信息协议(Routing Information Protocol,RIP)是内部网关协议IGP中最先得到广泛应用的协议。RIP是一种分布式的基于距离向量的路由选择协议。

1.RIP的规定

1)网络中的每个路由器都要维护从它自身到其他每个目的网络的距离记录,即距离向量。

2)RIP使用跳数(Hop Count)(或称距离)来衡量到达目的网络的距离。规定从一路由器到直接连接的网络的距离定义为1;而每经过一个路由器,距离就加1。

3)RIP认为好的路由就是它通过的路由器数量少,即距离短或跳数少。

4)RIP允许一条路径最多只能包含15个路由器。因此距离等于16时表示网络不可达。可见RIP只适用于小型互联网。距离向量路由可能会出现环路的情况,规定路径上的最高跳数的目的是防止分组不断在环路上循环,减少网络拥塞的可能性。

5)每个路由表项都有三个关键字段:_<目的网络N,距离d,下一跳路由器地址X>。

2.RIP的特点

RIP的每个路由器都要不断与其他路由器交换信息,下面三个特点非常重要。

1)和谁交换信息:仅和直接相邻的路由器交换信息。

2)交换什么信息:交换的信息是本路由器所知道的全部信息,即自己的路由表。

3)何时交换信息:按固定的时间间隔(通常为30秒)交换路由信息。当网络拓扑发生变化时,路由器也及时向相邻路由器通告拓扑变化后的路由信息。

路由器刚开始工作时,只知道自己到直接相连的几个网络的距离为1。每个路由器仅和相邻路由器周期性地交换并更新路由信息。经过若干次交换和更新后,所有的路由器最终都会知道到达本自治系统内任何网络的最短距离和下一跳路由器的地址,称为收敛。

RIP是应用层协议,它使用UDP传送数据(端口520)。RIP选择的路径不一定是时间最短的,但一定是具有最少的路由跳数,因为它是根据最少跳数进行路径选择的。

3.RIP的距离向量算法

对每个相邻路由器发送来的RIP报文,执行如下步骤:

1)对地址为X的相邻路由器发来的RIP报文,先修改该报文中的所有项目:把“下一跳”字段中的地址都改为X,并把所有“距离”字段的值加1。

2)对修改后的RIP报文中的每个项目,执行如下步骤:IF(若原来的路由表中没有目的网络N)则把该项目添加到路由表中(表明这是新的目的网络)。ELSEIF(若原来的路由表中有目的网络N,且下一跳路由器的地址是X)用收到的项目替换原路由表中的项目(因为要以更新的消息为准)。ELSEIF(若原来的路由表中有目的网络N,且下一跳路由器的地址不是X)若收到的项目中的距离d小于路由表中的距离,则进行更新。ELSE什么也不做。

3)若180秒(RIP默认超时时间)还没有收到相邻路由器的更新路由表,则把此相邻路由器记为不可达的路由器,即把距离设置为16(表示不可达)。

4)返回。

4.RIP的优缺点

RIP的优点:

1)实现简单、开销小、收敛过程较快。

2)若一个路由器发现了更短的路由,则这种更新信息就传播得很快,在较短时间内便可被传至所有路由器,俗称“好消息传播得快”。

RIP的缺点:

1)RIP限制了网络的规模,它能使用的最大距离为15(16表示不可达)。

2)路由器之间交换的是路由器中的完整路由表,因此网络规模越大,开销也越大。

3)当网络出现故障时,路由器之间需反复多次交换信息才能完成收敛,要经过较长时间才能将故障消息传送到所有路由器(慢收敛现象),俗称坏消息传播得慢。

下面举例说明RIP“好消息传播得快,坏消息传播得慢”的特点。假设图4.17中的路由器都采用RIP交换路由信息,初始时R1到网络N的距离为4,且R1和R2均已收敛。

在图4.17(a)中,某时刻R1的某个端口检测到“到N更短的链路”(距离由4变为1),R1计算其到N的最新距离=min{1,1+R2到N的距离}=min{1,1+5}=1,并通知邻居;R2收到后,更新其到N的距离为2,并通知邻居;R1收到后,R1到N的最短距离未变,不再发送通知,算法进入静止状态。可见,R2到N的距离减少的好消息通过RIP得到了迅速传播。

在图4.17(b)中,某时刻R1的某个端口检测到“N不可达”(距离变为16),R1计算其到N的最新距离=min{16,1+R2到N的距离}=min{16,1+5}=6。从网络全局的视角可以看出,经过R2的这个新距离显然是错误的。R1计算出到N的最新距离后,通知邻居;R2收到后,更新其到N的距离为7,通知邻居;R1收到后,计算其到N的距离=min{16,1+R2到N的距离}=min{16,1+7}=8,继续通知邻居……如此循环,直到R2最终算出它经由R1到达N的距离为16为止。可见,RIP关于链路故障或距离增加的坏消息传播得很慢。


4.4.4开放最短路径优先协议

1.开放最短路径优先(OSPF)的基本特点

OSPF协议是使用分布式链路状态路由算法的典型代表,也是内部网关协议(IGP)的一种。与RIP相比,OSPF有下面4个主要特点:

1)OSPF使用洪泛法向本自治系统中所有路由器发送信息,路由器通过所有输出端口向所有相邻的路由器发送信息,而每个相邻的路由器又将此信息发往所有的相邻路由器(但不再发送给刚刚发来信息的那个路由器)。这样,最终整个区域中所有的路由器都得到了这个信息的一个副本。而RIP仅仅向自己相邻的几个路由器发送信息。

2)发送的信息是与本路由器相邻的所有路由器的链路状态,但是,这只是路由器所知道的部分信息。而在RIP中,发送的信息是本路由器所知道的全部信息,即整个路由表。

3)只有当链路状态发生变化时,路由器才用洪泛法向所有路由器发送此信息,并且更新过程收敛得快,不会出现RIP“坏消息传得慢”的问题。而在RIP中,不管网络拓扑是否发生变化,路由器之间都要定期交换路由表的信息。

4)OSPF是网络层协议,它不用UDP或TCP,而直接用IP数据报传送(其IP数据报首部的协议字段为89)。而RIP是应用层协议,它在传输层使用UDP。

注意:用UDP传送是指将该信息作为UDP报文的数据部分,而直接使用IP数据报传送是指将该信息直接作为IP数据报的数据部分。RIP报文是作为UDP数据报的数据部分。

除以上区别外,OSPF还有以下特点:

1)OSPF允许对每条路由设置成不同的代价,对于不同类型的业务可计算出不同的路由。

2)若到同一个目的网络有多条相同代价的路径,则可将通信量分配给这几条路径。

3)OSPF分组具有鉴别功能,从而保证仅在可信赖的路由器之间交换链路状态信息。

4)OSPF支持可变长度的子网划分和无分类编址CIDR。

5)每个链路状态都带上一个32位的序号,序号越大,状态就越新。

2.OSPF的基本工作原理

因为各路由器之间频繁地交换链路状态信息,所以所有路由器最终都能建立一个链路状态数据库,即全网的拓扑结构图。然后,每个路由器利用链路状态数据库中的数据,使用Dijkstra算法计算自己到达各目的网络的最优路径,构造出自己的路由表。此后,当链路状态发生变化时,每个路由器重新计算到达各目的网络的最优路径,构造出新的路由表。

注意:虽然使用Dijkstra算法能计算出完整的最优路径,但路由表中不会存储完整路径,而只存储“下一跳”(只有到了下一跳路由器,才能知道再下一跳应当怎样走)。

为了使OSPF能用于规模很大的网络,将一个自治系统再划分为若干更小的范围,称为区域。划分区域的好处是,把利用洪泛法交换链路状态信息的范围局限在各个区域,而不是整个AS,从而减少了整个网络上的通信量。在一个区域内,由一个或多个区域边界路由器负责为流向该区域以外的分组提供路由选择。在AS内只有一个区域配置成主干区域,它包含AS内的所有区域边界路由器,可能还包含一些非边界路由器,主干区域的作用是连通其他区域。当分组在AS内的不同区域之间传送时,要先找到本区域内的一个区域边界路由器(如R3、R4、R7),再通过主干区域路由到位于目的区域的区域边界路由器,最后路由到目的地。在图4.18中,R3、R4和R7都是区域边界路由器,每个区域至少有一个区域边界路由器。主干区域还要有一个路由器专门负责和本AS外的其他AS交换路由器信息,称为自治系统边界路由器(如R6)。

3.OSPF的分组类型

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

1)问候分组,用来发现和维持邻站的可达性。

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

3)链路状态请求分组,向对方请求发送某些链路状态项目的详细信息。

4)链路状态更新分组,用洪泛法对全网更新链路状态,它是OSPF最核心的部分。

5)链路状态确认分组,对链路更新分组的确认。

通常网络中传送的大多数OSPF分组都是问候分组。OSPF规定,两个相邻路由器每隔10秒要交换一次问候分组,以便知道哪些邻站可达。若有40秒没有收到某个相邻路由器发来的问候分组,则认为该相邻路由器不可达,应立即修改链路状态数据库,并重新计算路由表。

路由器刚开始工作时,它只能通过问候分组得知它与哪些路由器相邻,以及相应链路的代价。为了得到链路状态数据库,若让所有路由器都将自己的本地链路状态信息进行全网广播,则未免开销太大。因此,OSPF让每个路由器使用数据库描述分组和相邻路由器交换本数据库中已有的链路状态摘要信息。然后,路由器使用链路状态请求分组,向对方请求发送自己所缺少的某些链路状

态项目的详细信息。通过一系列的这种分组交换,就建立了全网同步的链路数据库。图4.19给出了OSPF的基本操作,说明了两个路由器需要交换的各种类型的分组。

在网络运行的过程中,只要一个路由器的链路状态发生变化,该路由器就要使用链路状态更新分组,用可靠的洪泛法向全网更新链路状态,其他路由器在收到更新分组后要发送确认。为了确保链路状态数据库与全网的状态保持一致,OSPF还规定每隔一段时间(如30分钟)要刷新一次数据库中的链路状态。因为一个路由器的链路状态只涉及与相邻路由器的连通状态,与整个网络的规模并无直接关系,所以当互联网规模很大时,OSPF要比RIP好得多。


4.4.5边界网关协议

1.BGP的基本特点

边界网关协议(Border Gateway Protocol,BGP)是不同自治系统的路由器之间交换路由信息的协议,是一种外部网关协议BGP常用于互联网的网关之间。而RIP和OSPF都只能在一个AS内工作,若没有BGP,则全世界数以万计的AS都是一个个没有联系的孤岛。

内部网关协议主要是设法使分组在一个AS中尽可能有效地从源站传送到目的站。在一个AS内部也不需要考虑其他方面的策略。然而BGP使用的环境却不同,主要原因如下:

1)互联网的规模太大,使得AS之间路由选择非常困难,每个主干网路由器表中的项目数都非常庞大。对于AS之间的路由选择,要寻找最佳路由是很不现实的。

2)AS之间的路由选择必须考虑政治、安全或经济等有关因素。

BGP只能是力求寻找一条能够到达目的网络且比较好的路由(不能兜圈子),而并非要寻找一条最佳路由。BGP采用了路径向量路由选择协议,它与距离向量协议(如RIP)和链路状态协议(如OSPF)都有很大的区别。BGP是应用层协议,它是基于TCP的。

两个相邻的AS通过各自的边界路由器直接相连,两个边界路由器通过端口号为179的半永久TCP连接(双方交换信息后仍保持连接状态)来交换BGP路由信息,AS内部的路由器之间也有很多半永久TCP连接来传送BGP路由信息。每对TCP连接端点的两个路由器称为BGP对等方,用来发送BGP报文的TCP连接称为BGP会话。跨越两个AS的BGP会话称为外部BGP(eBGP,external)会话,同一个AS中的两个路由器之间的BGP会话称为内部BGP(iBGP,internal)会话。可见,BGP不仅运行在AS之间,还运行在AS的内部。

2.BGP路由

BGP路由的一般格式如下:BGP路由=<CIDR前缀,BGP属性>

当一个路由器通过BGP会话向对等方通告一条BGP路由时,最重要的两个BGP属性是AS-PATH(自治系统路径)和NEXT-HOP(下一跳)。AS-PATH是通告的BGP路由所经过的自治系统。在BGP中,通常用一个全局唯一的自治系统号(ASN)来标识自治系统。BGP路由每经过一个AS,就将其ASN加入AS-PATH。可见,BGP路由必须指出通过哪些AS,但不指出路由要通过哪些路由器。NEXT-HOP是通告的BGP路由起点。

下面通过一个简单的例子来加以说明。图4.20中AS2中的R4收到一条BGP路由“X,AS1,R1”,表示“从R1出发能到达AS1中的网络X,即R1→X”,R4为了构造自己的转发表,需要对这条BGP路由的起点进行转换。由于路由的起点R1并不在AS2中,AS2中的路由器都不能识别R1,因此R4先把路由的起点添加上R1的对等方R2,这样就变为“R2→R1→X”。R2在AS2中,因此AS2中的所有路由器都能把分组转发到R2,再经过R1,最终到达X。

然后,R4利用内部网关协议,找到从R4到R2的最佳路由中的下一跳。在本例中,查出下一跳是R3,于是R4在转发表中增加到达网络X的下一跳是R3的表项<X,R3>。这样,R4只要收到目的网络为X的分组,就都按照路径R4→R3→R2→R1→X,最后到达X。类似地,R3也在自己的转发表中增加到达网络X的表项<X,R2>。每个路由器收到一条新的BGP路由通告后,必须经过上述步骤,才能在自己的转发表中增加到达X的“下一跳”的相应表目。

3.BGP路由选择

若从一个AS到另一个AS中的网络X只有一条BGP路由,则不存在选择BGP路由的问题,此时BGP路由是唯一的。然而,若到网络X有两条或更多的BGP路由可供选择,则应根据下列原则,并按下面给出的先后顺序,选择一条较好的BGP路由。

(1)首先选择本地偏好值最高的路由

在BGP路由的属性中有一个称为本地偏好的选项,一条路由的本地偏好可能由该路由器管理员设置,也可能是从同一AS中的另一个路由器学习得到的。若在几条BGP路由中找不出本地偏好值最高的路由(如它们的本地偏好值都相同),则采用下面的方法。

(2)选择AS跳数最少(AS-PATH最短)的路由

以图4.21为例,从AS1到AS5共有两条BGP路由,根据该原则,应选择只通过1个AS的BGP路由,即AS1→AS4→AS5。然而,由于AS4是个很大的AS,分组在AS4中反而要经过更多次数的转发,可能要花费更长的时间。可见,AS跳数最少的路由未必是最好的。

(3)使用热土豆路由选择算法

假设几条BGP路由的本地偏好值都相同,所经过的AS个数也相同,则利用前两种方法都无法选择最好的路由。这时,要进入BGP路由的AS,执行热土豆路由选择算法。(选择最靠近NEXT-HOP路由器的路由,让分组经过最少的转发次数离开本AS,这时要使用内部网关协议(如OSPF或RIP),对不同的路由器,得出的选择结果是不同的。

(4)选择BGP标识符的数值最小的路由

在BGP报文的首部有一个称为BGP标识符的字段,该字段作为运行BGP的路由器的唯一标识符。当以上三种方法都无法找出最好的BGP路由时,可使用BGP标识符来选择路由。

4.BGP的四种报文

当BGP刚运行时,BGP会话的两端要相互交换整个BGP路由表,但以后只需在BGP发生变化时更新有变化的部分。这样做对节省网络带宽和减少路由器的开销方面都有好处。

BGP-4共使用四种报文:

1)Open(打开)报文。用来与相邻的另一个BGP对等方建立关系,使通信初始化。

2)Update(更新)报文。用来通知某一路由的信息,以及列出要撤销的多条路由。

3)Keepalive(保活)报文。用来周期性地证实邻站的连通性。

4)Notification(通知)报文。用来发送检测到的差错。

Open报文是两个路由器之间建立TCP连接后接着必须发送的报文,其作用是相互识别对方,协商一些协议参数。收到Open报文的路由器发回Keepalive报文表示接受建立BGP连接。Update报文是BGP的核心,用于撤销它以前通知过的路由,或者宣布增加新的路由。撤销路由可以一次撤销多条,但增加新路由时,每个更新报文只能增加一条。BGP连接一旦建立,两个对等方就要彼此周期性地交换Keepalive报文(如每隔60秒)。RIP、OSPF与BGP的比较如表4.6所示。




4.5 IP多播

4.5.1多播的概念

多播(也称组播)是让源主机一次发送的单个分组可以抵达用一个组地址标识的若干目的主机,即一对多的通信。在互联网上进行的多播,称为IP多播。

与单播相比,在一对多的通信中,多播可大大节约网络资源。假设视频服务器向90台主机传送同样的视频节目,单播与多播的比较如图4.22所示。多播时仅发送一份数据,并且只需发送一次,只有在传送路径出现分岔时才将分组复制后继续转发,因此大大减轻了发送者的负担和网络的负载。多播需要路由器的支持才能实现,能够运行多播协议的路由器称为多播路由器。


4.5.2 IP多播地址

多播数据报的源地址是源主机的IP地址,目的地址是IP多播地址。IP多播地址就是IPv4中的D类地址。D类地址的前四位是1110,因此D类地址范围是224.0.0.0~239.255.255.255。每个D类IP地址标志一个多播组,一台主机可以随时加入或离开一个多播组。

多播数据报和一般的IP数据报的区别是,前者使用D类IP地址作为目的地址,并且首部中的协议字段值是2,表明使用IGMP。需要注意的是:

1)多播数据报也是“尽最大努力交付”,不提供可靠交付。

2)多播地址只能用于目的地址,而不能用于源地址。

3)对多播数据报不产生ICMP差错报文。

IP多播可以分为两种:①只在本局域网上进行硬件多播;②在互联网的范围内进行多播。目前大部分主机都是通过局域网接入互联网的。因此,在互联网上进行多播的最后阶段,还是要把多播数据报在局域网上用硬件多播交付给多播组的所有成员[见图4.22(b)]。多播机制仅应用于UDP,它能将报文同时发送给多个接收者。而TCP是一个面向连接的协议,它意味着分别运行在两台主机的进程之间存在一条连接,因此会一对一地发送。


4.5.3在局域网上进行硬件多播

因为局域网支持硬件多播,所以只要把IP多播地址映射成多播MAC地址,即可将IP多播数据报封装在局域网的MAC帧中,而MAC帧首部的目的MAC地址字段就设置为由IP多播地址映射成的多播MAC地址。这样,就很方便地利用硬件多播实现了局域网内的IP多播。

IANA拥有的以太网多播地址的范围是从01-00-5E-00-00-00到01-00-5E-7F-FF-FF。在这些地址中,只有后23位可用作多播。但D类IP地址可供分配的有28位,即这28位中的前5位无法映射到以太网多播地址,因此两者是多对一的映射关系,如图4.23所示。

例如,IP多播地址224.128.64.32(E0-80-40-20)和另一个IP多播地址224.0.64.32(E0-00-40-20)转换成以太网的多播地址都是01-00-5E-00-40-20。因此收到多播数据报的主机,还要在IP层利用软件进行过滤,把不是本主机要接收的数据报丢弃。


4.5.4 IGMP与多播路由协议

路由器要获得多播组的成员信息,需要利用网际组管理协议(Internet Group ManagementProtocol,IGMP)。连接到局域网上的多播路由器还必须和互联网上的其他多播路由器协同工作,以便把多播数据报用最小代价传送给所有组成员,这就需要使用多播路由选择协议。

IGMP是让连接到本地局域网上的多播路由器,知道本局域网上是否有主机参加或退出了某个多播组。IGMP并不是在互联网范围内对所有多播组成员进行管理的协议。IGMP不知道IP多播组包含的成员数,也不知道这些成员分布在哪些网络上。

IGMP报文被封装在IP数据报中传送,但它也向IP提供服务。因此不把IGMP视为一个单独的协议,而视为整个网际协议IP的一个组成部分。IGMP的工作可分为两个阶段。

第一阶段:当某台主机加入新的多播组时,该主机应向多播组的多播地址发送一个IGMP报文,声明自己要成为该组的成员。本地的多播路由器收到IGMP报文后,还要利用多播路由选择协议,把这种组成员关系转发给互联网上的其他多播路由器。

第二阶段:组成员关系是动态的。本地多播路由器要周期性地探询本地局域网上的主机,以便知道这些主机是否仍然是组的成员。只要对某个组有一台主机响应,多播路由器就认为这个组是活跃的。但一个组在经过几次探询后仍然没有一台主机响应,多播路由器就认为本网络上的主机都已离开了这个组,因此就不再把这个组的成员关系转发给其他的多播路由器。

多播路由选择实际上就是要找出以源主机为根节点的多播转发树,其中每个分组在每条链路上只传送一次(在多播转发树上的路由器不会收到重复的多播数据报)。不同的多播组对应于不同的多播转发树;同一个多播组,对不同的源点也会有不同的多播转发树。




4.6移动IP

4.6.1移动IP的概念

移动IP技术是指移动站以固定的IP地址实现跨越不同网络的漫游功能,并保证基于IP的网络权限在漫游过程中不发生任何改变。移动IP的目标是把分组自动地投递给移动站。一个移动站是把其连接点从一个网络或子网改变到另一个网络或子网的主机。移动IP定义了三种功能实体:移动节点、本地代理(也称归属代理)和外地代理。

1)移动节点。具有永久IP地址的移动主机。

2)本地代理。通常就是连接在归属网络(原始连接到的网络)上的路由器。

3)外地代理。通常就是连接在被访网络(移动到另一地点所接入的网络)上的路由器。

值得注意的是,某用户将笔记本关机后从家里带到办公室重新上网,在办公室能很方便地通过DHCP自动获取新的IP地址。虽然笔记本移动了,更换了地点及所接入的网络,但是,这并不是移动IP。但是,若我们需要在移动中进行TCP传输,则在移动站漫游时,应一直保持这个TCP连接,否则移动站的TCP连接就会断断续续。可见,若要使移动站在移动中的TCP连接不中断,就必须使笔记本的IP地址在移动中保持不变。这就是移动IP要研究的问题。


4.6.2移动IP通信过程

用一个通俗的例子来描述移动IP的通信原理。例如,在以前科技不那么发达的年代,本科毕业时都将走向各自的工作岗位。因为事先并不知道自己未来的准确通信地址,所以怎样继续和同学们保持联系呢?实际上也很简单。彼此留下各自的家庭地址(永久地址)。毕业后若要和某同学联系,只要写信寄到该同学的永久地址,再请其家长把信件转交即可。

在移动IP中,每个移动站都有一个原始地址,即永久地址(或归属地址),移动站原始连接的网络称为归属网络。永久地址和归属网络的关联是不变的。在图4.24中,移动站A的永久地址是131.8.6.7/16,而其归属网络是131.8.0.0/16。归属代理通常是连接到归属网络上的路由器,然而它实现的代理功能是在应用层完成的。当移动站移动到另一地点,所接入的外地网络也称被访网络。在图4.24中,移动站A被移动到被访网络15.0.0.0/8。被访网络中使用的代理称为外地代理,它通常是连接在被访网络士的路由器。外地代理有两个重要功能:①要为移动站创建一个临时地址,称为转交地址。在图4.24中,移动站A的转交地址是15.5.6.7/8。转交地址的网络号显然和被访网络一致。②及时把移动站的转交地址告诉其归属代理。

请注意两点:转交地址是供移动站、归属代理及外地代理使用的,各种应用程序都不会使用。外地代理要向连接在被访网络上的移动站发送IP分组时,直接使用移动站的MAC地址。在图4.24中,通信者B要和移动站A进行通信。B并不知道A在什么地方,但B使用A的永久地址作为发送的IP分组中的目的地址,移动IP的基本通信流程如下:

1)移动站A在归属网络时,按传统的TCP/IP方式进行通信。

2)移动站A漫游到被访网络时,向外地代理进行登记,以获得一个临时的转交地址。外地代理要向A的归属代理登记A的转交地址。

3)归属代理知道移动站A的转交地址后,会构建一条通向转交地址的隧道,将截获的发送给A的IP分组进行再封装,并通过隧道发送给被访网络的外地代理。

4)外地代理把收到的封装的IP分组进行拆封,恢复成原始的IP分组,然后发送给移动站A,这样A在被访网络就能收到这些发送给它的IP分组。

5)移动站A在被访网络对外发送IP分组时,仍然使用自己的永久地址作为IP分组的源地址,此时显然无须通过A的归属代理来转发,而是直接通过被访网络的外部代理。

6)移动站A移动到另一被访网络时,在新外地代理登记后,然后新外地代理将A的新转交地址告诉其归属代理。无论如何移动,A收到的IP分组都是由归属代理转发的。

7)移动站A回到归属网络时,A向归属代理注销转交地址。为了支持移动性,在网络层中还应增加一些新功能:①移动站到外地代理的登记协议;②外地代理到归属代理的登记协议;③归属代理数据报封装协议;④外地代理拆封协议。




4.7网络层设备

4.7.1冲突域和广播域

1.冲突域

冲突域是指连接到同一物理介质上的所有节点的集合,这些节点之间存在介质争用的现象。在OSI参考模型中,冲突域被视为第1层的概念,像集线器、中继器等简单复制转发信号的第1层设备所连接的节点都属于同一个冲突域,也就是说它们不能划分冲突域。而第2层(网桥、交换机)、第3层(路由器)设备都可以划分冲突域。

2.广播域

广播域是指接收同样广播消息的节点集合。也就是说,在该集合中的任何一个节点发送一个广播帧,其他能收到这个帧的节点都被认为是该广播域的一部分。在OSI参考模型中,广播域被视为第2层的概念,像第1层(集线器等)、第2层(交换机等)设备所连接的节点都属于同一个广播域。而路由器,作为第3层设备,则可以划分广播域,即可以连接不同的广播域。通常所说的局域网(LAN)特指使用路由器分割的网络,也就是广播域。


4.7.2路由器的组成和功能

路由器是一种具有多个输入/输出端口的专用计算机,其任务是连接不同的网络(连接异构网络)并完成分组转发。在多个逻辑网络(多个广播域)互连时必须使用路由器。

当源主机向目标主机发送数据报时,路由器先检查源主机与目标主机是否连接在同一个网络上。若源主机和目标主机在同一个网络上,则直接交付而无须通过路由器。若源主机和目标主机不在同一个网络上,则路由器按照转发表(由路由表得出)指出的路由将分组转发给下一个路由器,这称为间接交付。可见,在同一个网络中传递数据无须路由器的参与,而跨网络通信必须通过路由器进行转发。例如,路由器可以连接不同的LAN,连接不同的VLAN,连接不同的WAN,或者把LAN和WAN互连起来。路由器隔离了广播域。

从结构上看,路由器由路由选择和分组转发两部分构成,如图4.25所示。而从模型的角度看,路由器是网络层设备,它实现了网络模型的下三层,即物理层、数据链路层和网络层。

路由选择部分也称控制部分,核心构件是路由选择处理机,其任务是根据所选定的路由选择协议构造出路由表,同时经常或定期地和相邻路由器交换路由信息而不断更新和维护路由表。分组转发部分由三部分组成:交换结构、一组输入端口和一组输出端口。

交换结构也称交换组织,其作用是根据转发表对分组进行处理,将某个输入端口进入的分组从一个合适的输出端口转发出去。交换结构本身就是一个“在路由器中的网络”。

路由器的端口中都有物理层、数据链路层和网络层的处理模块。输入端口在物理层接收比特流,在数据链路层提取出帧,剥去帧的首部和尾部后,分组就被送入网络层的处理模块。输出端口执行相反的操作。端口在网络层的处理模块中都设有一个缓冲队列,用来暂存等待处理或已处理完毕待发送的分组,还可用来进行必要的差错检测。若分组处理的速率赶不上分组进入队列的速率,就会使后面进入队列的分组因缓冲区满而只能被丢弃。需要说明的是,路由器的端口一般都具有输入和输出的功能,图4.25中分别给出输入和输出端口是为了使读者更容易理解。


4.7.3路由表与分组转发

路由表是根据路由选择算法得出的,主要用途是路由选择。从历年统考真题可以看出,标准的路由表有4个项目:目的网络IP地址、子网掩码、下一跳IP地址、接口。在图4.26所赤的网络拓扑中,R1的路由表见表4.7,该路由表包含到互联网的默认路由。

转发表是从路由表得出的,其表项和路由表项有直接的对应关系,如图4.27所示。但转发表的格式和路由表的格式不同,其结构应使查找过程最优化(而路由表则需对网络拓扑变化的计算最优化)。转发表中含有一个分组将要发往的目的网络,以及分组的下一跳(下一步接收者的目的地址,实际为MAC地址)。转发表中还可设置一条默认路由,只要目的网络不在转发表中,就一律选择默认路由转发,默认路由表项的匹配优先级最低。路由表总是用软件来实现的;转发表可以用软件来实现,甚至也可以用特殊的硬件来实现。

注意转发和路由选择的区别:“转发”是路由器根据转发表把收到的IP数据报从合适的端口转发出去,它仅涉及一个路由器。而“路由选择”则涉及很多路由器,路由表是许多路由器协同工作的结果。这些路由器按照复杂的路由算法,根据从各相邻路由器得到的关于网络拓扑的变化情况,动态地改变所选择的路由,并由此构造出整个路由表。路由表不等于转发表,分组的实际转发是靠直接查找转发表,而不是查找路由表。




4.8本章小结及疑难点

1.  “尽最大努力交付”有哪些含义?

1)不保证源主机发送的IP数据报一定无差错地交付到目的主机。

2)不保证源主机发送的IP数据报都在某一规定的时间内交付到目的主机。

3)不保证源主机发送的IP数据报一定按发送时的顺序交付到目的主机。

4)不保证源主机发送的IP数据报不会重复交付给目的主机。

5)不故意丢弃IP数据报。丢弃IP数据报的情况是:路由器检测出首部检验和有错误;或者因为网络中通信量过大,路由器或目的主机中的缓存已无空闲空间。但要注意,IP数据报的首部中有一个“首部检验和”字段。当它检验出IP数据报的首部出现了差错时,就丢弃该数据报。因此,凡交付给目的主机的IP数据报都是IP首部没有差错的或没有检测出差错的。也就是说,在传输过程中,出现差错的IP数据报都被丢弃了。

现在互联网上绝大多数的通信量都属于“尽最大努力交付”。若数据必须可靠地交付给目的地,则使用IP的高层软件必须负责解决这一问题。

2.假定在一个局域网中,计算机A广播一个ARP请求分组,希望找出计算机B的硬件地址。试问这时由哪个计算机发送ARP响应分组?_将谁的硬件地址告诉计算机A?

这要区分两种情况。第一,若计算杌B和计算机A都连接在同一个局域网上,则计算机B发送ARP响应分组,给出计算机B的硬件地址。第二,若计算机B和计算机A不连接在同一个局域网上,则必须由一个连接计算机A所在局域网的路由器来响应,这时该路由器向计算机A发S大a○a。C○m送ARP响应分组,给出该路由器的硬件地址。

3.路由器实现了物理层、数据链路层、网络层,这句话的含义是什么?

第1章中提到了网络中的两个通信节点利用协议栈进行通信的过程。发送方一层一层地把数据“包装”,接收方一层一层地把“包装”拆开,最后上交给用户。路由器实现了物理层,数据链路层和网络层的含义是指路由器有能力对这三层协议的控制信息进行识别、分析以及转换,直观的理解是路由器有能力对数据“包装”这三层协议或者“拆开”这三层协议。自然,路由器就有能力互连这三层协议不同的两个网络。

http://www.dtcms.com/a/295026.html

相关文章:

  • 跟著Qcadoo MES系统学习产品设计001
  • 从订单簿到AMM:一场去中心化交易所的技术革命
  • 彻底掌握双列集合——Map接口以及实现类和常用API及其底层原理
  • 1688商品数据采集的应用行业与接入方式
  • 人工智能之数学基础:事件间的运算
  • JVM、Dalvik、ART垃圾回收机制
  • OpenLayers 快速入门(八)事件系统
  • java基础(the 15th day)
  • freelancer是什么用工模式?有什么好处和坏处呢?
  • Log4j2漏洞vul-hub通关教程
  • 根据图片的r值来进行透明剔除
  • SpringBoot RESTful API设计指南
  • C++day1
  • #Linux内存管理# 在一个播放系统中同时打开几十个不同的高清视频文件,发现播放有些卡顿,打开视频文件是用mmap函数,请简单分析原因。
  • SQL难点突破之复杂业务逻辑的SQL查询实战
  • pcb碳油板工艺流程
  • zabbix基于GNS3监控部署
  • 学校电子钟系统时间为何不同步?如何解决
  • 面试实战,问题六,被问数据库索引,怎么回答
  • 期权遇到股票分红会调整价格吗?
  • 使用JMeter进行压力测试(以黑马点评为例、详细图解)
  • 定义损失函数并以此训练和评估模型
  • 力扣面试150题--搜索旋转排序数组
  • RT_thread的工作原理及应用
  • java有哪些字符需要转译
  • 2026 拼多多秋招内推码(提前批)
  • 前端学习之JavaScript事件监听解析
  • Bonk发币教学全流程
  • 欧盟网络安全标准草案EN 18031详解
  • JDialong弹窗