移动IP

现在有成千上万的人在移动中使用计算机进行通信,如坐在火车或汽车内使用无线设备上网浏览网页、收发电子邮件或使用最近甚为流行的微信进行网上社交等。

移动性对网络应用的影响

如果你乘坐在一辆行驶的汽车上,汽车正穿越于遍布Wi-Fi服务区的城市街道,从一个网络不间断地进入另一个网络,而这时你正在下载一个大的 DVD 视频文件,如果你的计算机在不停地变换自己的IP地址,你将不能顺利地完成这项下载任务。因为普通应用程序无法将数据发送给一个不断改变自己地址的主机。

当一个移动主机在异地接入到当地的网络时,其IP地址必然要改变。因为路由器的寻址是先通过目的IP地址中的网络号找到目的网络的,如果移动主机不改变自己的IP地址,所有发送到该IP地址的数据报都只会路由到移动主机原来所在的网络,而不会被转发到这个新接入的网络,也就是说,移动主机将不会收到发送给它的任何数据报。

移动 IP 的工作原理

移动 IP (Mobile IP, MIP)[RFC 3344]是 IETF 开发的一种技术,该技术在 IP 层为上层网络应用提供移动透明性。移动IP技术允许移动主机在网络之间漫游时仍然能保持其IP地址不变,此外,还提供机制使因特网中的其他主机能够将IP数据报正确发送到这个移动主机。

在移动IP中,每个移动主机都有一个默认连接的网络或初始申请接入的网络,被称为归属网络(home network)。移动主机在归属网络的 IP 地址被称为归属地址(home address)或永久地址(permanent address),因为这个地址在移动主机的整个移动通信过程中是始终不变的。在归属网络中代表移动主机执行移动管理功能的实体称为归属代理(home agent)。移动主机当前漫游所在的网络叫外地网络(foreign network)或被访网络(visited network)。在外地网络中帮助移动主机执行移动管理功能的实体称为外地代理(foreign agent),外地代理会为移动主机提供一个临时使用的属于外地网络的转交地址(care-of address)。

当移动主机外出漫游到外地网络时,由归属代理代收所有发给移动主机的数据报并利用转交地址将数据报通过IP-in-IP隧道转发给移动主机所在网络的外地代理,再由外地代理将数据报转交给移动主机。下图说明这个原理:

image-20210805130722268

1.代理发现与注册

移动主机漫游外地时同时向外地代理注册自己的永久地址和归属代理的地址。外地代理会将移动主机的永久地址登记在自己的注册表中,并向移动主机的归属代理注册该转交地址(也可由移动主机直接进行注册)。归属代理会将移动主机的转交地址记录下来,此后,归属代理会代替移动主机接收所有发送给该移动主机的IP数据报,并利用我们前面讨论过的IP隧道技术将该数据报转发给移动主机。

2.固定主机向移动主机发送数据报

这里有三个问题:

  1. 归属代理如何截获目标为移动主机的IP数据报?
  2. 转交地址到底是不是移动主机在外地网络中的地址?
  3. 外地代理如何将被封装的IP数据报直接转发给移动主机?

对于第一个问题,归属代理可以采用一种称为代理 ARP 的技术。当移动主机不在归宿网络时,归属代理会代替移动主机A以自己的MAC地址应答所有对移动主机A的ARP请求。为了使网络中各主机或路由器能尽快更新各自的ARP缓存,归属代理还会主动发送ARP广播,并声称自己是移动主机A。

对于第二个问题,当外地代理和移动主机不是同一台机器时(我们先只讨论这种情况),转交地址实际上是外地代理的地址而不是移动主机的地址,因为转交地址既不会作为移动主机发送的IP数据报的源地址,也不会作为移动主机所接收的IP数据报的目的地址。所有使用同一外地代理的移动主机都可以共享同一转交地址。

