30、Internet网络层——IPv6协议&Internet控制协议&MPLS(网络层)

1、IPv6协议

  • 针对IP协议匮乏的问题,唯一的长期解决方案是移动到更大的地址空间。IPv6就是能做到这一点的一个替换设计。它采用128位地址,在可预见的将来任何时间都不可能出现地址短缺这个问题。但是,IPv6已经被证明其部署非常困难。这是一个不同的网络层协议,尽管和IPv4有许多相似之处,但它并没有真正与IPv4实现互通。此外,公司和用户真的不知道为什么他们在任何情况下都使用IPv6,其结果虽然部署了IPv6,但只有(估计为1%)只有一小部分Internet在使用,而相应的 Internet标准在1998就已经发布。
  • 除了这些技术问题,还有其他隐藏问题。早期的Internet主要被大学、高科技工业和美国政府(特别是国防部)使用。20世纪90年代中期开始,随着对Internet兴趣的不断膨胀,Internet开始为各种人群所用。首先,大量携带只能手机的用户通过Internet与他们的家庭基地保持联系。其次,大量计算机、通信和娱乐业的不断交融,有可能在不久的将来,世界上的每一步电话和每一个电视都变成了Internet节点,从而几十亿台机器可进行音频和视频点播。很显然,在这样的形势下,IP必须要演进,要变得更灵活。
  • IPv6的目标是:(1)即使地址空间的分配效率不高,也能支持几十亿台主机。(2)降低路由表的大小(3)简化协议,使路由器能更快处理数据包。(4)提供更好的安全(认证和隐私)(5)更加关注服务类型,特别是针对实时数据(6)辅助指定范围内的组播(7)主机漫游时无需改变地址(8)允许协议向未来演进(9)允许新老协议共存许多年
  • IPv6很好地满足了IETF的设计目标。它保持了IP的优良特性,丢弃或者削弱了IP中不好的特性,并且在必要的地方增加了新的特性。一般而言,IPv6并不与IPv4兼容;但是它与其他一些辅助性的Internet协议则是兼容的,包括TCP、UDP、ICMP、IGMP、OSPF、BGP和DNS;若要处理更长的地址则需要做一些微小的改动。下面是IPv6的主要特性,更多信息可以在RFC 2460~2466中找到。
  • 第一个,也是最重要的是IPv6有比IPv4更长的地址。IPv6的地址128位长,这解决了IPv6一开始就想要解决的问题;提供了一个有效的无限量Internet地址。IPv6的第二个主要改进是对头进行了简化。它只包含了7个字段(IPv4只有13个字段)。第三个主要改进是更好地支持选项。这一变化对于新的头来说是本质的,因为以前那些必须的字段现在变成了可选;而且选项的表达方式有所不同,这使得路由器可以非常简单地跳过那些与它无关的选项。此特性也加快了数据包的处理速度。第四个是在安全性方面的改进。在IPv6中,认证和隐私是安全方面的关键特征。然而,后来这些特征也被引入到IPv4中,所以IPv6和IPv4在安全性的方面的差异已经没有这么大了。最后值得关注的是服务质量。过去,人们在这方面做了大量半心半意的努力来改善QoS,但是现在随着多媒体在Internet上的增长,这种紧迫性更加强烈了。

