计算机网络(十)
学习计算机网络过程中的心得体会以及知识点的整理,方便我自己查找,也希望可以和大家一起交流。
—— 网络层 ——
上接《计算机网络 网络层(三)》
6. IPv6
- IP 是互联网的核心协议。
- 互联网经过几十年的飞速发展,到2011年2月,IPv4 的 32 位地址已经耗尽。
- ISP 已经不能再申请到新的 IP 地址块了。
- 我国在2014-2015年也逐步停止了向新用户和应用分配 IPv4 地址。
- 解决 IP 地址耗尽的根本措施就是采用具有更大地址空间的新版本的 IP,即 IPv6。
6.1 IPv6的基本首部
-
IPv6 仍支持无连接的传送,但将协议数据单元 PDU 称为分组。为方便起见,本书仍采用数据报这一名词。
-
所引进的主要变化如下:
- 更大的地址空间。IPv6 将地址从 IPv4 的 32 位 增大到了 128 位。
- 扩展的地址层次结构。
- 灵活的首部格式。 IPv6 定义了许多可选的扩展首部。
- 改进的选项。 IPv6 允许数据报包含有选项的控制信息,其选项放在有效载荷中。
- 允许协议继续扩充。
- 支持即插即用(即自动配置)。因此 IPv6 不需要使用 DHCP。
- 支持资源的预分配。 IPv6 支持实时视像等要求,保证一定的带宽和时延的应用。
- IPv6 首部改为 8 字节对齐。首部长度必须是 8 字节的整数倍。原来的 IPv4 首部是 4 字节对齐。
-
IPv6数据报由两大部分组成:
- 基本首部 (base header)
- 有效载荷 (payload)。有效载荷也称为净负荷。有效载荷允许有零个或多个扩展首部(extension header),再后面是数据部分。
6.1.1 IPv6 数据报的基本首部
- IPv6 将首部长度变为固定的 40 字节,称为基本首部。
- 把首部中不必要的功能取消了,使得 IPv6 首部的字段数减少到只有 8 个。
- IPv6 对首部中的某些字段进行了如下的更改:
- 版本(version)—— 4 位。它指明了协议的版本,对 IPv6 该字段总是 6。
- 通信量类(traffic class)—— 8 位。这是为了区分不同的 IPv6 数据报的类别或优先级。目前正在进行不同的通信量类性能的实验。
- 流标号(flow label)—— 20 位。 “流”是互联网络上从特定源点到特定终点的一系列数据报, “流”所经过的路径上的路由器都保证指明的服务质量。所有属于同一个流的数据报都具有同样的流标号。
- 有效载荷长度(payload length)—— 16 位。它指明 IPv6 数据报除基本首部以外的字节数(所有扩展首部都算在有效载荷之内),其最大值是 64 KB。
- 下一个首部(next header)—— 8 位。它相当于 IPv4 的协议字段或可选字段。
- 跳数限制(hop limit)—— 8 位。源站在数据报发出时即设定跳数限制。路由器在转发数据报时将跳数限制字段中的值减 1。
当跳数限制的值为零时,就要将此数据报丢弃。 - 源地址—— 128 位。是数据报的发送站的 IP 地址。
- 目的地址—— 128 位。是数据报的接收站的 IP 地址。
IPv6 的扩展首部:
- IPv6 把原来 IPv4 首部中选项的功能都放在扩展首部中,并将扩展首部留给路径两端的源站和目的站的主机来处理。
- 数据报途中经过的路由器都不处理这些扩展首部(只有一个首部例外,即逐跳选项扩展首部)。
- 这样就大大提高了路由器的处理效率。
六种扩展首部:
在 RFC 2460 中定义了六种扩展首部:
- (1) 逐跳选项
- (2) 路由选择
- (3) 分片
- (4) 鉴别
- (5) 封装安全有效载荷
- (6) 目的站选项
6.2 IPv6的地址
- IPv6 数据报的目的地址可以是以下三种基本类型地址之一:
- (1) 单播 (unicast):传统的点对点通信。
- (2) 多播 (multicast):一点对多点的通信。
- (3) 任播 (anycast):这是 IPv6 增加的一种类型。任播的目的站是一组计算机,但数据报在交付时只交付其中的一个,通常是距离最近的一个。
6.2.1 结点与接口
- IPv6 将实现 IPv6 的主机和路由器均称为结点。
- 一个结点就可能有多个与链路相连的接口。
- IPv6 地址是分配给结点上面的接口的。
- 一个接口可以有多个单播地址。
- 其中的任何一个地址都可以当作到达该结点的目的地址。即一个结点接口的单播地址可用来唯一地标志该结点。
6.2.2 冒号十六进制记法
- 在IPv6中,每个地址占 128 位,地址空间大于 3.4x1038 。
- 为了使地址再稍简洁些,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:128.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 (零压缩)
6.2.3 IPv6 地址分类
- 未指明地址
- 这是 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年发布的草案标准RFC 4291的建议, IPv6 单播地址的划分方法非常灵活。
6.3 从IPv4向IPv6过渡
- 向 IPv6 过渡只能采用逐步演进的办法,同时,还必须使新安装的 IPv6 系统能够向后兼容:IPv6 系统必须能够接收和转发 IPv4 分组,并且能够为 IPv4 分组选择路由。
- 两种向 IPv6 过渡的策略:
- 使用双协议栈
- 使用隧道技术
6.3.1 双协议栈
- 双协议栈(dual stack)是指在完全过渡到 IPv6 之前,使一部分主机(或路由器)装有两个协议栈,一个 IPv4 和一个 IPv6。
- 双协议栈的主机(或路由器)记为 IPv6/IPv4,表明它同时具有两种 IP 地址:一个 IPv6 地址和一个 IPv4 地址。
- 双协议栈主机在和 IPv6 主机通信时是采用 IPv6 地址,而和 IPv4 主机通信时就采用 IPv4 地址。
- 根据 DNS 返回的地址类型可以确定使用 IPv4 地址还是 IPv6 地址。
6.3.2 隧道技术
- 在 IPv6 数据报要进入IPv4网络时,把 IPv6 数据报封装成为 IPv4 数据报,整个的 IPv6 数据报变成了 IPv4 数据报的数据部分。
- 当 IPv4 数据报离开 IPv4 网络中的隧道时,再把数据部分(即原来的 IPv6 数据报)交给主机的 IPv6 协议栈。
6.4 ICMPv6
- IPv6 也不保证数据报的可靠交付,因为互联网中的路由器可能会丢弃数据报。
- 因此 IPv6 也需要使用 ICMP 来反馈一些差错信息。新的版本称为 ICMPv6。
- 地址解析协议 ARP 和网际组管理协议 IGMP 协议的功能都已被合并到 ICMPv6 中。
6.4.1 ICMPv6 报文的分类
- CMPv6 是面向报文的协议,它利用报文来报告差错,获取信息,探测邻站或管理多播通信。
- ICMPv6 还增加了几个定义报文的功能及含义的其他协议。
7. IP 多播
7.1 IP 多播的基本概念
- IP 多播 (multicast,以前曾译为组播) 已成为互联网的一个热门课题。
- 目的:更好第支持一对多通信。
- 一对多通信:一个源点发送到许多个终点。
- 例如,实时信息的交付(如新闻、股市行情等),软件更新,交互式会议及其他多媒体通信。
- 在互联网上进行多播就叫作 IP 多播。
- 互联网范围的多播要靠路由器来实现。
- 能够运行多播协议的路由器称为多播路由器(multicast router)。当然它也可以转发普通的单播IP数据报。
- 从1992年起,在互联网上开始试验虚拟的多播主干网MBONE (Multicast Backbone On the InterNEt)。 现在多播主干网已经有了相当大的规模。
7.1.1 IP多播地址
- IP 多播所传送的分组需要使用多播 IP 地址。
- 在多播数据报的目的地址写入的是多播组的标识符。
- 多播组的标识符就是 IP 地址中的 D 类地址(多播地址)。
- 每一个D类地址标志一个多播组。
- 多播地址只能用于目的地址,不能用于源地址。
7.1.2 多播数据报
- 多播数据报和一般的 IP 数据报的区别就是它使用 D 类 IP 地址作为目的地址,并且首部中的协议字段值是2,表明使用网际组管理协议 IGMP。
- 多播数据报也是“尽最大努力交付”,不保证一定能够交付多播组内的所有成员。
- 对多播数据报不产生 ICMP 差错报文。因此,若在 PING 命令后面键入多播地址,将永远不会收到响应。
7.2 在局域网上进行硬件多播
- 互联网号码指派管理局 IANA 拥有的以太网地址块的高 24 位为 00-00-5E。
- 因此 TCP/IP 协议使用的以太网多播地址块的范围是
从 00-00-5E-00-00-00
到 00-00-5E-FF-FF-FF - 不难看出,在每一个地址中,只有23位可用作多播。
- D 类 IP 地址可供分配的有 28 位,在这 28 位中的前 5 位不能用来构成以太网硬件地址。
D 类 IP 地址与以太网多播地址的映射关系:
- 由于多播IP地址与以太网硬件地址的映射关系不是唯一的,因此收到多播数据报的主机,还要在 IP 层利用软件进行过滤,把不是本主机要接收的数据报丢弃。
7.3 网际组管理协议 IGMP 和多播路由选择协议
7.3.1 IP 多播需要两种协议
- 为了使路由器知道多播组成员的信息,需要利用网际组管理协议 IGMP (Internet Group Management Protocol)。
- 连接在局域网上的多播路由器还必须和互联网上的其他多播路由器协同工作,以便把多播数据报用最小代价传送给所有的组成员。这就需要使用多播路由选择协议。
IGMP 使多播路由器知道多播组成员信息:
IGMP 的使用范围
- IGMP 并非在互联网范围内对所有多播组成员进行管理的协议。
- IGMP 不知道 IP 多播组包含的成员数,也不知道这些成员都分布在哪些网络上。
- IGMP 协议是让连接在本地局域网上的多播路由器知道本局域网上是否有主机(严格讲,是主机上的某个进程)参加或退出了某个多播组。
多播路由选择协议更为复杂:
- 多播转发必须动态地适应多播组成员的变化(这时网络拓扑并未发生变化)。请注意,单播路由选择通常是在网络拓扑发生变化时才需要更新路由。
- 多播路由器在转发多播数据报时,不能仅仅根据多播数据报中的目的地址,而是还要考虑这个多播数据报从什么地方来和要到什么地方去。
- 多播数据报可以由没有加入多播组的主机发出,也可以通过没有组成员接入的网络。
7.3.2 网际组管理协议 IGMP
- 1989 年公布的 RFC 1112(IGMPv1)早已成为了互联网的标准协议。
- 1997 年公布的 RFC 2236(IGMPv2,建议标准)对 IGMPv1 进行了更新。
- 2002 年 10 月公布了 RFC 3376(IGMPv3,建议标准),宣布 RFC 2236(IGMPv2)是陈旧的。
IGMP 是整个网际协议 IP 的一个组成部分:
- 和 ICMP 相似,IGMP 使用 IP 数据报传递其报文(即 IGMP 报文加上 IP 首部构成 IP 数据报),但它也向 IP 提供服务。
- 因此,我们不把 IGMP 看成是一个单独的协议,而是属于整个网际协议 IP 的一个组成部分。
IGMP 工作可分为两个阶段:
- 第一阶段:加入多播组。
- 当某个主机加入新的多播组时,该主机应向多播组的多播地址发送IGMP 报文,声明自己要成为该组的成员。
- 本地的多播路由器收到 IGMP 报文后,将组成员关系转发给互联网上的其他多播路由器。
- 第二阶段:探询组成员变化情况。
- 因为组成员关系是动态的,因此本地多播路由器要周期性地探询本地局域网上的主机,以便知道这些主机是否还继续是组的成员。
- 只要对某个组有一个主机响应,那么多播路由器就认为这个组是活跃的。
- 但一个组在经过几次的探询后仍然没有一个主机响应,则不再将该组的成员关系转发给其他的多播路由器。
IGMP 采用的一些具体措施:
- 在主机和多播路由器之间的所有通信都是使用 IP 多播。
- 多播路由器在探询组成员关系时,只需要对所有的组发送一个请求信息的询问报文,而不需要对每一个组发送一个询问报文。默认的询问速率是每 125 秒发送一次。
- 当同一个网络上连接有几个多播路由器时,它们能够迅速和有效地选择其中的一个来探询主机的成员关系。
- 在 IGMP 的询问报文中有一个数值 N,它指明一个最长响应时间(默认值为 10秒)。当收到询问时,主机在 0 到 N 之间随机选择发送响应所需经过的时延。对应于最小时延的响应最先发送。
- 同一个组内的每一个主机都要监听响应,只要有本组的其他主机先发送了响应,自己就可以不再发送响应了。
7.3.3 多播路由选择
- 多播路由选择协议尚未标准化。
- 一个多播组中的成员是动态变化的,随时会有主机加入或离开这个多播组。
- 多播路由选择实际上就是要找出以源主机为根结点的多播转发树。
- 在多播转发树上的路由器不会收到重复的多播数据报。
- 对不同的多播组对应于不同的多播转发树。
- 同一个多播组,对不同的源点也会有不同的多播转发树。
- 多播路由选择协议在转发多播数据报时使用三种方法:
-
(1) 洪泛与剪除
- 这种方法适合于较小的多播组,而所有的组成员接入的局域网也是相邻接的。
- 一开始,路由器转发多播数据报使用洪泛的方法(这就是广播)。
- 为了避免兜圈子,采用了叫作反向路径广播 RPB (Reverse Path Broadcasting)的策略。
RPB要点:- 路由器收到多播数据报时,先检查它是否是从源点经最短路径传送来的。
- 若是,就向所有其他方向转发刚才收到的多播数据报(但进入的方向除外),否则就丢弃而不转发。
- 如果存在几条同样长度的最短路径,那么只能选择一条最短路径,选择的准则就是看这几条最短路径中的相邻路由器谁的 IP 地址最小。
- 最后就得出了用来转发多播数据报的多播转发树,以后就按这个多播转发树转发多播数据报。避免了多播数据报的兜圈子,同时每一个路由器也不会接收重复的多播数据报。
- 如果在多播转发树上的某个路由器发现它的下游树枝(即叶节点方向)已没有该多播组的成员,就应把它和下游的树枝一起剪除。
- 当某个树枝有新增加的组成员时,可以再接入到多播转发树上。
-
(2) 隧道技术 (tunneling)
-
(3) 基于核心的发现技术
- 这种方法对于多播组的大小在较大范围内变化时都适合。
- 这种方法是对每一个多播组 G 指定一个核心(core) 路由器,给出它的 IP 单播地址。
- 核心路由器按照前面讲过的方法创建出对应于多播组 G 的转发树。
-
7.3.4 几种多播路由选择协议
- 距离向量多播路由选择协议 DVMRP (Distance Vector Multicast Routing Protocol)
- 基于核心的转发树 CBT (Core Based Tree)
- 开放最短通路优先的多播扩展 MOSPF (Multicast Extensions to OSPF)
- 协议无关多播-稀疏方式 PIM-SM (Protocol Independent Multicast-Sparse Mode)
- 协议无关多播-密集方式 PIM-DM (Protocol Independent Multicast-Dense Mode)