对于第三个问题,由于外地代理从IP隧道中取出的被拆封的IP数据报的目的地址为移动主机的永久地址,因此外地代理不能采用IP数据报转发的正常流程将其发送给移动主机,因为这样将会把该数据报又发送回移动主机的归属网络。实际上,外地代理在登记移动主机的永久地址时,会同时记录下它的 MAC 地址。当外地代理从隧道中取出目标为移动主机的IP数据报时,会在自己的代理注册表中查找移动主机的永久地址所对应的MAC地址,并将该IP数据报直接封装到目的MAC地址为移动主机的MAC帧中进行发送(这个时候是广播)。

3.移动主机向固定主机发送数据报

如果有IP数据报要从移动主机A发送给固定主机B,则非常简单,移动主机A仅需要直接将源地址为其永久地址而目的地址为固定主机B的IP数据报按照正常的转发流程发送出去即可。

4.同址转交地址

外地代理也可以直接运行在移动主机上,这时的转交地址被称为同址转交地址,因为它们就是同一台机器。这样,移动主机自己将接收所有发往转交地址的IP数据报。采用同址转交地址方式时,移动主机上要运行额外的外地代理软件。

5.三角形路由问题

上图所示的间接路由会引起IP数据报转发的低效性,该问题常被称为三角形路由问题。该问题是指即使在固定主机与移动主机之间存在一条更有效的路径,发往移动主机的数据报也要先发送给归属代理。如果固定主机B就在移动主机A所在的外地网络之中,B发给A的数据报也要经过A的归属代理的转发。

解决这个问题可以在固定主机B中加一层代理,记录移动主机A的永久地址和转交地址的关系,直接将IP数据报通过IP隧道技术发给转交地址,提高通信效率。但这种方法增加了复杂度。

移动 IP 的标准

当前移动 IP 的标准是 RFC 3344,针对移动主机路由问题对现有IP协议(IPv4)的补充。

  1. 代理发现:定义归属代理或外部代理向移动主机通告其服务时所使用的协议,以及移动主机请求一个外部代理或归属代理的服务时所使用的协议。其中最重要的就是外部代理要将转交地址通告给移动主机。
  2. 信息注册:定义移动主机向外地代理注册或注销永久地址、归宿代理地址等信息,以及移动主机或外地代理向归宿代理注册或注销转交地址时所用的协议。
  3. 间接路由:定义数据报由一个归属代理转发给移动主机的方式,包括转发规则、差错处理规则和不同的封装形式。

移动IP标准还考虑了广播、多播、移动路由器等情况和协议的安全性。

蜂窝移动通信网中的移动性管理

蜂窝移动通信网对移动性支持比移动 IP 有更长久的历史。我们的移动电话漫游到任何地方都只使用同一个电话号码,并且在移动过程中不用担心会中断通话(如果都在信号良好覆盖的地方)。实际上蜂窝移动通信网采用了与移动IP类似但要更复杂一些的机制为用户提供移动性服务。

第三代移动通信三大主流标准之一的CDMA2000的分组域核心网(是一个IP网络)支持使用移动IP技术为数据业务提供移动性服务,而其他几个3G标准并没有使用移动IP技术,而是在IP层以下为用户提供移动性服务。但是这些3G网络的移动性管理都还仅仅是在该移动通信网络内部为移动设备提供移动性服务。

下一代网际协议IPV6

解决 IP 地址耗尽的根本措施

现在使用的IP(即IPv4)是在20世纪70年代末期设计的。到2011年2月,IPv4的地址已经耗尽,ISP已经不能再申请到新的IP地址块。如何没有 NAT 技术的广泛应用,IPv4 早已停止发展了。但NAT仅仅是为延长IPv4使用寿命而推出的权宜之计,解决IP地址耗尽的根本措施就是IPv6。

换一个新版的IP并非易事。世界上许多团体都从因特网的发展中看到了机遇,因此,在新标准的制定过程中出于自身的经济利益而产生了激烈的争论。到目前为止,IPv6还只是草案标准阶段。

IPv6 的基本首部