主要的IPv6头

  • 如图所示。对于IPv6,版本字段是6。在从IPv4到IPv6的迁移过程中,路由器通过检查该字段来确定数据包的类型。顺便提一下,做这样的测试在关键路径上需要浪费少量的指令,所以一些路由器可能跳过该检查,数据链路层的头通常指明了多路分用中的网络层协议。例如,以太网的type字段针对IPv4有效载荷和IPv6有效载荷,分别给出了不同的值。30、Internet网络层——IPv6协议&Internet控制协议&MPLS(网络层)_第1张图片
  • 区分服务(最初称为流量级别)字段的用途主要是区分数据包的服务类别,这些数据包具有不同的实时传递需求。它主要被用在服务质量的区分服务体系中,使用方式与IPv4数据包的同名字段一样。此外,最低2位用来发送显式拥塞通知,与IPv4相同。流标签字段为源端和接收方提供了一种建立伪链接的方式,即源端和接收方把一组具有相同需求并希望得到相同网络同等对待的数据包打上标记。例如,从某台特定主机上一个进程到一台特定主机上一个进程之间的数据包流可能有严格的延迟要求,因此要预留带宽。这时可以提前设置一个流,并分配一个标识符。当一个流标签字段非0的数据包出现时,所有的路由器都在自己的内部表中查找该流标签值,看它要求哪一种待遇。实际上这样的流时两种传输模型相结合的一种尝试:数据报网络的灵活性和虚电路网络的保障性。为了保障服务质量,每个流由源地址、目标地址和流编号来指定。这意味着在给定的一对IP地址之间,可以同时有220个活跃的流。而且还意味着来自不同主机的两个流即使有相同的流标签,当它们经过同一台路由器时,路由器也能根据源地址和目标地址将它们区分开。流标签的选取最好随机,而不是从1开始顺序分配,因此路由器可对它们进行哈希处理。
  • 有效载荷长度字段指明了紧跟在图中40个字节头之后还有多少字节数。在IPv4中该字段的名字为总长度,之所以改成现在的名字是因为含义略有不同:40字节的头不再像以前那样算作长度中的一部分。正是下一个头字段显示了IPv6的与众不同关键之处。IPv6头得以简化的原因在于它可以有额外的可选扩展头。该字段指明了当前头之后还有哪种扩展头(当前已经定义了6种扩展头),如果有的话。如果当前的头是最后一个IP头,那么下一个头字段指定了该数据包将被传输给哪个传输协议处理(比如TCP、UDP)。跳数限制字段被用来避免出现数据包永远生存的情形。实际上,它与IPv4中的TTL字段是一样的,也就是说在每一跳上该字段中的值都要被路由器递减。理论上,IPv4中的TTL是一个以秒为单位的时间值,但是所有的路由器都不按照时间值来操作,所以在IPv6中将名字作了修改,以便反映出它的实际用法。
  • 接下来是源地址字段和目标地址字段。确定为16字节的地址。为了便于书写16字节的地址,一种新的标记法被设计了出来。16个字节被分成8组来书写,每一组4个16进制数字,组之间用冒号隔开,如图所示:8000:0000:0000:0000:0123:4567:89AB:CDEF。由于许多地址内部可能有多个0,所以,三种优化方法获得授权。第一,在一个组内可以省略前导0,因此0123可以写成123;第二,16个0构成的一个或多个组可以用一对冒号来代替,因此,上面的地址可以写成:8000::123:4567:89AB:CDEF。第三,IPv4地址现在可以写成一对冒号在加上老式的点分十进制,例如:::192.31.20.46。IPv6应该有2128个地址,近似于3*1038个地址。用其地址覆盖整个地球,IPv6可以保证每平方米有7*1025个地址。这个数值超出了阿伏伽德罗常数。实际上,地址空间的使用效率不会非常高,但在可预见的未来,我们不太可能用得完这些地址。
  • IPv6中没有IHL字段,因为它有固定的长度;协议字段也没有了,因为下一个头字段指明了最后的IP头后面跟的是什么(比如TCP或者UDP段)。所有与分段有关的字段都去掉了,因为IPv6采用了另一种方法来实现分段。首先,所有遵从IPv6的主机都应该能够动态地确定将要使用的数据包长度,主机使用路径MTU发现过程就能做到这一点。简要说,当主机发送了一个非常大的IPv6数据包时,如果路由器不能转发这么大的数据包,它并不对该数据包进行分段,而是向发送主机返回一条报错信息。这条消息告诉主机,所有将来发送给该目标地址的数据包都要进行分段。让主机一开始就发送大小合适的数据包,比让沿途路由器动态地对每个数据包进行分段有效得多。而且,最小数据包长度也从576字节增加到1280字节,以便允许1024字节和许多个头。
  • 最后校检和字段也去掉了,因为校检和会极大地降低性能。现在使用的大多是可靠网络,而且数据链路层和传输层通常有它们自己的校检和,所以网络层上再使用校检和,相比它所付出的性能代价是不值得的。去掉了所有这些特性之后得到的是一个精简的网络层协议。因此,这份设计方案满足了IPv6的目标,即一个快速,灵活并且具有足够大地址空间的协议。

