第4章 网络层
网络层(network layer)负责为分组交换网上的不同主机提供通信,在发送数据时,将运输层产生的报文段或用户数据报封装成分组或包进行传送。在TCP/IP体系中,分组也叫做IP数据包,或简称为数据报。
4.1 网络层的几个重要概念
4.1.1 网络层提供的两种服务
简介
在计算机网络领域,网络层应该向运输层提供怎样的服务(“面向连接”还是“无连接”)曾引起了长期的争论。
争论焦点的实质就是:在计算机通信中,可靠交付应当由谁来负责?是网络还是端系统。
一种观点:让网络负责可靠交付
-
借助于电信网的成功经验,让网络负责可靠交付。
-
模仿电信网络,使用面向连接的通信方式。
- 通信之前先建立虚电路(Virtual Circuit),以保证双方通信所需的一切网络资源。
- 再使用可靠传输的网络协议,使所发送的分组无差错、按序到达终点,不丢失、不重复。
-
虚电路服务
- 虚电路表示这只是一条逻辑上的连接,分组都沿着这条逻辑链接按照存储转发方式传送,而并不是真正建立了一条物理连接。
- 分组交换的虚连接和电路交换的链接只是类似,但并不完全一样。
- 电路交换的电话通信事先建立了一条真正的链接。
另一种观点:网络提供数据服务
互联网的先驱者提出了一种崭新的网络设计思路。
网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。
-
网络在发送分组时不需要先建立连接。每一个分组(即IP数据包)独立发送,与其前后的分组无关(不进行编号)。
-
网络层不提供服务质量的承诺。即所传送的分组可能出错、丢失、重复和失序(不按序到达终点),当然也不保证分组传送的时限。
-
数据报服务
-
尽最大努力交付
- 由于传输网络不提供端到端的可靠传输服务,这就使网络中的路由器可以做得比较简单,而且价格低廉(与电信网的交换机相比较)。
- 如果主机(即端系统)中的进程之间的通信需要是可靠的,那么就由网络的主机中的运输层负责可靠交付(包括差错处理、流量控制等)。
- 采用这种设计思路的好处是:网络的造价大大降低,运行方式灵活,能够适应多种应用。
- 互联网发展到今日的规模,充分证明了当初采用这种设计思路的正确性。
虚电路服务与数据包服务的对比
对比的方面 | 虚电路服务 | 数据报服务 |
---|---|---|
思路 | 可靠通信应当由网络来保证 | 可靠通信应当由用户主机来保证 |
连接的建立 | 必须有 | 不需要 |
终点地址 | 尽在连接建立阶段使用,每个分组使用段的虚电路号 | 每个分组都有重点的完整地址 |
分组的转发 | 属于同一条虚电路的分组均按照同一路由进行转发 | 每个分组独立选择路由进行转发 |
当节点出故障时 | 所有通过出故障的节点的虚电路均不能工作 | 出故障的节点可能会丢失分组,一些路由可能会发生变化 |
分组的顺序 | 总是按发送顺序到达终点 | 到达终点时不一定按发送顺序 |
端到端的差错处理和流量控制 | 可以由网络负责,也可以由用户主机负责 | 由用户主机负责 |
4.1.2 网络层的两个层面
不通网络中的两个主机之间的通信,要经过若干个路由器转发分组来完成,在路由器之间传送的信息有以下2大类:1. 数据。2. 路由信息(为数据传送服务)。
数据层面
- 路由器根据本路由器生成的转发表,把收到的分组从查找到的对应接口转发出去。
- 独立工作。
- 采用硬件进行转发,速度快。
控制层面
- 根据路由选择协议所用的路由算法计算路由,创建出本路由器的路由表。
- 许多路由器协同动作。
- 采用软件计算,慢。
4.2 网际协议 IP
网际协议IP(Internet Protocol)是TCP/IP体系中两个最主要的协议之一。
与IP协议配套使用的还有三个协议:
- 地址解析协议ARP(Address Resolution Protocol)
- 网际控制报文协议ICMP(Internet Control Message Protocol)
- 网际组管理协议IGMP(Internet Group Management Protocol)
4.2.1 虚拟互连网络
如果将网络互连并能够相互通信,会遇到许多问题需要解决如
- 不同的寻址方案
- 不同的最大分组长度
- 不同的网络接入机制
- 不同的超时控制
- 不同的差错恢复方法
- 不同的状态报告方法
- 不同的路由选择技术
- 不同的用户接入控制
- 不同的服务(面向连接服务和无连接服务)
- 不同的管理与控制方式等
使用一些中间设备进行互连
- 将网络互相连接起来要使用一些中间设备。
- 中间设备又称为中间系统或中继(relay)系统。
- 有以下五种不同的中间设备:
- 物理层中继系统:转发器(repeater)。
- 数据链路层中继系统:网桥或桥接器(bridge)。
- 网络层中继系统:路由器(router)。
- 网桥和路由器的混合物:桥路器(brouter)。
- 网络层以上的中继系统:网关(gateway)
网络互连使用路由器
- 当中继系统是转发器或网桥时,一般并不称之为网络互连,因为这仅仅是一个把网络扩大了,而这仍然是一个网络。
- 网关由于比较复杂,目前使用的较少。
- 网络互连都是指用路由器进行网络互连和路由选择。
- 由于历史的原因,许多有关TCP/IP的文献将网络层使用的路由器成为网关。
虚拟互联网络的意义
- 所谓虚拟互联网络也就是逻辑互联网络,他的意思就是互连起来的各种物理网络的异构性本来就是客观存在的,但是我们利用IP协议就可以使这些性能各异的网络从用户看起来好像是一个统一的网络。
- 使用IP协议的虚拟互联网络可见成为IP网。
- 使用虚拟互连网络的好处是:当互联网上的主机进行通信时,就好像一个网络上通信一样,而看不见互连的各具体的网络异构的细节。
- 互联网(Internet)就是一个虚拟互联网络。
从网络层看IP数据报的传送
如果只从网络层考虑问题,那么IP数据报就可以想象是在网络层传送。
4.2.2 IP地址
在TCP/IP体系中,IP地址是一个最基本的概念。没有IP地址,就无法和网上其他设备进行通信。
IP地址及其表示方法
- 我们把整个因特网看成一个单一的、抽象的网络。
- IP地址就是给每个链接在互联网上的主机(或路由器)分配的一个在全世界范围内唯一的32位标识符。
- IP地址现在由互联网名字和数字分配机构ICANN(Internet Corporation for Assigned Names and Numbers)进行分配。
点分十进制记法
机器中存放的IP地址是32位二进制代码,每8位为一组,将每8位的二进制数转换为十进制数,采用点分十进制记法则进一步提高可读性。
IP地址采用2级结构
分类IP地址
- 将IP地址划分为若干个固定类。
- 每一类地址都有两个固定长度的字段组成,其中一个字段是网络号 net-id,它标志主机(或路由器)所连接到的网络,而另一个字段则是主机号 host-id,它标志该主机(或路由器)。
- 主机号在它前面的网络号所指明的网络范围内必须是唯一的。
- 由此可见,一个IP地址在整个互联网范围内是唯一的。
各类IP地址的网络号字段和主机号字段
一般不指派的特殊IP地址
网络号 | 主机号 | 源地址使用 | 目的地址使用 | 代表的意思 |
---|---|---|---|---|
0 | 0 | 可以 | 不可以 | 在本网络上的本主机(DHCP协议) |
0 | host-id | 可以 | 不可以 | 本网络上的某台主机host-id |
全1 | 全1 | 不可 | 可以 | 之在本网络上进行广播(各路由器均不转发) |
net-id | 全1 | 不可 | 可以 | 对net-id上的所有主机进行广播 |
127 | 非全0或全1的任何数 | 可以 | 可以 | 用作本地软件换回测试之用 |
分类的IP地址的优点和缺点
-
优点:
- 管理简单
- 使用方便
- 转发分组迅速
- 划分子网,灵活地使用。
-
缺点:
- 设计上不合理
- 大地址快,浪费地址资源;
- 即使采用划分子网的方法,也无法解决IP地址枯竭的问题。
无分类编址CIDP
-
CIDR(Classless Inter-Domain Routing)无分类域间路由选择。
-
CIDR消除了传统的A类、B类和C类地址以及划分子网的概念,可以更加有效地分配IPv4的地址空间,但仍然无法解决IP地址枯竭的问题。
-
要点:
- 网络前缀
- 地址块
- 地址掩码
(1)网络前缀
(2)地址块
-
CIDR把网络前缀都相同的连续的IP地址组成“CIDR地址块”。
-
一个CIDR地址块包干的IP地址数目,取决于网络前缀的位数。
-
例:128.14.32.0/20表示的地址块共有2^12^个地址(因为斜线后面的20是网络的前缀的位数,所以这个地址的主机号是12位)。
- 这个地址块的起始地址是128.14.32.0。
- 在不需要指出地址块的起始地址时,也可将这样的地址块简称为“/20地址块”。
- 128.14.32.0/20地址快的最小地址:128.14.32.0
- 128.14.32.0/20地址块的最大地址:128.14.47.255
- 全0和全1的主机号地址一般不使用。
-
注意:地址表示的含义
128.14.35.7/20 是IP地址,同时指明了网络前缀为20位。该地址是128.14.32.0/20地址块中的一个地址。
128.14.32.0/20 是包含有多个IP地址的地址块,同时也是这个地址块中主机号为全0的IP地址。
128.14.35.7 是IP地址,但未指明网络前缀长度,不知道其网络地址。
128.14.32.0 不能知名一个网络地址,因为无法知道网络前缀是多少。
(3)地址掩码(address mask)
-
又称子网掩码(subnet mask),用于找出IP地址中的子网部分。
-
子网掩码长度=32位
-
目的:让机器从IP地址迅速算出网络地址。
-
由一连串1和接着的一连串0组成,而1的个数就是网络前缀的长度。
-
例如:/20地址块的地址掩码:
11111111 11111111 11110000 00000000
点分十进制记法:255.255.240.0
默认地址掩码
常用的CIDR地址块
构成超网
-
前缀长度不超过23位的CIDR地址块都包含了多个C类地址。
-
这些C类地址合起来就构成了超网。
-
CIDR地址块中的地址数一定时2的整数次幂。
-
网络前缀越短,其地址块所包含的地址数就越多。而在三级结构的IP地址中,划分子网是使网络前缀变长。
-
CIDR的一个好处是:可以更加有效地分配IPv4的地址空间,可根据客户的需要分配适当大小的CIDR地址块。
三个特殊的CIDP地址块
路由聚合(route aggregation)
路由聚合有利于减少路由器之间的路由选择信息的交换,从而提高了整个互联网的性能。
CIDR地址块划分举例
这个ISP共有64个C类网络。如果不采用CIDR技术,则在与该ISP的路由器交换信息的每一个路由器的路由表中,就需要有64个项目。但采用地址聚合后,只需要用路由聚合后的1个项目206.0.64.0/18就能找到该ISP。
IP地址的特点
- IP地址是一种分等级的地址结构。分两个等级的好处是:
- 第一,IP地址管理机构在分配IP地址时只分配网络号,而剩下的主机号则由得到该网络号的单位自行分配。这样就方便了IP地址的管理。
- 第二,路由器仅根据目的主机所连接的网络号来转发分组(而不考虑目的主机号),这样就可以使路由表中的项目数大幅度减少,从而减小了路由表所占的存储空间。
- 实际上IP地址是标志一个主机(或路由器)和一条链路的接口。
- 当一个主机同时连接到两个网络上时,该主机就必须同时具有两个相应的IP地址,其网络号net-id必须是不同的。这种主机成为多归属主机(multihomed host)
- 由于一个路由器至少应当连接到两个网络(这样它才能将IP数据报从一个网络转发到另一个网络),因此一个路由器至少应当有两个不同的IP地址。
- 用集线器或交换机连接起来的若干个局域网仍为一个网络,因此这些局域网都具有同样的网络号net-id。
- 所有分配到网络号net-id的网络,无论是范围很小的局域网,还是可能覆盖很大地理范围的广域网,都是平等的。
4.2.3 IP地址与MAC地址
IP地址与硬件地址是不同的地址。
-
从层次的角度看
- 硬件地址(或物理地址)是数据链路层和物理层使用的地址。
- IP地址是网络层和以上各层使用的地址,是一种逻辑地址(称IP地址是逻辑地址是因为IP地址是用软件实现的)。
-
IP地址放在IP数据报的首部,而MAC地址则放在MAC帧的首部。
从协议栈的层次看数据的流动
从虚拟的IP层上看IP数据报的流动
在链路上看MAC帧的流动
==在IP层抽象的互联网上只能看到IP数据报。图中的IP~1~—>IP~2~表示从源地址IP~1~到目的地址IP~2~。两个路由器的IP地址并不出现在IP数据报的首部中。路由器只根据目的站的IP地址的网络号进行路由选择。==
==在具体的物理网络的链路层只能看见MAC帧而看不见IP数据报==
==IP层抽象的互联网屏蔽了下层很复杂的细节。在抽象的网络层上讨论问题,就能够使用统一的、抽象的IP地址研究主机和主机或主机和路由器之间的通信。==
4.2.4 地址解析协议 ARP
简介
- 通信时使用了两个地址:
- IP地址(网络层地址)
- MAC地址(数据链路层地址)
地址解析协议ARP的作用
- 已经知道了一个机器(主机或路由器)的IP地址,如何找出其相应的硬件地址?
- 地址解析协议ARP就是用来解决这个问题的。
- ARP作用:从网络层使用的IP地址,解析出在数据链路层使用的硬件地址。
ARP高速缓存
ARP高速缓存(ARP cache),存放在局域网内各主机和路由器的IP地址到硬件地址的映射表。\<IP address; MAC address; TTL> TTL(Time To Live):地址映射有效时间。
地址解析协议ARP要点
- 当主机A欲向本局域网上的某个主机B发送IP数据报时,就先在其ARP高速缓存中查看有无主机B的IP地址。
- 如有,就可查出其对应的硬件地址,再将此硬件地址写入MAC帧,然后通过局域网将该MAC帧发往此硬件地址。
- 如没有,ARP进程在本局域网上广播发送一个ARP请求分组。收到ARP相应分组后,将得到的IP地址到硬件地址的映射写入ARP高速缓存。
- ARP请求分组:包含发送方硬件地址/发送方IP地址/目标方硬件地址(未知时填0)/目标方IP地址。
- 本地广播ARP请求(路由器不转发ARP请求)。
- ARP相应分组:包含发送方硬件地址/发送方IP地址/目标方硬件地址/目标方IP地址。
- ARP分组封装在物理网络的帧中传输。
应当注意的问题
ARP是解决同一个局域网</上的主机或路由器的IP地址和硬件地址的映射问题。
- 主机或路由器要和本网络上的另一个已知IP地址的主机或路由器进行通信。
- 当目的主机和源主机在不同一个局域网,则通过ARP找到本局域网上的某个路由器的硬件地址,将分组发送给该路由器,把分组转发给下一个网络。剩下的工作就由下一个网络来做。
- 从IP地址到硬件地址的解析是自动进行的,主机的用户对这种地址解析过程是不知道的。
使用ARP的四种典型情况
- 发送方是主机,要把IP数据报发送到本网络上的另一个主机。这时用ARP找到目的主机的硬件地址。
- 发送方是主机,要把IP数据报发送到另一个网络上的一个主机。这时用ARP找到本网络上的一个路由器的硬件地址。剩下的工作由这个路由器来完成。
- 发送方是路由器,要把IP数据报转发到本网络上的一个主机。这时用ARP找到目的主机的硬件地址。
- 发送方是路由器,要把IP数据报转发到另一个网络上的主机。这时用ARP找到本网络上另一个路由器的硬件地址。剩下的工作由这个路由器完成。
为什么不直接使用硬件地址进行通信?
- 由于全世界存在着各式各样的网络,它们使用不同的硬件地址。要使这些异构网络能够互相通信就必须进行非常复杂的硬件地址转换工作,因此几乎是不可能的事。
- IP编址把这个复杂问题解决了。连接到互联网的主机只需各自拥有一个唯一的IP地址,它们之间的通信就像连接在同一个网络上那样简单方便,因为上述的调用ARP的复杂过程都是由计算机软件自动进行的,对用户来说是看不见这种调用过程的。
- 因此,在虚拟的IP网络上使用IP地址进行通信给广大的计算机用户带来了很大的方便。
逆地址解析协议RAPR
- 逆地址解析协议RARP(Reverse ARP)使只知道自己硬件地址的主机能够知道其IP地址。
- 这种主机往往是无盘工作站。因此RARP协议目前已很少使用。
4.2.5 IP数据报格式
-
一个IP数据报由首部和数据两部分组成。
-
首部的前一部分是固定长度,共20字节,是所有IP数据报必须具有的。
-
在首部的固定部分的后面是一些可选字段,其长度是可变的。
-
版本:占4位,指IP协议的版本。目前的IP协议版本号为4(即IPv4)。
-
首部长度:占4位,可表示的最大数值是15个单位(一个单位为4字节),因此IP的首部长度的最大值是60字节。
-
区分服务:占8位,用来获得更好的服务。在旧标准中叫做服务类型,但实际上一直未被使用过。1998年这个字段改名为区分服务。只有在使用区分服务(DiffServ)时,这个字段才起作用。在一般情况下都不使用这个字段。
-
总长度:占16位,指首部和数据之和的长度,单位为字节,因此数据报的最大长度为65535字节。总长度必须不超过最大传送单元MTU。
-
标识(identification):占16位,它是一个计数器,用来产生IP数据报的标识。
-
标志(flag):占3位,目前只有两位有意义。标志字段的最低位是MF(More Fragment)。MF=1表示后面还有“分片”。MF=0表示最后一个分片。标志字段中间的一位是DF(Don't Fragment)。只有当DF=0时才允许分片。
-
片偏移:占13位,指出:较长的分组在分片后某片在原分组中的相对位置。片偏移以8个字节为偏移单位。
-
生存时间:占8位,记为TTL(Time To Live),指示数据报在网络中可通过的路由器数的最大值。
-
协议:占8位,指出此数据报携带的数据使用何种协议,以确定目的主机的IP层需要将数据部分上交给那个协议进程。
==IP协议支持多种协议,IP数据报可以封装多种协议PDU==
- 首部检验和:占16位,秩检验数据报的首部,不检验数据部分。这里不采用CRC检验码而采用简单的求校验和计算方法。
-
-
【例4-1】IP数据报分片
一数据包的总长度为3820字节,其数据部分的长度为3800字节(使用固定首部),需要分片为长度不超过1420字节的数据报片。
练习
一个3200bit长的TCP报文传到IP层,加上160bit的首部后成为数据报。下面的互联网由两个局域网通过路由器连接起来。但第二个局域网所能传送的最大数据帧中的数据部分只有1200bit。因此数据包在路由器必须进行分片。试问需要分成几个片?第二个局域网向其上层要传送多少比特的数据?
答:
- 一片容纳的纯数据?1200-160=1040.由于偏移量按2的整次幂算,实际一片可放数据1024bit。
- 几片?3200bit分成4片(因3片,3*1024=3072不够)
- 要传送的数据总数:3200+4*160=3840bit。
思考
在因特网中将IP数据报分片传送的数据报在最后的目的主机进行组装。还可以有另一种做法,即数据报片通过一个网络就进行一次组装。试比较两种方法的优劣。
- 优:路由器组装比较简单、延时小。
- 劣:经过路由器的片不全(多路径)。
- 劣:组装后可能再分片(更小,多次组装)。
IP数据报首部的可变部分
- IP首部的可变部分就是一个选项字段,用来支持排错、测量以及安全等措施,内容很丰富。
- 选项字段的长度可变,从1个字节到40个字节不等,取决于所选择的项目。
- 增加首部的可变部分是为了增加IP数据报的功能,但这同时也使得IP数据报的首部长度成为可变的。这就增加了每一个路由器处理数据报的开销。
- 实际上这些选项很少被使用。
4.3 IP层转发分组的过程
4.3.1 基于终点的转发
简介
- 分组在互联网中是逐条转发的。
- 基于终点的转发:基于分组首部中的目的地址传送和转。发
实例
- 假设:有四个A类网络通过3个路由器连接在一起。每一个网络上都有1万台主机。
- 若按目的主机号来制作路由表,每一个路由表就有4万个项目,即4万行(每一行对应于一台主机),则所得出的路由表就会过于庞大。
- 但若按主机所在的网络地址来制作路由表,那么每一个路由器中的路由表就只包含4个项目(每一行对应于一个网络),这样就可使路由表大大简化。
怎么从IP~2~得到下一站的MAC地址?
- 从IP~2~的到下一站的IP地址IP~x~
- 从IP~x~得到其MAC地址ARP(已讲)
4.3.2 最长前缀匹配
简介
- 使用CIDR时,路由表中的每个项目由“网络前缀”和“下一跳地址”组成。在查找路由表时可能会得到不止一个匹配结果。
- 应当从匹配结果中选择具有最长网络前缀的路由:最长前缀匹配(longest-prefix matching)
- 网络前缀越长,其地址块就越小,因而路由就越具体(more specific)。
- 最长前缀匹配又称为最长匹配或最佳匹配。
最长前缀匹配举例
收到的分组的目的地址 D=206.0.71.130
路由表中的项目:
- 206.0.68.0/22
- 206.0.71.128/25
查找路由表中的第一个项目:
-
第一个项目206.0.68.0/22的掩码M为 M=11111111 111111111 11111100 00000000
因此只需要把D的第3个字节转换成二进制。
查找路由表中的第2个项目:
-
第2个项目206.0.71.128/25的掩码M=11111111 11111111 11111111 10000000
因此只需要把D的第四个字节转换成二进制
==选择两个匹配的地址中更具体的一个,即选择最长前缀的地址。==
转发表中的2种特殊的路由
-
主机路由(host route)
- 又叫做特定主机路由。
- 是对特定目的主机的IP地址专门指明的一个路由。
- 网络前缀就是a.b.c.d/32
- 放在转发表的最前面。
- 可方便地控制网络和测试网络,或需要考虑某种安全问题时采用。
-
默认路由(default route)
- 不管分组的最终目的网络在哪里,都有指定的路由器R来处理
- 用特殊前缀0.0.0.0/0表示。
- 可减少路由表所占用的空间和搜索路由表所用的时间。
-
默认路由举例
路由器分组转发算法
4.3.3 使用二叉线索查找转发表
简介
- 当路由表的项目数很大时,怎样设法减小路由表的查找时间就成为一个非常重要的问题。
- 为了进行更加有效的查找,通常是将无分类编址的路由表存放在一种层次的数据结构中,然后自上而下地按层次进行查找。这里最常用的就是二叉线索(binary tree)。
- IP地址种从左到右的比特值决定了从根节点逐层向下层延伸的路径,而二叉线索中的各个路径就代表路由表中存放的各个地址。
- 为了提高二叉线索的查找速度,广泛使用了各种压缩技术。
用5个前缀构成的二叉线索
从二叉线索的根节点自顶向下的深度最多有32层,每一层对应于IP地址中的一位。一个IP地址存入二叉线索树的规则很简单。先检查IP地址左边的第一位,如为0,则第一层的节点就在根节点的左下方;如为1,则在右下方。然后再检查地址的第二位,构造出第二层的节点。以此类推,直到唯一前缀的最后一位。
4.4 网际控制报文协议ICMP
简介
- 为了更有效地转发IP数据报和提高交付成功的机会,在网际层使用了网际控制报文协议协议ICMP(Internet Control Message Protocol)。
- ICMP是互联网的标准协议。
- ICMP允许主机或路由器报告差错情况和提供有关异常情况的报告。
- 但ICMP不是高层协议(看起来好像是高层协议,因为ICMP报文是装在IP数据报中,作为其中的数据部分),而是IP层协议。
ICMP报文的格式
4.4.1 ICMP报文的种类
简介
- ICMP报文有三大类,即
- ICMP 差错报告报文
- ICMP 控制报文
- ICMP 询问报文
- ICMP报文的前4个字节是统一的格式,共有三个字段:即类型、代表和校验和。接着的4个字节的内容与ICMP的类型有关。
ICMP差错报文的3种类型
- 终点不可达(类型为“3”)
- 代码0:Network Unreachable——网络不可达
- 代码1:Host Unreachable——主机不可达
- 代码2:Protocol Unreachable——协议不可达
- 代码3:Port Unreachable——端口不可达
- 代码4:Fragmentation needed but not frag. bit set——需要进行分片但设置不分片比特
- ...
- 代码15:
- 时间超过(类型为“11”)
- 代码0:TTL equals 0 during transit——传输期间生存时间为0。
- 代码1:TTL equals 0 during reassembly——在数据报组装期间生存时间为0。
- 参数问题(类型为“12”)
- 代码0:IP header bad(catchall error)——坏的IP首部(包括各种差错)。
- 代码1:Required options missing——缺少必要的选项。
ICMP差错报告报文的数据字段的内容
不应发送ICMP差错报告报文的几种情况
- 对ICMP差错报告报文不再发送ICMP差错报告报文。
- 对第一个分片的数据片的所有后续数据报片都不发送ICMP差错报告报文。
- 对具有多播地址的数据报都不发送ICMP差错报告报文。
- 对具有特殊地址(如127.0.0.0或0.0.0.0)的数据报不发送ICMP差错报告报文。
ICMP控制报文共有2种
-
原点抑制报文(不再使用)(类型为“4”)
-
改变路由(重定向)(Redirect)(类型为“5”)
-
举例:
ICMP询问报文
-
类型
-
回送请求和回答报文
-
时间戳请求和回答报文
-
信息请求与回答报文(不再使用)
-
掩码地址请求和回答报文(不再使用)
-
路由器询问和通告报文(不再使用)
-
4.4.2 ICMP的应用举例
PING(Packet Internet Groper)
- PING 用来测试两个主机之间的连通性。
- PING 使用了ICMP回送请求与会送回答报文。
- PING是应用层直接使用网络层ICMP的例子,它没有通过运输层的TCP或UDP。
Traceroute的应用举例
- 在Windows操作系统中这个命令是tracert。
- 用来跟踪一个分组从源点到终点的路径。
- 它利用IP数据报中的TTL字段和ICMP时间超过差错报告报文实现对从源点到终点的路径的跟踪。
发现路径MTU(Max Transmission Unit)
- 利用IP数据报标识字段的中间位DF(Don't Fragment)
- 步骤
- 将IP数据报标识字段的DF位置1;
- 当路由器发现IP数据报长度大于MTU时,丢弃并发回一个要求分片的ICMP报文;
- 将IP数据报长度递减,DF位置1重发,直到不再收到ICMP报文。
4.5 IPv6
简介
IP是互联网的核心协议。互联网经过几十年的飞速发展,到2011年2月IPv4的32位地址已经耗尽。ISP已经不能再申请到新的IP地址块了。我国在2014—2015年也逐步停止了向新用户和应用分片IPv4地址。解决IP地址耗尽的根本措施就是采用具有更大地址空间的新版本的IP,即IPv6。
4.5.1 IPv6的基本首部
简介
- IPv6仍支持无连接的传送,但将协议数据单元PDU称为分组。
- 所引进的主要变化如下:
- 更大的地址空间。IPv6将地址从IPv4的32位增大到了128位。
- 扩展的地址层次结构。
- 灵活的首部格式。Ipv6定义了许多可选的扩展首部
- 改进的选项。IPv6允许数据报含有选项的控制信息,其选项放在有效载荷中。
- 允许协议继续扩充。
- 支持即插即用(即自动配置)。因此IPv6不需要使用DHCP。
- 支持资源的预分配。IPv6支持实时视像等要求,保证一定的带宽和时延的应用。
- IPv6首部改为8字节对齐。首部长度必须是8字节的整数倍。原来的IPv4首部是4字节对齐。
IPv6数据报的一般形式
-
IPv6数据报由两大部分组成:
-
基本首部(base header)
-
有效载荷(payload)。有效载荷也称为净负荷。有效载荷允许有零个或多个扩展首部(extension header),再后面是数据部分。
-
IPv6数据报的基本首部
- IPv6将首部长度变为固定的40字节,称为基本首部。
- 把首部中不必要的功能取消了,使得IPv6首部的字段数减少到只有8个。
- IPv6对首部中的某些字段进行了如下的更改:
- 取消了首部长度字段,因为首部长度是固定的40字节;
- 取消了服务类型字段;
- 取消了总长度字段,改用有效载荷长度字段;
- 把TTL字段改称为跳数限制字段;
- 取消了协议字段,改用下一个首部字段;
- 取消了检验和字段;
- 取消了选项字段,而使用扩展首部来实现选项功能。
各字段含义
- 版本(version)——4位。它指明了协议的版本,对IPv6该字段总是6。
- 通信量类(traffic class)——8位。这是为了区分不同的IPv6数据包的类别或优先级。目前正在进行不同的通信类性能的实验。
- 流标号(flow label)——20位。“流”是互联网络上从特定源点到特定终点的一系列数据报,“流”所经过的路径上的路由器都保证指明的服务质量。所有属于同一个流的数据报都具有同样的流标号。
- 有效载荷长度(payload length)——16位。它指明IPv6数据报除基本首部以外的字节数(所有扩展首部都算在有效载荷之内),其最大值是64KB。
- 下一个首部(next header)——8位。它相当于IPv4的协议字段或可选字段。
- 跳数限制(hop limit)——8位。原站在数据报发出时即设定条数限制。路由器在转发数据报时将跳数限制字段中的值减1。当跳数限制的值为零时,就要将此数据报丢弃。
- 源地址——128位。是数据包的发送站的IP地址。
- 目的地址——128位。是数据报的接收站的IP地址。
IPv6的扩展首部
- IPv6把原来IPv4首部中选项的功能都放在扩展首部中,并将扩展首部留给路径两端的源站和目的站的主机来处理。
- 数据包途中经过的路由器都不处理这些扩展首部(只有一个首部例外,即逐跳选项扩展首部)。
- 这样就大大提高了路由器的处理效率。
六种扩展首部
在RFC 2460中定义了六种扩展首部:
- 逐跳选项
- 路由选择
- 分片
- 鉴别
- 封装安全有效载荷
- 目的站选项
每一个扩展首部都由若干个字段组成,他们的长度也各不相同。但所有扩展首部的第一个字段都是8位的“下一个首部”字段。此字段的值指出了该扩展首部后面的字段是什么。
4.5.2 IPv6的地址
简介
IPv6数据报的目的地址可以是以下三种基本类型地址之一:
-
单播(unicast):传统的点对点通信。
-
多播(multicast):一点对多点的通信。
-
任播(anycast):这是IPv6增加的一种类型。任播的目的站是一组计算机,但数据报在交付时只交付其中的一个,通常是距离最近的一个。
结点与接口
- IPv6将实现IPv6的主机和路由器均称为结点。
- 一个节点就可能有多个与链路相连的接口。
- IPv6地址是分配给结点上面的接口的。
- 一个接口可以有多个单播地址。
- 其中的任何一个地址都可以当作到达改结点的目的地址。即一个结点接口的单播地址可用来唯一地标志该结点。
冒号十六进制记法
-
在IPv6中,每个地址占128位,地址空间大于3.4×10^38^。
-
为了使地址再稍微简洁些,IPv6使用冒号十六进制记法(colon hexadecimal notation,简写为colon hex)。
-
每各16位的值用十六进制值表示,各值之间用冒号分隔。例如:
68E6:8C64:FFFF:FFFF:0:1180:960A:FFFF
-
在十六进制记法中,允许把数字前面的0省略。例如把0000中的前三个0省略,写成1个0。
零压缩
-
冒号十六进制记法可以允许零压缩(zero compression),即一连串连续的零可以为一对冒号所取代。
FF05:0:0:0:0:0:0:B3 可压缩为FF05::B3
-
注意:在任一地址中只能使用一次零压缩。
点分十进制记法的后缀
-
冒号十六进制记法可结合使用点分十进制记法的后缀,这种结合在IPv4向IPv6的转换阶段特别有用。
-
例如:0:0:0:0:0:0:0128.10.2.1 再使用零压缩即可得出 ::128.10.2.1
-
CIDR的斜线表示法仍然可用。
-
例如:60位的前缀12AB00000000CD3可记为:
12AB:0000:0000:CD30:0000:0000:0000:0000/60
或 12AB::CD30:0:0:0:0/60(零压缩)
或 12AB:0:0:CD30::/60(零压缩)
IPv6地址分类
==地址类型== | ==二进制前缀== |
---|---|
未指明地址 | 00...0(128位),可记为::/128。 |
环回地址 | 00...1(128位),可记为::1/128。 |
多播地址 | 11111111(8位),可记为FF00::/8。 |
本地链路单播地址 | 1111111010(10位),可记为FE80::/10。 |
全球单播地址 | (除上述四种外,所有其他的二进制前缀) |
-
未指明地址
- 这是16字节的全0地址,可缩写为两个冒号“::”。
- 这个地址只能为还没有配置到一个IP地址的主机当作源地址使用。
- 这类地址仅此一个。
-
环回地址
- 即0:0:0:0:0:0:0:1(记为 ::1)。
- 作用和IPv4的环回地址一样。
- 这类地址也是仅此一个。
-
多播地址
- 功能和IPv4的一样。
- 这类地址占IPv6地址总数的1/256。
-
本地链路单播地址(Link-Local Unicast Address)
- 有些单位的网络使用TCP/IP协议,但并没有连接到互联网上。连接在这样的网络上的主机都可以使用这种本地地址进行通信,但不能和互联网上的其他主机通信。
- 这类地址占IPv6地址总数的1/1024。
-
全球单播地址
- IPv6的这一类单播地址是使用得最多的一类。
- 曾提出过多种方案来进一步划分这128位的单播地址。
- 根据2006年发布的草案标准RFC4291的建议,IPv6单播地址的划分方法非常灵活。
4.5.3 从IPv4向IPv6过度
简介
-
向IPv6过渡只能采用逐步演进的办法,同时,还必须使新安装的IPv6系统能够向后兼容:
IPv6系统必须能够接收和转发IPv4分组,并且能够为IPv4分组选择路由。
-
两种向IPv6过渡的策略:
- 使用双协议栈
- 使用隧道技术
双协议栈
- 双协议栈(dual stack)是指在完全过渡到IPv6之前,使一部分主机(或路由器)装有两个协议栈,一个IPv4一个IPv6。
- 双协议栈的主机(或路由器)记为IPv6/IPv4.表名它同时具有两种IP地址:一个IPv6地址和一个IPv4地址。
- 双协议栈主机在和IPv6主机通信时是采用IPv6地址,而和IPv4主机通信时就采用IPv4地址。
- 根据DNS返回的地址类型可以确定使用IPv4地址还是IPv6地址。
隧道技术
- 在IPv6数据报要进入IPv4网络时,把IPv6数据报封装成为IPv4数据报,整个的IPv6数据报变成了IPv4数据报的数据部分。
- 当IPv4数据报离开IPv4网络中的隧道时,再把数据部分(即原来的IPv6数据报)交给主机的IPv6协议栈。
4.5.4 ICMPv6
简介
- IPv6也不保证数据报的可靠交付,因为互联网中的路由器可能会丢弃数据报。
- 因此IPv6也需要使用ICMP来反馈一些差错信息。新的版本称为ICMPv6。
- 地址解析协议ARP和网际组管理协议IGMP协议的功能都已经被合并到ICMPv6中。
ICMPv6报文的分类
-
ICMPv6是面向报文的协议,它利用报文来报告差错,获取信息,探测临站或管理多播通信。
-
ICMPv6还增加了几个定义报文的功能及含义的其他协议。
4.6 互联网的路由选择协议
4.6.1 有关路由器选择协议的几个基本概念
理想的路由算法
- 必须是正确和完整的
- 在计算上应简单
- 能适应通信量和网络拓扑的变化(自适应性)
- 具有稳定性
- 是公平的
- 是最佳的
代价
- 在研究路由选择时,需要给每一条链路知名一定的代价。
- 这里“代价”并不是指“钱”,而是由一个或几个因素综合决定的一种度量(metric),如链路长度、数据率、链路容量、是否要保密、传播时延等,甚至还可以是一天中某一个小时内的通信量、结点的缓存被占用的程度、链路差错率等。
最佳路由
- 不存在一种绝对的最佳路由算法。
- 所谓“最佳”只能是相对于某一种特定要求下得出的的较为合理的选择而已。
- 实际的路由选择算法,应尽可能接近于理想的算法。
- 路由选择是个非常复杂的问题
- 它是网络中的所有结点共同协调工作的结果。
- 路由选择的环境往往是不断变化的,而这种变化有时无法事先知道。
从路由算法的自适应性考虑
- 静态路由选择策略——非自适应路由选择,其特点是简单和开销比较小,但不能及时适应网络状态的变化。
- 动态路由选择策略——自适应路由选择,其特点是能较好地适应网络状态的变化,但实现起来较为复杂,开销也比较大。
分层次的路由选择协议
-
原因一:互联网的规模非常大
如果让所有的路由器知道所有的网络应怎样到达,则这种路由表将非常大,处理起来也太花时间。而所有这些路由器之间交换路由信息所需要的带宽就会使互联网的通信链路饱和。
-
原因二:许多单位及要保密又要联网
不愿意外界了解本单位网络的布局细节和本部门所采用的路由选择协议,但同时还希望连接到互联网上。
-
结果:出现“自治系统”。
自治系统AS(Autonomous System)
- 定义:自治系统是在单一的技术管理下的一组路由器,而这些路由器使用一种内部的路由选择协议和共同的度量。
- 强调:一个AS对其他AS表现出的是一个单一的和一致的路由选择策略。
互联网有两大类路由选择协议
一个大的ISP就是一个AS
- 内部网关协议 IGP(Interior Gateway Protocol)即在一个自治系统内部使用的路由选择协议。如RIP和OSPF协议。
- 外部网关协议 EGP(External Gateway Protocol)是两个自治系统间互相传递路由选择信息所使用的协议。目前使用最多的是BGP-4。
自治系统和内部网关协议、外部网关协议
自治系统之间的路由选择也叫做域间路由选择(interdomain routing),在自治系统内部的路由选择叫做域内路由选择(intradomain routing)。
4.6.2 内部网关协议RIP
简介
- 路由信息协议RIP(Routing Information Protocol)是内部网关协议IGP中最先得到广泛使用的协议。
- RIP协议是互联网的标准协议。
- RIP是一种分布式的基于距离向量的路由选择协议。
- RIP协议只适用于小型网络
- 要点:域内!知道附近的路怎么走就行了
RIP工作原理
- RIP协议要求网络中的每一个路由器都要维护从它自己到其它每一个目的网络的距离记录(即“距离向量”)。
- RIP不能在两个网络之间同时使用多条路由。
“距离”的定义
-
从一路由器到直接连接的网络的距离定义为1。
-
从一个路由器到非直接连接的网络的距离定义为所经过的路由器数加1。
-
RIP协议中的“距离”也称为“跳数”(hop count),因为每经过一个路由器,跳数就加1。(也叫做跃点)
-
RIP认为一个好的路由就是它通过的路由器的数目少,即“距离短”。
-
RIP允许一条路径最多只能包含15个路由器。
-
“距离”的最大值为16时即相当于不可达。
-
RIP只选择一个具有最少路由器的路由(即最短路由),哪怕还存在另一条高速(低延迟)但路由器较多的路由。
RIP构造路由表的三个要点
-
与谁交换
仅与相邻路由器交换信息。
-
交换什么
交换当前本路由器所知道的全部信息,即自己的路由表。
-
何时交换
- 定时发:按固定的时间间隔交换路由信息,例如,每隔30秒。
- 主动发:当网络拓扑发生变化时,也及时向相邻路由器通告。
路由器之间交换信息
- 不断交换的目的
- 使得从每一个路由器到每一个目的网络的路由都是最短的(即跳数最少)。
- 最后所有路由器都有相同的路由表?
- 否。虽然所有的路由器最终都拥有了整个自治系统的全局路由信息,但由于每一个路由器的位置不同,它们的路由表当然也是不同的。
路由表的建立
- 路由器在刚刚开始工作时,只知道直接连接的网络的距离(此距离定义为1)。
- 以后,每一个路由器也只和数目非常有限的相邻路由器交换并更新路由信息。
- 经过若干次更新后,所有的路由器最终都会知道到达本自治系统中任何一个网络的最短距离和下一跳路由器的地址。
- RIP协议的收敛(convergence)过程较快,即在自治系统中所有的节点都能比较快地得到正确的路由选择信息。
距离向量算法
某路由器收到相邻路由器(其地址为X)的一个RIP报文:
-
首先修改此RIP报文中的所有项目:将“下一跳”字段中的地址都改为X,并将所有的“距离”字段的值加1。
每个项目有三个关键数据:到目的的网络N、距离是d、下一跳路由器是X
-
对修改后的RIP报文中的每一个项目,重复以下步骤:
若本路由表中没有目的网络N,则将该项目加到路由表中。
否则
若本路由表中下一跳路由器地址也是X,则用收到的项目替换之
否则{即本路由表中的目的网络是N,但下一跳路由器不是X}
若收到的项目中的距离小于本路由表中的距离,则进行更新。
否则什么也不做。
-
若3分钟后还没有收到相邻路由器的更新路由表,则将此相邻路由器记为不可达的路由器,即将距离置为16。
-
返回。
RIP-2协议的报文格式
- 首部(4个字节)
- 命定:指出报文的意义,1-请求路由信息,2-响应报文或路由更新报文。
- 版本、0对齐:略。
- 路由部分(每个路由用20字节)
- 地址族标识符(地址类别):用来标志所使用的协议。
- 路由标记:填入自治系统的号码,这是考虑使RIP有可能收到本自治系统以外的路由选择信息。
- 网络地址、子网掩码:目的网络地址及其子网掩码。
- 下一跳路由器地址:从本路由器出发的下一个路由器。
- 距离:到目的网络的距离。
RIP协议的位置
- RIP报文装入运输层的用户数据报UDP进行传送(使用UDP的端口520)。
- 因此,RIP协议的位置应当在应用层。但转发IP数据报的过程是在网络层完成的。
RIP协议的优缺点
-
优点
- 实现简单
- 开销小
-
缺点
-
限制网络规模:最大距离15(16为不可达)。
-
路由表很快变大:互相交换整个路由表。
-
更新收敛过程长,“坏”消息传播太慢。
-
4.6.3 内部网关协议OSPF
简介
- 开放最短路径优先OSPF(Open SPF)
- “开放”表名OSPF协议不是受某一家产商控制,而是公开发表的。
- “最短路径优先”是因为使用了Dijkstra提出的最短路径算法SPF(Shortest Path First)
- OSPF只是一个协议的名字,它并不表示其他的路由选择协议不是“最短路径优先”。
OSPF协议的基本特点
- OSPF最主要的特征是使用分布式的链路状态协议。
- OSPF的原理很简单,但实现起来却复杂。
OSPF交换路由的三个要点
- 与谁交换
- 用洪泛法(flooding):在本自治系统中,路由器通过所有输出端口向所有相邻路由器发送信息,接收者亦如此。
- 交换什么
- 发送的信息是与本路由器相邻的所有路由器的链路状态,但这只是路由器所知道的部分信息。
- “链路状态”就是说明本路由器都和那些路由器相邻,以及该链路的“度量”(metric)表示费用、距离、时延、带宽等。也称之为“代价”。
- 何时交换
- 只有当链路状态发生变化时,路由器才使用洪泛法向所有路由器发送此消息。
链路状态数据库(link-state database)
- 交换后的结果
- 所有的路由器最终都建立一个链路状态数据。
- 该数据库实际上就是全网的拓扑图,他在全网范围内是一致的(这称为链路状态数据库的同步)。
- 每个路由器知道什么——全网拓扑。包括网络共有多少路由器、那些路由器是相连的、连通的代价是多大,等等。(RIP仅知到下一跳,不知道全网)。
- 每个路由器能干什么——根据库,构造出来自己的路由表。
- OSPF的优点
- 更行过程收敛的快:链路状态数据库能较快的进行更新,使各个路由器能即时更新其路由表。
OSPF的区域(area)
- 为了使OSPF能够用于规模很大的网络,OSPF将一个自治系统再划分为若干个更小的范围,叫做区域
- 每个区域都有一个32bit的区域标识符(用点分十进制表示)。
- 区域也不能太大,在一个区域内的路由器最好不超过200个。
OSPF划分为两种不同的区域
划分区域
- 划分区域的好处就是将利用洪泛法交换链信息的范围局限于每一个区域而不是整个的自治系统,这就减少了整个网络上的通信量。
- 在一个区域内部的路由器只知道本区域的完整网络拓扑,而不知道其他区域的网络拓扑的情况。
- OSPF使用层次结构的区域划分。在上层的区域叫做主干区域(backbone area)。主干区域的标识符规定为0.0.0.0。主干区域的作用是用来连通其他在下层的区域。
OSPF直接使用IP数据报传送
- OSPF不用UDP而是直接使用IP数据报传送,可见OSPF的位置在网络层。
- OSPF构成的数据报很短。这样做可以减少路由信息的通信量。
- 数据报很短的另一好处是可以不必将长的数据报分片传送。分片传送的数据报只要丢失一个,就无法组装成原来的数据报,而整个数据报就必须重传。
OSPF的其他特点
- 指派代价
- OSPF对不同的链路可根据IP分组的不同服务类型TOS而设置成不同的代价。因此,OSPF对于不同类型的的业务可计算出不同的路由。
- 负载平衡
- 如果到一个目的网络有多条相同代价的路径,那么如果可以将通信量分配给这几条路径。这叫做多路径间的负载平衡。
- 身份验证
- 所有在OSPF路由器之间交换的分组都具有鉴别的功能。
- 支持CIDR
- 支持可变长度的子网划分和无分类编址CIDR。
- 刻画链路状态
- 每一个链路状态都带上一个32位的序号,序号越大状态就越新。
OSPF的数据报格式
- 版本——当前的版本号是2。
- 类型——可以是五种类型分组中的一种。
- 包括OSPF首部的分组长度,以字节为单位。
- 路由器标识符——标志发送该分组的路由器的接口的IP地址。
- 区域标识符——分组所属区域的标识符。
- 检验和——用来检测分组的差错。
- 鉴别类型——目前只有两种:0(不用)和1(口令)。
- 鉴别——0或8个字符的口令。
OSPF的五种分组类型
- 类型1,问候(Hello)分组,发现和维持邻站可达性。
- 每两个相邻路由器每隔10秒交换一次问候分组。
- 类型2,数据库描述(Database Description)分组。
- 向邻站发送自己的数据库中所有链路状态项目的摘要信息。
- 类型3,链路状态请求(Link State Request)分组。
- 向对方请求发送某些链路状态项目的详细信息。
- 类型4,链路状态更新(Link State Update)分组。
- 被问发:被请求(类型3)
- 主动发:自己链路状态变化了,用洪泛法对全网更新链路状态。
- 定时发:如每隔30s。
-
类型5,链路状态确认(Link State Acknowledgment)分组
- 收到更新分组后要发确认。
OSPF的基本操作
OSPF的工作过程
- 当一个路由器刚开始工作时,它通过问候分组得知有哪些相邻的路由器,以及将数据发往相邻路由器的“代价”。
- 每一个路由器用数据库描述分组和相邻路由器交换本数据中已有的链路状态摘要信息。
- 经过与相邻路由器交换数据库描述分组后,路由器使用链路状态请求分组,向对方请求(以链路状态更新分组)发送自己所缺少的某些链路状态项目的详细信息。通过一系列的这种分组交换,全网同步的链路数据库就建立了。
- 在网络运行的过程中,只要一个路由器的链路状态发生变化,该路由器就要使用链路状态更新分组,用可靠的洪泛法对全网更新链路状态。
- 收到链路状态更新分组者,要回复链路状态确认分组。
OSPF支持三种网络的连接
- 两个路由器之间的点对点连接
- 具有广播功能的局域网
- 采用了指定路由器的方法,非指定路由器不发送,这样广播的信息量就大大减少。
- 指定路由器代表该局域网上所有的链路,向连接到该网络上的各种路由器发送状态信息。
- 五广播功能的广域网
OSPF的其他特点
- 定时更新:OSPF还规定每隔一段时间,如30分组,要刷新一次数据库中的链路状态。
- 更适合大规模网络:由于一个路由器的链路状态只涉及到与相邻路由器的连通状态,与互联网的规模并无直接关系。因此当互联网规模很大时,OSPF协议要比距离向量协议RIP好得多。
- OSPF没有“坏消息传播得慢”的问题:根据统计,其相应网络变化的时间小于100ms。
指定的路由器
- 多点接入的局域网采用了指定的路由器(designated router)的方法,使广播的信息量大大减少。
- 指定的路由器代表该局域网上所有的链路向连接到该网络上的各路由器发送状态信息。
4.6.4 外部网关协议BGP
简介
- BGP(Border Gateway Protocol)是不同自治系统的路由器之间交换路由信息的协议。
- BGP的较新版本是1995年发表的BGP-4(BGP的第4个版本,RFC4271)。
- 取代旧的EGP[RFC 827]
- 可以将BGP-4简写为BGP。
AS之间选择路由为什么不用RIP或OSPF协议
- 互联网规模太大,AS之间统一路由选择困难
- 一个路由表有超过5万个表项,用DIjkstra算法耗时
- AS内部有自己选定的路由选择协议
- AS内部“代价”的表示不一定一样
- AS之间交换“可达性”信息较为合理
- AS之间的路由选择必须考虑有关策略
- 政治、安全或经济方面的考虑。
- 安全策略超出网络协议的范畴。
因此,外部网关协议BGP只能是力求寻找一条能够到达目的网络且比较好的路由(不能兜圈子),而并非要寻找一条最佳路由。
BGP“发言人”
-
BGP采用路径向量(path vector)协议
-
每一个自治系统的管理员要选择至少一个路由器作为该自治系统的“BGP”发言人
-
一般来说,两个BGP发言人都是通过一个共享网络连接在一起的,而BGP发言人往往就是BGP边界路由器,但也可以不是BGP边界路由器。
BGP交换路由信息
- 一个BGP发言人与其他自治系统中的BGP发言人要交换路由信息,就要先建立TCP连接,然后在此连接上交换BGP报文以建立BGP会话(session),利用BGP会话交换路由信息。
- 使用TCP连接能提供可靠的服务,也简化了路由选择协议。
- 使用TCP连接交换路由信息的两个BGP发言人,彼此称为对方的邻站或对等站。
BGP发言人交换路径向量
自治系统连通图
BGP发言人互相交换网络可达性的信息后,各BGP发言人就可找出到达各自治系统的比较好的路由。
BGP协议的特点
- 参与交换的结点少
- BGP协议交换路由信息的节点数量级是自治系统数的量级,这要比这些自治系统中的网络数少很多。
- 路由选择较简单
- 每一个自治系统中的BGP发言人(或边界路由器)的数目是很少的。这样就使得自治系统之间的路由选择不致过分复杂。
- BGP支持CIDR
- BGP的路由表也就应当包括目的网络前缀、下一跳路由器,以及到达该目的网络所要经过的各个自治系统序列。
- 省带宽、少开销
- 在BGP刚刚运行时,BGP的邻站是交换整个的BGP路由表。但以后只需要在发生变化时更新有变化的部分。这样做对节省网络带宽和减少路由器的处理开销方面都有好处。
BGP-4共使用四种报文
- 打开(Open)报文,用来与相邻的另一个BGP发言人建立关系。
- 更新(Update)报文,用来通告某一路由的信息,以及列出要撤消的多条路由。
- 保活(Keep alive)报文,用来周期性地证实邻站的连通性。
- 通知(Notification)报文,用来发送检测到的差错。
- 在RFC 2918中增加了ROUTE-REFRESH报文,用来请求对等端重新通告。
BGP报文具有通用的首部
三种路由选择协议比较
4.6.5 路由器的构成
4.7 IP多播
IP多播实现一对多的通信。IP多播是需要在互联网上增加更多的智能设备才能提供的一种服务。
4.7.1 IP多播的基本概念
多播可明显地减少网络中资源的消耗
IP多播的几个重要概念
- 多播组(Multicast Group)
- 是一组希望接收特定数据流的主机。
- 每个多播组用一个D类IP地址作为组标识符,且同一个多播组内的主机可以位于互联网的任何地方。因此多播组是分布式的。
- 多播路由器(Multicast Router)
- 能够运行多播协议的路由器叫做多播路由器。
- 除常规功能外,多播路由器还能识别、转发多播数据报。
- IP多播
- 在互联网上进行的多播就叫IP多播,其分组使用多播IP地址。
- 原理:多播数据报的目的地址填写多播组的标识符,然后设法使多播组成员的IP地址与组标识符关联起来。
IP多播的理解要点
- 多播数据报的目的地址填多播组标识符,即
- IPv4使用D类地址(1110开头)
- IPv6使用多播地址(FF00::/8)
- 多播数据报与一般IP数据报的区别
- 目的地址用D类地址(或IPv6的多播地址)
- 首部的协议字段为2,代表使用IGMP协议处理该数据报
- 可被多播路由器转发。
- 多播地址只能作为目的地址
- IP多播有两个阶段
- 局域网内硬件多播:多播最后阶段。
- 互联网范围内多播:由多播路由器向多播组转发。
4.7.2 在局域网上进行硬件多播
问题:D类IP地址如何转换为硬件地址?
- 互连网号码指派管理局IANA拥有的以太网多播硬件地址的范围是
从 01-00-5E-00-00-00
到 01-00-5E-7F-FF-FF
- D类IP地址(高四位为1110)可供分配的虽有28位,但因硬件地址只有后23位可用,故D类IP地址也只有后23位参与地址转换。
D类IP地址与以太网多播地址的映射关系
4.7.3 网际组管理协议IGMP和多播路由选择协议
IP多播需要两种协议
-
IGMP(Internet Group Management Protocol)
为了使路由器知道多播组成员的信息,需要利用网际组管理协议IGMP。
-
多播路由选择协议
练级金额在局域网上的多播路由器还必须和互联网上的其他多播路由器协同工作,以便把多播数据报用最小代价传送给所有的组成员。这就需要使用多播路由选择协议。
IGMP使多播路由器知道多播组成员信息
不同多播组地址映射成一个物理地址及软件如何过滤
IGMP的本地使用范围
- IGMP 并非在互联网范围内对所有多播组成员进行管理的协议。
- IGMP 不知道IP多播组包含的成员数,也不知道这些成员分布在哪些网络上。
- IGMP 协议是让连接在本地局域网上的多播路由器知道本局域网上是否有主机(严格讲,是主机上的某个进程)参加或退出了某个多播组。
多播路由器选择的复杂性
网际组管理协议IGMP
- 1989年公布的RFC 1112(IGMPv1)早已成为了互联网的标准协议。
- 1997年公布的RFC2236(IGMPv2)对IGMPv1进行了更新。
- 2002年10月公布了RFC 3376(IGMPv3,建议标准),宣布RFC 2236(IGMPv2)是陈旧的。
IGMP是网际协议IP的一个组成部分
- IGMP是在多播环境下使用的协议,它位于网际层。
- IGMP使用IP数据报传递其报文(即IGMP报文加上IP首部构成IP数据报),但它也向IP提供服务。
- 不把IGMP看成是一个单独的协议,而是属于整个网际协议IP的一个组成部分。
IGMP的两个阶段
- 第一阶段(加入)
- 当某个主机A加入新的多播组G时,该主机应向多播地址G发送IGMP报文,声明自己要成为该组的成员。
- 本地的多播路由器收到IGMP报文后,将组成员关系转发给互联网上的其他多播路由器让它们记下主机A加入了多播组G。
- 第二阶段(探寻):因为组成员关系是动态的,因此本地多播路由器要周期性地探寻本地局域网上的主机,以便知道这些主机是否还继续是组的成员。
- 只要有一个主机对某个组相应,那么多播路由器就认为这个组是活跃的。
- 一个组在经过几次的探寻后仍然没有一个主机响应,多播路由器就认为本网络的主机都已离开了这个组,因此不再将该组的成员关系转发给其他的多播路由器。
IGMP采用的一些具体措施
- 通信用IP多播
- 在主机和多播路由器之间的所有通信都是使用IP多播。
- 一问对多组
- 多播路由器在探寻组成员关系时,对所有的组只需发送一个请求信息的询问报文,而不需要对每一个组都发送一个询问报文。默认的询问速率是每125秒发送一次。
- 一个代表探询
- 当同一个网络上连接有几个多播路由器时,它们能迅速、有效地选择其中的一个探寻主机的成员关系。
- 限时响应
- 询问报文设置最长响应时间N。收到询问时,在0到N之间随机选择响应时延。参加多组者,随机数会不一样,按序发送响应报文。
- 组成员不都响应
- 对一个组,组成员都监听,若主机有响应了,其他主机不再响应。
IGMP的报文格式
多播路由选择协议
多播路由选择实际上就是要找出以源主机为根节点的多播树。
多播路由选择相当复杂
- 即使网络拓扑不发送变化,但由于某个应用程序加入或离开了一个多播组,多播路由都会发生变化。
- 多播转发要求路由器不仅要检查目的地址,而且还要检查源地址,以便确定何时需要复制多播数据报和转发多播数据报副本。
- 多播数据报可以由不是多播组成员的主机产生,并且可能通过没有任何组成员的网络。
几种多播路由选择协议
- 距离向量多播路由选择协议DVMRP(Distance Vector Multicast Routing Protocol)
- 基于核心的转发树 CBT(Core Based Tree)
- 开放最短通路优先的多播扩展 MOSPF(Multicast Extensions to OSPF)
- 协议无关多播——稀疏方式 PIM——SM(Protocol Independent Multicast-Sparse Mode)
- 协议无关多播——密集方式 IM——DM(Protocol Independent Multicast-Dense Mode)
洪泛与剪除
- 这种方法适合于较小的多播组,而所有的组成员接入的局域网也是相邻接的。
- 一开始,路由器转发多播数据报使用洪泛的方法(这就是广播)。为了避免兜圈子,采用了叫反向路径广播RPB(Reverse Path Broadcasting)的策略。
- RPB的要点:路由器收到多播数据报时,先检查是否从源点经最短路径传送来的。若是,就像所有其他方向转发刚才收到的数据报(但进入的方向除外),否则不转发。如果存在几条同样长度的最短路径,那么只能选择一条最短路径,选择的准则就是看这几条最短路径中的相邻路由器谁的IP地址最小。
隧道技术
基于核心的发现技术
- 这种方法对于多播组的大小在较大范围内变化时都适合。
- 这种方法是对每一个多播组G指定一个核心(core)路由器,给出它的IP单播地址。
- 核心路由器按照前面讲过的方法创建出对应于多播组G的转发树。
4.8 虚拟专用网VPN和网络地址转换NAT
VPN——Virtual Private Network
NAT——Network Address Translation
两个概念
- 本地地址——仅在机构内部使用的IP地址,可以由本机构自行分配,而不需要向互联网的管理机构申请。
- 全球地址——全球唯一的IP地址,必须向互联网的管理机构申请。
专用地址(private address)
-
[RFC 1918] 指明的专用地址有:
-
10.0.0.0 到 10.255.255.255(10.0.0.0/8,称为24位块)
-
172.16.0.0 到 172.31.255.255(172.16.0.0/12,称为20位块)
-
192.168.0.0 到 192.168.255.255(192.168.0.0/16,称为16位块)
-
-
专用地址只能用作本地地址而不能用作全球地址。
-
互联网中的所有路由器对目的地址是专用地址的数据报一律不进行转发。
4.8.1 虚拟专用网VPN
简介
- 采用专用IP地址的互联网络称为专用互联网或本地互联网,简称专用网。
- 一个机构有多个部门专用网,相距很远,如何相连?
- 租用专线,太贵!
- 利用公用的互联网相连,所构成的专用网又称为虚拟专用网VPN。
用隧道技术实现虚拟专用网
内联网 intranet 和外联网 extranet(都是基于TCP/IP协议)
- 由部门 A 和 B 的内部网络所构成的虚拟专用网 VPN 又称为内联网(intranet),表示部门A和B都是在同一个机构的内部。
- 一个机构和某些外部机构共同建立的虚拟专用网VPN又称为外联网(extranet)。
远程接入VPN(remote access VPN)
- 有的公司可能没有分布在不同场所的部门,但有很多流动员工在外地工作。公司需要和他们保持联系,远程接入VPN可满足这种需求。
- 在外地工作的员工拨号接入互联网,而驻留在员工PC机中的VPN软件可在员工的PC机和公司的主机之间建立VPN隧道,因而外地员工与公司通信的内容是保密的,员工们感到好像就是使用公司内部的本地网络。
4.8.2 网络地址转换
NAT路由器的工作原理
网络地址转换的过程
-
内部主机A用本地地址IP~A~和互联网上主机B通信所发送的数据报必须经过NAT路由器。
-
NAT路由器将数据报的源地址IP~A~转换成全球地址IP~G~,并把转换结果记录到NAT地址转换表中,目的地址IP~B~保持不变,然后发送到互联网。
-
NAT路由器收到主机B发回的数据报时,知道数据报中的源地址是IP~B~而目的地址是IP~G~。
-
根据NAT转换表,NAT路由器将目的地址IP~G~转换为IP~A~,转发给最终的内部主机A。
-
可以看出,在内部主机与外部主机通信时,在NAT路由器上发生了两次地址转换:
- 离开专用网络时:替换源地址,将内部地址替换为全球地址;
- 进入专用网络时:替换目的地址,将全球地址替换为内部地址。
-
NAT地址转换表举例
网络地址转换NAT
- 轮流使用全球IP地址
- 当NAT路由器具有n个全球IP地址时,专用网内最多可以同时有n台主机介入到互联网。专用网内的其他主机,可以轮流使用NAT路由器有限的全球IP地址。
- 专用网内的主机
- 通过NAT路由器的通信必须由专用网内的主机发起。
- 专用网内部的主机不能充当服务器用,因为互联网上的客户无法请求专用网内的服务器提供服务。
网络地址与端口号转换NAPT
- 为了更加有效地利用NAT路由器上的全球IP地址,现在常用的NAT转换表把运输层的端口号也利用上。这样,就可以使用多个拥有本地地址的主机,因而可以同时和互联网上的不同主机进行通信。
- 使用端口号的NAT叫做网络地址与端口号转换NAPT(Network Address and Port Translation),而不使用端口号的NAT就叫做传统的NAT(traditional NAT)。
NAPT地址转换表
NAPT把专用网内不同的源IP地址,都转换为同样的全球IP地址。但对源主机所采用的TCP端口号(不管相同或不同),则转换为不同的新的端口号。因此,当NAPT路由器收到从互联网发来的应答时,就可以从IP数据报的数据部分找出运输层的端口号,然后根据不同的目的端口号,从NAPT转换表中找到正确的目的主机。
4.9 多协议标签交换MPLS
简介
- IETF于1997年成立了MPLS工作组,开发出一种新的协议——多协议标记交换MPLS(Multi Protocol Label Switching)。
- “多协议”表示在MPLS的上层可以采用多种协议,例如:IP,IPX;可以使用多种数据链路层协议,例如:PPP,以太网,ATM等。
- “标记”是指每个分组被打上一个标记,根据该标记对分组进行转发。
MPLS特点
- MPLS并没有取代IP,而是作为一种IP增强技术,被广泛地应用在互联网中。
- MPLS具有以下三个方面的特点:
- 支持面向连接的服务质量;
- 支持流量工程,平衡网络负载;
- 有效地支持虚拟专用网VPN。
4.9.1 MPLS的工作原理
基本工作工程
- IP分组的转发
- 在传统的IP网络中,分组每到达一个路由器后,都必须按目的地址查找路由表,并安装“最长前缀匹配”的原则找到下一跳的IP地址。
- 当网络很大时,路由表很大,查找费时。
- 在出现突发性的通信量时,还会使缓存溢出,这就会引起分组丢失、传输时延增大和服务质量下降。
IP分组的普通转发
MPLS协议的基本原理
-
在MPLS域 的入口处,给每一个IP数据报打上固定长度“标记”,然后对打上标记的IP数据报使用硬件进行转发。
-
采用硬件技术对打上标记的IP数据报进行转发就称为标记交换。
-
“交换”也表示在转发时不再上升到第三层查找转发表,而是根据标记在第二层(数据链路层)用硬件进行转发。
-
MPLS域(MPLS domain)是指该域中有许多彼此相邻的路由器,并且所有的路由器都是支持MPLS技术的标记交换路由器LSR(Label Switching Router)。
-
LSR同时具有标记交换和路由选择这两种功能,标记交换功能是为了快速转发,但在这之前LSR需要使用路由选择功能构造转发表。
MPLS的基本工作过程
-
MPLS域中的各LSR使用专门的标记分配协议LDP交换报文,并找出标记交换路径LSP。各LSP根据这些路径构造出分组转发表。
-
分组进入到MPLS域时,MPLS入口结点把分组打上标记,并按照转发表将分组转发给下一个LSR。给IP数据报打标记的过程叫做分类(classification)。
-
一个标记仅仅在两个标记交换路由器LSR之间采有意义。分组每经过一个LSR,LSR就要做两件事:一是转发,二是更新的标记,即把入标记更换成为出标记。这就叫做标记对换(label swapping)。
项目含义:从入口0收到一个入标记为3的IP数据报,转发时,应当把该IP数据报从接口1转发出去,同时把标记对换为1。
-
当分组离开MPLS域时,MPLS出口结点把分组的标记去除。再以后就按照一般分组的转发方法进行转发。
上述的这种“由入口LSR确定进入MPLS域以后的转发路径”称为显式路由选择”(explicit routing),它和互联网中通常使用的“每一个路由器逐跳进行路由选择”有着很大的区别。
转发等价类FEC
- MPLS有个很重要的概念就是转发等价类FEC(Forwarding Equivalence Class)。
- “转发等价类”就是路由器按照同样方式对待的分组的集合。
“按照同样方式对待”表示:从同样接口转发到同样的下一跳地址,并且具有同样服务类别和同样丢弃优先级等。
- 划分FEC的方法不受什么限制,这都由网络管理员来控制,因此非常灵活。
- 入口结点并不是给每一个分组指派一个不同的的标记,而是将属于同样FEC的分组都指派同样的标记。
- FEC和标记时一一对应的关系。
FEC用于负载平衡
流量工程
- 网络管理员采用自定义的FEC就可以更好地管理网络的资源。
- 这种均衡网络负载的做法也叫做流量工程(Traffic Engineering,TE)或通信量工程。
4.9.1 MPLS首部的位置与格式
- MPLS并不要求下层网络都是用面向连接的技术。
- 下层的网络并不提供打标机的手段,而IPv4数据报首部也没有多余的位置来存放MPLS标记。这就需要使用一种封装技术:在把IP数据报封装成以太网帧之前,先要插入一个MPLS首部。
- 从层次的角度看,MPLS首部就是处在第二层和第三层之间。
- 标记值(占20位)。可以同时容纳高达2^20^个流(即1048576个流)。实际上几乎没有哪个MPLS实例会使用很大数目的流,因为通常需要管理员人工管理和设置每条交换路径。
- 试验(占3位)。目前保留用作试验。
- 栈 S (占3位)。在有“标记栈”时使用。
- 生存时间TTL(占8位)。用来防止MPLS分组在MPLS域中兜圈子。
4.9.3 新一代的MPLS
4.10 软件定义网络SDN简介
软件定义网络SDN(Software Defined Network)
远程控制器:计算出最佳的路由,在每一个路由器中生成其正确的转发表。
路由器:查找转发表,转发分组。
文章评论