IPv6仍支持无连接的传送,但将协议数据单元PDU称为分组,而不是IPv4的数据报。不过我们仍采用数据报这一名词。特点:

(1)更大的地址空间。IPv6将地址从IPv4的32位增大到了128位,使地址空间增大了296倍。

(2)扩展的地址层次结构。划分为更多的层次,更好地反映因特网拓扑结构,对寻址和路由层次的设计更具灵活性。

(3)灵活的首部格式。IPv6数据报的首部和IPv4的并不兼容。IPv6定义了许多可选的扩展首部。

(4)改进的选项。IPv6 允许数据报包含有选项的控制信息,因而可以包含一些新的选项。而IPv4所规定的选项是固定不变的。

(5)允许协议继续扩充。因为技术总是在不断地发展,而新的应用也还会出现。但我们知道,IPv4的功能是固定不变的。

(6)支持即插即用(即自动配置)。IPv6支持主机自动配置IP地址、路由器地址及其他网络配置参数。

(7)支持资源的预分配。IPv6能为实时音视频等要求保证一定的带宽和时延的应用提供更好的服务质量保证。

IPv6 把首部长度变为固定的 40 字节,称为基本首部(base header)。首部的字段数减少到只有8个。此外,还取消了首部的检验和字段(考虑到数据链路层和运输层都有差错检验功能)。这样就加快了路由器处理数据报的速度。

IPv6 数据报在基本首部的后面允许有零个或多个扩展首部(extension header),再后面是数据,如下图所示。

所有的扩展首部都不属于数据报的首部。所有的扩展首部和数据合起来叫作数据报的有效载荷(payload)或净负荷。

image-20210805150502979

下图是IPv6数据报的基本首部。在基本首部后面是有效载荷,它包括运输层的数据和可能选用的扩展首部。

image-20210805150635296

(1)版本(version)占4位。它指明了协议的版本,对IPv6该字段总是6。

(2)流量类型(traffic class) 占 8 位。这是为了区分不同的 IPv6 数据报的类别或优先级,与 IPv4 的 TOS 字段类似。目前正在进行不同的流量类型性能的实验。这个字段又称为“区分服务”。

(3)流标号(flow label) 占 20 位。IPv6 的一个新的机制是支持资源预分配,并且允许路由器将每一个数据报与一个给定的资源分配相联系。IPv6提出流(flow)的抽象概念。所谓“流”就是互联网络上从特定源点到特定终点(单播或多播)的一系列数据报(如实时音频或视频传输),而在这个“流”所经过的路径上的路由器都保证指明的服务质量。所有属于同一个流的数据报都具有同样的流标号。

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

(5)下一个首部(next header) 占 8 位。它指明其有效载荷中下一个首部的类型,作用相当于IPv4的协议字段或可选字段。

  • 当 IPv6 数据报没有扩展首部时,下一个首部字段的作用和 IPv4 的协议字段一样,它的值指出了基本首部后面的数据应交付给IP上面的哪一个高层协议(例如,6或17分别表示应交付给TCP或UDP)。
  • 当出现扩展首部时,下一个首部字段的值就标识后面第一个扩展首部的类型。

(6)跳数限制(hop limit) 占 8 位。用来防止数据报在网络中无限期存在。源站在每个数据报发出时即设定某个跳数限制。每个路由器在转发数据报时,要先将跳数限制字段中的值减1。当跳数限制的值为零时,就要将此数据报丢弃。

(7)源地址 占 128 位。是数据报的发送站的 IP 地址。

(8)目的地址 占 128 位。是数据报的接收站的 IP 地址。

IPv6为什么要使用扩展首部呢?大家知道,IPv4的数据报如果在其首部中使用了选项,那么沿数据报传送的路径上的每一个路由器都必须对这些选项进行一一检查,这就降低了路由器处理数据报的速度。然而实际上,在一条路径途中的路由器上很多选项是不需要检查的。IPv6 把原来IPv4首部中选项的功能都放在扩展首部中,并将扩展首部留给路径两端的源站和目的站的主机来处理,而数据报途中经过的路由器都不处理这些扩展首部(只有一个首部例外,即逐跳选项扩展首部),这样就大大提高了路由器的处理效率。