扩展头

  • 有些省略的IPv4字段偶尔还会有用,所以IPv6引入了可选的扩展头这一概念。这些扩展头可以用来提供一些额外的信息,但是它们以一种更有效的方式编码。目前定义了6中扩展头,如图所列。每一种扩展头都是可选的,但是如果有多个扩展头出现,那么它们必须直接跟在固定头部后面,而且最好使用列表中列出的顺序(逐跳选项的位置是强制的,其他的都是建议性的)。30、Internet网络层——IPv6协议&Internet控制协议&MPLS(网络层)_第2张图片
  • 有些扩展头有固定的格式,其他扩展头包含数目不定的可变长度选项。对于所有这些可变选项,每一项都被编码成一个(Type,Length,Value)三元组。Type字段占一个字节,它指明这是什么选项。Type的值有特殊的选取方法,它的前2位告诉路由器不知道如何处理该选项时应该如何处理数据包。选择方案有:跳过该选项;丢弃该数据包;丢弃该数据包并返回一个ICMP数据包;丢弃该数据包,但是对于组播地址不发送ICMP数据包(这样可以避免一个坏的组播数据包产生数百万个ICMP报告)。长度字段也占一个字节,它说明Value字段有多长(从0~255字节)。值字段是任何扩展头所需要的信息。30、Internet网络层——IPv6协议&Internet控制协议&MPLS(网络层)_第3张图片
  • 逐跳头用来存放沿途所有路由器必须要检查的信息。到现在为止,已经定义了一个选项:支持超过64KB(超过65535字节)的数据报。该头的格式如图。使用这种扩展头时,固定头中的有效载荷长度0。30、Internet网络层——IPv6协议&Internet控制协议&MPLS(网络层)_第4张图片
  • 与所有扩展头一样,逐跳扩展头的起始字节也指定了接下去是哪一种头。该字节之后的字节指示了当前逐跳扩展头有多少字节,其中不包括起始的8个字节,因为这8个字节是强制的,所有扩展头都是以这种方式开始的。接下来的两个字节表明了该选项定义了数据报的长度(代码194),并长度值以4字节计数。最后4个字节给出了数据报的长度,小于65535的长度值是不允许的,第一台路由器将丢弃这样的数据包,并且返回一个ICMP错误消息。使用这种扩展头的数据报称为巨型数据报,对于那些必须通过Internet传输千兆字节数据的超级计算机应用来说,巨型数据报的使用非常重要。
  • 目标选项扩展头用于那些只需被目标主机翻译的字段。在IPv6的初始版本中,唯一定义的选项是空选项。利用空选项可以将当前头拉长到8字节的倍数,所以它最初没有被使用。之所以设置这个选项是是为了以防万一,也许某一天有人会想到一种新的目标选项,这样就能确保新的路由软件和主机软件对它进行处理。
  • 路由扩展头列出了在通向目标的途中必须要经过的一台或者多台路由器。它非常类似于IPv4的松散源路由。在松散路由机制中,凡是列出来的地址,必须要严格按顺序被访问到,但是这些地址中间也可以经过一些没有列出来的其他路由器。路由头的格式如图所示。30、Internet网络层——IPv6协议&Internet控制协议&MPLS(网络层)_第5张图片
  • 路由器扩展头的前4个字节包含了4个单字节整数。下一个头和扩展头长度字段如前述。路由类型字段给出了该扩展头的剩余部分格式。类型0表示在第一个字后面是一个保留的32位字,然后是一定数量的IPv6地址。将来根据需要还可以发明其他的类型。最后,剩余段数字段记录了在地址列表中还有多少个地址未被访问到。每当一个地址被访问时,该字段中的数值减一。当它被减到0时,该数据包就获得自由,它不需要再遵循任何路由路径了。通常到这个时候它离目标已经非常接近,所以最佳路径也非常显然了。
  • 分段扩展头涉及与分段有关的事项,器处理方法与IPv4的做法非常类似。该扩展头保存了数据报的标识符、分段号,以及指明了后面是否还有更多段的标志位。然而,与IPv4不同的是,在IPv6中,只有源主机才可以将一个数据包进行分段,沿途的路由器可能不会进行分段。这一改变简化了路由器的工作,使得路由过程更快。因为路由器如果面临一个太大的数据包,那么它可以丢弃该数据包并向源主机发回一个ICMP包。这一信息允许源主机使用本扩展头把数据包分割成小的片段,然后试着重新发送。
  • 认证扩展头提供了一种让数据包接收方确定发送方身份的机制。加密安全有效载荷扩展头使得有可能对数据包的内容进行加密,因此只有真正的接收方才可以读取数据包路由器内容。这两个扩展头使用密码技术来完成它们的任务。

