网络层
网络层功能
互联网在网络层的设计思路:向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。
这就使得网络中的路由器比较简单,且价格低。
如果主机间的进程之间的通信要求是可靠的,那么可以由更高层的传输层来负责。
异构网络互联
不同的网络可能有不同的寻址方案,不同的网络接入机制,不同的差错处理方法,不同的路由选择机制等。
网络层要完成任务之一就是要使这些异构的网络实现互联。
网络互联是指两个以上的计算机网络,通过一定的方法,用一些中间设备(中继系统)相互连接起来。根据所在的层次分为以下四种:
- 物理层中继系统:转发器、集线器
- 数据链路层中继系统:网桥、交换机
- 网络层中继系统:路由器
- 网络层以上的中继系统:网关
物理层和数据链路层的中继系统,只是把一个网络扩大了,而且从网络层的角度看,仍是同一个网络,所以并不称为网络互联。
网络互联通常是指用路由器进行网络互联和路由选择。
TCP/IP体系在网络互联上采用的做法是在网络层采用标准化协议(IP协议),但相互连接的网络可以是异构的。互联后的网络一个称为虚拟IP网络。
虚拟IP网络,也称逻辑互联网络,简称IP网络。通过IP协议可以使这些各异的网络在网络层上看起来好像是一个统一的网络,互联网上的主机进行通信时好像一个单个网络上通信一样。
路由与转发
路由器主要完成两个功能:
- 路由选择(确定哪一条路径):按照复杂的分布式算法,根据各相邻路由器所得到的关于整个网络拓扑的变化情况,动态地改变所选择的路由
- 分组转发(当一个分组到达时所采取的动作):指路由器根据转发表将IP数据报从合适的端口转发出去
路由选择根据特定的路由选择协议构造出路由表,同时经常或定期地和相邻路由器交换路由信息而不断的更新和维护路由表。
分组转发处理通过路由器的数据流,关键操作是通过转发表查询、转发及相关的队列管理和任务调度等。
路由表示根据路由选择算法得出的,而转发表是从路由表得出的。转发表的结构应当使查找过程最优化,路由表则需要对网络拓扑的变化计算最优化。
SDN
网络层的主要任务是转发和路由选择。
可以将网络层抽象的划分为数据层面和控制层面,转发是数据层面实现的功能,而路由选择是控制层面实现的功能。
软件定义网络(SDN)它采用集中式的控制层面和分布式的数据层面。两个层面相互分离。控制层面利用控制-数据接口对数据层面上的路由器进行集中式控制,方便软件来控制网络。
在传统互联网中,每个路由器既有转发表,又有路由选择软件(既有数据层面又有控制层面)。
而在SDN结构中,路由器变得更简单,不需要路由选择软件。路由器之间不再相互交换路由信息。在网络的控制层面,有一个逻辑上的远程控制器(可以由多个服务器组成)。远程控制器掌握主机的和整个网络的状态,为每个分组计算出最佳路由。通过OpenFlow协议(也可以通过其他途径)把转发表(在SDN中称为流表)下发给路由器。路由器的工作很单纯,只有收到分组、查找转发表、转发分组。
这样网络变成了集中控制的。但本来互联网是分布式的。SDN要把整个互联网改造成集中控制模式是不现实的。然而在某些具体条件下,特别是一些大型的数据中心之间的广域网,可以使用SDN模式来建造,可以使网络的运行效率更高。
SDN的可编程性通过为开发者们提供强大的编程接口,使得网络具有很好的编程性。
- 对上层应用的开发者提供的编程接口称为北向接口。北向接口提供了一系列丰富的API。开发者可以在此基础上设计自己的应用,而不必关心底层的硬件细节。
- 控制器和转发设备建立双向会话的接口称为南向接口。通过不同的南向接口协议(如OpenFlow),SDN控制器可兼容不同的硬件设备,同时在设备中实现上层应用的逻辑。
- SDN控制器集群内部控制器之间的通信接口称为东西向接口,用于增强整个控制层面的可靠性与拓展性。
SDN的优点:
- 全局集中式控制和分布式高速转发,既利于控制层面的全局优化,又利于高性能的网络转发。
- 灵活可编程与性能的平衡,控制和转发功能分离后,使得网络可以由专用的自动化工具以编程方式配置。
- 降低成本,控制和数据层面分离后,尤其是在使用开放的接口协议后,就实现了网络设备的制造与功能软件的开发相分离,从而有效降低了成本。
SDN的问题:
- 安全风险,集中管理容易受攻击,如果崩溃,整个网络都会受到影响。
- 瓶颈问题,原本分布式的控制层面集中化后,随着网络规模的扩大,控制器可能成为网络性能的瓶颈。
拥塞控制
在通信子网中因出现过量的分组而引起网络性能下降的现象称为拥塞。
判断网络是否进入拥塞状态的方法是观察网络的吞吐量与网络负载的关系:
- 如果随着网络负载的增加,网络的吞吐量明显小于正常的吞吐量,那么网络就可能进入轻度拥塞的状态
- 如果网络的吞吐量随着网络负载的增大而下降,那么网络就可能进入拥塞状态
- 如果网络的负载继续增大,而网络的吞吐量下降到0,那么网络可能已经进入死锁状态。
拥塞控制主要解决的问题是如何获取网络中发生拥塞的信息,从而利用这些信息进行来控制避免拥塞。
拥塞控制的作用是确保子网够承载所达到的流量,这是一个全局性的过程,涉及各方面行为:主机、路由器及路由器内部的转发处理过程等。单一地增加资源并不能解决拥塞。
流量控制与拥塞控制的区别:
- 流量控制往往是指在发送端和接收端之间的点对点通信量的控制,流量控制所要做的是抑制发送端的发送速率,以使接送端来得及接收
- 拥塞控制必须确保子网能够传达需要传输的数据,这是一个全局性的问题,涉及网络中所有的主机、路由器及导致网络传输能力下降的所有因素。
拥塞控制的方法有两种:
- 开环控制。设计网络时事先将有关发生拥塞的因素考虑周到,力求网络在工作时不发生拥塞,是一种静态的预防方法。一旦整个网络启动并运行,中途就不需要再修改。开环控制手段包括确定何时可接收新流量,何时可丢弃分组以及丢弃哪些分组、确定哪些调度策略等。这些手段的共性是在做决定时不考虑当前网络的状态。
- 闭环控制。事先不考虑有关发生拥塞的各种因素,采用监测网络去监视,及时检测哪里发生了拥塞,然后将拥塞信息传到合适的地方,以便调整网络系统的运行,并解决出现的问题。闭环控制是基于反馈环路的概念,是一种动态的方法。
路由算法
在讨论,在讨论路由算法时,路由表和转发表笼统的称为路由表。
静态路由算法与动态路由算法
路由转发分组是通过路由表转发的,而路由表是通过各种算法得到的。
从能否随网络通信量或拓扑自适应地调整变化来划分,路由算法可分为如下两大类:
- 静态路由算法(又称非自适应路由算法)。由网络管理员手工配置的路由信息。当网络的拓扑结构或链路的状态发生变化时,网络管理员需要手工的修改路由表中相关静态路由的信息。它不能及时适应网络状态的变化,对于简单小型网络可以采用静态路由。
- 动态路由算法(又称为自适应路由算法)。路由器上的路由表是通过相互连接的路由器之间彼此交换信息,通过按照一定的算法优化出来的。这些路由信息会在一定时间间隙内不停的更新,以便适应不断变化的网络,随时获取最优的寻路效果。常见的动态路由算法可分为两类:距离向量路由算法和链路状态路由算法。
动态路由算法能够改善网络的性能,并有助于流量控制;但算法复杂会增加网络的负担,有时会因动态变化的反应太快而引起震荡或反应太慢而影响网络路由的一致性。
距离-向量路由算法
在距离-向量路由算法中,所有结点都定期地将他们的整个路由选择表传送给与之直接相邻的结点。这种路由选择表包含:
- 每条路径的目的地(另一结点)
- 路径的代价(也称距离)
RIP将距离定义为跳数,跳数指从原端口到达目的端口所经过的路由器的个数,每经过一个路由器跳数加1。
所有的结点都必须参与距离向量交换,以便保证路由的有效性和一致性,也就是说所有的结点都监听从其他的结点传来的路由选择更新信息,并在下列情况更新各自的路由选择表:
- 被通告一条新的路由。该路由在本结点的路由表中并不存在,此时本地系统加入这条新的路。
- 发来的路由信息中有一条达到某个目的地的路由。该路由与当前使用的路由相比有较短的距离(较小的代价)。此种情况下就用经过发送路由信息的结点的新路由替换路由表中到达那个目的地的现有都有。
距离-向量路由算法的实质是迭代计算一条路由中的跳数或延迟时间,从而得到一个目标的最短通路(最小代价)。要求每个结点在每次更新时都将它的全部路由表发送给相邻的结点。
显然,更新报文的大小与通信子网的结点个数成正比,大的通信子网将导致很大的更新报文。因此通信子网上传送的路由选择信息的数量容易变得很大。
最常见的距离-向量路由算法是RIP算法,它采用跳数作为距离的度量。
链路状态路由算法
链路状态路由算法要求每个参与该算法的结点都具有完全的网络拓扑信息。
每个结点都执行下面两项任务:
- 主动测试所有邻接结点的状态。
- 定期的将链路状态传播给其他的所有结点。
典型的链路状态路由算法是OSPF算法。
一个结点检查所有直接链路的状态,并将所得的状态信息发送给网络上的其他所有结点。每个结点都用这种方式从网上所有其他结点接收包含直接链路状态的路由选择信息。
每当链路状态报文到达时,路由结点便使用这些信息去更新自己的网络拓扑状态“视野图”。一旦链路状态发生变化,结点就对更新的网络利用Dijkstra最短路径算法重新计算路由,从单一的源出发计算到达所有目的结点的最短路径。
链路状态路由算法主要有三个特征:
- 向本自治系统中的所有路由器发送信息,使用是洪泛法。即路由器通过所有端口向所有相邻路由器发送信息,而每个相邻路由器又将此信息发往其所有相邻路由器(但不再发送给刚刚发来信息的那个路由器)。
- 发送的信息是与路由器相邻的所有路由器的链路状态,但这只是路由器所知道的部分信息。所谓链路状态,是指说明本路由器与哪些路由器相邻,以及该链路的度量。对于OSPF算法,链路状态的度量主要用来表示费用、距离、时延、带宽的。
- 只有当链路状态发生变化时,路由器才向所有路由器发送信息。
由于一个路由器的链路状态只涉及其相邻路由器的连通状态,而与整个互联网的规模并无直接关系,因此链路状态路由算法可以用于大型的或路由信息变化聚敛的互联网环境。
链路状态路由算法的主要优点:
- 每个路由结点都使用相同的原始状态数据并独立地计算路径,而不依赖中间结点的计算。
- 链路状态报文不加改变地传播,因此采用该算法易于查找故障。
- 当一个结点从其他结点接收到报文时,它可以在本地立即计算正确的通路,保证一步汇聚。
- 由于链路状态报文仅运载来自单个结点关于直接链路的信息,其大小与网络中的路由结点数目无关,因此链路状态路由算法比距离-向量算法有更好的规模可伸展性。
距离-向量路由算法中,每个结点仅与它直接的邻居交谈,并从为它的邻居提供从自己到网络中其他所有结点的最低费用估计。距离-向量路由算法有可能遇到路由环路的问题。
在链路状态路由算法中,每个结点通过广播的方式与其他的所有结点交谈,它告诉其他所有结点“与它直接相连的链路”的费用。
层析路由
当网络规模扩大时,路由器的路由表成比例的增加,这不但会消耗越来越多的路由器缓冲区空间,而且需要用更多时间来扫描路由表,用更多的宽带来交换路由状态信息,因此路由选择必须按照层次的方式进行。
因特网将整个互联网划分为许多较小的自治系统(一个自治系统中包含很多局域网),每个自治系统有权自主地决定本系统内应采用何种路由选择协议。如果两个自治系统需要通信,那么就需要在一种在两个自治系统之间的协议来屏蔽这些差异,据此因特网把路由选择协议划分为两大类:
- 一个自治系统内部所使用的路由选择协议称为内部网关协议(IGP),也称域内路由选择,具体的协议有RIP和OSPF等。
- 自治系统之间所使用的路由选择协议称为外部网关协议(EGP),也称域间路由选择,用在不同自治系统的路由器之间交换路由信息,并负责为分组在不同的自治系统之间选择最优的路径,具体的协议有BGP。
自治系统,简称AS:单一技术管理下的一组路由器,这些路由器使用一种AS内部的路由选择协议和共同的度量来确定分组在该AS内的路由,同时还使用一种AS之间的路由选择协议来确定分组在AS之间的路由。
一个自治系统的所有网络都由一个行政单位(如一家公司、一所大学、一个行政部门等)管辖,一个自治系统的所有路由器在本自治系统内都必须是连通的。
使用层次路由时,OSPF将一个自治系统再划分为若干区域(Area)。每个路由器都知道在本区域内如何把分组路由到目的地的细节,而不用知道其他区域的内部结构。
采用分层式分区域的方法,虽然会使交换信息的种类变多,也会使OSPF协议变复杂。但能使每个区域内的交换路由信息的通信量大大减小。因此,OSPF协议能够用于规模很大的自治系统中。
路由信息协议 RIP
路由信息协议RIP是内部网关协议(IGP)中最先得到广泛应用的协议。RIP是一种分布式的基于距离向量的路由选择协议,其最大优点就是简单。
RIP规定:
- 网络中的每个路由器都要维护从它自身到其他每个目的网络的距离记录(因此这是一组距离,称为距离向量)
- 距离也称跳数(Hop Count),规定从一个路由器到直接连接网络的距离(跳数)为1,每经过一个路由器,距离(跳数)加1
- RIP认为好的路由就是经过的路由器数目少,即优先选择跳数少的路径
- RIP允许一条路径最多只能包含15个路由器(即最多允许15跳)。因此距离等于16时,表示网络不可达。可将RIP只适用于小型互联网。距离向量路由可能会出现环路的情况,规定路径上的最高跳数也是为了防止数据报在环路上不停循环,减少网络拥塞的可能性
- RIP默认在任意两个使用RIP的路由器之间每30秒广播一次RIP路由更新信息,以便自动建立并维护路由表(动态维护)
- 在RIP中不支持子网掩码的RIP广播,所以RIP中每个网路的子网掩码必须相同。但在新的RIP2中,支持变长子网掩码和CIDR
RIP特点(注意与OSPF比较):
- 仅和相邻路由器交换信息
- 路由器交换的信息是当前路由器所知道的全部信息,即自己的路由表
- 按固定的时间间隔交换路由信息,如30秒
RIP通过距离-向量算法来完成路由表的更新。最初,每个路由器只知道与自己直连的网络的路由。经过第一次RIP广播,每个路由器就知道了与自己相邻的路由器的路由表(距离自己跳数为1的网络的路由)。经过第二次RIP广播,每个路由器就知道距离自己跳数为2的网络的路由......经过若干次后,每个路由器就知道了整个IP网络的路由表,所以成RIP最终是收敛的。经过RIP收敛后,每个路由器到每个目标网络的路由都是距离最短的(即跳数最少,最短路由)。
RIP的优点就是简单;RIP的缺点:
- 限制了网络的规模,能使用的最大距离为15
- 路由器之间交换的是完整的路由表,因此网络规模越大,开销越大
- 网络出现故障时,会出现慢收敛现象(即需要较长时间才能将此信息传送到所有路由器),俗称“坏消息传的慢”,使更新过程的收敛时间变长。
RIP是应用层协议,它使用UDP传送数据(端口520)。
开放最短路径优先 OSPF
开放最短路径优先OSPF协议是使用分布式链路路由算法的典型代表,也是内部网关协议(IGP)的一种。
与RIP的区别主要为:
- OSPF向本自治系统中的所有路由器发送信息,这里使用的是洪泛法;而RIP仅向相邻的几个路由器发送信息
- 发送的是与本路由器相邻的所有路由器的链路状态,但这只是路由器所知道的部分信息。“链路状态”说明本路由器和哪些路由器相邻以及该链路的度量(或代价);而在RIP中,发送的是本路由器所知道的全部信息,即整个路由表
- 只有当链路状态发生变化时,路由器才用洪泛法向所有路由器发送此信息,并且更新过程收敛得快,不会出现RIP中“坏消息传的慢”的情况;而在RIP中,不管网络拓扑是否发生变化,路由器之间都会定期地交换路由表的信息
- OSPF是网络层协议,不使用UDP或TCP,而直接用IP数据报传送(其IP数据报首部的协议字段89);而RIP是应用层协议,它在传输层使用UDP
除以上区别外,OSPF还具有以下特点:
- OSPF对不同的链路可根据IP分组的不同服务类型(TOS)而设置成不同的代价。因此,OSPF对于不同类型的业务可计算出不同的路由,十分灵活
- 如果到同一个目的网络有多条相同代价的路径,那么可以将通信量分配给这几条路径。这称为多路径间的负载平衡
- 所有在OSPF路由器之间交换的分组都具有鉴别功能,因而保证了仅在可信赖的路由器之间交换链路状态信息
- 支持可变长度的子网划分和无分类编址CIDR
- 每个链路状态都带上一个32位序号,序号越大,状态就越新
基本原理:
- 由于各路由器之间频繁地交换链路状态信息,因此所有路由器最终都能建立一个链路状态数据库。这个数据库实际上就是全网拓扑结构图,它在全网范围是一致的(称为链路状态数据库的同步)。
- 然后,每个路由器根据这个全网拓扑结构图,使用Dijkstra最短路径算法计算从自己到各目的网络的最优路径,以此构造自己的路由表。
- 此后,当链路状态发生变化时,每个路由器重新计算到各目的网络的最优路径,构建新的路由表
虽然使用Dijkstra算法可以计算出完整的最短路由,但路由表中不存储完整路径,只存储下一跳。
为了使OSPF能够用于规模很大的网络,OSPF将一个自治系统再划分为若干更小的范围,称为区域(Area)。划分区域的好处是,将利用洪泛法交换链路状态信息的范围局限于每个区域而非整个自治系统,减少了网络上的通信量。在一个区域内部的路由器只知道本区域的完整网络拓扑,而不知道其他区域的网络拓扑情况。
区域也有层次之分,处在上层的域称为主干区域,负责连通其他下层的区域,并且还连接其他自治域。
OSPF的五种分组类型:
- 问候分组。用来发现和维持邻站的可达性。
- 数据库描述分组。向邻站给出自己的链路状态数据库中的所有链路状态项目的摘要信息。
- 链路状态请求分组。向对方请求发送某些链路状态项目的详细信息。
- 链路状态更新分组。用洪泛法对全网更新链路状态。
- 链路状态确认分组。对链路更新分组的确认。
使用情况如下:
- 在路由器刚开始工作时,OSPF让每个路由器使用数据库描述分组和相邻路由器交换本数据库中已有的链路状态摘要信息。
- 然后,路由器使用链路状态请求分组,向对方请求发送自己所缺少的某些链路状态项目的详细信息。
- 经过一系列这种分组的交换,就建立了全网同步的链路数据库。
- 在网络运行中,只要一个路由器的链路状态发生变化,该路由器就要使用链路状态更新分组,用洪泛法向全网更新链路状态。其他路由器在更新后,发送链路状态确认分组对更新分组进行确认。
通常每隔10秒,每两个相邻路由器要交换一次问候分组,以便知道哪些站可达。
为了确保链路状态数据库与全网的状态保持一致,OSPF还规定每隔一段时间(如30分钟)就刷新一次数据库中的链路状态。由于一个路由器的链路状态仅涉及相邻的链路,因此与整个互联网的规模没有直接关系。所以当网络规模很大时,OSPF比RIP要好得多。
边界网关协议 BGP
边界网关协议是不同自治系统的路由器之间交换路由信息的协议,是一种外部网关协议(EGP)。边界网关协议常用于互联网的网关之间。
内部网关协议(IGP)主要设法在一个AS内将数据报有效地从源站传送到目的站。而在AS与AS之间,需要考虑额外的:
- 因特网的规模太大,使得自治系统之间路由选择很困难,寻找最优路径是不现实的
- 自治系统之间的路由选择必须考虑有关策略
边界网关协议只求寻找一条能够到达目的网络且比较好的路由(不能兜圈子),而非寻找最佳路由。
BGP采用的是路径向量路由选择协议,它与距离-向量协议和链路状态协议有很大的区别。
BGP是应用层协议,它是基于TCP。
工作原理如下:
- 每个自治系统的管理员要选择至少一个路由器(可以有多个)作为该AS的“BGP发言人”。
- 一个“BGP发言人”与其他AS的“BGP发言人”要交换路由信息,就要先建立TCP连接,然后在此连接上交换BGP报文以建立BGP会话,再利用BGP会话交换信息。
- 当所有BGP发言人都相互交换网络可达性的信息后,各BGP发言人就可找出到达各个自治系统的较好路由。
每个“BGP发言人”除了必须运行BGP外,还必须运行该AS内所用的内部网关协议,如OSPF或RIP。BGP所交换的网络可达性信息就是要到达某个网络(用网络前缀表示)所要经过的一系列AS。
BGP特点:
- BGP交换路由信息的结点数量级是自治系统的数量级,要比这些自治系统中的网络数少很多。
- 每个AS中“BGP发言人”(或边界路由器)数量是极少的,这样就使得AS之间的路由选择不至于过分复杂。
- BGP支持CIDR,因此BGP的路由表也就应当包括目的网络前缀、下一跳路由器,以及到达该目的网络所要经过的各个自治系统序列。
- BGP刚运行时,BGP的邻站交换整个BGP路由表,但以后只需在发生变化时更新有变化的部分。这样做对节省网络带宽和减少路由器的处理时间都有好处。
BGP共使用4中报文:
- 打开(Open)报文。用来与相邻的另一个BGP发言人建立关系。
- 更新(Update)报文。用来发送某一路由的信息,以及列出要撤销的多条路由。
- 保活(Keepalive)报文。用来确认打开报文并周期性的证实邻站关系。
- 通知(Notification)报文。用来发送检测到的差错。

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