RFC 2460 中定义了以下 6 种扩展首部:①逐跳选项;②路由选择;③分片;④鉴别;⑤封装安全有效载荷;⑥目的站选项。

每一个扩展首部都由若干个字段组成,它们的长度也各不同。但所有扩展首部的第一个字段都是8位的“下一个首部”字段。此字段的值指出了在该扩展首部后面的字段是什么。当使用多个扩展首部时,应按以上的先后顺序出现。高层首部总是放在最后面。

IPv6 的编址

一般来讲,一个IPv6数据报的目的地址可以是以下3种基本类型地址之一。

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

(2)多播(multicast) 多播是一点对多点的通信。IPv6没有采用广播的术语,而是将广播看作多播的一个特例。

(3)任播(anycast) 这是 IPv6 增加的一种类型。任播的终点是一组计算机,但来自用户的数据报在交付时只交付给这组计算机中的任何一个,通常是距离最近的一个(例如,用户向公司请求服务,公司的这组计算机中的任何一个可以进行回答)。

IPv6把实现IPv6的主机和路由器均称为结点,并将IPv6地址分配给结点上面的接口。一个接口可以有多个单播地址。

在IPv6中,每个地址占128位,地址空间大于3.4×10的38次方。128的IPv6地址再用IPv4的点分十进制记法来表示显然已不够方便了。为了使地址再稍简洁些,便于维护互联网的人易于阅读和操纵这些地址,IPv6使用冒号十六进制记法,它把每个 16 位的值用十六进制值表示,各值之间用冒号分隔,比如:

68E6:8C64:FFFF:FFFF:0:1180:960A:FFFF

在十六进制记法中允许省去两个冒号之间的数中最前面的一串0,如000F可缩写为F。冒号十六进制记法还包含两个技术使它尤其有用。首先,冒号十六进制记法可以允许零压缩(zero compression),即一连串连续的零可以为一对冒号所取代:

FF05:0:0:0:0:0:0:B3 可以写成:FF05::B3

任意一个地址中只能使用一次零压缩。该技术对已建议的分配策略特别有用,因为会有许多地址包含连续的零串。另外,冒号十六进制记法可结合有点分十进制记法的后缀。结合在IPv4向IPv6的转换阶段特别有用。例如,下面的串是一个合法的冒号十六进制记法:

0:0:0:0:0:0:128.10.2.1

此时虽然为冒号所分隔的每个值是16位,但每个点分十进制部分的值则对应8位的值。再使用零压缩即可得出:

::128.10.2.1

IPv6 和 IPv4 最重要的变化之一就是单播地址所使用的划分策略,以及由此产生的多级地址体系。IPv6的地址体系采用多级体系是充分考虑到怎样使路由器可更快地查找路由。我们知道,采用CIDR后,IPv4的地址形式上是两级结构,它的地址被划分为一个前缀和一个后缀。IPv6扩展了地址的分级概念,它使用以下的3个等级(见下图)。

image-20210805153418445

  1. 全球路由选择前缀,占48位,分配给各公司和机构,用于因特网中路由器的路由选择,相当于IPv4中的网络号。
  2. 子网标识符,占16位,用于各公司和机构创建自己的子网。
  3. 接口标识符,占64位,指明主机或路由器单个的网络接口,相当于IPv4分类地址中的主机号。

与IPv4不同,IPv6地址的主机号字段有64位之多,足够大,因而可以将各种接口的硬件地址直接进行编码。这样,IPv6可直接从128位地址的最后64位中提取出相应的硬件地址,而不需要使用地址解析协议进行地址解析了。

IPv6 定义了各种形式的硬件地址映射到64位接口标识符的方法,比如将48位的以太网硬件地址转换为IPv6地址的接口标识符。