争论

  • 之前已经提到过有关地址长度的争论,另一个争论发生在跳数限制字段,最终8位支持者获胜。关于最大数据包长度争论的结果是,正常的数据包被限制在64KB以内,但是允许使用逐跳扩展头来传递巨型数据报。第三个热点话题是去掉IPv4校检和,不管用什么方法一定要有一个传输层校检和,所以在IP中使用另一个校检和(而且还有一个数据链路层的校检和)纯属多余。更进一步,经验表明计算IP校检和是IPv4协议的一个主要开销。最终IPv6没有保留校检和。移动主机也是一个争论的焦点。如果一台便携式计算机正在世界各地旅行,那么它是继续使用同样的IPv6地址还是必须使用需要家乡代理支持的方案呢?由于没有一致意见,所以这一努力以失败告终。
  • 可能最大的争论在于安全性。每个人都承认安全性非常重要,争议的焦点在于在哪里如何实现。首先是在哪里实现安全性。支持在网络层实现安全性的观点是,安全性变成一种标准服务,于是所有的应用都可以使用安全服务,而无需任何提前规划。反对派认为,真正的安全应用一般只需要端到端的加密,其中源端应用完成加密过程,接收方应用完成解密过程。网络层的实现可能会有错误,用户对此没有任何控制能力却要收到它的约束。与何处实现安全性相关的另一个话题是许多国家都有针对密码系统的严格出口法规。有些国家,特别是伊拉克和法国,限制在国内使用密码系统,因此老百姓对政府来说没有任何秘密可守。结果任何一个使用了一定强度密码系统的IP实现不可能从美国(和许多其他国家)出口给全球的用户。为此,软件厂商不得不维护两套软件,一套给国内使用,一套出口,这遭到了许多厂商的反对。
  • 有一点大家倒是没有异议,那就是没有希望在某个星期天晚上IPv4网络突然关闭,然后星期一早晨切换到IPv6网络。相反,对被隔离的IPv6孤岛进行改造,刚开始的时候可以通过隧道方式通信,随着IPv6岛的增加,它们将合并成更大的岛,最终所有岛屿合并在一起,于是Internet将完全转变为IPv6 Internet。至少这是个计划。已有的部署证明了IPV6的死穴。即使所有的主操作系统完全支持它,它也很少使用。大多数的IPv6部署是为了满足网络运营商需要大量IP地址的新情形,例如移动电话运营商。已经定义了许多策略,以便有助于缓解过渡压力。其中一些方法可以被主机用来自动配置隧道,通过IPv4运载IPv6;还有一些方法可使主机自动找到隧道出入口。双栈主机同时实现了IPv4和IPv6协议,可以根据数据包的目的地选择使用的协议版本。这些战略大幅简化IPv6的后续部署,当IPv4地址耗尽时IPv6的大量部署似乎是不可避免的。

2、Internet控制协议

  • 除了用于数据传输的IP协议外,Internet在网络层还有几个辅助控制协议。它们包括ICMP协议、ARP协议和DHCP协议。针对IPv6,ICMP和DHCP有类似的版本,而与ARP等价的协议则称为NDP(邻居发现协议)。

ICMP——Internet控制消息协议

  • 路由器严密监视Internet的操作。当路由器在处理一个数据包的过程中发生了意外,可通过Internet控制消息协议向数据包的源端报告有关事件;ICMP还可以用来测试Internet。已经定义的ICMP消息类型大约有10多种,每一种ICMP信息类型都被封装在一个IP数据包中。图中列出了最重要的一些消息类型。30、Internet网络层——IPv6协议&Internet控制协议&MPLS(网络层)_第6张图片
  • 当路由器不能定位一个目标,或者当一个设置了DF标志位的数据包由于中途经过一个小数据包网络而不能递交时,路由器可以使用目的地不可达消息来报告这种情况。当一个数据包由于它的TTL达到0而被丢弃时,路由器发送超时消息。这种事件往往预示着数据包进入了路由循环,或者计时器的超时值设置得太小。
  • 超时消息可巧妙地被用于Traceroute工具,该工具由Van Jacobson在1987年开发。这个工具可发现从主机到目的地的路径上的IP地址,而且不需要任何特权网络的支持就能发现这种信息。方式其实很简单:给目标地址发送一些列的数据包,分别将TTL值设置为1、2、3以此类推。这些数据包的计数值沿路径延伸而后被后续路由器逐步减为零,因此这些路由器乖乖地发送一个超市消息给发送主机。根据返回的信息,主机可以确定路径沿途的路由器IP地址,以及跟踪路径各部分的统计数据和时间开销。这不是超时消息的本意,但它也许是最有用的网络调试工具。
  • 参数问题消息表示在头字段中检测到一个非法值。这个问题说明了发送主机的IP软件中存错误,或者也可能是中途路由器软件存在错误。源抑制消息以前被用来抑制那些发送太多数据包的主机。当一台主机接收到这些消息时,它应该将发送速度减慢下来。这种消息现在很少使用了,因为当拥塞发生时,再发送这些包无疑是火上浇油。现在Internet拥塞控制任务主要由传输层完成。
  • 当路由器注意到一个数据包看起来被错误地路由时,它使用重定向消息将可能的错误消息告诉源端主机。回显和回显应答消息可以用来判断一个指定目标是否可达,以及是否活着。目标主机接收到回显消息之后,应该立即送回一个回显应答消息。这些消息主要被ping工具用来探测Internet上是否存在某一台特定的主机。
  • 请求时间戳和应答时间戳消息的用途相似,只不过在应答消息中还包含了请求消息的到达时间和应答消息的发出时间。此项设施可用来测量网络的性能。
  • 路由器通告或路由器恳求消息使得主机拥有寻找附近路由器的能力。主机至少需要学习一个路由器的IP地址才能发送离开本地网络的数据包。除了这些消息外,标准还定义了其他消息类型。详细的消息类型可在线查询 www.iana.org/assignments/icmp-parameters。