IP分组由首部和数据部分组成,首部的前一部分长度固定,共20B,是所有IP分组必须具有的。在首部固定部分后面是一些可选字段,其长度可变,用来提供错误检测及安全等机制。
IP首部部分重要字段含义如下:
- 版本。指IP协议的版本,目前广泛使用的版本号为4。
- 首部长度。占4位,可以表示的最大十进制数是15。以32位(4B)为单位,最大值为60B(15×4b)。最常用的首部长度是20B,此时不使用任何选项(即可选字段)。
- 总长度。占16位。指首部和数据之间之和的长度。单位为字节,因此数据报的最大长度为216-1 = 65535B。以太网帧的最大传输单元(MTU)为1500B,因此当一个IP数据报封装成帧时,数据报的总长度(首部+数据)一定不能超过下面的数据链路层的MTU值。
- 标识。占16位。是一个计数器,每产生一个数据报就+1,并赋值标给标识字段。这不是序号(因为IP是无连接服务),当一个数据报长度超过MTU时,必须分片,此时每个数据报片都复制一次标识号,以便能正确组装为原来的数据报。
- 标志。占3位。标志字段的最低位是MF。MF = 1,表示后面还有分片。MF = 0,表示最后一个分片。标志字段中间的一位是DF。只有当DF = 0的时候才允许分片。
- 片偏移。占13位。用于指出较长的分组在分片后,某片在原分组中的相对位置。片偏移以8个字节为偏移单位。除最后一个分片外,每个分片的长度一定是8B的整数倍。
- 生存时间(TTL)。占8位。数据报在网络中可通过路由器数的最大值,标识分组在网络中的寿命。以确保分组不会永远在网络中循环。路由器在转发分组前,先把TTL -1,若TTL - 1 == 0,则该分组必须丢弃。
- 协议。占8位。指出此分组携带的数据使用何种协议,即分组的数据部分应上交给哪个协议进行处理,如TCP(6)、UDP(17)。
- 首部校验和。占16位。首部校验和只校验分组的首部,而不校验数据部分。
- 源地址字段。占32位。标识发送方的IP地址。
- 目的地址字段。占32位。标识接收方的IP地址。
首部长度、总长度、片偏移的基本单位分别是4B、1B、8B。
IP数据包分片
因为IP数据报被封装到链路层数据报中,因此链路层的MTU严格的限制着IP数据报的长度。而且在IP数据报的源与目的地路径上,各段链路可能使用不同的链路层协议,有着不同的MTU(如以太网的为1500B,许多广域网的MTU不超过576B)。当IP数据包的总长度大于链路MTU时,就需要将IP数据报中的数据分装在多个较小的IP数据报中,这些较小的数据报就称为片。
片在目的地的网络层被重新组装。目的主机使用IP首部的标识、标志和片偏移字段来完成对片的重组。创建一个IP数据报时,源主机为该数据报加上一个标识号,当一个路由器需要将一个数据报分片时,形成的每个数据报都具有原始数据报的标识号。当目的主机收到来自同一发送主机的同一批数据报时,他通过检查数据报的标识号来确定哪些数据报属于同一个原始数据报的片。
IP首部中的标志位有3位,但只有后2位有意义,分别是MF(more Fragment)位和DF(don't Fragment)位。只有当DF = 0时,该数据报才可以被分片。MF则用来告知目的主机该数据IP数据报是否为原始数据报的最后一个片,MF = 1时,后续还会有其他片。目的主机在对片进行重组时,使用片偏移字段来确定片应该存放在原始IP数据报的哪个位置。
IPv4地址与NAT
IPv4地址
连接到因特网上的每台主机(或路由器)都分配一个32比特的全球唯一标识符,即IP地址。IP地址由互联网名字和数字地址分配机构ICANN进行分配。
早期互联网采用的是分类的IP地址:
无论哪类IP地址,都由网络号和主机号组成。即IP地址:: = {<网络号>,<主机号>},其中网络号标志主机(或路由器)所连接到的网络,一个网络号在整个因特网范围内必须是唯一的。主机号标志该主机(或路由器),一台主机号在它前面的网络号所指明的网络范围内必须是唯一的。
在各类IP地址中,有些具有特殊用途,不作为主机的IP地址:
- 主机号全为0:表示本网络本身,如202.98.174.0
- 主机号全为1:表示本网络的广播地址,又称直接广播地址,如202.98.174.255
- 127.x.x.x:保留为环回自检(Loopback Test)地址,此地址表示任意主机本身,目的地址为环回地址的IP数据报将永远不会出现在任何网络上
- 32位全为0:表示本网络上的本主机,如0.0.0.0
- 32位全为1:表示整个TCP/IP网路的广播地址,又称受限广播地址。实际使用时,由于路由器对广播域的隔离,255.255.255.255等效为本网络的广播地址。
常见的三种类别IP地址使用范围:
A类地址数为27-2,减2的原因是:1. 网络号字段全为0的IP地址是保留地址,表示“本网络”;2. 网络号为127的地址是环回自检地址。
IP地址的特点:
- 每个IP地址都由网络号和主机号两部分构成,所以IP地址是一种分等级的地址结构。分等级的好处是:
- IP地址管理机构在分配IP地址时只分配网络号,而主机号自行分配。方便了IP地址的管理
- 路由器仅根据目的主机的网络号来转发分组,而不考虑目的主机号,减小了路由表所占的存储空间
- IP地址是标志一台主机(或路由器)和一条链路的接口。如果一台主机同时连接到两个网络,就必须同时具有两个IP地址(两个网络号不同)。因此,IP网络上的路由器至少要具有两个IP地址(路由器每个端口都至少分配一个IP地址)
- 用转发器或桥接器(网桥等)连接的若干LAN仍然是同一网络(同一个广播域),因此该LAN中所有主机的IP地址的网络号是相同的,但主机号各不相同
近年来,由于广泛使用无分类的IP地址进行路由选择,这种传统分类的IP地址已经成为历史。
网络地址转换 NAT
网络地址转换(NAT)是指通过专用网络地址(如Intranet)转换为公用地址(如Internet),从而对外隐藏内部管理的IP地址。它使得整个专用网只用一个全球IP地址就可以与因特网连通,由于专用网本地的IP地址是可重用的,所以NAT大大节省了IP地址的消耗。同时,它隐藏了内部网络结构,从而降低了内部网络收到攻击的风险。
此外,为了网络安全,划出了部分IP地址为私有IP地址。私有IP地址只用于LAN,不用于WAN。因此,私有IP地址不能直接用于Internet,必须通过网关利用NAT把私有IP地址转换为Internet中合法的全球IP地址后才能用于Internet,并且允许私有的IP地址被LAN重复使用,有效地解决了IP地址不足的问题。
私有IP地址网段如下:
- A类:1个A类网段,即10.0.0.0 ~ 10.255.255.255
- B类:16个B类网段,即172.16.0.0 ~ 172.31.255.255
- C类:256个C类网段,即192.168.0.0 ~ 192.168.255.255
在因特网中的所有路由器,对目的地址是私有地址的数据报一律不进行转发。采用私有IP地址的互联网称为专用互联网或本地互联网,私有IP地址称为可重用地址。
使用NAT时需要在专用网连接到因特网的路由器上安装NAT软件,NAT路由器至少有一个有效的外部全球IP地址。使用本地地址的主机和外界通信时,NAT路由器使用NAT转换表进行本地IP地址和全球IP地址的转换。NAT转换表中存放着{本地IP地址:端口}到{全球IP地址:端口}的映射,通过这种映射方式,可让多个私有IP地址映射到一个全球IP地址。

普通路由器在转发IP数据报时,不改变其源IP地址和目的IP地址。而NAT路由器在转发IP数据报时,一定要更换其IP地址(转换源IP地址或目的IP地址),普通路由器仅工作在网络层,而NAT路由转发数据报时需要查看和转换传输层的端口号。
子网划分和子网掩码
子网划分
两级IP地址的缺点:
- IP地址空间的利用率很低
- 给每个物理网络分配一个网络号会使路由表太大而使网络性能变坏
- 两级的IP地址不够灵活
从1985年起,在IP地址中又增加了一个“子网号字段”,使两级IP地址变成了三级IP地址。这种做法又称子网划分。
子网划分的基本思路:
- 子网划分是一个单位网络内部的事情,对外仍表现为单位网络
- 从主机号借用若干位作为子网号(主机号减少若干比特),三级IP地址结构:
- 凡是从其他网络发送给本单位某台主机的IP数据报,仍然是根据IP数据报的目的网络号,先找到连接本单位网络的路由器。然后由该路由器按目的网络号和子网号找到目的子网,交付给相应主机
注意:
- 划分子网只是把IP地址的主机号这部分进行再划分,而不改变IP地址原来的网络号。因此从IP地址本身或IP数据报的首部,无法判断该网络是否进行了子网划分。
- RFC 950规定,对分类的IPv4地址进行子网划分时,子网号不能全1或全0。但随着CIDR的广泛使用,现在全1和全0的子网号也可以使用,但一定要谨慎使用,要弄清你的路由器所用的路由选择软件是否支持全0或全1的子网号。
- 不论是分类的IPv4地址还是CIDR,其子网中的主机号为全0和全1的地址都不能被指派。子网中主机号为全0的地址为子网的网络号,主机号全1的地址为子网的广播地址。
子网掩码
为了告诉主机或路由器对一个A类、B类、C类网络进行了子网划分,使用子网掩码来表达对原网络中主机号的结尾。
子网掩码是一个与IP地址相对应的、长32bit的二进制串,它由一串1和跟随的一串0组成。其中,1对应于IP地址中的网络号与主机号,0对应子网号。计算机只需要将IP地址和对应的子网掩码逐位“与”运算,就和得出相应子网的IP地址。
现在的因特网规定:所有网络都必须使用子网掩码,如果一个网路未划分子网,那么就采用默认的子网掩码。
A、B、C类地址的默认子网掩码分别为255.0.0.0、255.0.0.0、255.255.255.0。
由于子网掩码是一个网络或一个子网的重要属性,所以路由器在相互之间交换路由器信息时,必须把自己所在网络(或子网)的子网掩码告诉对方。路由表中的每个条目,除了要给出目的网络的地址和下一跳地址外,还要给出该目的网络的子网掩码。
使用子网掩码时:
- 一台主机在设置其IP地址时,必须设置子网掩码
- 同属于一个子网的所有主机及路由器的相应端口,必须设置相同的子网掩码
- 路由器的路由表中,所包含的信息的主要内容:目的网络地址、子网掩码、下一条地址
无分类编址 CIDR
无分类域间路由选择CIDR是在变长子网掩码的前提下提出的一种消除A、B、C类网络划分,并且可以在软件的支持下实现超网构造的一种IP地址划分方法。
CIDR消除了传统A、B、C网络以及划分子网的概念,因而可以更有效地分配IPv4的地址空间。CIDR使用“网络前缀”的概念代替子网络的概念,与传统分类IP地址最大的区别:网络前缀的位数不是确定的,可以任意选取。
CIDR中,IP:: = {<网络前缀>,<主机号>}
CIDR还是用“斜线记法”(CIDR记法),即{IP地址/网络前缀所占比特数}。其中,网络前缀所占比特数对应于网络号的部分,等效于子网掩码中连续1的部分。如128.14.32.5/20,说明该IP地址的掩码前20位为1,后续位为0,将掩码与该IP地址逐位“与”运算,可以得到该地址的网络前缀(或者直接截取IP地址的前20位也能得到网络前缀)。
CIDR虽然不使用子网,但仍然使用“掩码”一词。不使用子网是指CIDR并没有在32位地址中指明若干位为子网字段。但分配到一个CIDR地址块组织的网络,仍可以根据需要划分出一些子网。如,某组织分配到地址块/20,就可以再继续划分出8个子网(从主机号中借3位),这时每个子网的网络前缀就变成了23位。
全0和全1的主机号地址一般不使用。
将网络前缀都相同的连续IP地址组成“CIDR地址块”。一个CIDR地址块可以表示很多地址,这种地址的聚合称为路由聚合,或者构成超网。路由聚合使得路由表中的一个项目可以表示多个原来传统分类地址的路由,有利于减少路由器之间的信息交换,从而提高网络性能。
CIDR地址块中地址数一定是2的整数次幂,实际可指派的地址数通常为2N-2,N表示主机号的位数,主机号全0代表网络号,主机号全1代表广播地址。网络前缀越短,其地址块所含地址数就越多。而在三级结构的IP地址中,划分子网使网络前缀变长。
CIDR的优点:
- 网络前缀长度的灵活性。
由于上层网络的前缀长度较短,因此相应的路由表项目较小。而内部又可以采用延长网络前缀的方法来灵活地划分子网。
最佳前缀匹配(最佳匹配):使用CIDR时,路由表中的每个项目由“网络前缀”和“下一跳地址”组成。在查找路由表时可能会得到不止一个匹配结果。此时,应当从匹配结果中选择具有最长网络前缀的路由,因为网路前缀越长,其地址块就越小,因而路由就越具体。
CIDR查找路由表的方法:为了更加有效地查找最长前缀匹配,通常将无分类编址的路由表存放在一种层次式的数据结构中,然后自上而下地按层次进行查找。常用的数据结构是二叉线索。
网络转发分组的过程
分组转发表都是基于目的主机所在网络的(因为互联网上的网络数远小于主机数)。
分组到达路由器后根据目的网络的IP地址来查找转发表,确定下一跳该到哪个路由器。
采用CIDR编址时,如果一个分组在转发表中可以找到多个匹配的前缀,应当选择一个具有最长前缀的路由,称为最长前缀匹配。所以为了更快的查找转发表,可以按照前缀的长度,将转发表条目降序排列。
此外,转发表内还可以增加两条特殊的路由:
- 主机路由:对特定目的主机的IP地址专门指明一个路由,以方便网络管理员控制或测试网络。若特定主机的IP地址是a.b.c.d,则转发表中对应项的目的网络是a.b.c.d/32。/32表示的子网掩码没有意义,但这个特殊的前缀可以用在转发表中。
- 默认路由:用特殊前缀0.0.0.0/0表示默认路由,全0掩码和任何目的地址进行按位“与”运算,结果必然全0,即必然与转发表中的0.0.0.0/0匹配。只要目的网络是其他网络(不在转发表中),一律选择默认路由。
综上所述,归纳出路由器执行的分组转发算法如下:
- 从收到的IP分组中提取目的主机的IP地址_D_(即目的地址)
- 若查找到特定主机路由(目的地址_D_),就按照这条路由的下一跳转发分组;否则从转发表中的下一条(即按前缀长度的顺序)开始检查,执行步骤3.
- (查找网络路由)将这一行的子网掩码与目的地址_D_进行按位“与”运算。若结果与本行的前缀匹配,则查找结束,按照下一条指出的进行处理(或直接交付本网络上的目的主机,或通过指定接口发送到下一跳路由器);否则,继续查找下一行;再否则,执行步骤4.
- 若转发表中有一个默认路由,则把分组转发给默认路由;否则,报告转发分组出错。
得到下一条路由器的IP地址后,并不是直接将该地址填入分组中,而是将该IP地址_通过ARP_转换为MAC地址,将此MAC地址放到MAC帧的首部,然后根据这个MAC地址找到下一跳路由器。
在不同网络中传送时,MAC帧中的源地址和目的地址要发生变化(由路由器改变),但是网桥在转发帧时,不改变帧的源地址。
ARP、DHCP、ICMP
IP地址是网络层使用的地址,是分层次的。
硬件(MAC)地址是数据链路层使用地址,是平面式的。
在网络层和网络层以上使用IP地址,通过数据封装,IP数据报分组封装为MAC帧后,数据链路层看不到IP地址。
由于路由器的隔离,IP网络中无法通过广播MAC地址来完成跨网络的寻址,因此在网络层及以上只能用IP地址来寻址。
网络中寻址时,每个路由器依据其路由表选择目标网络(即主机号全为0的网络地址)需要转发的下一跳(路由器的物理端口号或下一网络地址),当到达目标网络时,通过目标LAN中数据链路层的MAC地址以广播方式寻址。
IP分组在每个网络中都被路由器解封和重新组装,其MAC帧首部中的源地址和目的地址会不断改变。
路由器由于互联多个网络,它不仅具有多个IP地址,还有多个硬件地址。
地址解析协议 ARP
无论网络层使用什么协议,在实际网络的链路上传送数据帧时,最终都必须使用硬件地址(MAC地址)。所以需要将IP地址映射到MAC地址,就是地址解析协议ARP。
每台主机都有一个ARP高速缓存,用来存放本局域网上各主机和路由器的IP地址到MAC地址的映射表,简称ARP表,使用ARP来动态维护此表。
ARP工作在网络层,其工作原理如下:
- 主机A欲向本局域网中的某台主机B发送IP数据报时,先在其ARP高速缓存中查看有无主机B的IP地址。
- 如果有,就可以查出其物理地址,再将其物理地址写入MAC帧,然后通过局域网发送给该物理地址;
- 如果没有,那么通过使用目的MAC地址为FF-FF-FF-FF-FF-FF的帧来封装并广播ARP请求分组(广播发送),使同一个局域网里的所有主机都收到此ARP请求。主机B发送到该ARP请求后,向主机A发出ARP响应分组(单播发送),分组中包含主机B的IP与MAC地址的映射关系。主机A收到ARP响应分组后就将此映射写入ARP缓存,然后按查询到的硬件地址发送MAC帧。
ARP用于解决同一个局域网中的主机或路由器的IP地址与硬件地址映射问题。如果要找的主机不在同一个局域网,则要通过ARP找到一个位于本局域网上的某个路由器的硬件地址,然后把分组发送给这个路由器,让这个路由器把分组转发给下一个网络,剩下的工作就由下一个网络来做。
ARP由于“看到了”IP地址,所以它工作在网络层;
NAT路由器由于“看到了”端口,所以它工作在传输层;

由IP地址到硬件地址的解析是自动进行的,主机的用户并不知道这种地址解析过程。只要主机或路由器和本网络上的另一个已知IP地址的主机或路由器进行通信,ARP就会自动地将这个IP地址解析为数据链路层所需要的硬件地址。
动态主机配置协议 DHCP
动态主机配置协议常用于给主机动态地分配IP地址,它提供了即插即用的联网机制,这种机制允许一台计算机加入新的网络和获取IP地址而不用手工参与。DHCP是应用层协议,它是基于UDP的。
DHCP的工作原理如下:
- 使用客户/服务器模式。需要IP地址的主机在启动时就像DHCP服务器广播发送发现报文,这时该主机就成为DHCP客户。本地网络上所有主机都能收到此广播报文,但只有DHCP服务器才回答此广播报文。
- DHCP服务器先在数据库中查找该计算机的配置信息,若找到,则返回找到的信息;若找不到,则从服务器的IP地址池中取一个地址分配给该计算机。DHCP服务器的回答报文称为提供报文。

DHCP允许网络上配置多台DHCP服务器,当DHCP客户机发出“DHCP发现”消息时,有可能收到多个应答消息。这时,DHCP客户机只会挑选其中的一个,通常是挑选最先到达的。
DHCP服务器分配给DHCP客户的IP地址是临时的,因此DHCP客户端只能在一段有限之间内使用这个分配到的IP地址,这段时间又称为租用期。租用期的大小由DHCP服务器决定,DHCP客户端也可以在自己发送的报文中提出对租用期的要求。
只有应用层协议才有通过客户/服务器模式工作的,其他层次的协议没有
网际控制报文协议 ICMP
为了提高IP数据报交付成功的机会,在网络层使用了网际控制报文协议(ICMP)来让主机或路由器报告差错和异常状况。ICMP报文作为IP层数据报的数据,是IP层协议。
ICMP的报文种类有两种:ICMP差错报告报文、ICMP询问报文
ICMP差错报告报文主要用于目的主机或到目的主机路径上的路由器向源主机报告差错和异常情况,共有以下5种类型:
- 终点不可达。当路由器或主机不能交付数据报时,就向源点发送终点不可达报文。
- 源点抑制。当路由器或主机由于拥塞而丢弃数据报时,就像源点发送源点抑制报文,使源点知道应当把发送速率放慢。
- 时间超过。当路由器收到生存时间为0的数据报时,除了丢弃该数据报外,还要向源点发送时间超过报文。当终点在预先规定的时间内不能收到一个数据报的全部数据报片时,就把已收到的数据报片全部丢弃,并向源点发送时间超过报文。
- 参数问题。当路由器或目的主机收到的数据报首部中有的字段值不正确时,就丢弃该数据报,并向源点发送参数问题报文。
- 改变路由(重定向)。路由器发送改变路由报文发送给主机,使主机知道下次应将数据报发送给另外的路由器。
不发送ICMP差错报告报文的几种情况:
- 对ICMP差错报告报文不再发送ICMP差错报告报文
- 对第一个分片的数据报片的所有后续数据报片都不发送ICMP差错报告报文
- 对具有组播地址的数据报都不发送ICMP差错报告报文
- 对具有特殊地址(如127.0.0.0或0.0.0.0)的数据报不发送ICMP差错报告报文
ICMP询问报文共有4中类型:
- 回送请求和回答报文。
- 时间戳请求和回答报文。
- 地址掩码请求和回答报文。
- 路由器询问和通告报文。
ICMP的两个常见应用是分组网间探测PING(测试两台主机间的连通性)和Traceroute(Unix中的名字,Windows中是Tracert,可以用来跟踪分组经过的路由)。其中PING使用了ICMP回送请求和回答报文,Traceroute(Tracert)使用了ICMP时间超过报文。
PING工作在应用层,它直接使用网络层的ICMP,并未使用传输层的TCP和UDP;
Tracerout(Tracert)工作在网络层。
IPv6
解决IP地址耗尽的问题的措施有以下三种:
- 采用无类别编址CIDR,使IP地址的分配更加合理
- 采用网络地址转换NAT,以节省全球IP地址
- 采用具有更大地址空间的新版IPv6
前两种方法只是延缓了IPv4地址分配完毕的时间,只有第三种方法从根本上解决了IP地址的耗尽问题。
IPv6的主要特点如下:
- 更大的地址空间。从IPv4的32位扩大到了128位,IPv6字节数(16B)是IPv4字节数(4B)的平方。
- 扩展的地址层次结构。
- 灵活的首部格式。
- 改进的选项。
- 允许协议继续扩充。
- 支持即插即用(即自动配置)。
- 支持资源的预分配。
- IPv6只有在包的源结点才能分片,是端到端的,传输路径中的路由器不能分片,所以某种意义上来说,IPv6不允许分片(不允许类似IPv4的路由分片)。
- IPv6首部长度必须是8B的整数倍,而IPv4首部是4B的整数倍。
- 增加了安全性。身份验证和保密功能是IPv6的关键特征。
IPv6与IPv4不兼容,但总体而言能与其他所有的互联网协议兼容,包括TCP、UDP、ICMP、IGMP、OSPF、BGP和DNS,只是在少数地方做了修改(大部分是为了处理更长的地址)。
IPv6相当好地满足了预定的目标,包括:
- 解决了IP地址空间的问题,是IPv4的 296倍。
- 简化了IP分组头,它包含8个域(IPv4是12个域),使得路由器能更快地处理分组。
- 更好地支持选项,这一改变对新的分组首部很重要,因为一些从前的必要字段变成了可选字段。此外,表示选项的方式也优化了,能够使路由器更快地处理分组。
IPv6地址
IPv6数据报的目的地址可以是以下三种基本类型地址之一:
- 单播。单播就是传统的点对点通信。
- 多播。多播是一对多的通信,分组被交付到一组计算机的每台计算机。
- 任播。IPv6新增加的类型,目的站是一组计算机,但数据报在交付时只交付其中一台计算机,通常是距离最近的。
IPv6地址表示方法:将每4位用一个16进制数表示,并用冒号分割每16位。如4BF5:AA12:0216:FEBC:BA5F:039A:BE9A:2170。
当16位域的开头有一些0的时候,可以采用缩写形式,但在域中至少要有1个数字。例如:4BF5:0000:0000:0000:BA5F:039A:000A:2176缩写为4BF5:0:0:0:BA5F:39A:A:2176。
当有相继的0值域时,还可以进一步双冒号缩写,但一个地址内只能出现一次,因为0值域的个数没有编码,需要从总的域的个数来推算。例如前述地址可进一步缩写为4BF5::BA5F:39A:A:2176。
IPv6拓展了IPv4地址的分级概念,为了使路由器更快地查找路由,它使用以下三个等级:
- 第一级(顶级)指明全球都知道的公共拓扑
- 第二级(场点级)指明单个场点
- 第三级指明单个网络接口
IPv6向IPv4过渡
IPv6向IPv4过渡只能采用逐步演进的方法,同时还必须使新安装的IPv6系统能够向后兼容。IPv6系统必须能够接收和转发IPv4分组,并且能够为IPv4分组选择路由。
过渡可以采用两种策略:
- 双协议栈。指在一台设备上同时装有IPv4和IPv6协议栈,使其既能与IPv4网络通信,又能与IPv6网络通信。如果这台设备是一个路由器,则不同接口上分别配置了IPv4和IPv6地址,如果是计算机,则它同时拥有IPv4地址和IPv6地址,并具备同时处理这两个协议地址的功能。
- 隧道技术。将整个IPv6数据报封装到IPv4数据报的数据段,使得IPv6数据报可以在IPv4网络的隧道中传输。
IP组播
为了支持视频点播和视频会议这类多媒体应用,网络必须实施某种有效的组播机制。
使用多个单播传送来仿真组播总是可能的,但这会引起主机上大量的处理开销和网络上太多的交通量。
组播机制是让源计算机一次发送的单个分组可以抵达用一个组地址标识的若干目标主机,并被它们正确接收。主机选择加入或离开一个组,同一台主机也可以属于多个组。
组播一定仅用于UDP,它对将报文同时送往多个接收者的应用来说非常重要。而TCP是一个面向连接的协议,它意味着分别运行与两台主机(由IP地址确定)内的两个进程(由端口号确定)之间存在一条连接。
在IP组播中,每个组都有一个特别分配的地址,在IPv4中,这些地址在D类地址空间中分配,而IPv6也有一部分地址空间保留给组播用。
主机使用因特网组管理协议IGMP加入组播组。它们使用该协议通知本地网络上的路由器关于要接收发送给某个组播组的意愿。通过拓展路由器的路由选择和转发功能,可以在许多路由器互联的支持硬件组播的网络上实现因特网组播。
发送方只需要发送一次数据即可,当传送路径上出现分岔时,路由器会将分组复制后再转发。
组播需要路由器的支持才能实现,能够运行组播协议的路由器称为组播路由器。
IP组播地址
IP组播使用D类地址格式。D类地址的前四位是1110,因此D类地址范围是224.0.0.0 ~ 239.255.255.255。每个D类IP地址标志一个组播组。
组播数据报和一般数据报的区别是,前者使用D类IP地址作为目的地址,并且首部中的协议字段值为2,表明使用IGMP,除此之外:
- 组播数据报也是尽最大努力交付,不提供可靠交付
- 组播地址只能用于目的地址,不能用于源地址
- 对组播数据报不产生ICMP差错报文。因此,若在PING命令后键入组播地址,将永远不会收到响应
- 并非所有的D类地址都可作为组播地址
IP组播可以分为两种:在本局域网上进行硬件组播、在因特网范围内进行组播。
在因特网上组播的最后阶段,还要把组播数据报在局域网上用硬件组播交付给组播组的所有成员。
以太网组播地址的范围是从01-00-5E-00-00-00到01-00-5E-7FF-FF-FF,每个地址中只有23位可用作组播,这只能和D类IP地址中的23位有一一对应关系。D类IP地址可供分配的有28位,前5位不能用来构成以太网的硬件地址。
例如,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地址与以太网硬件地址的映射关系不是唯一的(即不同的前5位可以映射到同一个组播地址),因此收到组播数据报的主机,还要在IP层利用软件进行过滤,把不是本主机要接受的数据包丢弃。
IGMP与组播路由算法
要使路由器知道组播组成员的信息,需要利用因特网组管理协议IGMP。连接到局域网上的组播路由器还必须和其他组播路由器协同工作,以便把组播数据报用最小代价传送给所有组成员,这就需要使用组播路由选择协议。
IGMP并不是在因特网范围内对所有组播组成员进行管理的协议。IGMP不知道IP组播组包含的成员数,也不知道这些成员分布在哪些网络上。IGMP让连接到本地局域网上的组播路由器知道本局域网上是否有主机参加或退出了某个组播组。
IGMP应视IP协议的一个组成部分,其工作阶段分为两个阶段:
- 当某台主机加入新的组播组时,该主机应向组播组的组播地址发送一个IGMP报文,声明自己要成为该组的成员。本地的组播路由器收到IGMP报文后,将组成员关系转发给因特网上的其他路由器。
- 因为组成员关系是动态的,本地组播路由器要周期性地探询本地局域网上的主机,以便知道这些主机是否仍继续是组的成员。只要对某个组有一台主机响应,那么组播路由器就认为这个组是活跃的。但一个组在经过几次探询后仍然没有一台主机响应时,则不再将该组的成员关系转发给其他的组播路由器。
组播路由选择实际上就是要找出以源主机为根结点的组播转发树,其中每个分组在每条链路上只传送一次(即在组播转发树上的路由器不会收到重复的组播数据报)。不同的多播组对应不同的多播转发树;同一个多播组,对不同的源点也会有不同的多播转发树。
在许多由路由器互联的支持硬件多点传送的网络上实现因特网组播时,主要有三种路由算法:
- 基于链路状态的路由选择
- 基于距离-向量的路由选择
- 可以建立在任何路由器协议之上,称为协议无关的组播(PIM)
移动IP
支持移动性的因特网体系结构与协议共称为移动IP,是为了满足移动结点(计算机、服务器、网段等)在移动中保持其连接性而设计的。更确切的说,移动IP技术是指移动结点以固定的网络IP地址实现跨越不同网段的漫游功能,并保证基于网络IP的网络权限在漫游过程中不发生任何改变。
移动IP的目标是把分组自动地投递给移动结点。一个移动结点是把其连接点从一个网络或子网改变到另一个网络或子网的主机。使用移动IP一个移动结点可以在不改变其IP地址的情况下改变其驻留位置。
基于IPv4的移动IP定义三种功能实体:移动结点、归属代理(也称本地代理)和外埠代理(也称外部代理)。归属代理和外埠代理代理又统称为移动代理。
- 移动结点。具有永久IP地址的移动结点。
- 本地代理。在一个网络环境中,一个移动结点的永久居所称被称为归属网络。在归属网络中代表移动结点执行移动管理功能的实体称为归属代理(本地代理),它根据移动用户的转交地址,采用隧道技术转交移动结点的数据报。
- 外埠代理。在外部网络中帮助移动结点完成移动管理功能的实体称为外部代理。
移动IP和移动自主网络并不相同。
移动IP技术使漫游的主机可以用多种方式连接到因特网。移动IP的核心网络仍然是基于固定互联网中一直使用的各种路由选择协议。
移动自主网络是将移动性扩展到无线领域中的自治系统,它具有自己独特的路由选择协议,可以不和因特网相连。
移动IP与动态IP是两个完全不同的概念。
动态IP是指局域网中的计算机可以通过网络中的DHCP服务器动态地获得一个地址,而不需要用户在计算机的网络设置中指定IP地址。
移动IP通信过程
在移动IP中,每一个移动结点都有一个唯一的本地地址。当移动结点移动时,它的本地地址是不变的,在本地网络链路上,每个移动结点还必须有一个本地代理来为它维护当前的位置信息,这就需要引入转交地址。当移动结点连接到外地网络链路上时,转交地址就用来标识移动结点现在所处的位置,以便进行路由选择。
移动结点的本地地址与当前转交地址的联合称为_移动绑定_。或简称_绑定_。当移动结点得到一个新的转交地址时,通过绑定向本地代理进行注册,以便让本地代理及时了解移动结点的当前位置。
移动IP技术基本通信流程如下:
- 移动结点在本地网时按传统的TCP/IP方式进行通信(本地网中固有的地址)
- 移动结点漫游到一个外地网络时,仍然使用固定的IP地址进行通信,为了能够收到通信对端发给它的IP分组,移动结点需要向本地代理注册当前的位置地址,这个位置地址就是转交地址(它可以是外部代理的地址或者动态配置的一个地址)
- 本地代理接收来自转交地址的注册后,会构建一条通向转交地址的隧道,将截获的、发给移动结点的IP分组,通过隧道送达转交地址处。
- 在转交地址处解除隧道封装,恢复原始的IP分组,这样移动结点在外网就能收到这些发送给他的IP分组。
- 移动结点在外网通过外网的路由器或外部代理向通信对端发送IP数据报。
- 移动结点来到另一个外网时,只需向本地代理更新注册的转交地址,就可继续通信
- 移动结点回到本地网时,向本地代理注销转交地址,这时移动结点又将使用传统的TCP/IP方式进行通信。
移动IP为移动主机设置了两个IP地址及主地址和辅地址(转交地址)。
移动主机在本地网时使用的是主地址,当移动到另一个网络时,需要获得一个临时的辅地址,但此时主地址仍然不变,当从外网回到本地网时,辅地址改变或撤销,而主地址仍然不变。
网络层设备
冲突域是指连接到同一物理介质上所有结点的集合,这些结点之间存在介质争用的现象。在OSI参考模型中,冲突域被视为第一层概念,像集线器,中继器等无脑复制转发信号的第一层设备所连接的结点都属于同一个冲突域,也就是说他们不能划分冲突。而第二层(网桥、交换机)第三层(路由器)都可以划分冲突域。
广播域是指接收同样广播消息的结点集合,也就是说,在该集合中的任意一个结点发送一个广播帧,其他能收到这个帧的结点都被认为是该广播域的一部分。在OSI参考模型中,广播域被视为第二层概念,像第一层(集线器),第二场(交换机)设备所连接的结点都属于同一个广播域。而路由器作为第三层设备可以划分广播域,即可以连接不同的广播域。
通常所说的局域网(LAN)特指路由器分割的网络,也就是广播域。
路由器
路由器是一种具有多个输入和输出端口的专用计算机,其任务是连接不同的网络连接(异构网络)并完成路由转发。在多个逻辑网络(即多个广播域)互联时必须使用路由器。
当源主机要向目标主机发送数据报时,路由器先检查源主机与目标主机是否连接在同一个网络上,如果源主机和目标主机都在同一个网络上,那么_直接交付_而无需通过路由器;如果源主机和目标主机不在同一个网络上,那么路由表按照转发表(路由表)指出的路由将数据报转发给下一个路由器,这称为_间接交付_。
可见在同一个网络中的传递数据,无需路由器的参与,而跨网络通信必须通过路由器进行转发。
例如,路由器可以连接不同的LAN,连接不同的VLAN,连接不同的WAN,或把LAN和WAN互联起来。路由器隔离了广播域。
从结构上看,路由器由路由选择和分组转发两部分构成。而从模型的角度看,路由器是网络层设备,实现了网络模型的下三层(物理层,数据链路层和网络层)。
如果一个存储转发设备实现了某个层次的功能,那么它就可以互联两个在该层次上使用不同协议的网段(网络)。
如网桥实现了物理层和数据链路层,那么网桥可以互联两个物理层和数据链路层不同的网段;
但中继器实现了物理层后却不能互联两个物理层不同的网段。这是因为中继器不是存储转发设备,它属于直通式设备。
路由选择部分也称_控制部分_,其核心构件是路由选择处理机,其任务是根据所选定的路由选择协议构造出路由表,同时经常或定期地和相邻路由器交换路由信息而不断更新和维护路由表。
_分组转发_部分由三部分构成:交换结构、一组输入端口和一组输出端口。输入端口在从物理层接收到的比特流中提取出数据链路层帧,从帧中提取出网络层数据报;输出端口则执行恰好相反的操作。交换结构是路由器的关键部件,它根据转发表对分组进行处理,将某个输入端口进入的分组从一个合适的输出端口转发出去。有三种常见的交换方法,通过存储器进行交换,通过总线进行交换和通过互联网络进行交换,交换结构本身就是一个网络。
路由器主要完成两个功能:
- 分组转发。处理通过路由器的数据流,关键操作是转发表查询、转发及相关的队列管理和任务调度等。
- 路由计算。通过和其他的路由器进行基于路由协议的交互,完成路由表的计算。
路由器和网桥的重要区别是网桥与高层协议无关,而路由器是面向协议的,它根据网络地址进行操作,并进行路由选择、分段、帧格式转换、对数据报的时间和流量进行控制等。现今的路由器一般都提供多种协议的支持,包括OSI、TCP/IP、IPX等。
路由表与路由转发
路由表是根据路由选择算法得出的,主要用途是路由选择。
标准的路由表有四个项目:
- 目的网络IP地址
- 子网掩码
- 下一跳IP地址
- 接口
例如,下图网络拓扑中R1的路由表,表中包含到互联网的默认路由。

转发表是从路由表得出的,其表项和路由表项有直接的对应关系,但转发表的格式和路由表的格式不同,其结构应使得查找过程最优化,而路由表则需要使得对网络拓扑的变化的计算最优化。
转发表中含有一个分组将要发往的目的地址,以及分组的下一跳(下一步接收者的目的地址,实际为MAC地址)。为了减少转发表的重复项目,可以使用一个默认路由代替所有具有相同下一跳的项目,并将默认路由设置得比其他项目的优先级低。
路由表总是用软件来实现,转发表可以用软件来实现,甚至可以用特殊的硬件来实现。
注意转发和路由选择的区别:
“转发”是路由器根据转发表把收到的IP数据报从合适的端口转发出去,它仅涉及一个路由器。
“路由选择”则涉及很多路由器,路由表是由许多路由器协同工作的结果。这些路由器按照复杂的路由算法,根据从各相邻路由器得到的关于网络拓扑的变化情况,动态地改变所选择的路由,从而构造出整个路由表。

浙公网安备 33010602011771号