从 IPv4 向 IPv6 过渡

老版本IPv4的路由器的数量太大,向 IPv6 过渡只能采用逐步演进的办法,同时还必须使新安装的 IPv6 系统能够向后兼容。下面介绍两种向 IPv6 过渡的策略,即使用双协议栈和使用隧道技术。

双协议栈(dual stack)是指在完全过渡到 IPv6 之前,使一部分主机(或路由器)装有两个协议栈,一个IPv4和一个IPv6。因此双协议栈主机(或路由器)既能够和IPv6的系统通信,又能够和IPv4的系统进行通信。双协议栈的主机(或路由器)记为IPv6/IPv4,表明它具有两种IP地址:一个IPv6地址和一个IPv4地址。双协议栈主机在和IPv6主机通信时是采用IPv6地址,而和IPv4主机通信时就采用IPv4地址。

下图所示的情况是源主机A和目的主机F都使用IPv6,所以A向F发送IPv6数据报,路径是A→B→C→D→E→F。路由器C和D只使用IPv4,因此它们不能转发IPv6数据报。由于B是IPv6/IPv4路由器,因此路由器B把IPv6数据报首部转换为IPv4数据报首部后发送给C。等到IPv4数据报到达路由器E时(E也是IPv6/IPv4路由器),再恢复成原来的IPv6数据报。请读者注意,IPv6首部中的某些字段却无法恢复。例如,原来IPv6首部中的流标号X在最后恢复出的IPv6数据报中只能变为空缺。这种信息的损失是使用首部转换方法所不可避免的。

image-20210805161025150

隧道技术(tunneling)(原文的意思是打隧道)。如图下图所示,给出了隧道技术的工作原理。这种方法的要点就是在IPv6数据报要进入IPv4网络时,将IPv6数据报封装成为IPv4数据报(整个的IPv6数据报变成了IPv4数据报的数据部分)。然后IPv6数据报就在IPv4网络的隧道中传输。当IPv4数据报离开IPv4网络中的隧道时,再将其数据部分(即原来的IPv6数据报)交给主机的IPv6协议栈。

image-20210805161105269

ICMPv6

IETF 也制定了与 IPv6 配套使用的 ICMP 新版本。

ICMPv6的报文格式和IPv4使用的ICMP的相似,即前4个字节的字段名称都是一样的,但ICMPv6把第5个字节起的后面部分作为报文主体。ICMPv6把报文种类划分为两大类,即差错报告报文(error message)和信息提供报文(informational message),并取消了使用得很少的 ICMP报文。

差错报告报文的类型字段的最高位是0,因此,其类型字段的值是0~127。信息提供报文的类型字段的最高位是 1,其值是 128~255。

image-20210805161248819

image-20210805161448700

上表看出ICMPv6包括了原来ARP和IGMP的功能。邻站询问和邻站通告报文代替了原来的ARP协议,而多播听众发现报文代替了原来的IGMP协议。

我们知道,ICMP是与IPv4协议配套使用的网络层其他4个协议之一(另外3个协议是ARP,RARP和IGMP)。由于已将ARP和IGMP这两个协议的功能并入了ICMPv6,并取消了RARP协议,因此与IPv6配套使用的网络层协议就只有ICMPv6一个协议。

ICMPv6报文的前面是IPv6首部和零个或更多的IPv6扩展首部。在ICMPv6前面的一个首部中的“下一个首部字段”的值应当置为58。请读者注意,这和IPv4中标志ICMP的值不同,在IPv4中标志ICMP的值是1。

多协议标签交换MPLS

简要地讨论一种越来越流行的网络技术:多协议标签交换(Multiprotocol Label Switching,MPLS)[RFC 3031, RFC 3032]。MPLS 试图将虚电路的一些特点与数据报的灵活性和健壮性进行结合,其最初的目标是通过采用来自虚电路网络界的一个关键概念,即固定长度标签,来改善IP路由器的转发速度。

下图是 MPLS 首部

image-20210805162504867

(完)