ARP——地址解析协议

  • 尽管Internet上的每台机器都有一个或多个IP地址,但是仅有这些地址还不足以支撑发送数据包。数据链路层硬件网卡,比如以太网卡并不理解Internet地址。在以太网的环境里,每一块NIC在出厂都配置了一个唯一的48位以太网地址。以太网NIC的制造商从IEEE请求一块以太网地址,确保不会出现在任何两块网卡有相同的地址(以避免两块网卡出现在同一个LAN上时发生冲突)。NIC根据其48位以太网地址来发送和接收帧。它们对32为的IP地址一无所知。
  • 现在问题来了:如何将IP地址映射到数据链路层的地址,比如以太网地址呢?为了解释这一工作过程,我们来看图中的例子。这个例子演示了一个规模较小的大学,它只有量两个/24网络。计算机系有一个交换式以太网(CS),它的前缀是192.32.65.0/24;另一个在电机工程系(EE),它的前缀为192.32.63.0/24。这两个局域网通过一个IP路由器连接。以太网上的每台机器和路由器上的每个接口都有一个唯一的以太网地址,我们将它标为CS或EE网络上的E1至E6。30、Internet网络层——IPv6协议&Internet控制协议&MPLS(网络层)_第7张图片
  • 我们来看CS网络上主机1的用户如何给主机2的用户发送数据包。假设发送方知道目标接收方的名字,可能像eagle.cs.uni.edu这样的名字。第一步是找到主机2的IP地址。这个查找过程由域名系统(DNS)完成。此刻我们假设DNS返回主机2的IP地址(192.32.65.5)。主机1上层软件现在构建一个数据包,其目标地址字段为192.32.65.5,然后它将该数据包交给IP软件来发送。IP软件看到该地址后发现这个地址就在CS网络上(即它自己所在的网络)。然而,它仍然需要某一种办法来找出目标主机的以太网地址才能发送帧。一种解决方案是在系统中设置一个配置文件,该配置文件给出了从IP地址到以太网地址的映射关系。虽然这种方案当然是可能的,但是对于拥有几千台机器的组织来说,在所有主机上保持配置文件并及时更新,则是一件既容易出错又费时的任务。
  • 一个更好的解决方案是主机1发送一个广播包到以太网络上请求拥有IP地址192.32.65.5的主机。该广播包将会到达CS网络上的每一台主机,并且每台主机都会检查自己的IP地址。只有主机2会用自己的以太网地址E2作为应答。通过这种方式,主机1获知IP地址192.32.65.5是一台拥有以太网地址E2的主机。请求和获得应答两个过程所使用的协议称为地址解析协议。几乎Internet上的每一台机器都运行这个协议。
  • 与采用配置文件相比,使用ARP协议的优点是简单。系统管理员只要给每台机器分配一个IP地址,并且确定好子网掩码,不用做任何其他事情,ARP会负责处理好其他事情。这时候,主机1上的IP软件构建一个以太网帧,其目标地址为E2,并且把IP数据包(目标地址为192.32.65.5)放到以太网的有效载荷字段中,然后将它发送到以太网上。图中给出了该数据包的IP地址和以太网地址。主机2的以太网NIC检测到这一帧,并识别出这是发给自己的帧,于是将它接收进来,并产生一个中断;以太网驱动程序从有效载荷中提取出IP数据包,并将它传递给IP软件,IP软件看到它的目标地址正是指向自己,于是对它进行处理。
  • 为了使ARP的效率更高,可以进行各种优化处理。首先,一旦一台机器已经运行了ARP,那么它可以将ARP缓存起来,以便它稍后与同一台机器通信时在使用。当下次通信时,它就可以在缓存中找到所需的地址映射关系,从而避免进行第二次广播。在许多情况下,主机2必须返回一个应答,这就迫使它也要运行ARP来确定发送方的以太网地址。应答ARP广播也是可以避免的,因为主机1可以将它的“IP-以太网”地址映射关系包含在它的ARP包中。当ARP广播包到达主机2时,(192.32.65.7,E1)这对映射关系放到它们的ARP缓存中。
  • 为了允许映射关系发生变化,比如为一台主机配置了一个新的IP地址(但保留其老的以太网地址),(发送方的)ARP缓存中的相应表项应该在几分钟之后发生超时。保持缓存信息最新状态并能优化性能的一种更聪明的方式是,让每台主机配置之后广播它的地址映射关系。这次广播通常以ARP形式发送,即主机发送一个ARP请求查找它自己的IP地址。按理来说,网络上不会有任何应答,这个广播包的副作用就是其他主机在ARP缓存中加入了一个映射表项。这就所谓的免费ARP。如果意味地收到了一个应答,那么一定是两台机器被分配了相同的IP地址。网络管理员必须解决这个问题,否则这两台机器都不能使用网络。
  • 现在假设主机1想要给主机4(192.32.63.8)发送数据包。主机1发现目标IP地址不在CS网络。同时它知道应该把所有这些网络外的流量发送给路由器,该路由器称为默认网关。按照惯例,默认网关具有网络上的最低地址(192.32.65.1)。为了给路由器发送帧,主机1必须知道该路由器在CS网络上的接口地址。因此,主机1发送一个ARP广播报文,请求192.32.65.1对应的以太网地址,从该广播报文的应答报文它获知所需的以太网地址为E3;然后用该地址给路由器发送帧。数据包沿着一条Internet路径从一个路由器被转发到下一个路由器时就是采用这种查询机制的。
  • 当路由器的以太网NIC得到该帧后,它将数据包交给IP软件。IP软件从网络掩码了解到这个数据包要发给EE网络,在EE网络再到达主机4。如果路由器不知道主机4的以太网地址,它可以再次使用ARP。在图中的表中列出了从CS和EEE网络观察到的帧的源和目标的以太网地址和IP地址我们观察到出现在每个网络上的帧的以太网地址发生了改变,而IP地址保持不变(因为它表示所有互联网络的端点)。
  • 还有一种可能,当主机1不知道主机4在另一个不同的网络时,仍然可以从主机1发送一个数据包给主机4.解决办法是让CS网络上的路由器回答针对主机4的ARP请求,并以E3作为响应。直接由主机4来响应对自己的ARP请求报文是不可能的,因为它根本看不到ARP请求(路由器不会转发以太网级的广播报文)。然后,路由器将收到发给192.32.63.8的帧,并将该帧转发到EE网络。这个解决方案称为ARP代理。这种方案常用在这样一种特殊情况下:一个主机想出现在一个网络上,即使它实际上再另一个网络上。例如,一个常见的情况是有个移动笔记本,当它离开家乡网络时,其他节点仍然能给它发送数据包。

