计算机网络 第四章:网络层
1.网络层提供的两种服务
网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。
网络在发送分组时不需要先建立连接。每一个分组(也就是IP数据报)独立发送,与其前后的分组无关(不进行编号)。网络层不提供服务质量的承诺。也就是说,所传送的分组可能出错、丢失、重复和失序(即不按序到达终点),当然也不保证分组交付的时限。因为计算机有很强的差错处理能力,与传统电话有本质上的差别。
2.网际协议 IP
网际协议 IP 是 TCP/IP 体系中两个最主要的协议之一,也是最重要的互联网标准协议之一。
与 IP 协议配套使用的还有三个协议:
- 地址解析协议 ARP(Address Resolution Protocol)
- 网际控制报文协议 ICMP(Internet Control Message Protocol)
- 网际组管理协议 IGMP(Internet Group Management Protocol)
2.1 虚拟互连网络
许多计算机网络通过一些路由器进行互连。由于参加互连的计算机网络都使用相同的网际协议 IP(Internet Protocol),因此可以把互连以后的计算机网络看成一个虚拟互连网络。
2.2 分类的IP地址
IP地址的编址方法共经过了三个历史阶段:
- 分类的IP地址:这是最基本的编址方法,在1981年就通过了相应的标准协议。
- 子网的划分:这是对最基本的编址方法的改进,其标准RFC 950在1985年通过。
- 构成超网:这是比较新的无分类编址方法。1993年提出后很快就得到推广应用
2.2.1 IP地址及其表示方法
点分十进制法:
$$
IP地址 ::= { <网络号>,<主机号> }
$$
一个网络号在整个互联网范围内必须是唯一的。第二个字段是主机号(host-id),它标志该主机(或路由器)。一台主机号在它前面的网络号所指明的网络范围内必须是唯一的。由此可见,一个IP地址在整个互联网范围内是唯一的。
- A类、B类和C类地址的网络号字段(在图中这个字段是灰色的)分别为1个、2个和3个字节长,而在网络号字段的最前面有1~3位的类别位,其数值分别规定为0,10和110。
- A类、B类和C类地址的主机号字段分别为3个、2个和1个字节长。
- D类地址(前4位是1110)用于多播(一对多通信)。我们将在4.6节讨论P多播
- E类地址(前4位是1111)保留为以后用。
💡 A、B、C 类地址的区分已经成为历史。
对主机或路由器来说,IP地址都是32位的二进制代码。为了提高可读性,我们常常把32位的IP地址中的每8位插入一个空格(但在机器中并没有这样的空格)。
2.2.2 常用的三种类别的IP地址
IP 地址具有以下一些重要特点:
- 每一个IP地址都由网络号和主机号两部分组成。从这个意义上说,IP 地址是一种分等级的地址结构。好处是:第一,IP地址管理机构在分配IP地址时只分配网络号(第一级),而剩下的主机号(第二级)则由得到该网络号的单位自行分配。这样就方便了IP地址的管理;第二,路由器仅根据目的主机所连接的网络号来转发分组(而不考虑目的主机号),这样就可以使路由表中的项目数大幅度减少,从而减小了路由表所占的存储空间以及查找路由表的时间。
- 实际上IP地址是标志一台主机(或路由器)和一条链路的接口。当一台主机同时连接到两个网络上时,该主机就必须同时具有两个相应的IP地址,其网络号必须是不同的。这种主机称为多归属主机(multihomed host)。
- 按照互联网的观点,一个网络是指具有相同网络号 net-id 的主机的集合,因此,用转发器或网桥连接起来的若干个局域网仍为一个网络,因为这些局域网都具有同样的网络号。具有不同网络号的局域网必须使用路由器进行互连。
- 在IP地址中,所有分配到网络号的网络(不管是范围很小的局域网,还是可能覆盖很大地理范围的广域网)都是平等的。所谓平等,是指互联网同等对待每一个IP地址。
我们应当注意到:
- 在同一个局域网上的主机或路由器的IP地址中的网络号必须是一样的。
- 用网桥(它只在链路层工作)互连的网段仍然是一个局域网,只能有一个网络号。
- 路由器总是具有两个或两个以上的IP地址。即路由器的每一个接口都有一个不同网络号的IP地址。
- 当两个路由器直接相连时(例如通过一条租用线路),在连线两端的接口处,可以分配也可以不分配IP地址。如分配了IP地址,则这一段连线就构成了一种只包含一段线路的特殊“网络”(如图中的 N1,N2 和 N3)。之所以叫做“网络”是因为它有IP地址。但为了节省IP地址资源,对于这种仅由一段连线构成的特殊“网络”,现在也常常不分配IP地址。通常把这样的特殊网络叫做无编号网络或无名网络。
2.3 IP地址与硬件地址
物理地址:数据链路层和物理层使用的地址。
IP 地址:网络层以及上层使用的地址,是一种逻辑地址。
这里要强调指出以下几点:
- 在 IP 层抽象的互联网上只能看到 IP 数据报。数据报中间经过的两个路由器的 IP 地址并不出现在 IP 数据报的首部中。
- 虽然在 IP 数据报首部有源站 IP 地址,但路由器只根据目的站的IP地址的网络号进行路由选择。
- 在局域网的链路层,只能看见 MAC帧。IP数据报被封装在MAC 帧中。
- 尽管互连在一起的网络的硬件地址体系各不相同,但 IP 层抽象的互联网却屏蔽了下层这些很复杂的细节。
2.4 地址解析协议 ARP
已经知道了一个机器(主机或路由器)的 IP 地址,需要找出其相应的硬件地址,用地址解析协议 ARP。
ARP协议的要点:
每一台主机都设有一个 ARP高速缓存(ARP cache),里面有本局域网上的各主机和路由器的 IP 地址到硬件地址的映射表,这些都是该主机目前知道的一些地址。
当主机 A 要向本局域网上的某台主机 B 发送 IP 数据报时,就先在其 ARP 高速缓存中查看有无主机 B 的 IP 地址。如有就在 ARP 高速缓存中查出其对应的硬件地址,再把这个硬件地址写入 MAC 帧,然后通过局域网把该MAC帧发往此硬件地址。如果没有,主机 A 就自动运行 ARP。
ARP 进程在本局域网上广播发送一个 ARP 请求分组。
在本局域网上的所有主机上运行的 ARP 进程都收到此 ARP 请求分组。
主机 B 的 IP 地址与 ARP 请求分组中要查询的 IP 地址一致,就收下这个 ARP 请求分组,并向主机A发送 ARP响应分组,同时在这个 ARP 响应分组中写入自己的硬件地址。
主机 A 收到主机 B 的 ARP 响应分组后,就在其 ARP 高速缓存中写入主机 B 的 IP 地址到硬件地址的映射。
可见 ARP 高速缓存非常有用。如果不使用 ARP 高速缓存,那么任何一台主机只要进行一次通信,就必须在网络上用广播方式发送ARP请求分组,这就使网络上的通信量大大增加。
2.5 IP 数据报的格式
在 TCP/IP 的标准中,各种数据格式常常以 32 位(即 4 字节)为单位来描述。
固定长度:共20字节
可选字段:长度可变
2.5.1 IP数据报首部的固定部分
版本:占 4 位,指 IP 协议的版本,通信双方使用的IP协议的版本必须一致。
首部长度:占 4 位,可表示的最大十进制数值是 15(1111),最小值是 5(0101).
区分服务:占8位,用来获得更好的服务。
总长度:首部和数据之和的长度,单位为字节。总长度字段为16 位,因此数据报的最大长度为 $2^{16}-1=65535$ 字节。
标识:占 16 位,IP 软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。但这个“标识”并不是序号,因为IP是无连接服务,数据报不存在按序接收的问题。
标志:占 3 位,但目前只有两位有意义。
- 标志字段中的最低位记为 MF(More Fragment)。MF = 1即表示后面“还有分片”的数据报。MF = 0 表示这已是若干数据报片中的最后一个。
- 标志字段中间的一位记为 DF(Don’t Fragment),意思是“不能分片”。只有当 DF = 0 时才允许分片。
片偏移:占 13 位,较长的分组在分片后,某片在原分组中的相对位置。也就是说,相对于用户数据字段的起点,该片从何处开始。
生存时间:占 8 位,生存时间字段常用的英文缩写是 TTL 表明这是数据报在网络中的寿命。
协议:占 8 位,=此数据报携带的数据是使用何种协议。
首部检验和:占 16 位,这个字段只检验数据报的首部,但不包括数据部分。
源地址:占 32 位。
目的地址:占 32 位。
2.5.2 IP数据报首部的可变部分
IP 数据报首部的可变部分就是一个选项字段。选项字段用来支持排错、测量以及安全等措施,内容很丰富。此字段的长度可变,从 1 个字节到 40 个字节不等,取决于所选择的项目。
增加首部的可变部分是为了增加 IP 数据报的功能,但这同时也使得 IP 数据报的首部长度成为可变的。这就增加了每一个路由器处理数据报的开销。实际上这些选项很少被使用。
2.6 IP 层转发分组的流程
在路由表中,对每一条路由最主要的是以下两个信息:
$$
(目的网络地址,下一跳地址)
$$
于是,我们就根据目的网络地址来确定下一跳路由器,这样做可得出以下的结果。
- IP 数据报最终一定可以找到目的主机所在目的网络上的路由器(可能要通过多次的间接交付)。
- 只有到达最后一个路由器时,才试图向目的主机进行直接交付。
虽然互联网所有的分组转发都是基于目的主机所在的网络,但在大多数情况下都允许有这样的特例:
- 即对特定的目的主机指明一个路由。这种路由叫做特定主机路由。采用特定主机路由可使网络管理人员更方便地控制网络和测试网络,同时也可在需要考虑某种安全问题时采用这种特定主机路由。在对网络的连接或路由表进行排错时,指明到某一台主机的特殊路由就十分有用。
- 路由器还可采用默认路由(default route)以减小路由表所占用的空间和搜索路由表所用的时间。这种转发方式在一个网络只有很少的对外连接时是很有用的。
3.划分子网和构造超网
3.1 划分子网
3.1.1 从两级 IP 地址到三级 IP 地址
在 ARPANET 的早期,IP地址的设计确实不够合理。
- IP 地址空间的利用率有时很低;
- 给每一个物理网络分配一个网络号会使路由表变得太大因而使网络性能变坏;
- 两级IP地址不够灵活。
为解决上述问题,从1985年起在IP地址中又增加了一个“子网号字段”,使两级IP地址变成为三级IP地址,它能够较好地解决上述问题,并且使用起来也很灵活。这种做法叫做划分子网(subnetting)[RFC 950],或子网寻址或子网路由选择。划分子网已成为互联网的正式标准协议。
$$
IP地址 ::= { <网络号>,<网络号>,<主机号> }
$$
总之,当没有划分子网时,IP地址是两级结构。划分子网后IP地址变成了三级结构。划分子网只是把IP地址的主机号这部分进行再划分,而不改变IP地址原来的网络号。
3.1.2 子网掩码
我们知道,从 IP 数据报的首部无法看出源主机或目的主机所连接的网络是否进行了子网的划分。这是因为 32 位的 IP 地址本身以及数据报的首部都没有包含任何有关子网划分的信息。因此必须另外想办法,这就是使用子网掩码。
逐位相“与”(AND)得出了所要找的子网的网络地址。
使用子网掩码的好处就是:不管网络有没有划分子网,只要把子网掩码和 IP 地址进行逐位的“与”运算(AND),就立即得出网络地址来。这样在路由器处理到来的分组时就可采用同样的算法。
在不划分子网时,仍然要使用子网掩码:为了更便于查找路由表,现在互联网的标准规定所有的网络都必须使用子网掩码,同时在路由器的路由表中也必须有子网掩码这一栏。
如果一个网络不划分子网,那么该网络的子网掩码就使用默认子网掩码:
- A类地址的默认子网掩码是255.0.0.0,或 0xFF000000
- B类地址的默认子网掩码是255.255.0.0,或 0xFFFF0000
- C类地址的默认子网掩码是255.255.255.0,或 0xFFFFFF00
子网掩码是一个网络或一个子网的重要属性。
3.2 使用子网时分组的转发
使用子网划分后,路由表必须包含:目的网络地址、子网掩码和下一跳地址。
在划分子网的情况下,路由器转发分组的算法如下:
- 从收到的数据报的首部提取目的 IP 地址 D。
- 先判断是否为直接交付。对路由器直接相连的网络逐个进行检查:用各网络的子网掩码和 D 逐位相“与”,看结果是否和相应的网络地址匹配。若匹配,则把分组进行直接交付(当然还需要把 D 转换成物理地址,把数据报封装成帧发送出去),转发任务结束。否则就是间接交付,执行(3)。
- 若路由表中有目的地址为 D 的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器;否则,执行(4)。
- 对路由表中的每一行(目的网络地址,子网掩码,下一跳地址),用其中的子网掩码和D逐位相“与”,其结果为 N。若 N 与该行的目的网络地址匹配,则把数据报传送给该行指明的下一跳路由器;否则,执行(5)。
- 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则,执行(6)。
- 报告转发分组出错。
3.3 无分类编址 CIDR(构造超网)
3.3.1 网络前缀
由于 2011 年 IPV4 地址耗尽,要用无分类编址了。正式名称是无分类域间路由选择 CIDR。
CIDR 最主要的特点有两个:
- CIDR 消除了传统的A类、B类和C类地址以及划分子网的概念
- CIDR 把网络前缀都相同的连续的IP地址组成一个 “CIDR地址块”。
网络前缀越短,其地址块所包含的地址数就越多。
3.1.2 最长前缀匹配
应当从匹配结果中选择具有“最长”网络前缀的路由,否则可能会得到不止一个的匹配结果。
3.1.3 使用二叉线索查找路由表
由于要寻找最长前缀匹配,使路由表的查找过程变得更加复杂了。对无分类编址的路由表的最简单的查找算法就是对所有可能的前缀进行循环查找。为了进行更加有效的查找,通常是把无分类编址的路由表存放在一种层次的数据结构中,然后自上而下地按层次进行查找。这里最常用的就是二叉线索(binary trie),它是一种特殊结构的树。
为了提高二叉线索的查找速度,广泛使用了各种压缩技术。
4.网际控制报文协议 ICMP
为了更有效地转发 IP 数据报和提高交付成功的机会,在网际层使用了网际控制报文协议 ICMP(Internet Control Message Protocol)[RFC 792]。
ICMP 允许主机或路由器报告差错情况和提供有关异常情况的报告。ICMP 是互联网的标准协议,但不是高层协议,而是 IP 层的协议。
ICMP 报文格式:
4.1 ICMP 报文的种类
ICMP 报文的种类有两种:
- ICMP 差错报告报文
- 终点不可达
- 时间超过
- 参数问题
- 改变路由(重定向)
- ICMP 询问报文
下面是不应发送 ICMP 差错报告报文的几种情况:
- 对 ICMP 差错报告报文,不再发送 ICMP 差错报告报文。
- 对第一个分片的数据报片的所有后续数据报片,都不发送 ICMP 差错报告报文。
- 对具有多播地址的数据报,都不发送 ICMP 差错报告报文。
- 对具有特殊地址(如127.0.0.0 或 0.0.0.0)的数据报,不发送 ICMP 差错报告报文。
常用的 ICMP 询问报文有两种:
- 回送请求和回答
- 时间戳请求和回答
4.2 ICMP 的应用举例
ICMP 的一个重要应用就是分组网间探测 PING(Packet InterNet Groper),用来测试两台主机之间的连通性。直接使用网络层,没有经过运输层的 TCP 或 UDP。
5.互联网的路由选择协议
5.1 有关路由选择协议的几个基本概念
1.理想的路由算法
- 算法必须是正确的和完整的。
- 算法在计算上应简单。
- 算法应能适应通信量和网络拓扑的变化,这就是说,要有自适应性。
- 算法应具有稳定性。
- 算法应是公平的。
- 算法应是最佳的。路由选择算法应当能够找出最好的路由,使得分组平均时延最小而网络的吞吐量最大。
2.分层次的路由选择协议
- 内部网关协议 IGP:如 RIP,OSPF
- 外部网关协议 EGP:如 BGP-4
5.2 内部网关协议 RIP
5.2.1 工作原理
RIP (Routing Information Protocol)是内部网关协议 IGP 中最先得到广泛使用的协议,中文名称叫做路由信息协议,但很少被使用。
RIP 是一种分布式的基于距离向量的路由选择协议,是互联网的标准协议,其最大优点就是简单,特点如下:
- 仅和相邻路由器交换信息;
- 路由器交换的信息是当前本路由器所知道的全部信息,即自己现在的路由表;
- 按固定的时间间隔交换路由信息。
5.2.2 距离向量算法
对每一个相邻路由器发送过来的RIP报文,进行距离排序。
5.2.3 RIP协议的报文格式
RIP 报文由首部和路由部分组成。首部占 4 个字节,路由部分最多 25 个路由,最长 $4+20×25=504$ 字节。
5.3 内部网关协议 OSPF
5.3.1 OSPF 协议的基本特点
开放最短路径优先 OSPF(Open Shortest Path First)。它是为克服 RIP 的缺点在 1989 年开发出来的。OSPF 的原理很简单,但实现起来却较复杂。
OSPF 最主要的特征就是使用分布式的链路状态协议(link state protocol),而不是像 RIP 那样的距离向量协议。和 RIP 协议相比,OSPF 的三个要点和 RIP 的都不一样:
- 向本自治系统中所有路由器发送信息。
- 发送的信息就是与本路由器相邻的所有路由器的链路状态,但只是路由器知道的部分信息。
- 只有当链路状态发生变化时,路由器才向所有路由器用洪泛法发送此信息。而不像 RIP 那样,不管网络拓扑有无发生变化,路由器之间都要定期交换路由表的信息。
OSPF 不用 UDP 而是直接用 IP 数据报传送(其IP数据报首部的协议字段值为89)。OSPF构成的数据报很短。这样做可减少路由信息的通信量。数据报很短的另一好处是可以不必将长的数据报分片传送。分片传送的数据报只要丢失一个,就无法组装成原来的数据报,而整个数据报就必须重传。
OSPF分组使用 24 字节的固定长度首部,分组的数据部分可以是五种类型分组中的一种:
- 版本
- 类型:可以是五种类型分组中的一种
- 分组长度
- 路由器标识符:标志发送该分组的路由器的接口的IP地址
- 区域标识符:分组属于的区域的标识符
- 检验和:用来检测分组中的差错
- 鉴别类型:目前只有两种,0(不用)和1(口令)
- 鉴别:鉴别类型为 0 时就填入 0,鉴别类型为 1 则填入 8 个字符的口令
5.3.2 OSPF 的五种分组类型
- 问候(Hello)分组
- 数据库描述(Database Description)分组
- 链路状态请求(Link State Request)分组
- 链路状态更新(Link State Update)分组,
- 链路状态确认(Link State Acknowledgment)分组
5.4 外部网关协议 BGP
边界网关协议 BGP 只能是力求寻找一条能够到达目的网络且比较好的路由(不能兜圈子),而并非要寻找一条最佳路由。BGP 采用了路径向量(path vector)路由选择协议,它与距离向量协议(如 RIP)和链路状态协议(如 OSPF)都有很大的区别。
5.4.1 BGP-4 四种报文
- OPEN(打开)报文,用来与相邻的另一个BGP发言人建立关系,使通信初始化。
- UPDATE(更新)报文,用来通告某一路由的信息,以及列出要撤销的多条路由。
- KEEPALIVE(保活)报文,用来周期性地证实邻站的连通性。
- NOTIFICATION(通知)报文,用来发送检测到的差错。
5.4.2 BGP 报文首部
5.5 路由器的结构
5.5.1 路由器的结构
路由器是一种具有多个输入端口和多个输出端口的专用计算机,其任务是转发分组。
5.5.2 交换结构
交换结构是路由器的关键构件 [KURO13]。正是这个交换结构把分组从一个输入端口转移到某个合适的输出端口。
三种交换方法:
- 通过储存器交换
- 通过总线交换:同一时刻只能有一个分组,但无需处理机干预
- 通过纵横交换:互连网络,有 2N 条总线,N 个输入/出端口
6.IPv6
6.1 IPv6 发基本首部
IPv6 所引进的主要变化如下:
- 更大的地址空间。IPv6 把地址从 IPv4 的 32 位增大到 4 倍到 128 位,使地址空间增大了 $2^{96}$ 倍;
- 扩展的地址层次结构;
- 灵活的首部格式。IPv6 数据报的首部和 IPv4 的并不兼容;
- 改进的选项。IPv6 允许数据报包含有选项的控制信息;
- 允许协议继续扩充;
- 支持即插即用(即自动配置),因此 IPv6 不需要使用 DHCP;
- 支持资源的预分配;
- IPv6 首部改为 8 字节对齐(即首部长度必须是8字节的整数倍)。
与 IPv4 相比,IPv6 对首部中的某些字段进行了如下的更改:
- 取消了首部长度字段,因为它的首部长度是固定的(40字节);
- 取消了服务类型字段,因为优先级和流标号字段实现了服务类型字段的功能;
- 取消了总长度字段,改用有效载荷长度字段;
- 取消了标识、标志和片偏移字段,因为这些功能已包含在分片扩展首部中。把TTL字段改称为跳数限制字段,但作用是一样的(名称与作用更加一致)。
- 取消了协议字段,改用下一个首部字段;
- 取消了检验和字段,这样就加快了路由器处理数据报的速度。我们知道,在数据链路层对检测出有差错的帧就丢弃;
- 取消了选项字段,而用扩展首部来实现选项功能。
由于把首部中不必要的功能取消了,使得 IPv6 首部的字段数减少到只有 8 个(虽然首部长度增大了一倍)。下面解释 IPv6 基本首部中各字段的作用:
- 版本:占4位,对 IPv6 该字段是 6。
- 通信量类:占8位。这是为了区分不同的 IPv6 数据报的类别或优先级。
- 流标号:占20 位。IPv6 的一个新的机制是支持资源预分配。
- 有效载荷长度:占16位。它指明 IPv6 数据报除基本首部以外的字节数。这个字段的最大值是 64 KB(65535字节)。
- 下一个首部:占8位。它相当于 IPv4 的协议字段或可选字段。
- 跳数限制:占8位。用来防止数据报在网络中无限期地存在。
- 源地址:占128位。是数据报的发送端的P地址。
- 目的地址:占128位。是数据报的接收端的IP地址。
6.2 IPv6 的地址
- 单播(unicast):单播就是传统的点对点通信。
- 多播(multicast):多播是一点对多点的通信,数据报发送到一组计算机中的每一个。IPv6 没有采用广播的术语,而是将广播看作多播的一个特例。
- 任播(anycast):这是 IPv6 增加的一种类型。任播的终点是一组计算机,但数据报只交付其中的一个,通常是距离最近的一个。
6.2.1 IPv6 冒号十六进制记法
在十六进制记法中,允许把数字前面的 0 省略:
$$
FF05:0:0:0:0 :0:0:B3
$$
可压缩为:
$$
FF05::B3
$$
未指明地址:这是 16 字节的全 0 地址,可缩写为两个冒号 “::”。这个地址不能用作目的地址,而只能为某台主机当作源地址使用,条件是这台主机还没有配置到一个标准的IP地址。这类地址仅此一个。
环回地址:IPv6 的环回地址是 0:0:0:0:0:0:0:1,可缩写为 ::1。它的作用和 IPv4 的环回地址一样。这类地址也是仅此一个。
多播地址:功能和 IPv4 的一样。这类地址占 IPv6 地址总数的 1/256。
本地链路单播地址:有些单位的网络使用 TCP/IP 协议,但并没有连接到互联网上。连接在这样的网络上的主机都可以使用这种本地地址进行通信,但不能和互联网上的其他主机通信。这类地址占 IPv6 地址总数的 1/1024。
全球单播地址:IPv6 的这一类单播地址是使用得最多的一类。
6.3 从 IPv4 向 IPv6 过渡
6.3.1 双协议栈
双协议栈(dual stack)是指在完全过渡到 IPv6 之前,使一部分主机(或路由器)装有双协议栈:一个 IPv4 和一个 IPv6。因此双协议栈主机(或路由器)既能够和 IPv6 的系统通信,又能够和 IPv4 的系统通信。双协议栈的主机(或路由器)记为 IPv6/IPv4,表明它同时具有两种IP地址:一个 IPv6 地址和一个 IPv4 地址。
6.3.2 隧道技术
在 IPv6 数据报要进入 IPv4 网络时,把 IPv6 数据报封装成为 IPv4 数据报。
6.4 ICMPv6
ICMP:IPv4 反馈差错信息
ICMPv6:IPv6 反馈差错信息
ICMPv6 是面向报文的协议,它利用报文来报告差错,获取信息,探测邻站或管理多播通信。
7.IP多播
7.1 IP多播的基本概念
R1 转发分组同时复制三个副本,向 R2、R3、R4 转发。多播数据包不产生 ICMP 差错报文。
其实多播组的标识符就是 IP 地址中的 D 类地址。D 类 IP 地址的前四位是 1110,因此 D 类地址范围是 224.0.0.0 到 239.255.255.255。我们就用每一个D类地址标志一个多播组。这样,D 类地址共可标志 22 个多播组,也就是说,在同一时间可以允许有超过 2.6 亿的多播组在互联网上运行。
多播数据报也是“尽最大努力交付”,不保证一定能够交付多播组内的所有成员。因此,多播数据报和一般的 IP 数据报的区别就是它使用 D 类 IP 地址作为目的地址,并且首部中的协议字段值是 2,表明使用网际组管理协议 IGMP。多播地址只能用于目的地址,而不能用于源地址。
7.2 在局域网上进行硬件多播
由于多播 IP 地址与以太网硬件地址的映射关系不是唯一的,因此收到多播数据报的主机,还要在 IP 层利用软件进行过滤。
7.3 网际组管理协议IGMP和多播路由选择协议
7.3.1 IP 多播需要两种协议
- 网际组管理协议 IGMP
- 多播路由选择协议
7.3.2 网际组管理协议 IGMP
和网际控制报文协议 ICMP 相似,IGMP 使用 IP 数据报传递其报文(即 IGMР 报文加上 IP 首部构成 IP 数据报),但它也向 IP 提供服务。因此,我们不把 IGMP 看成是一个单独的协议,而是属于整个网际协议 IP 的一个组成部分。
IGMP 的工作可分为两个阶段:
- 第一阶段:当某台主机加入新的多播组时,该主机应向多播组的多播地址发送一个 IGMP 报文,声明自己要成为该组的成员。本地的多播路由器收到 IGMP 报文后,还要利用多播路由选择协议把这种组成员关系转发给互联网上的其他多播路由器。
- 第二阶段:组成员关系是动态的。本地多播路由器要周期性地探询本地局域网上的主机,以便知道这些主机是否还继续是组的成员。只要有一台主机对某个组响应,那么多播路由器就认为这个组是活跃的。但一个组在经过几次的探询后仍然没有一台主机响应,多播路由器就认为本网络上的主机已经都离开了这个组,因此也就不再把这个组的成员关系转发给其他的多播路由器。
7.3.3 多播路由选择协议(尚未标准化)
在转发多播数据报时使用了以下的三种方法:
- 洪泛与剪除:这种方法适合于较小的多播组。
- 隧道技术:适用于多播组的位置在地理上很分散的情况。
- 基于核心的发现技术:这种方法对于多播组的大小在较大范围内变化时都适合。
8.虚拟专用网VPN和网络地址转换NAT
8.1 虚拟专用网 VPN
专用地址只能用做本地地址而不能用作全球地址。在互联网中的所有路由器,对目的地址是专用地址的数据报一律不进行转发。
- 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位块)
采用这样的专用 IP 地址的互连网络称为专用互联网或本地互联网,或更简单些,就叫做专用网。
8.2 网络地址转换 NAT
专用网内主机想与互联网上主机通信(并不要加密),用 NAT,路由器要装 NAT 软件,并且至少还要有一个全球 IP。
9.多协议标记交换 MPLS
MPLS 利用面向连接技术,使每个分组携带一个叫做标记(label)的小整数。当分组到达交换机(即标记交换路由器)时,交换机读取分组的标记,并用标记值来检索分组转发表。这样就比查找路由表来转发分组要快得多。
MPLS 具有以下三个方面的特点:
- 支持面向连接的服务质量
- 支持流量工程,平衡网络负载
- 有效地支持虚拟专用网VPN
9.1 MPLS 的工作原理
9.1.1 基本工作过程
- MPLS 域中的各 LSR 使用专门的标记分配协议 LDP 交换报文,并找出和特定标记相对应的路径,即标记交换路径 LSP。
- 当一个 IP 数据报进入到 MPLS 域时,MPLS入口结点就给它打上标记,并按照转发表把它转发给下一个 LSR。
- 由于在全网内统一分配全局标记数值是非常困难的,因此一个标记仅仅在两个标记交换路由器 LSR 之间才有意义。分组每经过一个 LSR, LSR 就要做两件:一是转发,二是更换新的标记,即把入标记更换成为出标记。
- 当 IP 数据报离开 MPLS 域时,MPLS出口结点就把 MPLS 的标记去除,把 IP 数据报交付非 MPLS 的主机或路由器,以后就按照普通的转发方法进行转发。
9.1.2 转发等价类 FEC
MPLS 有个很重要的概念就是转发等价类 FEC(Forwarding Equivalence Class)。所谓 “转发等价类” 就是路由器按照同样方式(表示从同样接口转发到同样的下一跳地址,并且具有同样服务类别和同样丢弃优先级等)对待的 IP 数据报的集合。
9.2 MPLS首部的位置与格式
从层次的角度看,MPLS 首部就处在第二层和第三层之间。在把加上 MPLS 首部的 IP 数据报封装成以太网帧时,以太网的类型字段在单播的情况下设置为$8847_{16}$,而在多播的情况下为 $8848_{16}$ 。这样,接收方可以用帧的类型来判决这个帧是携带了 MPLS 标记还是一个常规的 IP 数据报。
MPLS 首部共包括以下四个字段:
- 标记值:占20位。理论上可使用标记的所有20位,因而可以同时容纳高达 $2^{20}$ 个流(即1048576个流)。但是,实际上几乎没有哪个MPLS实例会使用很大数目的流,因为通常需要管理员人工管理和设置每条交换路径。
- 试验:占3位,目前保留用于试验。
- 栈 S:占1位,在有“标记栈”时使用。
- 生存时间 TTL:占8位,用来防止 MPLS分组在MPLS域中兜圈子。