DHCP——动态主机配置协议

  • ARP(以及其他协议Internet协议)都做了这样的假设,即主机配置了一些基本信息,比如自己的IP地址。主机如何获得此信息?手动配置每台计算机是可能的,但那既乏味又容易出错。有一个更好的方法可以完成这件事情,就是动态主机配置协议。
  • 采用DHCP时,每个网络必须有一个DHCP服务器负责地址配置。当计算机启动时,它有一个嵌入在NIC中的内置以太网地址或其他链路层地址,但没有IP地址。像ARP一样,该计算机在自己的网络上广播一个报文,请求IP地址。这个请求报文就是DHCP DISCOVER包,这个包必须到达DHCP服务器。如果DHCP服务器没有连接在本地网络,那么必须将路由器配置成能接受DHCP广播并将该请求报文中继给DHCP服务器,由DHCP服务器来处理DHCP报文。
  • 当DHCP服务器收到请求,它就为该主机分配一个空闲的IP地址,并通过DHCP OFFER包返回给主机(这个报文或许也要通过路由器中继)。为了在主机没有IP地址的情况下完成此项工作,服务器用主机的以太网地址来标识这台主机(主机的以太网地址由DHCP DISCOVER包携带过来)。IP地址的自动分配有个问题,就是从地址池中取出一个地址分配给主机多久。如果一个主机离开网络,并且没有把分配给它的IP地址返回给DHCP服务器,那么该地址将永久丢失。过一段时间,很多地址都可能因此丢失。为了防止这种情况发生,可以为每个分配的IP地址指定一段固定时间,这种技术成为租赁。在租赁期满前,主机必须请求DHCP续订。如果没有提出续订或者请求被拒接,主机或许不能使用以前分配给它的IP地址。
  • DHCP由RFC 1231和RFC 2132描述。它已经被广泛应用于Internet,可为主机配置除了IP地址以外的其他各种参数。它还被用于企业网络,ISP使用DHCP来设置Internet接入链路上的设备参数,因此客户不需要给他们的ISP打电话来获得这些信息。常见的配置信息例子包括子网掩码、默认网关的IP地址、DNS服务器和时间服务器的IP地址。DHCP已经在很大程度上取代了先前使用的协议(称为RARP和BOOTP),因为这些协议的功能比较有限。

3、标签交换和MPLS

  • 到目前为止,在我们的Internet网络层巡视中,注意力都专注于数据包,因为这是IP路由器转发的数据报。还有一种技术正在开始广为应用,特别是被ISP用来在它们的网络之间移动Internet流量。这种技术称为多协议标签交换,它非常接近电路交换。尽管Internet社团中的很多人对面向连接的网络有强烈的反感,但这个想法似乎又走了回头路。然而Internet路由建立的方式与面向连接网络对路由的处理方式两者之间存在着本质上的区别,所以这种技术肯定不是传统的电路交换。
  • MPLS在每个数据包前面增加一个标签,路由器根据数据包标签而不是数据包目的地实施转发。用标签作为一个内部表的索引,快速查找该表找出正确的输出线路,因而这只是一个表查操作。使用这种技术,路由器的转发速度非常快。这种优势是MPLS的最原始设计动机。刚开始这些技术有各种名称,其中包括标签交换。随着时间的推移,MPLS的好处表现了出来,主要表现在灵活的路由和快速以及适合服务质量的中转发。
  • 第一个要问的问题是标签放在哪里?由于IP数据包并不是针对虚电路设计的,所以在IP头并没有刻意存放虚电路号的空间。由于这个原因,必须要在IP数据包的头前面加上一个新的MPLS头。如果从一台路由器到另一台路由器之间的线路采用PPP作为成帧协议,那么帧格式中包含了PPP、MPLS、IP和TCP。如图。30、Internet网络层——IPv6协议&Internet控制协议&MPLS(网络层)_第8张图片
  • 通用的MPLS头有4个字节长,并且包含了4个字段。其中最重要的是标签字段,它放的是索引。QoS字段指明了服务的类别。S字段涉及在层次网络中叠加多个标签的做法。TTL字段指出该数据包还能被转发多少次,每经过一个路由器递减1,如果降为0则该数据包被丢弃,这个特性可以防止在路由不稳定的情况下出现无线循环问题。
  • MPLS介于IP网络层协议和PPP链路层协议之间。它不是一个真正的第3层协议,因为它依赖于IP或其他网络层地址来建立标签路径;但它也不是一个真正的第2层协议,因为它既可以在多跳之间转发数据包,也不是一条单一链路。出于这个原因,MPL有时称为2.5层协议。这是一个例子,说明真正的协议并不总是符合我们的理想分层协议模型。
  • MPLS具有其光明的一面,因为MPLS头既不属于网络层数据包也不属于数据链路层帧的一部分,所以MPLS在相当大的程度上独立于这两层。除此之外,这个属性还意味着有可能制造出能同时转发IP数据包和非IP数据包的MPLS交换机,具体如何转发取决于线路上出现的是什么这个特性就是MPLS名字中多协议的由来。MPLS还可以通过非IP网络来运载IP数据包。
  • 当一个MPLS增强型数据包到达一个标签交换路由器(LSR),标签就被用作查找一个表的索引,以便确定要使用的出境线路和新标签。所有的虚电路网络几乎都采用这种标签替换技术。标签只有本地意义,两个不同的路由器可以给两个都到另一台路由器但相互之间毫无关系的数据包分配相同的标签,这两个数据包的进一步传输将使用同一条出境线路。为了在虚电路的另一端能区分这两个数据包,标签必须在每一跳进行重新映射。我们在拥塞控制章节已经看过这个机制是如何工作的,MPLS使用了与此相同的技术。
  • 顺便说一句,有些人将路由器的转发行为和交换行为进行了区分。转发是一个过程,从一个表中找出与目标路径最佳匹配的表项,并决定将数据包发往哪里,一个例子是IP转发使用了最长前缀匹配算法。与此相反,交换则是使用取自数据包的标签作为索引来查询转发表,这个过程更为简单和迅速。然而,这些定义还远未普及。
  • 由于大多数主机和路由器都不理解MPLS,因此我们还应该考虑何时以及如何把标签附加到数据包上。这事发生在一个IP数据包到达MPLS网络边缘。标签边缘路由器(LER)检查数据包的目标IP地址和其他字段,确定该数据包应当遵循哪条MPLS路径,然后右侧的标签贴在数据包面前。进入MPLS网络后,这个标签就用来转发数据包。在MPLS网络的另一边,标签已经完成自身使命并功成身退;删除标签后得到原始的IP数据包,然后被下一个网络转发。这个过程如图所示。MPLS与传统虚电路的一个区别是聚合水平。在通过MPLS网络时,每个流设置它自己的一组标签当然是可能的;然而对于路由器来说,更常见的做法是将终止在某个特定路由器或者LAN的多个流合并成一组,并且为这些流使用同一个标签。这些被合起来的共享同一个标签的流称为属于同一个转发等价类(FEC)。该类别不仅覆盖了数据包的去向,而且覆盖了它们的服务类别(从服务区分的意义上),因而从转发的角度看,所有的数据包都被同等对待。30、Internet网络层——IPv6协议&Internet控制协议&MPLS(网络层)_第9张图片
  • 若使用传统的虚电路路由方法,想要把几条具有不同端点的独立路径组合到同一个虚电路标识符上是不可能的,因为在最终接收方无法将它们区分开来。有了MPLS,数据包除了标签外仍然包含它们的最终目标地址,所以在标签路径的末端,标签头可以被去掉,然后利用网络层的目标地址,按照常规方法向前转发。
  • 其实MPLS走得更远。它可以一次在多个标签层次上运行,具体做法是在数据包前面添加多个标签。例如,假设有许多具有不同标签的数据包(因为我们要处理的数据包位于网络中的不同地方),遵循同一条共同的目标路径。对此,不是设置多条标签交换路径,即为每个不同的标签设置一条标签交换路径,而是为这些数据包设置一条单一路径。当已标记的数据包到达这条路径的开始端点处,另一个标签被添加到数据包前面。这就是所谓的标签栈。最外面的标签指导这些数据包沿着该条公共路径前行。在路径的结束端点处,取出进入标签交换路由前贴上的标签,原来的标签(如果有的话)用来指导数据包进一步转发。图中的S标志位告诉删除外层标签的路由器是否还剩下额外的标签。对于最底部的标签,该标志位设为1;而对于其他所有标签,该标志位设置为0。
  • 最后一个我们会考虑的问题是如何建立标签转发表,因而数据包可遵循该表的指示被转发。这是MPLS与传统虚电路设计两者之间的主要区别。在传统的虚电路网络,当用户希望建立一个连接时,会向网络发出一个设置包,通过该包来创建路径并生成转发表的表项。MPLS在设置阶段不涉及用户。
  • 转发信息由一些协议设置,这些协议一般是路由协议和连接建立协议的组合。这些控制协议与标签转发分离得干干净净,这种分离具有可以使用多个不同控制协议的便利。其中的一个变种是这样工作的:当路由器启动时,它会检查看看自己是哪些路由的最终目的地(例如哪个前缀属于它的接口);然后它为这些路由创建一个或多个FEC,并且为每个FEC分配一个标签,然后把新标签发给其邻居。反过来,这些邻居在自己的转发表中添加这些标签,再把新标签发送给其邻居;如此一般地往外传播,直到所有的路由器都获得了相应的路径。资源也可以像路径构造一样被预留下来,以便保证适当的服务质量。其他的变种可以设置不同的路径,比如流量工程路径考虑了未使用的容量,并且按需创建路径以便支持这些服务产品,比如服务质量。
  • 尽管MPLS背后的思想非常直截了当,但它的细节异常复杂,并且它有许多变种方法和实际部署的使用实例。

你可能感兴趣的:(计算机网络(Andrew,David著\严,潘译))