IPv6技术、部署与业务应用(txt+pdf+epub+mobi电子书下载)


发布时间:2020-06-08 08:16:17

点击下载

作者:杨国良等

出版社:人民邮电出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

IPv6技术、部署与业务应用

IPv6技术、部署与业务应用试读:

前言

随着信息技术的高速发展,人们对互联网的依赖越来越大。每次网络重大事件都伴随着对社会的巨大影响。但目前互联网赖以发展的IPv4地址将在2011年内枯竭。届时互联网的发展将面临重大的挑战。虽然业界对此问题早有预见,并提出了下一代互联网的体系架构,但作者在协助大型网络运营商向下一代互联网演进的过程中深深感受到IPv6人才的匮乏。IPv4地址枯竭问题留给我们的时间窗口已经很窄。未来3~5年内,将是IPv6网络和应用发展的关键时期,对IPv6人才的需求量巨大。目前各大网络运营商、设备生产商和应用开发商都在争夺和储备IPv6人才。可惜现在了解IPv6的从业人员很少,基本集中在少数科研机构中,至于具备IPv6网络建设和应用开发经验的人才更是少之又少。

作者在协助大型网络运营商设计和实施IPv6人才培养计划的过程中,发现具有实践经验基础,重点讲述IPv4向IPv6过渡期间终端、网络、应用等相关技术和部署方案的书籍很缺乏,所以藉以此书总结这几年的技术研究心得和网络、应用部署经验,希望能给有志参与下一代互联网发展的IP从业人员和高校学生一个系统和清晰的IPv6视图。

全书共分3部分12章,第1~6章属于第一部分。第1章为绪论,介绍IPv6的发展历程和演进问题。第2章介绍IPv6基础协议,包括IPv6协议技术框架、报文格式、ICMPv6和DHCPv6等基本协议。第3章介绍IPv6的接入方式,包括最有代表性的PPPoE和IPoE方式。第4章介绍IPv6路由协议,包括路由基础知识、IGP、EGP等协议。第5章介绍IPv6多播技术,包括多播技术的原理、应用以及与IPv6的差异。第6章介绍移动IPv6,包括移动IP基础、移动IPv6的技术原理和部署方式。

第7~11章属于第二部分。第7章讲述IPv6网络过渡期间所使用的关键性过渡技术,包括双栈、翻译和隧道技术。第8章讲述不同网络的过渡部署方案,重点讲述运营商级的大型宽带网络和企业内部网络。第9章讲述支撑网络运营的关键—IT系统如何演进,包括网管系统、域名系统和认证/计费系统。第10章从用户终端的角度讲述在用户终端上, IPv6带来的影响以及解决方案。第11章讲述IPv6网络安全技术和安全部署方案。

第12章属于第三部分。本章讲述传统互联网应用的过渡方案,包括Web服务、电子邮件、即时通信、VoIP、IPTV、物联网等业务的过渡方案。

本书在编写过程中,得到了中山大学张光昭教授、中国电信沈军等专家的指导,在此致以最衷心的感谢。本书由中国电信的杨国良博士、李阳春博士、伍佑明、谭景华、黄灿灿、彭志劲、李小洋、陈琦、林晋彦、李伟波、汪来富等多名中国电信下一代互联网推进小组技术骨干联合编写。由于水平所限,书中难免有错误之处,请各位读者批评指正!

本书编辑邮箱:liuyang@ptpress.com.cn。作者

第一部分 IPv6基础

第1章 绪论

●第2章 IPv6基础协议

●第3章 IPv6接入方式

●第4章 IPv6路由协议

●第5章 IPv6多播技术

●第6章 移动IPv6第1章 绪论

自1945年第一台计算机诞生以来,计算机逐步渗透到生活的每个角落。随着计算机数量的增加和应用需求的不断提高,人们把多台计算机联成网络以发挥更大的效能,计算机网络因此而产生。20世纪60年代是计算机网络的萌芽时期,科学工作者把远程计算机终端连接到计算机中心的大型计算机上,这就是最原始的计算机与计算机间的通信。20世纪70年代是计算机网络的兴起时期,涌现了很多网络解决方案,如美国国防部高级研究计划局的ARPANET(Advanced Research Projects Agency Network)、IBM公司的SNA(System Network Architecture)、DEC公司的DNA(Digital Network Architecture)和Intel公司的INA(Intel Network Architecture),但这些网络互不兼容。20世纪80年代是计算机网络的发展和完善时期,美国国防部提出一种能把各种不同结构的计算机网络互联起来的网络协议——TCP/IP,并对ARPANET进行TCP/IP改造。后来美国科学基金会也采用TCP/IP构建了用于教学和科研的NSFNET(National Science Foundation Network),并最终和ARPANET互联,统称为互联网(Internet),这就是现代互联网的雏形。20世纪90年代是互联网大发展的时期,美国率先提出了国家信息基础设施计划(National Information Infrastructure,NII),各国也纷纷提出自己的信息化计划,建设大型计算机网络,并接入互联网。进入2000年,互联网进一步宽带化,应用极大丰富,网络规模快速增长。

1.1 IPv4的局限性

30年前设计的IP协议(Internet Protocol version 4,IPv4)仍然是现代互联网的核心协议。虽然目前运行稳定,但已经暴露出很多不足之处,如扩展性问题、服务质量(Quality of Service, QoS)问题和安全性问题。

1.扩展问题

每个接入互联网的计算机和设备都需要一个唯一的IPv4地址作为标识。IPv4地址空间为32位空间,可以提供大约43亿个IPv4地址。但在现今社会,几乎人人都离不开互联网,而且随着手机、汽车、家电等越来越智能化,接入到互联网的不仅仅是计算机,还有很多智能设备。IPv4的43亿个地址空间在不久的将来显然是不够的。

除了IPv4地址不足直接影响互联网扩展外,IPv4路由表日益增大对网络设备造成的压力也间接地影响了互联网的继续扩张。互联网中的每个自治域(Autonomous System,AS)都有自己的网段地址,因为难以做到提前规划,随着自治域自身的增长,地址的层次化结构被破坏,一个AS有多个网段地址,产生多条路由。目前互联网已经超过3.7万个AS和35万条路由。随着IPv4地址的日益紧缺,地址规划的结构性更差,路由条目更多,这对互联网骨干路由器来说是一个很大的压力,从而限制了互联网规模的进一步发展。

虽然导致IPv4路由表不断增大的原因很多,但IPv4地址不足是无法层次化规划的主要原因,所以IPv4扩展问题的主要根源还是IPv4的地址空间不够。

2.QoS问题

视频/语音等实时通信应用对网络的时延、丢包、抖动和带宽有较高的要求。网络需要针对这些应用的特点予以特殊的服务质量保障。虽然IPv4设计之初已经考虑到QoS保障问题,而且通过后来的DiffServ等QoS解决方案为特定应用提供更好的时延、丢包、抖动和带宽方面的服务质量保障,但由于各种部署的复杂性,导致现在的互联网难以全面提供QoS服务。

3.安全问题

在使用网上银行等关键应用时,用户需要对个人信息进行严格保密,但IPv4协议本身并没有考虑安全问题,目前主要通过IPSec等安全手段来实现信息加密。但互联网的安全问题不仅仅是一个技术问题,它需要从法律、管理、技术等多层面联合解决。

在IPv4存在的各种问题中,地址不足问题尤为严重,限制了互联网的规模扩张,也限制了互联网对物联网(Internet of Things)等新型应用的支撑,这是迫使互联网向下一代互联网(IPv6)演进的原动力。

4.IPv4地址使用情况

全球IP地址由互联网号码分配机构(Internet Assigned Numbers Authority,IANA)统一管理和分配。IANA下设5大区域网络注册机构(Regional Internet Registry,RIR),分别是非洲(AfriNIC)、亚太地区(APNIC)、北美(ARIN)、拉丁美洲(LACNIC)和欧亚地区(RIPE NCC),如图1-1所示。RIR以会员制的模式运作,其会员是各国的国家网络注册机构(National Internet Registry,NIR),也可以是超大规模的网络运营商(Internet Service Provider,ISP)。NIR一般也采取会员制,会员包括本地网络注册机构(Local Internet Registry,LIR)、ISP和大型企业等。图1-1 5大RIR的管辖区域

一般来说,个人用户和企业用户的IP地址都是所接入ISP分配的,而ISP的地址则向LIR申请,LIR再向NIR申请,NIR向RIR申请,RIR向IANA申请。一些较大的ISP可以直接向NIR,甚至RIR申请IP地址。根据APNIC等5大RIR的规定,ISP只能根据未来一年的地址使用规划提出地址申请,并必须提供网络建设的证据,如网络设备购买合同等,旨在防止地址囤积。

2011年2月3日,IANA正式宣布其所有IPv4地址资源分配结束,各大RIR也于2011年4月15日分配完成。虽然IPv4地址枯竭是一个全球性问题,但由于各国发展历程不尽相同,IPv4地址枯竭对各国的冲击也不完全一样。因为互联网发源于美国,所以美国拥有最多的IPv4地址,人均拥有6.3个,中国拥有的IPv4地址虽然也有2.9亿个,全球排名第二,但人均拥有量只有0.64个,所以中国等发展中国家IPv4地址非常贫乏。另外,欧美互联网发展比较早,发达国家互联网渗透率非常高,已经接近饱和的缓慢发展期,所以IPv4地址增量需求不大。但中国目前的互联网渗透率只有32%,随着中国经济的腾飞,中国互联网用户快速增加,对新IPv4地址需求量很大。所以IPv4地址枯竭问题的重灾区主要集中在中国等发展中国家。各国的IPv4地址拥有情况如表1-1所示。表1-1 各国IPv4地址拥有情况

5.地址枯竭应对方案

20世纪90年代互联网兴起之时,人们已经意识到IPv4地址有枯竭的一天,所以早已未雨绸缪。目前应对IPv4地址枯竭的主要方法有:地址挖潜、私有地址和IPv6。(1)地址挖潜

如果ISP或企业申请不到新的地址,只能通过对现有地址存量进行挖潜,努力提高IPv4地址的利用效率,挤出地址来应对新的业务需求。地址挖潜的手段分为管理手段和技术手段。运营商和企业申请到地址后,一般根据不同地域、业务或用户预分配地址块,但真正的业务发展和预测往往不完全一致,有些地方分配多了,造成浪费,有些地方分配少了,不够用。针对这种情况就需要采取管理手段,根据最新的业务发展情况修订原来的地址规划,对网络重新编址,把多余的地址挪到地址不够的地方。通过管理手段提高地址利用率是一个相当庞大的工程,一般在小型网络中采用,对于大型ISP实施起来非常困难。

地址挖潜的技术手段主要有动态分配用户地址和无类型域间路由(Classless Inter-Domain Routing,CIDR)等。很多大型ISP通过PPP/PPPoE或DHCP等技术手段为用户动态分配地址,用户每次上网都从地址池中临时申请一个地址,下网后就把地址释放回地址池给其他用户使用。这种方法可以提高地址的使用效率,但也有可能在繁忙时段用户因为申请不到地址而不能上网,所以动态分配中的地址量与用户量的比值设定必须根据用户上网习惯的历史数据慎重考虑。另一种技术手段是CIDR。RFC 791中定义了3种单播IPv4地址类型,分别是A、B、C类地址。A类地址的掩码为/8,B类地址掩码为/16,C类地址掩码为/24。由于这3类地址的掩码都比较短,如果严格按照RFC 791的规定,容易造成浪费,所以人们提出了CIDR概念。它支持任意长度的地址掩码,使ISP能够按需分配地址空间,提高了地址空间的利用率。目前几乎所有网络都采用CIDR技术,它能在一定程度上缓解地址紧张,但没有在本质上解决IPv4地址空间过小的问题。(2)私有地址

IPv4地址可以分为公有地址和私有地址。公有地址可以唯一标识一个网络设备,让其在全球范围内被寻址。目前大部分ISP都给用户分配公有地址。私有地址则只在内部网络使用。私有地址不需要向RIR等地址管理组织申请,可以从10/8、172/20、192.168/24这3段地址中选取。但因为没有统一管理,不同网络的私有地址互相重叠,所以私有地址在互联网上不可路由。私有地址终端访问外部互联网时,必须进行地址转换(Network Address Translator, NAT),把私有地址换成公有地址。通过NAT技术,多个用户可以共享一个公有地址,用户之间通过不同的TCP/UDP端口加以区分。NAT技术已经提出多年,广泛应用于小型ISP、企业网络和家庭网络中,主流的互联网应用都能在NAT环境下使用。

通过NAT技术,一个公有地址大约可以支持100个用户,理论上把IPv4地址空间扩大100倍,所以ISP在应对IPv4地址枯竭问题上,优先考虑私有地址方案。但是,NAT本身固有的缺点注定它不可能成为一种长期有效的解决方案。首先,NAT破坏了IP的端到端通信模型。NAT后的私有地址用户在互联网上不可见。其次,NAT容易产生单点故障。NAT设备必须维护公、私地址的映射关系,一旦发生故障,即使快速路由到其他NAT设备,由于备用NAT设备没有原来NAT上的状态信息,因此所有会话连接都需要重新建立。还有,NAT可能影响部分应用的使用。如FTP、WINS等通信报文中内嵌IP地址,但NAT并不转换报文内嵌地址,导致无法正常通信。最后,NAT并不能在根本上解决所有地址短缺问题,当用户大量使用迅雷、Google Map等消耗大量TCP/UDP端口资源的应用时,地址复用率迅速下降,地址压力又重新浮现。(3)IPv6

IPv6是人们针对IPv4目前暴露出来的不足而重新设计的一套网络层协议,上层传输协议TCP/UDP没有改变。IPv6的地址空间为128位,24是IPv4地址空间的79×10倍,有人戏称地球上每一粒沙子都可以有一个IPv6地址。其实IPv4地址空间与IPv6相比,就如一块小石头和地球相比一样,可见IPv6地址空间可以理解成无穷大。IPv6可以从根本上解决IPv4地址不足的问题。同时IPv6在扩展性、QoS以及安全性方面也相对IPv4进行了改进。

除了地址挖潜、私有地址和IPv6等解决方案以外,还有IPv9等其他较为超前的解决方案,但都因为难以形成产业链而未被业界所接受。目前业界基本认为,私有地址是最成熟和最简单的应对方法,但也是一个临时过渡方案,只有IPv6才能真正解决IPv4地址枯竭问题,是终极目标。可惜在IPv6开发之初,人们没有意识到IPv4会如此成功,没有正确评估网络升级换代的难度,所以IPv6并没有考虑与IPv4的兼容。这导致IPv6从提出到现在的十多年来,并没有得到很好的支持,也给网络和应用向IPv6过渡带来很多困难。本书就是围绕IPv6过渡问题展开讨论的。

1.2 IPv6的发展现状

20世纪90年代,人们已经意识到IPv4的局限性,并着手下一代互联网(IP Next Generation, IPng)的研究工作。互联网工程任务组(Internet Engineering Task Force,IETF)作为最权威的互联网标准组织,承担了下一代互联网相关技术规范的研发和制定工作。IETF于1993年成立了专门的IPng工作组,1994年提出下一代IP网络协议标准,并正式定义为IPv6(Internet Protocol version 6),1996年发起全球IPv6试验床(IPv6 Backbone,6BONE),1998年进一步完善IPv6,成为今天我们看到的IPv6标准协议。1999年成立IPv6论坛,开始正式分配IPv6地址。自此IPv6开始了它漫长的完善和推广工作。

1.各国IPv6的进展

初期IPv6主要由高校和科研机构推进,政府扶持为主,基本上没有真正意义的商业应用。近期随着IPv4地址枯竭的预期日渐明确,越来越多的商业组织参与其中。(1)美国

美国是互联网的发源地,无论在地址资源和商业应用方面都占据了绝对优势,不管是IPv4地址总量还是人均地址量都遥遥领先于其他国家,可以说美国总体不存在地址不够的问题,但这些地址都已经被老牌的科研机构和商业组织占据,地址枯竭问题同样制约新进入的网络运营商。美国政府为了继续保持在互联网上的领先地位和推动国内互联网产业的长盛不衰,同样非常重视下一代互联网的研发工作,其中最主要的3个计划是白宫的下一代互联网倡议( Next Generation Internet , NGI )、美国国家科学基金会的超高带宽网络服务(very-high-performance Backbone Network Service,vBNS)和高等院校与企业合作的Internet2。美国政府在通过各种渠道资助下一代互联网研发的同时,还积极推动IPv6的商用,要求国防部、政府网络和主要的商业网站于2008年6月前支持IPv6。目前美国在IPv6地址申请量上已经是全球第一,像Google等大型网站已经可以提供IPv6的服务。(2)欧洲

欧洲互联网发展得比较早,网络普及率很高,用户增长缓慢,地址压力不大,但考虑到未来新型业务的潜在需求,同样非常重视IPv6的研究和应用工作,在3G标准研发之初就引入IPv6,希望利用移动通信方面的传统优势,在下一代互联网时代改变互联网长期落后于美国的现状。欧盟已经提供超过5 500万欧元资助GEANT2等试验网络,计划实现25%的企业、政府机构和家庭用户IPv6化。(3)亚洲

亚洲国家起步晚、人口多,是IP地址最为匮乏的地区,虽然拥有世界上最大的互联网用户群,但又缺乏应有的话语权,所以很多亚洲国家均视IPv6为新的机遇。目前亚洲国家中,对IPv6报以极大热情的是中国、日本以及韩国。日本政府起步较早,制定了“e-Japan”的战略,大概在2000年左右开始分配IPv6地址,2001—2005年开始提供全日本的IPv6商用化服务。目前NTT拥有最大的IPv6商用网,在全球范围内提供IPv6接入和数据中心业务。

韩国在战略、政策、立法、项目资助、国际合作等方面对IPv6都有相应的措施,已经制订了IPv6的演进规划,陆续投入468亿韩元支持IPv6产业的发展,并在2008年建成6个IPv6交换中心。

中国是IPv4地址压力最大的国家之一,所以政府早已对IPv6给予高度重视。从1999年开始,建设NSFCnet,2003年启动中国下一代互联网示范网(CNGI)工程,建成全球最大的纯IPv6网络。

2.IPv6标准进展

IPv6标准工作主要由IETF、宽带论坛(Broadband Forum,BBF)和国际电信联盟电信标准化部(International Telecommunication Union-Telecommunication Standardization Sector, ITU-T)共同推动。IETF主要负责IPv6技术协议的制定,相关的工作组共12个,其中6man (IPv6 maintenance)负责IPv6协议规范以及寻址架构的维护和完善,Behave(Behavior Engineering for Hindrance Avoidance)关注IPv4/IPv6互通技术,Softwire关注IPv4 over IPv6或IPv6 over IPv4的隧道机制,v6Ops(IPv6 Operations)关注IPv6的网络部署,另外还有CSI(Cga&Send maIntenance)、DHC(Dynamic Host Configuration)、DNSEXT/DNSOPS(DNS Extensions/Domain Name System Operations)、Mext(Mobility EXTensions for IPv6)、6lowpan (IPv6 over Low power WPAN)、SAVI(Source Address Validation Improvements)、Shim6(Site Multihoming by IPv6 Intermediation)等。至于BBF则关注ISP的具体需求,重点研究IPv6接入解决方案。ITU-T偏重于场景和需求的描述。另外IPv6论坛也是一个重要的IPv6组织,专注于IPv6的部署和测试。

IPv6寻址、路由等基础协议在2000年前后基本完成,同时也提出一些网络/应用过渡技术,如NAT-PT(Network Address Translation-Protocol Translation)等。但因为IPv6商用进展非常缓慢,导致后面几年内IPv6标准工作停滞不前,特别在2007年,NAT-PT因为难以部署而被废止,IPv6标准化工作陷入低潮。但从2009年开始,IPv4地址枯竭问题真正受到各界的高度关注,IPv6的标准工作又重新红火,此时的工作焦点主要集中在IPv4向IPv6过渡的各种技术实现方案,包括双栈、隧道和协议转换技术。在2010年11月的IETF 79次会议上,IPv6已经成为大会最受关注的主题。

1.3 互联网演进的困境

IPv4在过去的30年内取得非常大的成功,网络规模从最初的几百台计算机发展到今天数以亿计的计算机。作为更为先进的IP协议,IPv6标准从提出到现在已有十多年时间,但IPv6的成就远不如IPv4。目前IPv6的路由条目才4 600条,相比IPv4的35万条可以说微不足道。

IPv4迅速成功,而且实现全球统一标准,从某种程度上可以归功于互联网发展初期的非营利性。最初的互联网基本上定位于科研和教学,不允许商业使用,所以互联网研究工作者都把自己的研究成果无偿贡献出来。IETF就是一个松散、自律和志愿的学术组织,所有参加人员都只代表个人,所以工作效率很高。但进入2000年以后,互联网已经是一个非常重要的信息化渠道,原来非营利的性质早已改变。目前互联网发展的推动者已经不是高校和科研机构,而是成千上万的网络运营商,他们都是以营利为目的。虽然IPv6很先进,但目前绝大部分的信息源和用户都在IPv4上,网络运营商没有建设IPv6网络的积极性。既然连IPv6网络都没有,就不可能形成IPv6用户群。如果没有IPv6用户群,应用开发商和信息生产商也不愿意开发IPv6的应用,没有IPv6应用就更加没有IPv6用户群。这就是最为突出的网络演进死锁问题。打破死锁必须依靠外力,政府就是破解这死锁的关键。只有政府引导网络运营商率先升级到IPv6,同时要求应用开发商逐步支持IPv6,慢慢把用户引导到IPv6上,从而实现网络、应用和用户互相促进,进入良性循环。

由于业务可持续发展的需要,运营商必须寻找地址枯竭的应对方案。但新技术的先行者往往要付出更多的成本推动技术的成熟和产业链的形成。所以很多运营商不愿意在IPv6上作为第一个吃螃蟹的人,都希望等待IPv6一切就绪后摘取现成的果实。事实也证明,很多运营商在IPv6演进问题上都是采取观望态度。从国家层面也有类似情况,哪个国家率先启动IPv6商用,将承担IPv6成熟过程中的额外成本。所以即使目前IPv4地址已经枯竭,但要破解IPv6死锁问题,在商业组织甚至国家层面上如何减少初期成本,保证用户在IPv4-IPv6过渡阶段的平滑过渡,都是一个艰巨的课题。

第2章 IPv6基础协议

2.1 IPv6框架

现有的互联网基础是IPv4协议,自从1981年发布以来,已有30年历史,但IPv4在这30年中并没有太多实质性的变化,且随着互联网的迅猛发展,IPv4地址局限性越来越明显,如IPv4地址需求量的急剧增加、网络层的安全需求等。因此,互联网工程任务组(Internet Engineering Task Force,IETF)于1995制定并发布了一套下一代IP协议机制:Internet Protocol version 6,简称IPv6,IPv6不仅仅代表IPv6协议本身,还包含了一系列的配套规范,比如邻居发现协议、路由和多播协议等,它具有以下的特性。

①新的协议首部格式:IPv4和IPv6协议的首部不兼容,新的IPv6首部去掉了一些不必要的选项字段,因此首部更加精简。

②更大的地址空间:IPv6使用128位的地址,支持的地址数有3.438×10个,远远大于IPv4的32位表示的地址空间数量。

③更有效、层次化的编址和路由结构:IPv6全局地址的使用支持更好的层次化设计和路由会聚。

④支持有状态和无状态的地址自动配置:为了精简主机的配置,IPv6同时支持有状态的地址配置和无状态的地址自动配置,比如在有DHCP服务器和没有DHCP服务器存在的情况下。

⑤内嵌的安全性:对IPSec提供支持是IPv6协议簇的一个要求,这使得IPv6的安全性得到进一步的提高。

⑥更好地支持优先转发(QoS):IPv6首部增加了新字段以提供更好的QoS服务。

⑦新的邻居交互协议:摒弃了IPv4的地址解析协议(ARP),并使用新的邻居发现机制来解析地址。

⑧可扩展性:通过扩展首部的使用,IPv6可以很容易地增加新特性,而不像IPv4的,选项字段只有40字节。

IPv6是在IPv4的基础上进行改进的,表2-1列举了它们的主要区别。

本章将主要介绍IPv6的地址分类、报文格式、邻居发现机制、地址自动配置和DHCPv6等机制,旨在给大家一个初步的认识,如需要更深入的了解,请参照相应的RFC文档。表2-1 IPv4 与IPv6 的主要区别

2.2 IPv6编址

引入IPv6的最重要原因之一,是因为IPv4地址空间的不足阻碍和限制了互联网的发展,特别是在发展中国家,地址需求量剧增,而剩余的IPv4地址空间极其有限,已经无法满足现有业务的需求,更别说新业务的开展。IPv6地址是从IPv4地址发展而来,地址表示位数从32位扩展至128位,并对地址结构进行了优化调整,比如摒弃了IPv4中的广播地址类型,增加了任播地址类型等。

IPv6编址结构最初在1995年发布的RFC 1884中定义,目前已更新至RFC 4291,在不断地更新过程中,一些原先的定义可能会被修改、废止,比如RFC 4291废止了站点—本地地址,本章节内容遵循RFC 4291的定义。

本节主要介绍IPv6的地址结构、表示方式和3种地址类型:单播地址、任播地址和多播地址。另外在IPv4向IPv6的各种迁移过渡技术中,也会定义特殊用途的地址,比如teredo地址和isatap地址等,请参照相应章节。

2.2.1 地址表示方式

IPv6地址最显著的特点是地址长度扩展至128位,是IPv4地址长度32位的4倍。为了表示这么长的一个IP地址,IPv6不再采用IPv4的十进制书写格式,而使用十六进制表示方式。RFC 4291(IP version 6 Addressing Architecture)描述了3种书写格式:首选格式、压缩表示格式、内嵌IPv4地址的IPv6地址格式。

1.首选格式

首选格式是最标准的表示方式,首先把128位的IPv6地址划分为8组,每组16位,按照每4个二进制位对应1个十六进制位的方式,依次把128位的二进制位转换成32个十六进制数,各组之间用冒号分隔。

IPv6地址首选格式表示为x:x:x:x:x:x:x:x,其中x是一个4位十六进制整数。例如:ABCD:EF01:2345:6789:ABCD:EF01:2345:6789。

在每个x中,最前面的0是可以省略的,但必须保证省略后每一组x至少有一个数字来表示,如:2001:DB8:0:0:8:800:200C:417A。

2.压缩表示格式

首选格式规定了必须完整使用8组十六进制来表示一个IPv6地址,但当首选格式表示的地址中出现一连串连续的0时,允许使用“::”来表示,在一个IPv6地址中,只允许使用一次。“::”可以表示一组或多组16位的0,例如:

压缩表示格式能使得IPv6地址书写起来更有效率。

3.内嵌IPv4地址的IPv6地址格式

此种格式是指同时用十六进制和十进制来表示IPv6地址,形式为x:x:x:x:x:x:d.d.d.d,其中x是一个十六进制整数,而d表示一个十进制数。在IPv4和IPv6同时存在的混合环境中,比如在IPv6的迁移过渡阶段,可以使用此类地址表示。例如:

值得一提的是,RFC 4291废止了0000::/96的前缀,此前缀用于构建“兼容IPv4地址的IPv6地址”,在某些过渡技术中,仍然可能用到此类地址。上述例子中的第二个地址::FFFF:129.144.52.38叫做“IPv4映射的IPv6地址”,此类地址用得较少,因为它不能作为IPv6报文的源和目的地址使用,通常在IPv4与IPv6的翻译技术中使用,这两类地址都是为了在IPv6环境中表示一个IPv4单栈的节点。

2.2.2 地址空间和前缀

128

IPv6的地址长度为128位,可以标识2个地址,相当于地球表23面每平方米面积拥有6.5× 10个地址。如此巨大的地址空间为互联网的高速稳定地发展提供可靠的保证,另外,地址长度扩至128位后,在地址规划上,可以更好地对路由域进行层次化设计。

IPv6前缀的表示方式类似于IPv4地址中的无分类域间路由CIDR机制。一个IPv6地址前缀表示为:IPv6地址/前缀长度。前缀长度使用十进制数表示,指示地址中有多少位属于网络标识,例如表示一个60位的前缀20010DB80000CD3(十六进制):

2001:0DB8:0000:CD30:0000:0000:0000:0000/60

2001:0DB8::CD30:0:0:0:0/60

2001:0DB8:0:CD30::/60

以上3种都是合法的表示方式,下面则是错误的例子。

2001:0DB8:0:CD3/60 (不可省略后面的0)

2001:0DB8::CD30/60

2001:0DB8::CD3/60

在实际应用中,一个终端的IPv6公有地址通常都是64位前缀的,后64位是接口标识符,用于标识一个特定前缀的子网内的唯一主机,但有一种特殊的情况:过渡技术中的隧道和翻译技术往往使用其他长度的前缀。

2.2.3 地址分类

IPv6地址模型与IPv4模型相比,有一个重要的区别:IPv6地址是用于标识网络接口,而不是网络节点,而网络节点只能由该节点网络接口的单播地址来标识,换句话说,一个网络接口可以配置多个IPv6地址,其中可以包括各种不同类型的地址,比如链路范围的地址、全球单播地址等。通常情况下,一个IPv6网络接口都会具有多个IPv6地址。但因为某些类型的地址并不是全局唯一的,因此不能用于标识网络节点。

根据RFC 4291的定义,IPv6的地址分为3类。

①单播地址:标识网络节点的单一网络接口。发送给单播地址的数据包将发送至由此单播地址标识的网络接口。一个单播地址在一定范围内是唯一的,并且只能属于某一个网络接口。

②任播地址:标识一组网络接口(通常位于不同的网络节点)。发送给任播地址的数据包只被发送至这组接口中的一个,通常是“距离最近”的一个,“距离最近”是指在路由度量上“最近”的接口。

③多播地址:标识一组网络接口(通常位于不同的网络节点)。发送给多播地址的数据包将被发送至由此地址标识的所有网络接口。

在IPv6地址模型中取消了广播地址类型,而是用多播地址代替并实现其功能。IPv4的广播地址给网络带来一定的问题,包括消耗网络的性能,比如交换机会在所有接口广播报文。另外网络链路中的每个节点都必须处理所有广播消息,即使这些节点对广播报文并不感兴趣。任播地址是全新的一种地址类型,设计初衷是为了简化在众多同样功能的节点中寻找合适服务器的任务。

2.2.4 单播地址

IPv6单播地址标识了一定范围内唯一的网络接口,与IPv4的无类别域间路由(CIDR)类似,IPv6单播地址支持任意长度的路由前缀会聚。一个单播地址通常被划分为两部分:n位的网络标识符和128−n位的接口标识符。通常情况下,前缀长度和接口标识符均为64位。

RFC 4291提及了3种不同范围的单播地址类型,分别是全球单播地址、本地站点单播地址(已被废弃)和本地链路单播地址。

1.全球单播地址格式

IETF最初在RFC 2374中详细定义了全球单播地址格式,并由IANA(互联网号码分配局)分配统一前缀为(二进制格式):001/3,但由于其格式字段过于复杂,RFC 3587对地址格式重新简化,取消了TLA/NLA字段。虽然目前所有的全球单播IPv6地址均以001开头,但并不意味着IANA将来不会把未分配的地址段重新定义并分配为全球单播地址格式。

根据RFC 3587的定义,当前的全球单播地址格式如图2-1所示,只包含以下3个字段:全球路由前缀是分配给一个站点的,一般具有一定的层次结构;子网ID是此站点内的一个子网标识符;接口ID是子网内的接口标识符,标识子网内的唯一的网络接口。RFC 4291规定所有的全球单播地址(除了以000开头的,比如内嵌IPv4地址的IPv6地址)的接口ID必须是64位,并且是修正的EUI-64的格式(此格式将在下面章节描述)。图2-1 全球单播地址格式

2.链路—本地地址格式(见图2-2)图2-2 链路—本地地址格式

链路—本地地址的前10位由1111111010标识,后跟54位0,组成64位固定前缀,十六进制格式表示为:FE80::/64。链路—本地地址的有效作用域是在同一本地链路上的所有节点。当一个网络接口开启IPv6协议栈时,会自动配置一个链路—本地地址,此时的接口ID采用EUI-64格式,当然也可以通过手工方式配置。

自动配置的链路—本地地址主要用于邻居发现协议(Neighbor Discovery Protocol),或者在一个没有路由器的链路上,节点与节点之间的互通性中使用。由于其地址作用范围局限于本地链路,因此所有的IPv6路由器不会转发源地址或目的地址为链路—本地的数据包到其他的链路中。

3.站点—本地地址格式(见图2-3)图2-3 站点—本地地址格式

站点—本地地址的前10位由1111111011标识,后跟54位的子网ID,接口ID为64位。IPv6的站点—本地地址类似于IPv4中的私有地址,但此类地址已经被RFC 4291废除,因此本文不做过多的阐述。

4.接口ID

几乎在所有的IPv6单播地址类型中,接口ID都是一个必不可少的参数,它用于标识一定的作用范围内唯一的网络接口,一个修正的EUI-64的接口ID,也有区分全球唯一或本地唯一两种作用范围。对于同一个网络节点,它可能拥有多个IPv6网络接口,IPv6地址机制允许这些不同的网络接口采用相同的接口ID,但要保证这些接口处于不同的子网内,不会产生地址冲突即可。

除了以000开头的单播地址以外,所有其他类型单播地址的接口ID都是基于修正的EUI-64格式的。修正的EUI-64接口ID的生成方式因链路的类型而异,比如基于以太网接口和光纤分布式数据接口(FDDI)的生成方式是不一样的,详情请参考RFC 4291的附录A,这里只介绍以太网接口的基于MAC地址的生成方式。

MAC地址是48位,如图2-4所示,而修正的EUI-64接口ID是64位的,因此需要在中间插入特定的16位比特(FFFE),并把第7位的U/L(全球/本地范围)位置1。因为物理网卡的MAC地址是全球唯一的,所以使用这种方式生成的接口ID也是全球唯一的。图2-4 MAC地址格式

经过转换后的EUI-64接口地址,如图2-5所示。图2-5 转换后的修正EUI-64接口ID

例如MAC地址为:00-26-9E-93-AB-CD,经此规则生成的修正的EUI-64接口ID则为:226:9EFF:FE93:ABCD。

值得一提的是,大部分物理接口都具有类似MAC地址这种内嵌的唯一的ID,但对于隧道接口和串口,则没有这么幸运了,这种情况下,IPv6协议栈必须通过以下原则确保生成唯一的修正的EUI-64接口ID:首先选择其他IPv6接口上的全球范围的接口ID;如果没有,则需要协议栈自行创建一个本地范围内的接口ID,只要保证接口ID在子网内唯一即可。

2.2.5 任播地址

任播地址是IPv6协议新增的地址类型,任播地址用于标识一组网络接口,从单播地址空间中划分出来,因此,在语法上与单播地址是无法区分开的。当一个单播地址被配置在多个IPv6接口时(通常位于不同的节点上),它就成为了任播地址,此时网络节点必须明确地通过配置指出此地址是任播地址。

路由器会将目的地址为任播地址的数据包发送给距离本路由器最近的一个网络接口。这里所说的距离最近,通常是指路由器根据路由协议进行度量得出的,RFC 4291还限定任播地址只能作为目的地址使用,并且目前只能分配给路由器接口。

目前RFC 4291上只定义了一个子网—路由器任播地址,其格式如图2-6所示。图2-6 子网—路由器任播地址

任播地址的子网前缀有n位,用于标识接口所属的子网网段,剩下的128−n位全部设置为0。所有路由器都必须支持子网—路由器任播地址,因为目的地址为任播地址的数据包很可能就发到它的某一接口上。

任播地址是一种非常有用的服务,目前主要应用在移动Ad hoc网络、最优服务器的选择、负载均衡等领域。

2.2.6 多播地址

与任播地址类似,多播地址同样标识一组网络接口(通常位于不同节点上),一个网络接口可以加入到多个多播组中。但与任播地址不同的是:目的地址为多播地址的数据包将发往由此多播地址标识的所有网络接口,IPv6的多播地址对应于IPv4的多播地址,多播地址的格式,如图2-7所示。图2-7 多播地址格式

多播地址的前8位由“11111111”标识,用十六进制表示为:FF::/8,标识位和范围均占4比特,标识位又细分为:0RPT,第一位保留,总是0,R位请参考RFC 3956,P位请参考RFC 3306,T位为0表示是永久分配的地址(由IANA指定),为1表示是一个临时的多播组地址。每一个多播地址都有一定的作用范围,由4比特的范围字段描述,详细的取值如表2-2所示。表2-2 多播地址的范围属性

组ID用于标识一个多播组,并且在一定范围内是唯一的。由IANA永久分配的组ID,是与多播范围相互独立的,例如:IANA为一种新应用的服务器群组分配的组ID为201,那么FF02::201代表同一链路范围内的所有服务器群组,而FF0E::201则代表整个IPv6互联网的所有服务器群组。

RFC规范还限定多播地址不能作为数据包的源地址,并且路由器不会把一个多播数据包转发到多播地址所属的范围以外。

目前在邻居发现协议中会用到以下一些预定义的多播地址:

FF01::1节点本地范围的所有节点多播地址;

FF02::1链路本地范围的所有节点多播地址;

FF01::2节点本地范围的所有路由器多播地址;

FF02::2链路本地范围的所有路由器多播地址;

FF05::2站点本地范围的所有路由器多播地址。

有一种特殊的多播地址叫被请求节点多播地址,主要在“邻居发现协议”中使用,被请求节点多播地址是从单播或任播地址中派生出来的,具体格式如下:

FF02:0:0:0:0:1:FFXX:XXXX

该类地址由固定前缀FF02:0:0:0:0:1:FF::/104加上单播或任播地址的低24位组成。例如, IPv6地址2001::01:800:200E:8C6C对应的请求节点多播地址为:FF02::1:FF0E:8C6C。因此,只要知道了一个IPv6地址,便可通过以上方式计算该地址对应的被请求节点多播地址,一个IPv6节点必须计算并把网络接口加入到相对应的多播组中。

多播地址主要应用于多播技术中,如IPTV或视频会议等,RFC 3306还定义了基于单播前缀的IPv6多播地址,多播协议PIM定义了内嵌RP地址的多播地址,关于这部分的内容,请参照第5章“IPv6多播技术”或相应的RFC文档。

2.2.7 特殊地址

IPv6中还有如下一些特殊用途的地址。

①未指定地址:0:0:0:0:0:0:0:0,缩写为::,不能被赋予任何节点,它表示没有有效的IPv6地址。在邻居发现协议中,当主机初始化并尚未分配地址时,用作邻居请求报文的源地址。

②环回地址:0:0:0:0:0:0:0:1,缩写为::1,类似于IPv4中的127.0.0.1。用于网络节点发数据包给自己,不能赋予任何一个物理的网络接口。

另外,在隧道机制和翻译技术中,也会定义相应用途的地址格式,详情请参见第7章的“IPv6网络过渡”章节。

2.3 IPv6协议

除了在编址方面完全不兼容外,IPv6与IPv4在协议报文格式中也有较大差异,众所周知,IPv4报文首部是固定长度的,并且字段相对比较多,不论在通信过程中是否会被使用到,这些字段都需要被填充,这将浪费和消耗一定的网络带宽和路由器性能。考虑到对IPv4报文格式的种种争议,新版本的IPv6协议重新对报文格式进行了优化,例如删减了不必要的选项字段以减少报文长度,采用基本首部和扩展首部相结合的形式实现更好的利用率。最新的IPv6协议规范在RFC 2460中定义,一个IPv6报文通常具有如图2-8所示的结构。图2-8 IPv6报文结构

在每一个IPv6报文中,IPv6基本首部是必需的,并且固定长度为40字节。除此之外, IPv6报文可以携带0个或多个扩展首部,因此整个IPv6报文的首部长度是可变的。IPv6协议属于网络层协议,上层协议数据单元通常是指传输层的协议单元,例如UDP和TCP,而ICMPv6报文也需要IPv6报文来承载,但它并不属于传输层。

2.3.1 数据包格式

RFC 2460定义的IPv6的报文基本首部格式,如图2-9所示。图2-9 IPv6基本首部格式

IPv4的标准规范则在RFC 791中定义,其首部格式如图2-10所示。图2-10 IPv4首部格式

从IPv6与IPv4首部格式的比较可以看出,IPv6基本首部只有8个字段,而IPv4却有14个之多,通过裁剪字段的方式,使得IPv6首部长度不至于太长,虽然IPv6地址长度是IPv4的4倍,但IPv6基本首部长度(40字节)只是IPv4首部长度(20字节)的2倍。固定长度的报文首部,使路由器可以加快对数据包的处理速度,提高了转发效率,从而提高网络的整体吞吐量,使信息传输更加快速。

因为IPv6基本首部长度固定,因此不需要“首部长度”字段,关于分片的“标识符”、“标志”和“段偏移量”字段都被移到IPv6的分片扩展首部中。至于删除校验和字段,则是因为大部分二层链路已经对数据包进行了校验和纠错控制,端到端的传输层也有校验功能,并且校验和随着TTL(跳数限制)值的变化需要在每一跳路由器上进行重新计算,增加包的传输时延。

IPv6首部字段“流量类型(Traffic Class)”相当于IPv4的首部字段“服务类型(Type of Service)”,长度均为8位,主要被IPv6源节点或者中间路由器用作对IPv6报文进行“差分服务”,划分不同的优先级,以实现QoS功能。通常情况下,此字段由源节点的上层协议使用,默认设置为0。

IPv6首部增加了“流标识”字段,此字段供IPv6数据包的源节点使用,用于标识需要被路由器“特殊”处理的报文,使得业务可以根据不同的数据流进行更细的分类,实现优先级控制和QoS保障,极大地改善了IPv6网络层面的服务质量。关于IPv6首部“流标识”字段的使用规范,目前IETF还在起草制定中。

RFC 2460要求所有支持IPv6的链路,其MTU必须等于或大于1 280字节,推荐值是1 500字节,也就是以太网的链路MTU值。另外,由于在IPv6过渡进程中,通常会使用到各种各样的隧道技术,隧道的MTU值通常会更小,为了避免由MTU引起各种各样的问题, RFC建议所有的IPv6节点均实现“路径MTU发现”协议(RFC 1981)。

关于IPv6基本首部各字段的含义和长度,请具体参见RFC 2460相应的章节,这里不做过多的介绍。

2.3.2 扩展首部

上一节已介绍IPv6报文采用基本首部加扩展首部的组合方式,虽然IPv6基本首部的格式被简化了,但是这些功能并没有被去掉,而是通过一种新的机制去实现它,这就是扩展首部,当然,扩展首部还增加了一些新的功能。

IPv6的扩展首部是可选的,一个IPv6报文可以有0个或多个扩展首部,扩展首部位于IPv6基本首部与上层协议的协议首部之间。扩展首部属于IPv6数据有效载荷的一部分,因此,其长度也计算在IPv6基本首部的“载荷长度”字段中。

目前,RFC 2460中只定义了以下6个扩展首部,如表2-3所示。表2-3 IPv6扩展首部

IPv6协议规范强烈建议扩展首部按照以上的次序出现在IPv6报文中,以便接收端不需要搜索整个报文以查找某个特定的扩展首部,并且可以保证,在处理某个扩展首部之前,所有前面的扩展首部已经被处理过。在这些扩展首部中,除了“目的选项首部”之外,其余首部最多只能出现一次,第二个“目的选项首部”的位置位于“加密首部”之后。

一般来说,IPv6报文的目的接收端,需要处理所有的扩展首部,一旦处理过程中遇到不认识的扩展首部类型,则会丢弃该IPv6报文并使用ICMPv6报文通知发送端。而转发路径上的所有路由器,则只需要处理“逐跳选项首部”即可,通过这种方式可进一步提高IPv6报文的转发效率。

所有的扩展首部除了具有图2-11所示的通用格式外,还具有如下特点。图2-11 IPv6扩展首部通用格式

①除了加密首部外,所有其余扩展首部的长度都是8字节的整数倍,其中“首部长度”字段是以8字节为单位指明首部长度,但不包括第一组的8字节。

②IPv6基本首部和扩展首部的“下一首部”字段指明了紧跟其后的首部类型值,每一个扩展首部都有唯一的类型值,如果紧随其后的是上层协议首部(如传输层),那么该字段使用与IPv4首部中的“协议”字段相同的数值(RFC 3232 Assigned Numbers)。

在IPv6扩展首部机制中,除了以上定义的6种首部外,还有一种特殊的角色:“选项”。逐跳选项首部和目的选项首部都需要使用“选项”,它用于封装在扩展首部携带的参数,通常这些参数是以“类型—长度—值(TLV)”格式封装,其具体格式如图2-12所示。图2-12 扩展首部的选项格式

选项类型和长度各占8字节,选项数据是随选项类型而异的,并且其长度也是可变的。IPv6节点对选项的处理也是按照其在报文中出现的顺序依次处理的,不能只搜索和处理某种类型的选项,而忽略它们前面的选项。

选项的类型值并不是随便分配的,而是需要经过特别设计的,因为选项类型的最高两比特指明当IPv6节点不认识此选项时,如何处理该选项,第三比特标识是否可以被转发路由器修改。处理方式包括是否丢弃报文,以及是否向源节点发送ICMPv6报文。

因为选项数据的长度是可变的,为了实现IPv6报文对齐的要求,RFC 2460定义了两种填充选项:Pad1和PadN,如图2-13所示。图2-13 Pad1和PadN选项格式

Pad1是一个特殊选项,它只有选项类型字段,并且值为0,没有选项长度和数据,用于插入一个全0的填充字节。相反,PadN则可以用于插入多个填充字节,对于一个N字节的填充选项,选项数据长度为N−2,因为选项类型和长度各占了一个字节,选项数据值为N−2个字节的全0数据。

虽然目前只定义了6个扩展首部和两个选项类型,但是正如其名字一样,IPv6是允许在将来定义和设计新的扩展首部和选项类型的,以便满足新的业务需求和功能需求。

下面将简单地介绍IPv6各扩展首部的基本概念和用法。

1.逐跳选项扩展首部

逐跳选项扩展首部用于携带一些选项信息,它是唯一需要被路由转发路径上所有IPv6节点处理的扩展首部。当IPv6基本首部中的下一个首部字段值为0时,表示后面紧跟着逐跳选项扩展首部。到目前为止,能出现在逐跳选项扩展首部的选项包括Pad1、PadN、超大数据包选项(RFC 2675 IPv6 Jumbograms)和路由器警告选项(RFC 2113)。

超大数据包(Jumbograms)选项(类型值为194),用于传送超大的IPv6数据包。IPv6基本首部的载荷长度字段只有16位,因此能承载的载荷长度最大为64KB,超过这一临界值时,则必须使用Jumbograms选项,分组有效载荷长度最大可达4 294 967 295字节(4GB−1B)。然而,如果IPv6报文使用了此选项,那么传输层协议(如TCP和UDP)也需要进行相应的修改,以支持超大的数据长度,关于具体的修改细节,请参照RFC 2675。当使用了Jumbograms选项时,IPv6基本首部的载荷长度字段设置为0。读者们需要注意的是:一个IPv6报文不能同时使用分段扩展首部和超大数据报选项。

路由器警告选项(类型值为5)提醒路由器对IPv6数据包的内容进行更深入的检查,而不仅仅是路由转发。路由器警告选项用于多播收听者发现和RSVP(资源预定)协议。详情请参照RFC 2113。

2.路由扩展首部

路由扩展首部的功能类似于IPv4协议的松散源路由选项,用于指定从源节点到目的节点的路径中必须经过的一个或多个中间节点,此扩展首部只能由源节点进行设置,中间节点收到报文后,需要进行相应的处理,路由扩展首部的类型值是43,其格式如图2-14所示。图2-14 路由扩展首部格式

路由扩展首部格式比通用格式多两个字段:路由类型和剩余段数,剩余段数指明还有多少个中间节点必须经过。当节点在处理一个IPv6报文的路由扩展首部时,如果遇到不认识首部的路由类型字段,那么将会根据剩余段数来判断该采取哪种措施:如果剩余跳数为0,节点忽略该首部,继续处理下一首部;如果剩余跳数不为0,节点丢弃该报文,并向源节点发送错误代码为0的ICMP报文。

目前只定义了路由类型值为0的路由扩展首部,此时,数据部分则以列表的形式记录了中间节点的IPv6地址,但这些地址不能是多播地址类型。使用路由扩展首部时,源节点发出的数据包的目的地址并不是数据包最终的目的地址,而是第一个中间节点的IPv6地址,当数据包到达第一个中间节点后,它会从扩展路由首部中取出第二个中间节点的IPv6地址,并填入IPv6基本首部的目的地址字段中,依次类推,直到到达最终目的主机。

关于中间路由器是根据什么算法处理路由扩展首部的,请参照RFC 2460的4.4节。

3.分段扩展首部

分段扩展首部是IPv6最常用的扩展首部之一,IPv6基本首部不包含任何的分段信息,而是通过分段扩展首部来实现IPv6数据包的分片。此外,IPv6与IPv4的分片机制还有如下区别:IPv6数据包只能由报文的源节点进行分片,中间路由器不能对IPv6报文进行分片处理,而只能使用ICMPv6报文通知源节点进行分片并重发数据包。

当IPv6节点需要发送的数据包大于链路的MTU时,则需要结合分段扩展首部进行分片,分段扩展首部的类型值是44,其格式定义如图2-15所示。图2-15 分段扩展首部格式

分段偏移量占13字节,并以8字节组为单位,标识了该分片在原IPv6报文的开始偏移量。M标志位指示了该分片是否是最后一个分片。IPv6节点在对报文进行分片之前,必须为报文分配一个标识符,此标识符在一组特定的通信双方中是唯一的,接收端根据报文标识符对IPv6分片报文进行重组。

一个IPv6报文,又分为“不可分片部分”和“可分片部分”,前者主要包括IPv6基本首部和需要被转发节点处理的扩展首部(例如逐跳选项扩展首部和路由扩展首部),其余的只需要被目的主机处理的扩展首部和上层协议首部都是可分片的。源节点为报文进行分片后,会为每一分片单独插入一个“分段扩展首部”,因此,报文被分片后,各分片长度的总和必然大于分片前报文的总长度。在分片前,报文的MTU必须小心地选择,因为它直接关系到每一分片的大小,RFC 2460建议各IPv6节点均实现并开启“路径MTU发现协议”。

4.目的选项扩展首部

目的选项扩展首部用于携带只被目的IPv6主机处理的选项,类型值为60,格式定义与“逐跳选项扩展首部”完全相同。目的选项扩展首部是唯一可以在同一个IPv6报文中出现两次的扩展首部,第一次是在“逐跳首部”后面,第二次是在“加密首部”后面。到目前为止,除了Pad1和PadN选项,还没有定义其他有意义的选项类型。

5.认证扩展首部

认证扩展首部是在RFC 4302中单独定义的,主要为IPv6数据包在无连接情况下的数据完整性提供保障,另外接收端还可以通过此认证扩展首部确认发送方的身份。认证扩展首部的类型值为51,其格式定义如图2-16所示。图2-16 认证扩展首部格式

关于认证扩展首部中字段的具体含义,请参照RFC文档,本书第11章将对网络安全部分进行更详细的描述。

6.加密扩展首部

加密扩展首部在RFC 4303中单独定义,加密扩展首部用于对紧跟其后的IPv6数据内容进行加密处理,通过使用某种加密算法,以防止数据在传输过程中泄露,目的主机只有使用正确的密钥才能解密。加密扩展首部经常与认证扩展首部结合使用,同时达到验证发送方的目的。加密扩展首部的类型值为50,与认证扩展首部类似,首部有两种使用模式:传输模式和透明模式。关于IPv6安全部分更详细的内容,请参照本书第11章的网络安全部分。

2.4 ICMPv6

2.4.1 协议概述

ICMPv6是ICMP针对IPv6的新版本,在RFC 4443中定义,其协议号为58。ICMPv6位于TCP/IP模型中的网络层,主要用于报告IPv6报文处理过程中的错误消息和执行网络诊断功能。与ICMP相比,ICMPv6增加了一些新的应用场景,比如邻居发现协议和多播监听者发现协议都使用ICMPv6报文进行交互。

ICMPv6消息需要使用IPv6报文来承载,其消息类型又分为两类:错误消息和信息消息。ICMPv6消息的一般格式,如图2-17所示,类型字段为8位,最高位是0(即取值范围0~127)时表示该ICMPv6报文是一个错误消息,最高位为1(即取值范围128~255)时表示该ICMPv6报文是一个信息消息。图2-17 ICMPv6消息通用格式

类型和代码字段各占8位,代码字段的取值又决定于类型值,用于区分某一类型的多条消息。消息体部分一般是尽可能多地引用原IPv6报文数据,但不能超过最小的MTU值。

2.4.2 错误消息

RFC 4443定义了如下的错误消息类型,如表2-4所示。表2-4 ICMPv6错误消息类型(1)目的地不可达

当一个路由器无法正确转发IPv6报文到目的地址时,将产生一个ICMPv6“目的地不可达”的错误消息,至于不可达的原因,可以通过设置代码字段进一步地说明:如代码=0表示没有到达目的地址的路由,代码=2表示目的地址超出了源地址的作用范围等。

除了路由器,IPv6数据包源节点的IPv6协议层也会产生此消息,如应用程序发出一个IPv6报文,报文到达操作系统的网络协议层,网络层发现没有相应的路由到达目的地址,便会产生此报文告知上层协议。(2)数据包过大

当路由器在转发过程中,发现IPv6报文长度大于下一跳链路的MTU时,需要产生此报文通知源节点:所发送的IPv6数据包过大。在路径MTU发现协议中,就是使用此ICMPv6错误报文来检测特定路径的MTU值。“数据包过大”错误消息的类型值为2,消息格式包含一个MTU字段,由路由器填写正确的MTU值。与其他ICMPv6消息相比,此类型的错误消息的目的地址是多播地址,而其他类型的消息通常只使用单播地址。(3)超时“超时”错误消息的类型值为3,超时又可分为跳数超时(代码值=0)和分段重组超时(代码值=1),当路由器在转发一个IPv6报文时,会将基本首部的“跳数限制”字段递减1,如果递减后数值小于或等于0,那么路由器就会丢弃该报文,并向源节点发送“超时”错误消息,此机制可以避免产生环路时,数据报文被无休止地转发。

另外,在报文分片机制中,如果接收端收到第一个分片后,60秒内没有接收所有剩余的分片,那么被认为分段重组超时,接收端会产生此类型的错误消息。

如果路由器收到一个IPv6报文的跳数限制字段为0,或者经过递减1后为0,则必须丢弃该报文。(4)参数问题“参数问题”错误消息的类型值为4,当路由器或主机在处理IPv6报文首部时,如果遇到有错误的字段,而导致不能完整地处理整个报文,则会使用此类消息通知源节点。不同的代码值,代表不同的错误原因,如0表示错误的首部字段,1表示不能识别的下一跳类型,2表示不能识别的IPv6选项。

此类消息有一个32位的指针字段,指示错误字段所在的位置,以字节为单位。指针也可以指向ICMP报文之外,表示出错的部分超出了一条ICMPv6错误报文可以容纳的最大长度。

2.4.3 信息消息

ICMPv6的信息消息可以用于诊断网络状态,比如ping命令,RFC 4443定义了如下的信息消息类型:回显请求(128)、回显应答(129)、实验(200、201)、保留(255)。最常用的类型有回显请求和回显应答,它们具有相同的报文格式,如图2-18所示。图2-18 回显请求和回显应答消息格式

回显请求报文的类型值为128,而回显应答报文类型值为129。标志符用于标识该报文的发送端,序列号是发送端给此报文的唯一序号,以区分同类型的多个不同报文,两字段的组合才能真正标识一个ICMPv6回显请求或回显应答报文,因此,在某个请求报文和对应的应答报文中,这两个字段的值一定是相等的。

每个IPv6节点必须实现ICMPv6回显应答功能。为了诊断需要,也应该实现一个应用层的接口,供应用程序调用发送回显请求和接收回显应答消息。当回显请求消息中的目的地址为多播或者任播时,属于这些地址组的节点也应该回复应答消息,并且源地址为收到此报文的接口的单播地址。

2.5 邻居发现协议

邻居发现协议(Neighbor Discovery Protocol)是新增的一个协议规范,与ICMPv6协议同处于网络层,是IPv6协议体系的一个基本组成部分。它取代了IPv4协议中使用的地址解析协议(ARP)、Internet控制报文协议(ICMP)、路由器发现以及ICMP重定向报文,并提供了额外的功能。

IPv6节点使用邻居发现协议可以发现同一链路上邻居的存在、解析邻居的链路层地址、发现路由器和跟踪各邻居的可达性状态等。这里的“同一链路”包括了交换机的同一个VLAN,邻居发现协议还可以工作在多种链路类型上,例如点对点链路、多播链路、非广播多路访问(NBMA)和共享式链路等。

邻居发现协议在RFC 4861中描述,并重新定义了5类新的ICMPv6报文。用于IPv6节点交互,致力于解决同一链路上IPv6邻居节点交互的问题,包括路由器发现、前缀发现、参数发现、地址自动配置、地址解析、确定下一跳、邻居不可达检测、重复地址检测和重定向等。

与IPv4机制相比,IPv6的邻居协议有了以下的改善:

①路由器发现是协议的一部分,主机没有必要去监听路由协议;

②路由器通告携带了链路层地址,不需要再通过交互来获得路由器的链路地址;

③路由器通告携带了链路的前缀,不需要再通过别的机制去配置子网掩码;

④路由器通告可以实现地址自动配置功能;

⑤重定向报文已经携带了链路地址,不需要重新获得;

⑥多个地址前缀可以配置在同一条链路上;

⑦邻居不可达检测是协议的一部分。

本章节主要介绍IPv6邻居发现机制使用到的报文结构、数据结构以及各个主要功能的工作原理。

2.5.1 数据包格式

邻居发现协议定义了5类新的ICMPv6报文,它们都属于信息消息类型,分别是路由器请求、路由器通告、邻居请求、邻居通告和重定向。

1.路由器请求消息(见图2-19)图2-19 路由器请求消息格式

IPv6主机是用路由器请求报文去寻找链路上存在的路由器,以获取路由前缀信息、MTU信息等,主机使用此报文还可以触发路由器立即回复路由器通告报文,而不需要等待路由器周期性的发送通告。

路由器请求报文的类型值为133,代码字段设置为0。主机发送该报文时,目的地址设置为预先定义的链路—本地范围的所有路由器多播地址(FF02::2),源地址也同样为发送接口上的链路—本地地址,如果没有此类地址,则会设置成未指定地址(::)。

IPv6主机还可以通过选项方式,把自己的链路层地址通告给路由器,以便路由器创建并维护邻居的IP地址与链路地址的映射关系,但是如果源地址为未指定地址,则就不能携带此选项了。

2.路由器通告消息(见图2-20)图2-20 路由器通告消息格式

路由器通告消息的类型值为134,代码为0。路由器会周期性地发送路由器通告信息,向邻居节点通告自己的存在,以及相关的一些参数信息。路由器通告可以多播方式和单播方式发送,周期性的通告是以多播方式,如果是对收到的路由器请求报文进行回复,则以单播方式发送。

但IPv6主机收到一个路由器通告时,会把“当前跳数限制”的值作为发送IPv6报文时的默认跳数限制。标识位M和O是非常重要的字段,分别用于控制IPv6主机如何配置IPv6地址和DNS等参数,M位是“可管理地址配置标识位”,O位是“其他配置标识位”,各占1位,当M为1时,IPv6主机将使用DHCPv6协议配置地址,否则,将使用无状态地址自动配置方式,当O为1时,主机使用DHCPv6获取除地址外的其他参数信息,如DNS。关于地址自动配置和DHCPv6将在本章后面章节介绍。

当IPv6主机收到一个路由器通告报文时,会以路由器的链路—本地地址为下一跳创建一条默认路由,路由器生存期字段便是用于指定此默认路由的有效时间,字段占16位,以s为单位,最长可表示约18h,但此字段值为0时,表示此路由器不可作为默认路由器。

每一个IPv6节点,都会维护一个邻居缓存表,记录了邻居是否可达等信息,可达时间字段则是用于更新此表相应表项。重传时间是以μs为单位,表示路由器周期性发送邻居请求报文的时间间隔。

路由通告报文可以携带的有效选项包括源节点链路地址选项、MTU选项和前缀信息选项。路由器发送通告的最重要功能之一就是通告路由器前缀信息选项,IPv6主机收到该报文后,可以使用此前缀信息自动生成IPv6地址,通常这些前缀都是单播地址类型的,但不需要通告FE80::/64,因为这是众所周知并只用于链路范围,并且主机在启动IPv6协议栈时,已经会自动使用该前缀生成一个链路—本地地址。

3.邻居请求消息(见图2-21)图2-21 邻居请求消息格式

邻居请求消息类型值为135,代码为0,主要用于解析除IPv6路由器外的其他邻居节点的链路层地址,此时以多播方式发送邻居请求消息,多播地址为被请求节点多播地址,或者用于邻居的可达性检测,此时以单播方式发送邻居请求消息。通常,发送端还会在选项字段中携带自己的链路层地址。

格式字段中的“目标地址”就是指明要解析哪一个IPv6地址,但它不能是多播地址类型。

4.邻居通告消息(见图2-22)图2-22 邻居通告消息格式

邻居通告消息类型值为136,代码为0,邻居通告用于公告自己的存在以及更新链路的链路层地址信息,与路由器通告类似,它也可以多播方式或单播方式发送,当回应一个邻居请求报文时,以单播方式发送,当更新链路层地址时,以多播方式发送。另外路由器除了发送路由器通告消息外,也会发送邻居通告消息。

邻居通告消息有3个标识位:路由器标识位(R)、请求标识位(S)和覆盖标识位(O),分别表示:R位置1表示发送者是一个路由器,S位置1表示此报文是回复邻居请求报文,O位置1表示此通告信息可以覆盖原有邻居缓存表条目。目标地址记录一个被解析节点的IPv6地址,如果S位置1,则为原请求报文中的目标地址,否则,表示该报文是一个更新接口链路层地址的通告消息,字段值设置为该接口的IPv6地址。邻居通告消息只有一个有效的选项:目标链路层地址,对应于目标地址字段的链路层地址。

5.重定向消息(见图2-23)图2-23 重定向消息格式

重定向消息类型值为137,当主机在发送IPv6报文时,一般是根据路由表项的最佳匹配原则,从特定的接口把报文发送到下一跳节点,若路由表项不是最新的,或者不是很完整的时候,可能会导致现有的下一跳其实并不是最佳的,此时,路由器可以使用重定向消息,告诉主机去往目的地址有更好的下一跳节点。还有一种特殊的情况就是:目的地址事实上与发送端是邻居关系,可以直接发送,而不需要经过路由器转发。

重定向消息格式中的字段“目标地址”和“目的地址”分别表示更优的下一跳路由器的IPv6地址和被重定向的目的IPv6地址。当目标地址和目的地址相同时,表示此目的地址与发送端是邻居关系,否则下一跳是一个路由器,通常为路由器的链路—本地地址。

重定向报文的有效选项包括目标链路地址和重定向首部,重定向首部是指触发路由器发送重定向消息的原始IPv6报文部分。

6.选项格式

邻居发现协议定义的5类消息通常可以携带0个或多个选项,但不同类型的消息可携带的选项类型也是不一样的。这里简单介绍5类消息所使用到的选项类型:源/目的链路层地址选项、前缀信息选项、重定向首部选项和MTU选项。(1)源/目的链路层地址选项(见图2-24)图2-24 链路层地址选项格式

类型值为1表示这是源节点链路层地址,为2表示这是目的节点的链路层地址。不同的链路类型有不同的链路层地址格式,通常,它们的长度也是不一样的。关于具体某种链路层的地址格式,请参阅相应的RFC文档,如以太网链路可参照RFC 2464(Transmission of IPv6 Packets over Ethernet Networks)。

源链路层地址选项可以在邻居请求消息、路由器请求消息和路由器通告消息中使用,而目的链路层地址选项只能在邻居通告消息和重定向消息中使用。(2)前缀信息选项(见图2-25)图2-25 前缀信息选项

前缀信息选项的类型值为3,此选项只能在路由器通告消息中使用,用于通告路由器为某一链路分配的IPv6前缀,前缀长度取值范围为0~128。L是On-link标识位。A是自动地址配置标识位,置1表示该IPv6前缀可以用作无状态地址自动配置。有效时间和优先时间表示使用此前缀生成的地址可以作为有效地址使用,以及作为首选地址使用的时间长度。请参照下一章节中的“地址的状态”部分。(3)重定向首部选项

重定向首部选项类型值为4,格式较为简单,但只能在重定向消息中使用,用于携带引起路由器发送重定向消息的原始报文。(4)MTU选项

MTU选项类型值为5,只出现在路由器通告消息中,路由器使用该选项以确保同一链路上的所有节点都使用相同的MTU值。

2.5.2 数据结构和算法

在邻居发现协议中,每一个IPv6节点都需要跟踪及维护邻居和路由表的状态,因此会使用到多个不同的数据结构,RFC 4861定义了以下4类列表。

1.邻居缓存表

邻居缓存表记录相邻的IPv6节点信息,一般指最近有报文交互的邻居节点。每一个条目都记录了邻居的单播地址和链路地址,并且标识邻居是路由器还是主机。

2.目的地缓存表

目的地缓存表记录了最近发送过数据包到哪些目的地址。使用该表的目的是为了快速转发IPv6报文,而不需要重新查找路由表。

3.前缀列表

前缀列表记录了IPv6主机收到的所有路由器通告的前缀信息。尽管路由器不通告FE80::的前缀信息,但主机的前缀列表中仍然存有FE80::表项,其有效时间设置为无限。

4.默认路由器列表

默认路由的概念与IPv4相同,一个IPv6主机可能会收到多个路由器发来的路由器通告消息,每收到一个路由器的通告,都会创建一条默认路由。默认路由器列表通过指针方式指向邻居缓存表中的条目,因为默认路由器必然是节点的其中一个有效邻居节点。

以上介绍的数据结构是邻居发现协议中必不可少的、并经常使用到的数据信息。关于更详细的描述,请查阅RFC 4861。下面将介绍邻居发现协议的各个具体功能。

RFC 4861还定义了IPv6主机发送报文时要执行的一些算法步骤,通常,IPv6主机需要结合目的地缓存、前缀列表等数据结构来确定下一跳,具体算法步骤如下所述。

①查找目的地缓存表,是否有表项匹配数据报的目的地址。

②如果有匹配条目,转向步骤④。否则,继续查找前缀列表,如果还不能找到相匹配的条目,则下一跳设置为当前的默认路由器,转向步骤③。如果没有默认路由器,下一跳设置为目的地址。

③更新邻居缓存表。

④检查邻居缓存表是否有条目可以匹配下一跳的IPv6地址。

⑤如果找到,则提取它的链路层地址;如果找不到,使用地址解析协议去获取下一跳节点链路层地址。

⑥使用上一步获取的链路层地址来转发报文。

2.5.3 前缀发现机制

“路由器和前缀发现”机制是指IPv6节点自动定位邻居路由器和获取自动地址配置的前缀信息和参数的过程,类似于IPv4的ICMP路由器发现机制。当一个节点使能IPv6时,协议栈会自动为接口生成链路—本地地址,并加入到相应的多播组中,然后才能利用邻居发现机制正常接收和处理单播报文或多播报文。

路由器和前缀发现机制的详细过程如下所述。

①IPv6路由器周期性地发送路由器通告到本地链路上,通告自己的存在,并随通告消息携带一些参数信息,如默认跳数限制、MTU和前缀信息。

②链路上活动的IPv6主机接收到该通告后,提取相关信息用于维护默认路由器列表、前缀列表和其他参数配置。

③刚开启IPv6的节点,发送路由器请求报文给链路上的所有路由器(FF02::2)。链路上的路由器收到报文后,以单播方式回复路由器通告信息。当主机发送路由器请求报文后,如果没有收到回复,默认情况下只重传3次。

图2-26描述了典型的报文交互过程。图2-26 路由器和前缀发现交互过程

2.5.4 地址解析机制

IPv6的地址解析机制是指节点需要解析IPv6地址对应的MAC地址,这是通过邻居请求消息和邻居通告消息的交互来完成的。主要的步骤和流程如下所述。

①解析者发送一个多播的邻居请求消息,多播地址为目标地址对应的被请求节点多播地址。请求消息携带了发送者的链路层地址(MAC地址)。

②接收端收到报文后,根据报文的源地址和源链路地址更新邻居缓存表中条目。接着,节点发送单播的邻居通告消息,并携带上自己的链路地址。

③发送者收到回复后,根据内容更新邻居缓存表条目。

图2-27描述了典型的报文交互过程。图2-27 地址解析报文交互过程

2.5.5 重复地址检测

当IPv6节点为网络接口生成一个地址后,地址是属于“临时状态”,还不能作为发送报文的源地址使用,必须使用“重复地址检测(DAD)”机制来检验地址的唯一性,从而,地址才能进入“有效状态”。重复地址检测机制与地址解析机制类似,都是使用邻居请求消息和邻居通告消息,但又有如下区别。

①邻居请求消息中,源地址设置为未指定(::),不能使用正在被检验的地址。

②在邻居通告的回复报文中,目的地址设置为链路范围的所有节点多播地址(FF02::1),另外,报文中的S位置0。

如果发送者能收到回复报文,说明被检测的目标地址已经被使用了,如果没有收到任何回复报文,源节点方可使用被检测的地址。重复地址检测的报文交互过程如图2-28所示。图2-28 重复地址检测机制的报文交互

2.5.6 邻居不可达检测

邻居不可达检测是指IPv6节点跟踪和检测每个邻居的可达性状态,从而可以尽快地解决网络的中断问题。每个IPv6节点都需要维护着一张邻居缓存表,其记录每个邻居的状态信息, RFC 4861定义了邻居的5种状态。

①不完整(INCOMPLETE):表示邻居状态尚不清晰,如正在使用地址解析机制过程中,或者刚创建一个新邻居时,设置为此状态。

②可到达(REACHABLE):当收到邻居的通告报文,表示邻居可达,直到“可达时间”到期。

③老旧的(STALE):当“可达时间”到期后,进入此状态。

④延迟的(DELAY):允许上层协议等待可达性的确认,而无需发送邻居请求报文。

⑤探索的(PROBE):当邻居条目处理STALE和DELAY状态时,发送邻居请求报文,并等待可达性的确认。

邻居状态的转换图如图2-29所示。图2-29 邻居可达性状态转换图

2.5.7 重定向机制

重定向机制是指路由器发送一个重定向消息给一个主机,告知去特定的目标地址应该把报文发向另外一个路由器,或者告知目标地址就是主机的邻居(只要重定向消息中目标地址与目的地址相同即可)。因为路由器有可能把报文重定向至任何一个邻居路由器,因此一个路由器必须知道它所有邻居路由器的本地链路地址。重定向的具体过程如下所述。

①当主机需要向目的节点发送一个单播IPv6报文时,根据路由表最佳匹配原则,将报文发向下一跳路由器。

②路由器接收到报文后,查找路由表,并发现源节点和报文的下一跳节点在同一链路上,即它们是邻居关系。

③路由器转发该报文给下一跳节点。

④路由器向主机发送一个重定向报文,告知去往目的地址有更好的下一跳,报文中的目标地址就是下一跳节点的地址。

图2-30描述了它们的交互过程。图2-30 重定向的报文交互流程

2.6 无状态地址自动配置

在IPv4中,主机的地址通常是通过动态主机配置协议(DHCP)或手工方式进行配置的,而IPv6作为下一代IP协议,其中一个重要的目标是支持“即插即用”。无状态地址自动配置(RFC 4862:IPv6 Stateless Address Autoconfiguration)便是为此而设计的,此机制不需要使用DHCPv6协议来完成地址的配置。

从前面的介绍中我们已经知道:在默认情况下,IPv6节点会为其每个IPv6接口生成一个链路—本地地址,另外,通过路由器发现协议,主机可以得知路由器的地址、其他参数和链路前缀等信息,并且在路由器通告消息中还包含了M和O标识位,用于告知主机使用哪种地址配置方式。

上面提及的IPv6节点为接口自动生成链路—本地地址,是无状态地址自动配置中的一部分内容,也是自动配置机制的开始点。RFC规定,无状态地址自动配置机制只能在支持IPv6多播功能的接口上实现。如果一个节点在执行地址自动配置过程中出现异常,比如地址重复性检测未通过,自动配置过程将终止,此时需要手动操作。

本书所说的地址自动配置又分为以下3种类型。(1)无状态的地址自动配置

当收到的路由器通告消息中的M和O标识位都设置为0时,将使用通告中的前缀信息自动生成IPv6地址,并完成地址重复性检测,这就是无状态地址自动配置。(2)有状态的地址自动配置

有状态的地址自动配置是依靠有状态的自动配置协议(如DHCPv6)来完成的。当路由器通告消息中的M位或O位为1时,并且通告消息没有携带前缀信息时,或者主机接口所连接的链路上没有任何路由器存在时,主机会使用有状态的地址自动配置方式。(3)两者结合

如果主机收到路由器通告消息中已经含有前缀信息,并且M或O标识位为1时,将使用无状态方式配置地址,使用有状态方式获取DNS等参数信息。

目前,通常的做法是采用第3种两者结合的方式。

2.6.1 地址状态

RFC 4862定义了在地址自动配置过程中,一个IPv6地址可能出现的5种状态。

①临时的(Tentative):当主机刚刚生成一个IPv6地址时所处的状态,该地址即将接受地址重复性检测。此时IPv6节点不能够接收以单播方式发送到临时地址的报文,因为该地址还没通过检测,不是一个有效的接口地址,但是可以接收以多播方式回复的路由器通告消息。

②有效的(Valid):当“临时地址”通过了地址重复性检测后进入“有效”状态,接口可以使用该地址来发送消息,接收发送至该地址的报文,有效状态又可进一步分为首选状态和弃用状态,一个IPv6地址处于有效状态的时间长短由路由器通告消息中的有效时间字段决定。

③首选的(Preferred):IPv6节点通常会使用此状态的地址来发送和接收报文,首选状态的时间长短由路由器通告消息中的首选时间字段决定。

④弃用的(Deprecated):处于弃用状态的地址仍然是有效的地址,只是不建议在新的通信中使用,但是已经建立起来的通信仍然可以继续使用该地址。

⑤无效的(Invalid):IPv6节点不可以使用该地址来发送和接收报文,当地址的有效时间到期后,将进入无效状态。

图2-31描述了各个状态之间的联系。图2-31 IPv6地址的状态关系

2.6.2 协议流程

RFC 4862详细描述了IPv6无状态地址自动配置的过程,具体的步骤如下所述。

①生成临时的链路—本地地址:使用固定前缀FE80::/64加上接口ID组成128位的链路—本地地址,该地址处于“临时状态”。

②发送邻居请求消息,执行地址重复性检测:在所有的单播地址被赋予一个接口之前,都需要进行重复地址检测,而不管该单播地址是使用无状态地址自动配置、DHCPv6还是手工配置方式生成。但是也有例外的情况,例如接口的DupAddrDetectTransmits参数值为0,重复性检测并不针对任播地址类型。

③如果收到一个邻居通告消息,并且消息是邻居请求的回应报文,那么表明临时地址已经重复,不可以被使用。此时,地址自动配置将会停止,需要手工配置。

④如果没有收到响应的邻居通告消息,表示地址没有重复,是唯一的、可用的。地址将被赋予接口,并加入对应的被请求节点多播组。

以上第②~④步骤,实际上就是前面章节描述的地址重复性检测机制。当以上步骤结束后,如果IPv6节点是一台主机,那么将继续以下步骤。

①主机发送路由器请求消息。

②如果没有收到任何路由器通告消息,主机将使用有状态的地址配置协议(DHCPv6)来获取地址和相关参数信息。

③如果收到了路由器通告消息,就根据消息体内容设置相应的参数,如跳数限制、可达时间、重传次数和MTU等。

④主机还需要从路由器通告中提取前缀信息,对于每一个前缀,还将进行如下处理:(a)如果On-Link标志位置1,将前缀加入进前缀列表;(b)如果自动标志位A(Autonomous Flag)置1,则使用该前缀自动生成临时地址;(c)使用地址重复性检测机制,验证刚刚生成的临时地址;(d)如果检测通过,表明该地址可以使用,主机将使用该地址初始化网络接口;(e)如果路由器通告中的M位是1,使用有状态地址配置协议(DHCPv6)获取地址;(f)如果路由器通告中的O位是1,使用DHCPv6获取其他参数信息。

2.7 DHCPv6

IPv6的无状态地址自动配置协议是目前广泛采用的配置方式,但使用这种方式的路由器并不记录所连接主机的IPv6地址,可管理性差。另外,主机还不能使用无状态自动配置协议获取DNS等参数信息,可用性上有一定的缺陷。

DHCPv6是DHCP(动态主机配置协议)的下一个版本,协议规范由RFC 3315定义,相对于无状态地址自动配置协议,DHCPv6属于一种有状态地址配置协议。DHCPv6服务器为主机分配一个完整的IPv6地址,并会跟踪IP地址与主机的映射关系,从而增强了网络的可管理性。至于IPv6主机使用何种地址配置方式,将根据收到的路由器通告消息中的相关标识位(M位和O位)进行判断,默认情况下,使用无状态地址配置方式。

DHCPv6又可分为有状态服务和无状态服务两种。有状态服务(M=1)是指使用DHCPv6来获取地址信息,而无状态服务(M=0,O=1)是指仅适用DHCPv6来获取DNS等参数信息。

DHCPv6机制是使用客户机/服务器方式交互的,DHCPv6服务器为客户端分配地址和下发参数信息。DHCPv6消息通过UDP报文来发送,服务器监听547端口,客户机监听546端口,客户端在发送DHCPv6请求报文时,源地址设置为链路—本地地址,服务器接收地址是预定义的多播组地址FF02::1:2(所有DHCPv6中继代理和服务器多播地址)。当客户端和服务器不属于同一链路时,需要由DHCPv6中继代理来转发请求交互信息,交互过程中一旦客户端确认了服务器的单播地址,后续的报文交互将使用单播方式。

DHCPv6还提供了前缀代理的扩展功能,上游的路由器可以自动为下游的路由器分配地址前缀,从而实现了IPv6地址路由信息的层次化结构。

2.7.1 数据包格式

DHCPv6系统由客户机、服务器和中继代理组成,因此,DHCPv6有两种交互方式:如果客户机和服务器在同一链路上可以直接交互;如果两者不在同一链路,需要使用中继代理进行报文的重新封装并转发。根据这两种模型,DHCPv6的报文类型分为以下两类。(1)客户/服务器消息(见图2-32)图2-32 客户/服务器消息格式

事务标识符是一次交互过程的标识符,就是说请求报文和相应的应答报文的事务标识符是一样的,但对于不同的请求报文,其事务标识符是不相同的。选项的长度是可变的,同一请求报文可以携带0个或多个选项。(2)中继代理/服务器消息(见图2-33)

中继代理并不是简单地对报文进行转发,而是重新封装在中继消息中,中继消息只有两类:中继转发(Relay-forward,消息类型为12)和中继回复(Relay-reply,消息类型为13),当中继代理节点收到来自客户端的DHCPv6请求报文时,重新封装成Relay-forward消息转发,服务器回应的DHCPv6消息被封装在Relay-reply消息中,中继代理节点拆除报文的中继封装,还原成DHCPv6消息,并转发给客户端,从而完成一次交互过程。中继代理的机制允许在客户端与服务器的通信路径中存在多个中继代理。图2-33 中继代理/服务器消息格式

跳数计数字段记录了报文经过的中继代理个数,这里的链路地址(link-address)并不是指链路层地址,而是客户端接口的global地址,用于服务器在回复报文时对客户端进行寻址,对端地址记录了被中继的DHCPv6消息来自何处,选项字段长度可变。

根据RFC的定义,DHCPv6的消息类型包括以下13类,如表2-5所示。表2-5 DHCPv6消息类型

RFC 3315还定义了20个选项类型,由于篇幅问题,这里不做一一介绍,请读者们自行参阅RFC 3315。

2.7.2 分配地址流程

DHCPv6规定请求分配地址使用Request消息,请求分配参数信息使用Information-request消息,这给IPv6主机提供了更多、更灵活的方式,比如使用无状态的方式获取地址,并结合DHCPv6获取DNS信息,下面将分别介绍这两种请求过程。

DHCPv6客户机获取地址的交互过程如下所述。

①DHCPv6客户端以多播方式发送一个请求消息(Solicit),寻找DHCPv6服务器,类似于IPv4中的DHCP Discovery消息。

②DHCPv6服务器收到请求消息后,以单播方式回复一个通告消息(Advertise),表示它可以提供地址和参数配置服务,类似于IPv4中的DHCP Offer消息。

③客户机再以单播方式发送一个请求消息(Request),请求服务器为其分配IPv6地址;类似于IPv4中的DHCP Request消息。

④服务器发送一个回复消息(Reply),消息中包含了分配给客户机的一个完整IPv6地址,类似于IPv4中的DHCP ACK消息。

DHCPv6客户机获取参数配置信息的交互过程如下所述。

①客户机发送信息请求消息(Information-Request)到服务器,以请求如DNS等参数信息,类似于IPv4中的DHCP Inform消息。

②服务器发送一个回复消息(Reply),消息中携带了相应的参数信息,类似于IPv4中的DHCP ACK消息。

如果IPv6主机可以从同一链路上的其他路由器中,通过无状态地址自动配置方式获取地址,那么尽管链路上有DHCPv6服务器,主机仍然不会向其发送Request报文请求分配地址。图2-34所示是一个典型的DHCPv6报文交互过程。图2-34 DHCPv6报文交互过程

2.7.3 分配前缀流程

DHCP-PD(Prefix Delegation)是一种自动分发网络前缀的机制,是DHCPv6的一个扩展功能。在IPv4中,ISP服务器提供商只能为用户分配一个IP地址,如果用户有多台机器需要上网,就需要使用NAT设备。而IPv6中,客户端网关设备可以使用DHCP-PD方式向ISP请求一个更大的网络前缀(如/48或/56,取决于ISP的策略),得到前缀后,客户端可以更灵活地部署自己的网络。RFC 3769描述了DHCP-PD机制的必要性。

DHCP-PD机制一般应用于客户端边缘(Customer Edge,CE)和提供商边缘(Provider Edge,PE)之间,在DHCP-PD的协议术语中,CE称为请求路由器(Requesting Router,RR), PE称为分发路由器(Delegating Router,DR),换句话说,RR作为DHCP-PD的客户端,而DR则作为服务器。DHCP-PD的协议交互过程,如图2-35所示。图2-35 DHCP-PD报文交互过程

客户端边缘RR通过DHCP-PD得到一个/48的前缀,然后再根据实际的网络情况,从大前缀/48中选取一个/64的前缀通告给主机(RA即路由器通告消息),主机再根据收到的前缀信息自动生成完整的IPv6全球单播地址。

除了可以使用DHCPv6中的20个选项之外,RFC 3633还专门为DHCP-PD定义了一些新的选项类型,如IA-PD前缀选项,读者可参阅RFC文档。

第3章 IPv6接入方式

终端要获取网络资源,需要通过运营商的网络接入互联网,而运营商的网络是不允许终端随意接入,对终端采用受控接入。终端和网络运营商之间存在一种制衡关系——终端以适合的接入方式接入运营商网络,并遵从运营商的接入控制方式;网络运营商更好、更安全地给终端提供网络服务,针对不同的终端类型,提供多样性的接入方式,以及配套的接入控制方式。本章向大家介绍网络接入方式及接入控制方式,重点探讨在IPv6环境下,运营商的接入控制方式以及固网宽带不同接入方式的组网。

3.1 接入网络

终端要连接网络,获取网络资源,首先要对网络有一个大体的认识。下面以一个家庭宽带接入网络为例,简要熟悉一下宽带网络的概念,一个完整的宽带网络可以划分为5个部分:家庭网络、接入网络、城域网网络、骨干网网络、Internet网络。图3-1给出了家庭宽带网络各个部分的连接关系。图3-1 家庭宽带网络部署拓扑图

家庭终端设备连接到家庭网络寻求或提供网络资源,而家庭网络通过一定的网络接入方式,接入到接入网络。同一个接入网络中的各个家庭网络之间的家庭终端可以共享网络资源。多个接入网络连接会聚到城域网中,通过城域网进而提供不同接入网络中资源互享。而城域网通过接入骨干网络才能与其他城域网互通,骨干网络与Internet网络互联,为家庭网络终端提供更多的网络资源。

作为我们比较熟悉的家庭网络,那么它是如何接入到接入网络呢?网络运营商又是如何控制家庭网络接入呢?接下来,简单介绍一下网络接入方式以及网络接入控制方式。

3.1.1 网络接入方式

网络接入方式发展到现在大体上有7种,普通电话拨号接入、综合业务数字网接入(ISDN)、数字用户环路接入(DSL)、光纤同轴电缆混合网接入(HFC)、以太网宽带接入、无源光纤网络接入(PON)、无线局域网接入(WLAN)。

①普通电话拨号接入(Public Switched Telephone Network,PSTN)使用原有的电话网络,通过拨号方式接入互联网,拨号上网期间不能接打电话。上网带宽比较低,带宽理论值是56kbit/s,远远不能满足多媒体应用的网络需求,上网接入方式简单,只需要一根电话线和一个Modem(调制解调器,俗称“猫”)设备。

②综合业务数字网接入(Integrated Service Digital Network,ISDN)使用同一根电话线,电话上网两不误,即上网的同时,也可以接打电话、收发传真,而互不影响。ISDN俗称“一线通”,上网带宽比较低,带宽理论值是128kbit/s,同样存在不能满足多媒体应用的网络应用需求的问题,终端上网需要配置特殊的Modem设备。

③数字用户环路接入(Digital Subscriber Line,DSL)使用原有的电话网络,在同一电话线上传输数据信号和语音信号,不需要拨号,直接连接到网络。DSL包括ADSL (Asymmetrical Digital Subscriber Line,非对称数字用户线路)、VADSL等。ADSL属于比较常见的宽带上网接入方式,使用广泛,安装便捷,能够维持用户一直处于在线状态,上行带宽能达到1Mbit/s,下行带宽能达到8Mbit/s,能够基本满足用户宽带上网的需求。VADSL(Very high speed ADSL,甚高速非对称数字用户线路)也被写成VDSL,是ADSL快速版本。短距离上行带宽可达19.2Mbit/s,下行带宽可达52Mbit/s。

④光纤同轴电缆混合网接入(Hybrid Fiber Coaxial,HFC),顾名思义是会聚传输使用光纤、接入网络使用同轴电缆的混合拓扑网络,光纤传输带宽容量大,抗干扰性强,传输距离长,同轴电缆接入到用户,可以利用原有接入到用户的有线电视网络,部署便捷,降低资源及部署成本。光纤同轴电缆混合网提供高速宽带接入,且部署成本低,目前国内外应用广泛。由于光纤同轴电缆混合网继承原有的同轴电缆接入网络,其维护成本相对较高,且随着多媒体应用的发展和接入用户的增多,接入网络部分将不能满足带宽发展的需求。

⑤以太网宽带接入,主要是以会聚传输使用光纤,接入网络使用小区局域网,实现不同带宽速率、不同服务类型的接入方式。以太网宽带网络同时提供高速小区局域网服务和高速互联网服务。以太网宽带网络,多部署于新建小区楼盘或写字楼,光纤到各个小区节点或楼道,特点是网络带宽高,抗干扰性强,缺点为一次性部署成本高。

⑥无源光纤网络接入(Passive Optical Network,PON),简单地说就是传输网络和接入网络采用光纤及光网络设备,也即是光纤到户。目前发展的PON技术主要有Ethernet PON (EPON)和Gigabit-Capable PON(GPON)。无源光纤网络具有高带宽、高效率、服务范围广、用户接口多样等诸多优点,缺点为一次性部署成本高。

⑦无线局域网接入(Wireless Local Area Networks,WLAN)是接入网络采用无线局域网方式,用户通过无线网卡或其他无线射频接入设备接入到局域网,进而访问互联网。无线局域网接入作为有线网络的补充,在无线局域网范围内接入便捷、高速率,缺点是抗干扰性和障碍物穿透性不强,且带宽有上限,不能满足多媒体应用需求。

上面简单说明了7种网络接入类型,这些都是属于物理网络接入技术方面。对于物理网络接入方面,IPv4和IPv6并没有本质的变化,而这些物理上的网络设备可以通过软件升级获得支持IPv6的能力。

3.1.2 网络接入控制方式

对于用户终端来说,对物理网络接入方面感知并不是很明显,而用户更熟悉的是如何配置设备、如何登录认证上网等,接下来就简单介绍一下网络的接入控制方式。

网络接入控制方式可以分为受控接入方式和非受控接入方式。受控接入方式简单地说就是不能自由地使用网络资源或者说受一定条件的约束限制地使用网络资源,如用户要访问互联网就需要到运营商那里办理账号,登录成功后才能访问互联网资源,如果没有办理账号或者登录失败,即使是已经物理连接到运营商接入网络中也不能访问互联网资源。非受控接入方式的概念与受控接入方式相反,即只要顺利连入接入网络,就可以访问该网络中的服务资源而不受网络互通方面的限制。受控接入方式与非受控接入方式是相对而言的,两者之间可以通过一定的技术方案实现互转,也即是非受控接入方式可以变成受控方式,受控接入方式也可以变成非受控接入方式使用。

非受控接入方式常使用的接入技术或方式有:DHCP方式或者手动配置方式。

受控接入方式常使用的接入技术或方案有:二层MAC地址授权过滤方案,如基于802.1x接入方案;PPPoE(Point-to-Point Protocol over Ethernet,以太网上的点到点协议)接入方案;IPoE(IP over Ethernet,以太网上的IP协议)接入方案等。

DHCP方式就是用户终端设备接入网络后,采用DHCP协议从接入网络设备中DHCP Server上获取终端设备的网络参数,自动配置终端设备网络参数。用户终端设备的DHCP执行完成后,就可以访问网络中的资源。整个DHCP过程时间比较短,用户基本无感知。

手动配置方式即是给终端设备分配好固定的网络参数,如IP地址等,只要终端设备配置好这些网络参数,接入到固定的网络中,就可以直接使用网络资源了。

二层MAC地址授权过滤方案,最常见的协议组合方式是基于IEEE 802.1x协议结合EAP (Extensible Authentication Protocol,扩展认证协议)和AAA(Authentication,Authorization and Accounting,认证、授权、计费系统)架构。基于802.1x协议的接入方案及报文交互如图3-2所示。首先由PC发起802.1x认证,PC发送二层广播报文EAP-Start报文;接入控制点汇集交换机回复PC二层单播EAP-Request报文,要求获取PC的用户ID信息;PC返回EAP-Response携带用户ID信息;汇集交换机向AAA服务器发送Access-Request请求报文携带用户ID信息;AAA服务器返回汇集交换机Access-Response报文携带MD5加密密钥信息;汇集交换机向PC发送EAP-Request报文携带MD5加密密钥信息;PC根据MD5加密密钥信息对Password进行加密,之后,PC发送EAP-Response报文携带用户ID和加密后的Password;汇集交换机向AAA服务器发送Access-Request携带用户ID和加密后的Password;AAA服务器根据用户ID和加密后的Password认证用户能否有权限接入到校园网,AAA服务器判断用户能接入网络会发送Access-Accept报文,否则发送Access-Reject报文;而汇集交换机收到Access-Accept报文则允许PC接入校园网,同时给PC发送EAP-Success报文,否则汇集交换机收到Access-Reject报文则直接给PC发送EAP-Failure报文,PC不能接入校园网。图3-2 802.1x方案报文交互过程

PPPoE接入方案是基于PPPoE和AAA架构对终端设备进行接入控制。PPPoE接入方案是目前国内外比较普遍采用的接入方案,其接入控制点一般部署在BRAS(Broadband Remote Access Server,宽带远程接入服务器)设备上。PPPoE是由多个协议组成的,也被称为PPPoE协议簇。在IPv4环境下,PPPoE协议簇包括PPPoE发现协议、LCP(Link Contol Protocol)协议、NCP(Network Control Protocol)协议中的IPCP(IP Control Protocol)协议。

IPoE接入方案是基于DHCP协议和AAA架构对终端设备进行接入控制。IPoE接入方案也是比较流行的接入方案,随着网络多业务的发展,IPoE接入方案将会更加流行。IPoE接入控制点一般部署在BNG(Broadband Network Geteway,宽带网络网关)设备上。通过第2章的内容对DHCP协议有了初步了解,能够判断出DHCP协议本身并不具有认证功能,那么对终端设备做接入控制就比较困难。在IPv4上,IPoE是如何基于DHCP协议进行接入控制呢?IPoE是利用了DHCP协议扩展OPTION选项来做到的,DHCP有两个OPTION扩展选项,分别是OPTION60和OPTION82。OPTION60由终端设备添加到DHCP协议中,携带Vendor和Service Option信息等,而这些信息被网络设备透传给BNG,BNG利用这些信息识别出终端设备硬件类型以及业务服务类型。OPTION82信息是由配置DHCP SNOOPING功能或DHCP RELAY功能的网络设备插入在终端设备发出的DHCP协议报文中,用来携带终端设备接入位置信息等,接入位置信息包括物理端口名称、接入的VLAN ID、PVC ID等。BNG根据OPTION60及OPTION82携带的信息生成用户Session,BNG再根据生成的用户Session进行认证授权。

由于PPPoE接入方案和IPoE接入方案都是比较受国内外网络运营商欢迎的接入方案,接下来的内容将详细探讨这两种接入方案,以及IPv6对这两种接入方案的影响。

3.2 PPPoE

PPPoE即以太网上的PPP协议,作为IPv4网络上一种常见的宽带接入方式。在IPv6网络上,PPPoE接入方式的逐层配置结构并没有变化,而为了满足IPv6网络配置需要,PPPoE协议簇新增了一个IPv6CP协议。

3.2.1 PPPoE链路建立过程

PPPoE协议包括3个组成部分:①一种封装多协议数据报的方法;②一种链路控制协议(LCP),用于建立、配置和测试数据链路连接;③一个网络控制协议(NCP)簇,用于建立和配置不同的网络层协议。这3个组成部分在PPPoE链路建立过程中,依次是建立虚拟链路,配置链路层相关参数,配置网络层相关参数。有时也会把PPPoE链路建立过程分为两个阶段,即发现阶段和会话阶段,发现阶段(PPPoE Discovery Stage,PDS)也就是在同一个PPPoE接入认证控制链路域内与BRAS协商一个唯一的PPPoE Session-ID,会话阶段包括PPP链路建立(PPP Link Establishment Phase)和PPP网络层配置(PPP Network Layer Establishment Phase)两个协商过程,以及PPPoE的认证过程(PPP Authentication Phase)。典型的PPPoE链路建立报文交互过程如图3-3所示。图3-3 典型的PPPoE链路建立报文交互过程

用户终端接入网,PC先发送PADI(PPPoE Active Discovery Initiation)二层广播报文查找网络中的PPPoE接入控制端;作为PPPoE接入控制端BRAS一般由路由器承担这个服务器角色),收到PADI报文后,回复PADO(PPPoE Active Discovery Offer)二层单播报文,确认PPPoE接入控制终端;PC根据PADO报文知道PPPoE接入控制端BRAS设备;PC开始向PPPoE接入控制端BRAS发起PADR(PPPoE Active Discovery Request)二层单播报文,获取PPPoE Session-ID信息;BRAS给PC终端分配一个唯一的PPPoE Session-ID,通过PADS(PPPoE Active Discovery Session-confirmation)携带给PC终端,至此PPPoE的发现阶段完成,PPPoE虚拟链接建立,Session-ID就是用来区别不同PPPoE虚拟链路。PC后续的报文都是在PPPoE虚拟链路上传输的,也就是传输报文都需要封装PPPoE报文头。

PPP链路建立过程(PPP Link Establishment Phase)实际上是PPPoE在虚拟链路基础上配置和测试数据链路链接,配置数据链路的MTU、认证方式等参数。首先PC发起Configure-Request报文进行配置请求,同时,PPPoE接入控制终端也发出Configure-Request报文;当PPPoE接入控制终端收到Configure-Request报文后,回复Configure-Ack报文确认配置信息,而PC接收到Configure-Request报文也会回复Configure-Ack报文确认配置信息。另外,当Configure-Request携带的配置信息被对端修改时会返回Configure-Nak,有时Configure-Request中携带多个配置信息时,对端修改其中的部分配置信息,返回Configure-Nak写这部分配置信息即可。

PPP链路建立阶段配置链路层认证方式,这里以CHAP方式讲解,在PPPoE接入控制端收到LCP Configure-Ack报文后,发送Challenge报文携带密钥信息给PC;PC收到Challenge报文后,回复Response报文携带认证用户名信息和经过密钥加密的密码信息给PPPoE接入控制终端;PPPoE接入控制端根据用户名和密码进行认证处理,认证成功后发送Success报文通知PC认证成功。另外,如果认证失败返回Failure报文。

认证成功后,纯IPv6网络开始进行网络层配置,使用的配置协议为IPv6CP协议,PC发送Configure-Request报文配置IPv6接口ID标识;同时PPPoE认证控制端也发送Configure-Request报文配置IPv6接口ID标识,并且处理PC请求返回Configure-Ack确认报文;PC也需要响应PPPoE认证控制端发起的请求,返回Configure-Ack确认报文。当然,如果PPPoE需要指定PC终端的IPv6接口ID,就需要返回Configure-Nak报文,并在报文中携带指定的IPv6接口ID信息。

在整个链路建立过程中,还有一种报文没有提到,那就是Configure-Reject报文,是用来否定响应Configure-Ack报文的。Configure-Reject报文与Configure-Nak报文的区别就在于,Configure-Nak报文是对端对配置选项重新指定参数,而Configure-Reject报文是拒绝选项配置参数。

PPPoE链路断开,也被称为PPPoE的拆链路,是PPPoE链路建立过程的反过程。整个PPPoE拆链路过程的报文交互过程如图3-4所示。首先网络层先发起拆链路,由于NCP是一图3-4 PPPoE拆链路报文交互过程

个协议簇,包含多个协议,但不同的网络层配置协议的拆链接方式相同,由协议发送Terminate-Request请求报文,对端接收到报文后,回复Terminate-Ack确认报文,协议断开。网络层所有的配置协议全部断开,即为网络层拆链接完成。数据链路层拆链接和网络层拆链接相似,PC发送Terminate-Request报文,PPPoE接入控制终端回复Terminate-Ack确认报文,断开数据链路层连接。PPPoE虚拟链路断开,也是由PC发送PADT(PPPoE Active Discovery Terminate)报文,PPPoE接入控制终端返回PADT报文,断开虚链路,并释放分配的PPPoE Session-ID。整个拆链接过程是由上层到下层逐层拆除的。而网络设备一般的实现是网络层忽略不做拆链接,而是直接从数据链路层开始拆链接,网络层在发现数据链路层已经开始拆链接,由本端自动断开网络层连接。当然,如果出现PPPoE虚拟链路断开,则上层链路也会自动断开的。

前面探讨了PPPoE链路建立和拆链路过程,对整个流程有了大体了解。在现实网络中,报文的交互并不是严格按照上面的过程进行的,因为这跟终端和网络部署有关,比如数据报文传输前后到达不一致、等待时长超时、多次发生请求报文或确认报文等,这些情况都是属于PPPoE协议实现中要冗余处理的。而这么多种可能情况,怎么处理更好呢?下面解释一下PPPoE协议实现常用到的状态机,程序会为每一个PPPoE链接创建一个状态机,用于维护PPPoE链接状态。如图3-5所示为PPPoE协议实现常用的状态机。状态机分为6个大状态,只有当上一个状态完成后,才能进入下一个状态,而自循环箭头是用于标识的,如果一直收到当前状态的请求报文,那么状态机就会一直停留在此状态处理请求报文。当然,也存在请求报文在一定时间内,收到的请求报文超过预期,被认定为报文攻击时,或者状态建立失败时会进入拆链接状态。状态机的起始状态为PPPoE断开状态,正常PPPoE链接的建立流程是从PPPoE发现状态完成后,进入配置数据链路层阶段,状态机转入LCP建立状态,在LCP建立状态配置好数据链路层参数以及协商好认证方式后,进入到PPPoE认证状态。这3个状态如果操作失败,都会触发进入拆链接状态。如果PPPoE认证成功,进入到网络层配置阶段,状态机跳转到NCP配置状态,当终端要关闭PPPoE链接时,则状态机被触发进入到拆链接状态。图3-5 PPPoE协议实现的状态机

IPv6环境下,PPPoE链路建立过程报文交互以及PPPoE协议实现的状态机等内容的描述,让我们对PPPoE有了一个笼统的概念,具体IPv6环境下PPPoE链路建立过程与IPv4环境下PPPoE链路建立过程有哪些区别呢?

3.2.2 IPv6CP协议

IPv6环境下PPPoE链路建立过程与IPv4环境下PPPoE链路建立过程没有本质的区别, PPPoE的前两个阶段,PPPoE虚拟链路建立和PPPoE的数据链路建立是完全一致的,网络层配置阶段也是相似的,而唯一的区别就是在网络层配置阶段增加了一个单独的协议用来配置网络层IPv6参数。这个新增协议就是IPv6CP协议,下面简要介绍一下IPv6CP协议的内容。

IPv6CP是负责配置、使能、禁用PPPoE链路两端的终端IPv6协议参数。IPv6CP使用相同的分组交换机制,对等地操作PPPoE链路两端的IPv6协议。IPv6CP运行配置网络层参数的前提条件就是PPPoE已经完成数据链路层配置,如果在PPPoE还没有完成数据链路层配置前,收到IPv6CP报文,将会被直接丢弃。

IPv6CP是新增协议,那么在PPPoE的数据链路层协议LCP的协议字段(Data Link Layer Protocol Field)需要分配一个新的协议编号。IPv6CP的协议编号为0x8057,如图3-6所示为网络上抓取的IPv6CP报文截图,协议标识记录为Protocol:IPv6 Control Protocol(0x8057)。图3-6 网络上抓取的IPv6CP报文截图

1.IPv6CP报文格式

IPv6CP协议的报文格式,如图3-7所示。图3-7 IPv6CP协议报文格式

Code:IPv6CP标识报文类型,占1个字节。填充值1~7,分别代表配置请求报文、配置确认报文、配置更改报文、配置拒绝报文、终断请求报文、终断确认报文、类型拒绝报文(Configure-Request、Configure-Ack、Configure-Nak、Configure-Reject、Terminate-Request、Terminate-Ack and Code-Reject)。如果报文携带的Code值不在这个范围内时,那么将会作为不识别Code处理回复Code-Reject报文。

Identifier:IPv6CP报文编号,用来标识发送的报文序号,占1个字节。为了区别同一类型的报文(Code值相同),多次发送时其Identifier值不同。而回复报文,一般携带的Identifier值为其对应的请求报文Identifier值。

Length:IPv6CP报文长度,单位为Byte,占2字节。长度统计包括IPv6CP报文头的长度,从Code开始到最后一个Option结尾的字节数。

Option:报文选项,一般是携带的配置信息或参数值。一个报文中可以携带一个或者多个Option。为了区别一个报文中携带的多个Option,其Option定义格式包含了Type、Length、Option Content。Option选项格式如图3-8所示。图3-8 IPv6CP Option选项格式

Type:标识不同的Option类型,占1字节。

Length:整个Option长度,单位Byte,占1字节。

Option Content:表示Option具体值。

2.IPv6CP Option

IPv6CP报文携带的Option,用于协商可变的IPv6参数,其Option格式与LCP报文中定义的Option格式相同,但为一组不同的选项内容。在IPv6CP请求报文中,如果协商某一个IPv6参数的Option没有携带,则此IPv6参数缺省值为之前假定值。

IPv6CP Option类型是由IANA分配的,目前,IPv6CP Option类型表只分配了两个。表3-1所示为IANA注册分配的IPv6CP Option类型。表3-1 IANA注册分配的IPv6CP Option类型表

Option Type=1:这个配置选项是用来协商64位的IPv6接口ID,也就是组成IPv6地址的标识主机部分。协商获得的接口ID用于自动配置本地IPv6链路地址。IPv6CP协议配置请求报文中,必须携带这个配置选项,协商后的64位接口ID在PPPoE连接中必须是唯一的。

Option Type=2:这个配置选项是用来协商IPv6报文压缩协议,在PPPoE链路的两个终端确保IPv6报文压缩协议是一致的,否则压缩后的报文将无法识别而丢弃。

3.2.3 PPPoE部署

PPPoE作为宽带接入控制方式的一种,对接入设备的类型并没有限制。目前,比较广泛应用的网络接入方式如ADSL、小区宽带等,事实上,PPPoE接入控制方案也是采纳最广泛的接入控制方式。PPPoE方案的部署拓扑如图3-9所示,Area 1椭圆区域网络拓扑模拟的接入方式是ADSL接入,其中设备DSLAM(Digital Subscriber Line Access Multiplexer,数字用户线路接入复用器)的作用连接用户DSL线路,相当于楼宇交换机角色。Area 2椭圆区域网络拓扑模拟的接入方式是小区宽带接入,其中设备HG(Home Getway,家庭网关)是链接外部网络和家庭网络终端的纽带。Area 3椭圆区域网络拓扑模拟的接入方式是光纤接入,其中设备OLT (Optical Line Terminal,光缆终端设备)是光纤干线终端设备,相当于会聚交换机角色,ONU (Optical Network Unit,光网络单元)的作用是连接用户端光纤线路,相当于楼宇交换机角色,设备CPE(Customer Premise Equipment,用户端设备)的角色相当于HG。Area 4方形区域中都属于接入网络设备。一个城域网中,一般会有多种类型的接入网络,接入网络与城域网的边界有BRAS设备连接,整个城域网终端接入认证服务器AAA Server,一般都是选择RADIUS (Remote Authentication Dial In User Service,远程拨号认证服务系统)服务器。图3-9 PPPoE部署实物网络拓扑图

在PPPoE部署拓扑中,PPPoE接入控制端配置在BRAS设备上,接入认证端一般在PC终端或HG上。PC上一般都会有一个PPPoE认证客户端,用户通过PPPoE认证客户端认证成功后,即可使用网络运营商提供的网络服务了。HG需要配置好PPPoE认证信息后,接入到网络运行商网络中,HG会自动发起认证,认证成功后,HG后的设备即可享有网络服务。

PPPoE部署后,在PPPoE建立链接的报文交互过程,不难发现整个PPPoE建立完连接后,终端设备并没有得到一个完整的全局IPv6地址,而只是完成了IPv6接口ID的协商。那么PPPoE终端如何获得全局IPv6地址的呢?PPPoE终端获取全局IPv6地址有两种方式:一种是PPPoE+ND方式,即PPPoE认证成功后,通过ND方式获取IPv6地址前缀,IPv6地址前缀和PPPoE协商的IPv6接口ID组合成全局IPv6地址;另一种是PPPoE+DHCP方式,即PPPoE认证成功后,通过DHCP方式下发IPv6地址前缀或者全局IPv6地址。

PPPoE+ND方式。在PC终端发起PPPoE认证,PPPoE认证成功链路连接建立后,PC的PPPoE逻辑接口上已经协商完成IPv6接口ID并生成link-local地址,但PPPoE逻辑接口还未获取IPv6公网地址。之后,PC发起NDRS请求,BRAS收到NDRS后,回应NDRA下传IPv6公网前缀,PC收到NDRA后,自动生成IPv6公网地址,完成配置PC的PPPoE逻辑接口IPv6公网地址。而IPv6的DNS地址,PC还未获取到,此时如果PC的PPPoE逻辑接口设定DNS地址自动获取,那么PC会通过DHCPv6协议报文,首先发起Information Request请求报文,BRAS通过DHCPv6的Reply报文回应请求报文,下传DNS地址给CPE,至此,CPE上的PPPoE逻辑接口IPv6协议配置完成。图3-10所示为PPPoE+NDRA方式配置网络层IPv6协议的报文交互过程。图3-10 PPPoE+NDRA方式配置网络层IPv6协议的报文交互过程

PPPoE+DHCPv6方式。在PC终端发起PPPoE认证,PPPoE认证成功链路连接建立后, PC的PPPoE逻辑接口上已经协商完成IPv6接口ID并生成link-local地址,但PPPoE逻辑接口还未获取IPv6公网地址。而后,PC通过DHCPv6协议报文,发送Solicit多播报文请求IPv6前缀及DNS地址,BRAS发送Advertise单播报文响应,PC向BRAS发送Request请求报文, BRAS使用Reply报文确认分配IPv6前缀以及DNS地址。PC根据获取的IPv6前缀生成IPv6公网地址,完成PPPoE逻辑接口IPv6协议配置。PC也可以直接通过DHCPv6获取IPv6地址和DNS地址,完成PPPoE逻辑接口IPv6协议配置,不过,DHCPv6配置的IPv6地址接口ID信息可能与IPv6CP协商的接口ID信息不一致,这是因为有部分操作系统没有采用IETF (Internet Engineering Task Force,Internet工程任务组织)规定的IPv6接口ID的生成算法。图3-11所示为PPPoE+DHCPv6方式配置网络生成IPv6协议的报文交互过程。图3-11 PPPoE+DHCPv6方式配置网络成IPv6协议的报文交互过程

目前,PC终端操作系统还没有出现只支持纯IPv6的协议栈,大多都是同时支持IPv4协议栈和IPv6协议栈,即支持双栈。在双栈情况下PPPoE链路连接建立过程是怎么样的呢?双栈情况下,PC终端PPPoE协议架构都是相似的,其PPPoE链路连接建立过程中报文交互也是相同的。

双栈操作系统的PPPoE链路连接建立过程如图3-12所示,PPPoE在NCP配置阶段,通过IPCP方式给PC的PPPoE逻辑接口配置IPv4地址、DNS及网关信息。PPPoE逻辑接口同时拥有网络层IPv4协议信息和IPv6协议信息,能够同时处理IPv4报文和IPv6报文。图3-12 双栈操作系统配置网络成IPv6协议的报文交互过程

现网部署中,BRAS设备是不充当认证服务器的,用户数据信息统一维护在Radius Server上,其报文交互过程如图3-13所示。PPPoE发起认证时,BRAS设备解析PPPoE认证报文,再通过Radius协议到Radius Server上认证。CPE在进行LCP参数协商时,就已经协商了PPPoE认证参数,图3-13中的报文交互使用的认证方式为CHAP(Challenge Handshake Authentication Protocol,询问握手认证协议)方式,当CPE回复BRAS的Challenge报文,携带用户名和密码信息,BRAS把解析出PPPoE的用户名和密码信息通过Authen-Request报文发送给Radius Server认证,Radius Server认证成功后回复Authen-Accept报文给BRAS,BRAS根据Radius Server认证信息判定PPPoE认证成功。PPPoE认证成功后,无论是根据流量计费还是时长计费,BRAS都会发送Accounting-Start报文给Radius Server,而Radius Server回复Accounting-Response确认报文收到,开始给PPPoE用户上网计费。当PPPoE联网终止时,CPE发起LCP拆链接终止过程,之后再进行PPPoE发现终止过程,BRAS向Radius Server发送Accounting-Stop报文上传计费信息, Radius Server回复Accounting-Response确认报文收到,最后,BRAS释放PPPoE Session-ID资源。图3-13 PPPoE使用Radius Server认证的报文交互过程

3.3 IPoE

PPPoE的单一Session控制方式,比较适合作为单业务模式的接入方式,而PPPoE隧道需要处理报文的封装拆装,对设备软硬件要求比较高。随着宽带用户接入网络的终端设备越来越多,终端设备种类也越来越多,如VoIP、IPTV等流媒体设备及可以联网的智能终端设备等。流媒体设备及智能终端设备不像PC那样内置PPPoE软件,另外,服务宽带家庭的多种业务设备通过单一的PPPoE链路接入网络,会对PPPoE接入控制终端(BRAS)设备造成业务管理维护压力,以及多播复制压力。

在单网线接入家庭、提供多业务服务的情况下,原有的PPPoE宽带接入方式暴露出它的不足。新的接入方式,一种基于“IP用户会话机制”、“IP数据流的分级机制”及“IP会话鉴权和管理机制”的IPoE接入认证方式被提出。IPoE接入方式的核心是基于DHCP方式,结合网络设备的管理控制功能,构建出一套综合接入控制方案。

IPoE是不需要输入用户名密码,对于不喜欢输入密码或者终端不方便输入密码的设备提供便利。同时,支持备份设备的动态切换,即在设备配置一致时从主设备切换到备份设备不掉网。

3.3.1 IPoE接入过程

IPoE是继PPPoE之后,另一个应用比较广泛的接入控制方式,IPoE对接入设备的类型并没有限制,能部署PPPoE接入网络同样也可以部署IPoE接入,只是需要设备软件对IPoE涉及的协议提供支持。在IPv6环境下,IPoE接入方式与IPv4环境下的IPoE在原理上没有差异,只是IPv6下的IPoE是基于DHCPv6方式的。采用IPoE接入方式部署拓扑网络可以参考PPPoE的拓扑网络(见图3-9),其中BRAS设备在IPoE拓扑网络中被称为BNG。IPoE接入方式一般由终端设备发起DHCPv6请求,由BNG作为DHCPv6 Relay,先到AAA Server进行终端接入认证,认证通过后,再到DHCPv6 Server获取IPv6配置信息,返回给终端IPv6配置信息。

IPoE接入方式的处理过程可以分为3个部分:①终端与部署在BNG上的DHCPv6 Relay之间的DHCPv6报文交互;②BNG与Radius Server之间的认证鉴权过程;③BNG上的DHCPv6 Relay与DHCPv6 Server之间的DHCPv6报文交互。这3部分在整个IPoE接入方式的报文交互过程如图3-14所示。图3-14 IPoE接入方式的报文交互过程

在图3-14中,IPoE接入方式的报文交互过程首先由终端PC发送三层多播Solicit报文,报文中携带用户MAC地址和服务类型,BNG上配置的DHCPv6 Relay在收到Solicit报文后,根据报文中携带的MAC地址和服务类型,生成IP Session标识,再由BNG的AAA功能模块,发送携带有IP Session的Authen-Request认证请求报文给Radius Server进行认证;Radius Server认证成功后,返回Authen-Accept认证成功报文给BNG的AAA功能模块, AAA把认证成功信息通告给DHCPv6 Relay,DHCPv6 Relay转发Solicit报文给DHCPv6 Server,DHCPv6 Server返回Advertise响应报文给DHCPv6 Relay,DHCPv6 Relay再转发Advertise报文给PC终端;PC终端发送Request请求报文,请求IPv6的地址及DNS配置信息,DHCPv6 Relay再转发Request报文给DHCPv6 Server,DHCPv6 Server分配IPv6地址或IPv6地址前缀,及填充DNS选项,通过Reply报文携带返回给DHCPv6 Relay,DHCPv6 Relay转发Reply报文给PC终端,至此用户完成DHCPv6动态配置,并能够享用提供的业务服务。

当然,在这个过程中,如果PC终端设备为非法用户则不能享用业务的服务,在PC发起Solicit请求后,DHCPv6 Relay生成IP Session标识,在AAA功能模块,发起Radius认证的时候,Radius Server会回复Authen-Reject报文,那么AAA功能模块会通告DHCPv6 Relay此PC终端的IP Session无效,那么DHCPv6 Relay就不会转发Solicit报文给DHCPv6 Server,也不会响应Solicit报文。

3.3.2 IP Session

DHCPv6 Relay是根据用户的服务类型和终端设备标识来生成IP Session,那么DHCPv6报文中,是通过什么来区分服务类型和携带终端标识的呢?DHCPv6报文中携带有多个Option,不同的Option所表示的含义不同,其中Client Identifier Option表示终端设备标识, Vendor Class Option表示服务类别。

在整个DHCPv6报文交互过程中,DHCPv6报文中携带Client Identifier Option和Vendor Class Option信息。图3-15所示为DHCPv6的Solicit报文抓包截图,Client Identifier Option携带的是终端设备的硬件以太网卡设备的MAC地址,Vendor Class Option携带的是终端设备更多的细节信息。图3-15 DHCPv6的Solicit报文抓包截图

1.CIient Identifier Option

Client Identifier Option作为DHCPv6 Options之一,遵守DHCPv6报文定义的DHCPv6 Option格式,其格式如图3-16所示。图3-16 Client Identifier Option格式

Option_ClientID:为Client Identifier标识,值为1。

Option_Length:表示整条Option所占字节数,包含Option_ClientID和Option_Length长度。

DUID:DHCPv6终端的唯一标识(DHCPv6 Unique Identifier)。每一个DHCPv6客户端和服务器都有一个DUID。此处的DUID是客户端DUID,DHCPv6服务器使用这个DUID来标识客户端,关联客户端的配置参数选择。终端系统重启后,终端的DUID值不变。

为了保证每一个网络终端所生成的DHCPv6 DUID是全球唯一的,DUID生成方法定义如下,DUID由两部分组成,Type和实际的标识(Actual Identifier)。这两部分的总字节数不超过128字节,如图3-17所示。图3-17 DUID组成结构

Type为固定2字节长度,目前定义3个类型。

Type=1,表示实际的标识(Actual Identifier)是基于链路地址加时间构成。其DUID格式如图3-18所示,Hardware Type标识终端设备硬件类型,Time为DUID创建时间,Link_Layer Addres为链路地址。图3-18 Type=1的DUID格式

Type=2,表示实际的标识(Actual Identifier)是由设备生产商分配。其DUID格式如图3-19所示,Enterprise_Number为设备生产商在IANA注册的编号,Identifier为设备生产商分配给硬件的唯一标识。图3-19 Type=2的DUID格式

Type=3,表示实际的标识(Actual Identifier)是基于链路地址构成。Hardware Type标识终端设备硬件类型,Link_Layer Addres为链路地址,如图3-20所示。图3-20 Type=3的DUID格式

在DHCPv6 Server收到报文后,根据客户端携带的DUID来标识用户,区分客户端是使用整个DUID数值进行比较。

2.Vendor CIass Option

Vendor Class Option用来携带更多的设备生产商信息,以及运行的硬件参数信息,像操作系统信息和内存信息等。Vendor Class Option的格式如图3-21所示。图3-21 Vendor Class Option格式

Option_Vendor_Class:为Vendor Class Option标识,值为16。

Option_Length:表示整条Option所占字节数,包含Option_Vendor_Class和Option_Length长度。

Enterprise_Number:为设备生产商在IANA注册的编号,不同的设备生产商编号不同。

Vendor_Class_Data:运行的设备参数信息,这部分数据为不透明数据,不同的厂家填充的信息不同,一般都是携带硬件运行信息,如操作系统信息、内存信息等。

3.3.3 IPoE部署

IPoE作为多业务服务接入方式,以及服务于智能终端和高速网络设备的接入方式,被网络运营商所接纳和采用,IPoE典型的实物网络部署如图3-22所示,其中MAN为城域网, BNG为宽带网络网关,一般由路由器承担,OLT光缆终端设备属于光网络传输设备,多部署在网络会聚节点,ONU光节点也属于光网络传输设备,多部署在网络接入节点。IPTV为网络电视,不同于普通电视,它是通过网络来传输视频信号的,VoIP为网络电话,是在网络上通过数字信号来传输音频信息。图3-22 IPoE部署实物网络拓扑图

IPoE接入方式与PPPoE接入方式比较有几大优势。对终端设备软硬件要求低,终端设备只需要协议栈支持DHCPv6协议即可,不需要客户终端软件,在接入网络时不需要终端输入用户名和密码。终端不需要对传输报文进行额外处理封装,PPPoE接入方式需要对传输报文封装PPP报文头。终端在闲置时不占用网络资源,PPPoE认证终端,在闲置时会占用PPP Session信息。IPoE接入方式能够缓解BNG的压力,多播复制点可以从BNG下移到DSLAM、OLT等设备。PPPoE由于属于隧道类型协议,多播复制点在PPPoE接入控制设备,且PPPoE接入控制设备在对用户终端报文转发时,需要进行拆包封包处理。IPoE支持用户冗余处理, IPoE报文转发中不需要处理PPP头信息,非常容易做到跨机箱的用户Session的保护,当一个机箱断电时,所有IPoE的状态信息被动态备份到另外一台设备,不需要用户进行重新拨号,而PPPoE报文都封装有PPP报文头,无法做到有效的跨机箱的用户冗余保护。

3.4 IPv6接入方式综合部署

在网络部署中,接入方式并不是PPPoE和IPoE分开部署的,而是融合在一起进行综合部署的。家庭单网线接入多种业务终端时,不同终端走不同的业务管理系统,使用不同的接入方式,下面探讨网络部署中PPPoE和IPoE综合部署的情况。

图3-23所示为IPv6接入方式综合部署物理拓扑图,其中同一个家庭接入终端、多个业务终端共同使用PPPoE方式,或者使用不同的接入方式,而PPPoE和IPoE接入控制部分在同一台设备或者在不同设备。这几种情况都在图3-23中使用椭圆区域划分出来,接下来对上面的区域进行逐一介绍。图3-23 IPv6接入方式综合部署物理拓扑图(1)Area 1:Modem使用PPPoE接入方式

由Modem发起PPPoE认证,获取IPv6和IPv4地址配置为家庭网关,BRAS上配置认证服务器为Radius Server,PPPoE认证成功后,PC通过ND方式获取IPv6前缀地址生成全局IPv6地址,DHCP方式获取IPv4地址,这样PC就可以访问网络资源了。而对于VoIP设备,使用IPoE方式认证,VoIP发送DHCPv6报文,Modem透传DHCPv6报文给BRAS(BNG)设备,BRAS(BNG)配置DHCPv6 Relay,IPoE使用Radius Server认证VoIP终端,再由DHCPv6 Server给VoIP终端分配地址。(2)Area 2:HG为网桥型家庭网关设备

HG为网桥型家庭网关设备,透传三层报文。PC发起PPPoE认证获取IPv6和IPv4地址,使用获取的地址访问网络资源。IPTV终端使用IPoE接入方式,通过DHCPv6方式认证获取IPv6地址或前缀,IPoE和PPPoE认证都是在BRAS(BNG)配置Radius Server认证,IPoE接入方式,BRAS(BNG)配置DHCPv6 Relay方式,通过DHCPv6 Server给IPTV分配IPv6地址或前缀。(3)Area 3:按照业务类型采用多边沿接入网络

OLT双挂BRAS(BNG)和SR(BNG)设备。不同的业务类型在二层使用不同的广播域,OLT按照业务类型配置报文转发策略,对于PPPoE报文送给BRAS(BNG)设备处理,对于DHCPv6报文送给SR(BNG)处理。BRAS(BNG)配置PPPoE认证为Radius Server认证。SR(BNG)配置DHCPv6 Relay,IPoE认证使用Radius Server认证。CPE设备为网桥型家庭网关设备,透传三层报文。PC通过PPPoE认证获取IPv6和IPv4地址,使用获取的地址访问网络。IPTV和VoIP使用IPoE接入方式,通过DHCPv6方式认证获取地址,访问流媒体网络资源。(4)Area 4:移动接入网络

PDSN(Packet Data Serving Node)是CDMA移动网络中处理分组数据业务的节点,相当于固网中的BNG的角色,具备无线终端用户接入控制及简单的移动IP分组等功能。无线接入网(Radio Access Network,RAN),相当于固网中的接入网络。PCF(Packet Control Function)是无线域和分组域接口设备。移动宽带终端设备通过PPP接入控制方式接入到无线网络中。无线网络中的PPP接入控制方式和PPPoE接入控制方式的不同之处在于物理承载技术的不同,一个是采用无线网络技术,另一个是采用有线网络,但其采用的PPP协议簇和协议字段都是相同的。关于移动网络技术,后续章节会展开讨论。

在综合网络部署中,PPPoE和IPoE接入控制技术常常混合使用,即一个综合网络中既有PPPoE接入控制的业务,又有IPoE接入控制的业务,而且这两种业务可能叠加在相同的接入网络中。也存在同一种业务,在综合网络的不同区域,采用不同的接入控制方式,PPPoE或IPoE,而业务服务控制服务器采用同一套服务器,如IPTV业务等。在移动接入网络中,采用的PPP接入控制方式和PPPoE报文格式及报文交互流程是相同的,只不过PPPoE是以太网上的PPP接入控制方式。在一个大型的综合网络中,宽带业务把PPPoE和IPoE控制点部署在BRAS(又称BNG)上,而计费认证服务器会采用同一套Radius Server服务器组,甚至移动宽带业务也会使用这套Radius Server服务器组。

第4章 IPv6路由协议

4.1 路由协议的演进

IPv6的编址方式和IPv4相比有了很大的变化,地址长度也不一样,因此寻址方式也需要有所变化。而路由协议作为寻址方式的重要一环,也受到了相应的影响。

从主流路由协议看来,IPv6单播路由协议的实现和IPv4类似,有些是在原有协议上做了简单扩展(如ISISv6、BGP4+),有些则完全是新的版本(如RIPng、OSPFv3)。

目前通信网络技术发展非常迅速,其中骨干网、城域网发展的趋势是网络的吞吐量越来越大,带宽要求越来越宽,从而对组成骨干网、城域网的路由器的要求也越来越高。用通用的评价指标来描述,就是希望在路由器上实现的路由协议收敛时间能更短、支持用户能更多、扩展性更强,但能耗最好能更少。

因此,为了迎合用户需求,路由器正在进行以下方向的演进。

①路由协议算法在不断地演进。从IPv4到IPv6的路由协议,不仅仅是增加了对IPv6的支持,有些协议还为了提高性能作了比较大的改进,并形成了新的标准。路由协议算法演进是路由器演进的核心。

②路由器的硬件性能越来越强。同时,为了能节省成本,架构设计也越来越灵活,能根据不同场景进行细分,配置不同的板卡。

③为了提高组网性能,组网技术也在优化。网络架构的成熟也反过来促进对设备的改良。

经过多年的发展,目前IPv6路由协议已经基本定型。相对于IPv4版本,主流路由协议IPv6版本进行了如下改进。

1.RIPng

下一代RIP协议(简称RIPng)是对原来IPv4网络中RIP-2协议的扩展。大多数RIP的概念和算法都可以用于RIPng。

为了在IPv6网络中应用,RIPng对原有的RIP协议进行了修改。

UDP端口号:使用UDP的521端口发送和接收路由信息。

多播地址:使用FF02::9作为链路本地范围内的RIPng路由器多播地址。

路由前缀:使用128比特的IPv6地址作为路由前缀。下一跳地址:使用128比特的IPv6地址。

2.OSPFv3

OSPFv3是OSPF版本3的简称,主要提供对IPv6的支持,遵循的标准为RFC 2740(OSPF for IPv6),并在RFC 5340做了进一步扩展。与OSPFv2相比,OSPFv3除了提供对IPv6的支持外,还充分考虑了协议的网络无关性以及可扩展性,进一步理顺了拓扑与路由的关系,使得OSPF的协议逻辑更加简单清晰,大大提高了OSPF的可扩展性。

OSPFv3继承了OSPFv2的机制和算法,使用相同的基本数据包类型,如Hello、DBD、LSR、LSU和LSA等,邻居发现和邻居形成机制完全相同,支持相同的LSA泛洪和衰老机制。

OSPFv3和OSPFv2的不同主要有以下几方面。

修改了LSA的种类和格式,使其支持发布IPv6路由信息。

修改部分协议流程,使其独立于网络协议,大大提高了可扩展性。

主要的修改包括用Router-ID来标识邻居,使用链路本地(Link-local)地址来发现邻居等,使得拓扑本身独立于网络协议,以便于未来扩展。

OSPFv3在LSA中将拓扑与路由信息相分离,一、二类LSA中不再携带路由信息,而只是单纯地描述拓扑信息,另外用新增的八、九类LSA结合原有的三、五、七类LSA来发布路由前缀信息。

提高了协议适应性。

通过引入LSA扩散范围的概念,进一步明确了对未知LSA的处理,使得协议可以在不识别LSA的情况下根据需要做出恰当处理,大大提高了协议对未来扩展的适应性。

3.IS-ISv6

IS-IS是由国际标准化组织ISO为其无连接网络协议CLNP发布的动态路由协议。同BGP一样,IS-IS可以同时承载IPv4和IPv6的路由信息。

为了使IS-IS支持IPv4,IETF在RFC 1195中对IS-IS协议进行了扩展,命名为集成化IS-IS (Integrated IS-IS)或双IS-IS(Dual IS-IS)。这个新的IS-IS协议可同时应用在TCP/IP和OSI环境中。在此基础上,为了有效地支持IPv6,IETF在draft-ietf-isis-ipv6-05.txt中对IS-IS进行了进一步扩展,主要是新添加了支持IPv6路由信息的两个TLV(Type-Length-Values)和一个新的NLP ID(Network Layer Protocol Identifier)。

TLV是在LSP(Link State PDUs)中的一个可变长结构,新增以下两个TLV。

IPv6 Reachability(TLV type 236):类型值为236(0xEC),通过定义路由信息前缀、度量值等信息来说明网络的可达性。

IPv6 Interface Address(TLV type 232):类型值为232(0xE8),它相当于IPv4中的“IP Interface Address”TLV,只不过把原来的32比特的IPv4地址改为128比特的IPv6地址。

NLP ID是标识IS-IS支持何种网络层协议的一个8比特字段,IPv6对应的NLP ID值为142(0x8E)。如果IS-IS路由器支持IPv6,那么它必须在Hello报文中携带该值向邻居通告它支持IPv6。

4.BGP4+

为了提供对多种网络层协议的支持,IETF对BGP-4进行了扩展,形成BGP4+。目前的BGP4+标准是RFC 2858(Multiprotocol Extensions for BGP-4,BGP-4多协议扩展)。

为了实现对IPv6协议的支持,BGP4+将IPv6网络层协议的信息反映到NLRI(Network Layer Reachable Information)及Next_Hop属性中,引入两个NLRI属性。

MP_REACH_NLRI:Multiprotocol Reachable NLRI,多协议可达NLRI。用于发布可达路由及下一跳信息。

MP_UNREACH_NLRI:Multiprotocol Unreachable NLRI,多协议不可达NLRI。用于撤销不可达路由。

BGP4+中的Next_Hop属性用IPv6地址来表示,可以是IPv6全球单播地址或者下一跳的链路本地地址。

BGP4+利用BGP的多协议扩展属性来达到在IPv6网络中应用的目的,BGP协议原有的消息机制和路由机制并没有改变。

目前IPv6网域内路由协议(IGP)主要采用IS-ISv6和OSPFv3两种,这两者都属于链路状态路由协议类型。

而BGP4+是目前被所有运营商广泛使用的域间路由协议(EGP),BGP4+属于距离矢量路由协议类型。

下面重点介绍上述常用的几个IPv6 IGP和EGP协议,以及实际使用中需要注意的一些问题。

4.2 IGP路由选择协议——OSPF

4.2.1 OSPF概述

开放式最短路径优先(Open Shortest Path First,OSPF)是对链路状态路由协议的一种实现,隶属内部网关协议(IGP),故运用于自治系统内部。著名的迪克斯加算法(Dijkstra)被用来计算最短路径树。它使用“代价(Cost)”作为路由度量。链路状态数据库(LSDB)用来保存当前网络拓扑结构,它在同一区域中的所有路由器上是相同的。OSPF分为OSPFv2和OSPFv3两个版本,其中OSPFv2用于IPv4网络,OSPFv3用于IPv6网络。OSPFv2是由RFC 2328定义的,OSPFv3是由RFC 5340定义的。

OSPF协议是大中型网络上使用最为广泛的IGP(Interior Gateway Protocol)协议。节点在建立邻接、接受链路状态通告(Link-State Advertisement,LSA)时,可以通过MD5或者明文进行安全验证。

OSPF提出了“区域(Area)”的概念,一个网络可以由单一区域或者多个区域组成。其中,一个特别的区域被称为骨干区域(Backbone Area),该区域是整个OSPF网络的核心区域,并且所有其他的区域都与之直接连接。所有的内部路由都通过骨干区域传递到其他非骨干区域。所有的区域都必须直接连接到骨干区域,如果不能建立直接连接,那么可以通过虚拟链路(Virtual-link)和骨干区域建立虚拟连接。

同一个广播域(Broadcast Domain)的路由器或者一个点对点(Point To Point)连接的两端的路由器,在发现彼此的时候,建立邻接(Adjacencies)。多路访问网络以及非广播多路访问网络的路由器会选举指定路由器(Designated Router,DR)和备份指定路由器(Backup Designated Router,BDR),DR和BDR作为网络的中心负责路由器之间的信息交换从而降低了网络中的信息流量。OSPF协议同时使用单播(Unicast)和多播(Multicast)来发送Hello包和链路状态更新(Link State Updates),使用的多播地址为224.0.0.5和224.0.0.6。与RIP和BGP不同的是,OSPF协议不使用TCP或者UDP协议而是承载在IP协议之上,IP协议号为89,工作在OSI模型的传输层。

4.2.2 OSPFv3与OSPFv2的区别

OSPFv3(RFC 2740)与OSPFv2(RFC 2328)相比在原理上并没有根本的区别,OSPFv3仍采用链路状态LSA数据库,并保持邻接路由器之间的同步。但由于从IPv4到IPv6的地址长度的变化,为了支持IPv6地址格式,OSPFv3对OSPFv2协议进行了许多修改。从路由协议标准化进程看,OSPFv3协议已较为成熟,已有定型的RFC 2740协议。OSPFv3提高了通用性,使网络可以适应不断变化的要求。这使复杂的网络得以简化,并且它采取了一些增强措施以保证升级方便地进行,OSPFv3还进行了优化并且安全性也得到了提高。

OSPFv3的主要目的是“开发一种独立于任何具体网络层的路由协议”。为实现这一目的, OSPFv3的内部路由器信息被重新进行了设计。与过去的版本不同,OSPFv3不向位于数据包和链路状态公告(LSA)起始位置的报头插入基于IP的数据。OSPFv3利用独立于网络协议的信息来执行过去需要IP报头数据的关键任务,如识别发布路由数据的LSA。

除了改变报头数据外,OSPFv3还对LSA所发挥的作用进行了重新定义。在OSPFv3中,公告网络拓扑和IPv6数据的任务被分配到新的和已有的LSA中。

OSPFv3增加了多种可选功能,如多播OSPFv3,以实现通用性。为了达到这一目的, OSPFv3扩展了网络设备用来公告使能的功能选项数据域。多数OSPFv3路由器间信息中都包含选项域,运行OSPFv3的设备可以支持多达24种可选功能,而以前的版本只能支持8种功能。

为了简化复杂的容错网络的建设,OSPFv3引入了Instance ID和R-bit选项。作为每个OSPFv3包头的一个组件,Instance ID不再依赖于过去需要的复杂的认证方案或访问清单,就可以控制共享物理网络和OSPF域的路由器之间的通信。除了Instance ID外,OSPFv3还可以通过R-bit使服务器最终系统具有有效的冗余性。

OSPFv3与过去的协议的不同之处在于它通过提供非本身固有的安全性来简化消息的结构。通过利用IPv6包的安全子包头的集成系统,OSPFv3消息可以被认证和加密,而这在以前是需要增加独立复杂的协议才能实现的功能。

OSPFv3提供了更强的功能,并且它具有很大的通用性,从而可以很方便地支持新型网络协议。新的特性简化了网络设备和运行,在使用OSPFv3的情况下,升级将不再那么麻烦。

4.3 IGP路由选择协议——ISISv6

4.3.1 ISIS概述

中间系统到中间系统(Intermediate System to Intermediate System,IS-IS,读作“i-sys”)是一种内部网关协议,是电信运营商普遍采用的内部网关协议之一。标准的IS-IS协议是由国际标准化组织制定的ISO/IEC 10589—2002所规范的。但是标准的IS-IS协议是为无连接网络服务(CLNS)设计的,并不直接适合于IP网络,因此互联网工程任务组制定了可以适用于IP网络的集成IS-IS协议,称为集成IS-IS,它由RFC 1195等RFC文档所规范。由于IP网络的普遍存在,一般所称的IS-IS协议,通常是指集成IS-IS协议。

1985年,DEC制定了作为DECnet路由协议的DECnet Phase V Routing,这是IS-IS协议的前身。1988年,国际标准化组织将其接纳为国际标准,并改为现名。1990年2月,互联网工程任务组发布RFC 1142,将其接纳为互联网标准。同年12月,互联网工程任务组又发布了使IS-IS协议能够适用于TCP/IP网络的技术规范RFC 1195。

1991年,思科公司开始在其路由器的操作系统IOS中提供IS-IS协议的支持,这意味着IS-IS协议初步具备在TCP/IP环境下实施的条件。

1995年,开始有ISP尝试在商用网络中使用IS-IS协议。随着使用者的增多,IS-IS协议已经成为最常使用的路由协议之一。

1999年2月,IS-IS流量工程(IS-IS-TE)作为互联网草案被提出。2004年6月,IS-IS流量工程被接纳为互联网标准,编号RFC 3784。2008年10月,随着新的IS-IS流量工程标准RFC 5305的颁布,原标准RFC 3784被同时废止。

2000年1月1日,对IPv6的支持作为互联网草案被提出。经过多番修改,在IS-IS协议中支持IPv6的标准在2008年10月被正式接纳为互联网标准,编号RFC 5308。

IS-IS协议是一种基于链路状态算法的路由协议,这意味着作为中间系统的路由器,必须完全知晓自己所在区域内部所有其他的路由器和它们的链路状态。IS-IS协议通过发送LSP (链路状态协议数据单元)进行路由信息通告,通过Hello PDU发现邻居和建立邻接,通过SNP(序号协议数据单元)确保路由器持有最新、有效的LSP。路由器在接收到LSP的基础上,通过SPF(最短路径优先)算法最终确定路由表。

IS-IS协议把路由器分为3种:L1路由器、L2路由器和L1/L2路由器。其中,L1路由器是为端系统(比如个人电脑)直接提供服务的路由器,L2路由器是骨干路由器。L1/L2路由器是向L1路由器隐藏骨干区域的细节,并负责将由L1路由器组成的非骨干区域的数据请求转发到由L2路由器组成的骨干区域。

和OSPF协议直接使用IP地址标识路由器不同,IS-IS协议使用OSI的地址方案NASP标识路由器节点。因此,纯粹的IS-IS协议并不直接适合于IP网络;而集成IS-IS能够实现IP路由的关键,在于RFC 1195引入了携带IP路由信息的CLV字段。

ISIS通过TLV提供了众多的扩展属性。

1.3方握手

OSPF可以根据对方路由器发送的报文中含有自己的RID确立连接关系建立。ISIS一样,它使用IS邻居TLV来实现。在LAN链路中,IS-IS路由器通过收到的LAN hello报文中的IS邻居TLV来查看自己的SysID是否在对方发来的邻居TLV列表中,从而确认双向通信状态已经确立。但是对于点到点链路,Hello数据报不携带IS邻居TLV。所以只能建立双向握手,而且要求点到点传输介质是可靠的。

但在现实中,点到点链路通常不可靠,所以ISIS在扩展的时候通过TLV实现了一种3方握手的机制,来确保双向连接的可靠性。

2.扩展度量

在MPLS中,TE是一个非常重要的功能。在MPLS网络中的数据包的一些子集能够依赖用户指定的约束条件以不同的方式进行转发,也就是说可以不使用IGP那样的总是选择单一最短路径的方式进行转发,这样可以在同一个网络上对不同的业务流,进行区分传送,例如确保时延敏感的流使用最短路径,其他数据流使用较长路径等。

ISIS的良好TLV特性,使得它对MPLS的支持非常容易。首先,流量工程的一个关键是需要使用比度量更为详细的接口参数进行通信,使用于共享路径设计的IGP协议和用于共享这些TE接口参数的接口信息变得有意义。

ISIS通过两种新的TLV来支持:扩展的IS可达性;

扩展的IP可达性。

当启用新的扩展度量后,扩展的IS可达性TLV使用32位的度量字段,修复了以前6位字段不能使用在大型网络中的缺点。同时,扩展的IS可达性TLV替代了LSP中的类型2的IS邻居TLV。而且它还允许TLV的嵌套,这样对于开发人员实现新的功能十分方便。

扩展IP可达性TLV用于代替IP内部可达性信息和IP外部可达性信息TLV,它可以出现在L1和L2的LSP中,同样它也采用一个32位的Metric。同时也支持子TLV功能,并通过子TLV实现了流量工程。在IOS中,仅需要使用metric-style wide来实现扩展度量的支持。

4.3.2 ISISv6与ISISv4的区别

ISIS也是一个基于SPF的路由协议,随着IPv6的发展,ISIS也开始支持IPv6。由于ISIS拥有TLV字段,而且ISIS对不认识的TLV作忽略处理,故升级支持IPv6非常容易。ISIS路由协议现通常用在高端的ISP和运营商网络中实施,因为L1/L2架构相对于OSPF的区域灵活很多,同时,CLNS协议可以对区域进行平滑割接。由于TLV扩展方便, MPLS等众多新特性在ISIS中实施更为便利,是否支持ISIS,已经成为路由设备提供商是否能够冲击高端领域的一个象征。图4-1 IPv6可达性TLV

ISIS通过加入两种新的TLV支持IPv6,它们分别是IPv6可达性TLV和IPv6接口地址TLV。

IPv6可达性TLV如图4-1所示。

它用于同时通告内部和外部的前缀信息,同时包含了一个32位的Metric字段支持扩展的Metric。对于每一个前缀都有一个32位的Metric,同时从L2向L1路由泄露的Up/Down位也被支持。同时X位支持了内部始发和外部始发的选项。S位表明了子TLV是否存在。

IPv6接口地址TLV如图4-2所示。图4-2 IPv6接口地址TLV

和Type=132的IPv4接口地址TLV相似,并且可以同时被Hello数据包和LSP数据包携带。被Hello包携带时使用链路本地地址,被LSP携带时通告的地址是地区或全球地址。

ISISv6通过在IS-IS数据包(Hello、LSP和SNP)中引入上述可变长度的数据域(TLV),从而

使其支持IPv6路由功能,这一设计只需要对IS-IS路由协议进行少量的修改即可使它支持IPv6。ISISv6只增加了有关IPv6的TLV,在邻居数据库、拓扑数据库的建立和维护上基本保持了ISO 10589和RFC l195的模式。因此,CLNS IPv4和IPv6具有相同的拓扑结构。也就是说,ISISv6要求IPv4和IPv6的网络是完全重合的。我们将这种实现称为ISIS for IPv6单一拓扑模式。

很快人们认识到单一拓扑模式对IPv4和IPv6网络完全重合的要求限制了IPv6网络的部署。显然IPv6的规模和覆盖范围都将大于老一代IPv4网络,部分网络将只具有IPv6属性,例如,部分网络只有IPv6地址而没有IPv4地址。这时ISIS for IPv6单一拓扑模式就可能导致一些IPv4的数据报文错误地被转发到这部分IPv6网络,造成路由的混乱和麻烦,无法满足IPv4、IPv6不同扩展范围的需要。ISIS for IPv6多重拓扑模式是针对这一问题的解决方案,它通过使用IPv4、IPv6不同的拓扑去除了两个网络必须一致的限制。多重拓扑模式为IPv4和IPv6网络建立不同的拓扑数据库,分别进行spf最短路径优先算法的计算,为IPv4和IPv6提供相互独立的路由子系统,使IPv6网络的建设摆脱IPv4的限制,为IPv6网络的成长打开了发展空间。

多拓扑结构(MT)中,每一个拓扑自行运行一个SPF计算进程。对于不同的拓扑,通过MT ID来识别,一个接口可以拥有多个MT ID。用于MT ISIS的多拓扑ID如表4-1所示。表4-1 IS-IS MT ID列表

ISIS通过4种TLV支持多拓扑结构:

多拓扑中间系统;

多拓扑;

多拓扑可达IPv4前缀;

多拓扑可达IPv6前缀。

在多拓扑结构实现的过程中,对于一个点到点链路,可以通过识别对方的MT ID来决定是否建立邻接关系,但在广播型链路上,即使没有任何共同的MT ID,邻居之间也会形成一个邻接关系,这是因为DR选举独立于所有的扩展特性。

多拓扑TLV不仅Hello报文可以携带,也可以用LSP携带,如图4-3所示。图4-3 LSP携带的多拓扑TLV

对于多拓扑中间系统TLV,格式如图4-4所示。多拓扑可达IPv6前缀TLV格式如图4-5所示。图4-4 多拓扑中间系统TLV图4-5 多拓扑可达IPv6前缀TLV

4.4 EGP路由选择协议——BGP4+

4.4.1 BGP概述

边界网关协议(BGP)是一种外部网关协议(EGP),用于不同自治域路由器之间交换路由信息。BGP维护一个包括了每个目标网络的网络可达性信息的数据库,并用于与其他的BGP系统进行交换。BGP会使用这些交换的网络可达信息来构造其所在自治域的连接图,从而在自治域层面就可以消除路由环路并实施相关的路由策略。BGP是老EGP协议的取代品。对于BGP原始定义来自于RFC 1267、RFC 1268这两个RFC文档。1993年RFC 1467定义了第4版的BGP(BGP4),以支持CIDR。

多协议的BGP(MBGP)扩展使BGP能够支持IPv6。MBGP定义了两种属性:MP_REACH_NLRI和MP_UNREACH_NLRI,用于交换IPv6的可达信息。MBGP在Network Layer Reachability Information(NLRI)Update报文中携带这两种属性。

BGP允许路由策略。可以使用路由策略在到达一个目标的多个路径中选择合适的路径,还可以用路由策略来控制路由信息的再发布。

BGP4增加了对无类域间路由选择(CIDR)的支持。从而可以减少路由表的大小。BGP 4还支持路由聚合,包括AS路径的聚合。

BGP本质上是一种距离向量协议。BGP使用TCP作为传输协议,并使用179端口来建立连接。这意味着BGP不需要再额外实现分片、重传、确认、排序等功能。

在开始建立连接时,BGP peer之间互相交换完整的路由表,这些路由表可以相当大,交换所需的流量会比较大,时间会比较长。然而,在之后的网络运行过程中,只有变化的信息才会进行交换,这使得长时间运行的BGP进程效率得以提高。

BGP路由信息的基本单位是BGP路径。所谓的路径其实是不同的路径属性标记,其中最重要的是AS_PATH(AS路径)和NEXT_HOP(下一跳)。

BGP4的最重要职能之一,是利用AS_PATH属性进行自治系统级的环路检测。为了支持路径聚合,并进一步简化路由通告的过程,AS_PATH属性的语法变得较为复杂。为了简化,我们可以把AS_PATH看成是一个为达到某个目标网络可选的自治系统的列表。为避免环路,就必须在从相邻自治系统中收到的AS_PATH中检测是否包括自己的AS号。

每次BGP路径公告报文穿过一个自治系统的边界时,报文中的NEXT_HOP属性就被更改为该自治系统边界路由器的IP地址。然而,当一个BGP路径公告报文在属于同一个自治系统的两个BGP speakers之间传递时,NEXT_HOP属性是没有变化的。因此,BGP的NEXT_HOP始终是下一跳自治系统的第一个边界路由器的IP地址,即使这个地址实际上可能在几跳之外。

AS的内部路由选择协议负责计算到达BGP的NEXT_HOP的域内路由。这导致了BGP需要分为内部BGP(IBGP)进程和外部BGP(EBGP)进程。IBGP进程是指同一个自治域内两个BGP路由器之间会话的进程,EBGP是指位于不同自治域的两个路由器之间会话的进程。NEXT_HOP只有在EBGP进程中才会改变,而在IBGP进程中是原封不动的。

这种设计的两个最重要后果是,在自治域内的BGP会话必须达到fully meshed网状拓扑结构,以及需要域内路由选择协议必须能达到超越自治域边界的下一跳。由于BGP协议不会从一个IBGP进程中继路由协议报文到另一个IBGP进程,而只会从一个EBGP进程中继到另一个IBGP进程或者其他EBGP进程,所以BGP speakers必须形成fully meshed网状拓扑结构。当BGP路由器从相邻AS中收到一条BGP路由更新信息时,它必须直接传达到域内所有其他的BGP speakers。

另外,由于NEXT_HOP包括了下一跳自治系统的路由器接口IP地址,也就是说这个IP地址是用于实现路由寻址的,因此域内部路由选择协议必须能够路由到达这个地址。这意味着,内部路由表都必须包括超出AS边界一跳的路由记录。

BGP协议的实现没有要求必须要使用哪种算法来进行路径选择。因为,BGP的RFC中只声明了路径计算要遵循的某些原则,但没有确定具体的算法。

4.4.2 BGP4+与BGP4的区别

为了提供对多种网络层协议的支持,IETF对BGP4进行了扩展,形成BGP4+。BGP4+由以下规范予以定义。

RFC 1771,A Border Gateway Protocol 4 (BGP-4)

RFC 1772,Application of the Border Gateway Protocol in the Internet

RFC 1966,BGP Route Reflection:An Alternative to Full-Mesh IBGP

RFC 1997,BGP Communities Attribute

RFC 2270,Using a Dedicated AS for Sites Homed to a Single Provider

RFC 2283,Multiprotocol Extensions for BGP-4

RFC 2385,Protection of BGP Sessions via the TCP MD5 Signature Option

RFC 2439,BGP Route Flap Damping

RFC 2545,Use of BGP-4 Multiprotocol Extensions for IPv6 Inter-Domain Routing

RFC 2796,BGP Route Reflection

RFC 3065,Autonomous System Confederations for BGP

Capabilities Negotiation with BGP4,IETF draft draft-ietf-idr-cap-neg-01

BGP Extended Communities Attribute,IETF draft-ramachandra-bgp-ext-communities-04.txt

BGP4+Peering Using IPv6 Link-local Address,draft-kato-bgp-ipv6-link-local-00.txt

IPv6利用BGP的多协议扩展属性,达到在IPv6网络中应用的目的,BGP协议原有的消息机制和路由机制没有改变。为了实现对IPv6协议的支持,BGP4需要将IPv6网络层协议的信息反映到NLRI及NEXT_HOP属性中。MBGP定义了两种属性:MP_REACH_NLRI和MP_UNREACH_NLRI用于交换IPv6的可达信息。

MP_REACH_NLRI,用来告知对等可行性路径,允许路径告知网络层用于下一跳的路径地址。

MP_UNREACH_NLRI,用来撤销服务器上的多路不可行性路由。

这两种属性都是可选的,且不传递的。不支持多路协议能力的BGP speakers将忽略这些属性携带的信息,并不再将它传送给其他BGP speakers。

MP_REACH_NLRI属性如图4-6所示。图4-6 MP_REACH_NLRI属性

Address Family Identifier(地址簇标识):这个字段携带网络层协议与网络地址的连接标识。目前这个字段定义的值在RFC 1700中指定。

Subsequent Address Family Identifier(并发地址簇标识):本字段携带包含在属性中的网络层可达信息(NLRI)类型的补充信息。

Length of Next Hop Network Address(下一跳地址长度):一个字节长度的下一跳地址长度字段,表明了下一跳地址的长度。

Network Address of Next Hop(下一跳地址):本字段长度可变,包含了到达目的地的下一个路由器的地址。

Number of SNPAs(SNPA的数目):一个字节,包含了附属子网点信息(Subnetwork Points of Attachment,SNPAs)的确切数目,如果为0值则表明在这个属性里面没有包括任何SNPA。

Length of Nth SNPA(第N个SNPA的长度):一个字节长度,表示了下一跳信息中第N个SNPA的长度。

Nth SNPA of Next Hop(第N个SNPA):可变长度区域,包含了由Network Address of Next Hop域指定地址的路由器的一个SNPA。区域的长度为整数个字节,即对SNPA的长度半值(半个字节)进行向上取整;如果SNPA包含了奇数个半字节,那么对该值进行全零的半字节补齐。

Network Layer Reachability Information(网络层可达信息):可变长度区域,列出了将在本属性中被通告的可用路由的NLRI信息。当并发地址簇标识(Subsequent Address Family Identifier)域被设置为RFC 2858中定义的某个值时,所有NLRI将会按照该RCF指定的方式进行编码处理。

MP_REACH_NLRI属性类型码为14,是一个可选非转发属性,用于以下场合:

通告一个可用路由给邻居;

允许一个路由器通告它的网络层地址,用来指示被列在NLRI信息域中的目的地;

准许一个给定的路由器报告存在于本地系统中的部分或者全部附属子网点信息(Subnetwork Points of Attachment,SNPAs)。

但需要注意的是,在自治域内部交换来自EBGP的路由时,拥有MP_REACH_NLRI属性的Update报文中不再承载原来的NLRI,也不再拥有NEXT_HOP属性,如果一个路由器接收到报文中包含由NEXT_HOP属性,也应该将其忽略。

MP_UNREACH_NLRI属性如图4-7所示。图4-7 MP_UNREACH_NLRI属性

Address Family Identifier(地址簇标识):本字段携带与下层NLRI相关的网络层协议标识。目前这个字段定义的值在RFC 1700中指定。

Subsequent Address Family Identifier(并发地址簇标识):本字段携带包含在属性中的网络层可达信息(NLRI)类型的补充信息。

Withdrawn Routes(撤销路由):可变长度区域。列出将要被从服务中撤销的路由的NLRI。当Subsequent Address Family Identifier被设置为RFC 2858中定义的某个值时,每条NLRI都按照该RCF指定的方式进行编码处理。

包含有MP_UNREACH_NRLI属性的Update消息并不被要求携带其他路径属性。

在原有BGP4协议中,路径属性是包含在Update报文中的,不论Update报文转发的路由信息中包含了NLRI信息或者只有Withdrawn信息。但对于MP-BGP来说,它认为下一跳信息(为NEXT_HOP属性所提供)仅仅在与目的地址可达信息的通告连接中有意义,在目的地不可达的情况(撤销路由信息,Withdrawn)下是没有什么意义的。所以目的地可达信息的通告应该和相关的下一跳信息的通告相关联,而撤销路由信息的通告并没有相关的路径信息。

第5章 IPv6多播技术

5.1 多播技术产生背景

5.1.1 IP多播历史

20世纪80年代初斯坦福大学的一位博士生叫Steve Deering,在为其导师David Cheriton工作时设计一种叫做Vsystem的分布式操作系统。此操作系统允许一台计算机使用MAC层多播向在本地Ethernet段的一组其他计算机传递信息。

随着工作的扩展,多播必须跨越路由器,所以必须将多播扩展到OSI模型的第三层,此历史重任落到了Steve Deering身上,他总结了多播路由的通信协议基础,并最终在1991年12月发表的博士论文中进行了详细的阐述。随后成为IETF组织的著名的IP多播文档——RFC 1112。

若从Internet网络发展的速度来看,多播是一个旧概念而不是一个新概念,但由于各种原因发展比较缓慢。1992年3月第一次建立多播主干网MBone,IETF成功地在多播网上举行了一次会议,才引起人们的广泛关注。而第一个WWW浏览器出现在1990年,到1993年已发展到100个WWW站点,所以多播和WWW虽处于同一时期,但多播的发展远远慢于WWW,主要原因是IP多播通信模式需要提供每个群组和每个源的状态信息,其处理相当复杂,对路由器的处理性能有较高的要求,并且随着Internet网络的越来越复杂,给多播的进一步发展带来了困难。后来,出现了一些设计精巧的多播路由协议(如PIM-DM、PIM-SM),使多播IP包能正确而又迅速地发送给成千上万的接收者,IP多播的技术和应用开始快速发展。

目前,IP多播可以运行在任意构造的网络之上,包括因特网、ATM、帧中继、SMDS和卫星,涉及网络的许多领域,能应用在视频和电信会议、多媒体应用、新闻发布和那些来自太空的远程实况广播。

5.1.2 什么是多播

IP多播是利用一种协议将IP数据报从一个源传送到多个目的地,将信息的复制发送到一组地址,到达所有想要接收它的接收者。IP多播是将IP数据报“尽最大努力”传输到一个构成多播群组的主机集合,群组的各个成员可以分布于各个独立的物理网络上。IP多播群组中成员的关系是动态的,主机可以随时加入和退出群组,群组的成员关系决定了主机是否接收送给该群组的多播数据报,不是某群组的成员主机也能向该群组发送多播数据报。

如图5-1所示,多播协议允许将一台主机发送的数据通过网络路由器和交换机复制到多个加入此多播的主机,是一种一对多的通信方式。

多播协议与现在广泛使用的单播协议(见图5-2)的不同之处在于,一个主机用单播协议向n个主机发送相同的数据时,发送主机需要分别向n个主机发送,共发送n次。

一个主机用多播协议向n个主机发送相同的数据时,只要发送1次,其数据由网络中的路由器和交换机逐级进行复制并发送给各个接收方,这样既节省服务器资源也节省网络主干的带宽资源。

与广播协议(见图5-3)相比,只有多播接收方向路由器发出请求后,网络路由器才复制一份数据给接收方,从而节省接收方的带宽。而广播方式无论接收方是否需要,网络设备都将所有广播信息向所有设备发送,从而大量占据接收方的接入带宽。图5-1 多播通信图图5-2 单播通信图图5-3 广播通信图

5.1.3 IP多播的特点

IP多播技术具有以下特点。

①群地址:在多播网中,每个多播群组拥有唯一的多播地址,一部分IP多播地址是由Internet管理机构分配的,其他的多播地址作为暂时地址被用户使用;多播数据包可以送到标识目的主机的组地址,发送者不必知道有哪些组成员,它自己不必是组成员,对组成员中的主机的数目和位置也没有限制。主机不需和组成员以及发送者商量,可以任意加入和离开多播组;使用组地址,不必知道主机指定的位置,可以找到具有此多播地址的任何资源和服务器,在动态变化的信息提供者中搜寻到需要的信息,或者发布信息到任意大小的可选用户群。

②规模可扩展性:如果网络速率提高,广域多播网络的容量需要扩大,后来产生的多播路由算法和协议如PIM-DM、PIM-SM、CBT都支持网络规模的扩展,而上述的群地址和动态性也是适应规模可扩展性的另一方面。

③健壮性:IP多播网络使用的路由协议和算法能适应网络路由动态变化,它采用软件状态刷新机制、制作路由备份等方法,来维护群组成员之间的连接,加强网络的健壮性。

④路由算法的独立性:多播路由算法和协议独立于单播路由使用的协议,但又依靠现存的单播路由表,在域内适应网络拓扑的变化,动态生成多播树。

⑤多播生成树的灵活性:多播生成树的形成与发送者和接收者的分布、网络的流量状况及组成员的动态性有关,且多播生成树也反映了不同的多播路由算法和多播应用。灵活的多播生成树有利于数据包的传送,不容易造成网络的拥塞。

多播协议的优势在于当需要将大量相同的数据传输到不同的主机时:

①能节省发送数据的主机的系统资源和带宽;

②多播是有选择地复制给有要求的主机;

③多播可以穿越公网广泛传播,而广播则只能在局域网或专门的广播网内部传播;

④多播能节省网络主干的带宽。

多播协议的缺点是与单播协议相比,多播没有补包机制,因为多播采用的是UTP的传输方式,并且不是针对一个接收者,所以无法有针对性地进行补包。因此直接用多播协议传输的数据是不可靠的。

5.1.4 多播技术应用

目前的多播应用主要有视频会议、网络电视直播等,下面分别做简要介绍。

1.视频会议

多播视频会议是最早的多播应用之一,单播的视频会议系统需要将每一个分会场的图像信息集中到MCU,再分别传输给所有其他分会场,针对有较多分会场和镜头并且各分会场相互讨论的情况需要使用大量的带宽,其信息量呈几何级增长。

基于多播协议的视频会议系统就能较好地解决这些问题,每个参加会议的会场加入同一个或几个多播组,大家都可以相互看到对方,数据的复制不是由MCU集中完成,而是由网络中的交换机自动完成,极大地减少了数据量。同时由于数据不需要经过MCU进行中转,其实时性也得到了提高。唯一的缺点是多播丢包后难以补包,但这一点对视频会议来说影响不大,因为视频会议要求实时性,即使进行了补包往往也用不上了。

2.网络电视直播

用多播协议实现网络电视直播(IPTV)是最方便、最高效的方式,服务器将视频流以多播协议的方式发送出去,任何客户端需要收看节目都可以加入多播,接收数据流收看节目。直播类似于一个电视频道,持续播放视频或现场。

5.2 多播技术原理、标准

5.2.1 IP多播地址结构

IPv6多播地址用来标识一组接口,一般这些接口属于不同的节点。一个节点可能属于0个到多个多播组。发往多播地址的报文被多播地址标识的所有接口接收。

IPv6多播地址的格式如图5-4所示,其中各字段的含义如下。图5-4 IPv6多播地址格式

0xFF:最高8bit为11111111,标识此地址为多播地址。

Flags:4bit。如图5-5所示,Flags字段中各位的取值如下。图5-5 Flags字段格式

①最高位为保留位,必须为0。

②R位取0表示非内嵌RP的多播地址;取1则表示内嵌RP的多播地址,此时P、T位也必须置1。

③P位取0表示非基于单播前缀的多播地址;取1则表示基于单播前缀的多播地址,此时T位也必须置1。

④T位取0表示永久分配的多播地址;取1则表示非永久分配的多播地址。Scope:4bit。用来标识此多播组的应用范围,其取值及含义如表5-1所示。表5-1 Scope字段的取值及其含义

Group ID:112bit,多播组标识号。用来在由Scope字段所指定的范围内唯一标识多播组,该标识可能是永久分配的或临时的,这由Flags字段的T位决定。

5.2.2 IPv6多播MAC地址

IPv6多播MAC地址以0x3333开头,低32位为IPv6多播地址的低32位,最终形成48bit的多播MAC地址。如图5-6所示,IPv6多播地址FF1E::F30E:101所对应的多播MAC地址为33-33-F3-0E-01-01。图5-6 IPv6多播地址的MAC地址映射举例

5.2.3 IPv6多播组管理协议

1.MLD协议

MLD(Multicast Listener Discovery,多播侦听者发现)协议用于IPv6路由器在其直连网段上发现多播侦听者。多播侦听者(Multicast Listener)是那些希望接收多播数据的主机节点。

路由器通过MLD协议,可以了解自己的直连网段上是否有IPv6多播组的侦听者,并在数据库里做相应记录。同时,路由器还维护与这些IPv6多播地址相关的定时器信息。

MLD路由器使用IPv6单播链路本地地址作为源地址发送MLD报文。MLD使用ICMPv6 (Internet Control Message Protocol for IPv6,针对IPv6的互联网控制报文协议)报文类型。MLD协议采用ICMPv6(IP协议号为58)的报文类型,包括MLD查询报文(类型值130)、MLDv1报告报文(类型值131)、MLDv1离开报文(类型值132)和MLDv2报告报文(类型值143)。

2.MLD的版本

到目前为止,MLD有两个版本:

①MLDv1(由RFC 2710定义),源自IGMPv2;

②MLDv2(由RFC 3810定义),源自IGMPv3。

所有版本的MLD协议都支持ASM(Any-Source Multicast,任意信源多播)模型;MLDv2可以直接应用于SSM(Source-Specific Multicast,指定信源多播)模型,而MLDv1则需要在MLD SSM Mapping技术的支持下才能应用于SSM模型。

3.MLDv1原理简介

MLDv1主要基于查询和响应机制完成对IPv6多播组成员的管理。(1)查询器选举机制

当一个网段内有多台IPv6多播路由器时,由于它们都能从主机那里收到MLD成员关系报告报文(Multicast Listener Report Message),因此只需要其中一台路由器发送MLD查询报文(Query Message)就足够了。这就需要有一个查询器(Querier)的选举机制来确定由哪台路由器作为MLD查询器,其选举过程如下。

①所有MLD路由器在初始时都认为自己是查询器,并向本地网段内的所有主机和路由器发送MLD普遍组查询(General Query)报文(目的地址为FF02::1)。

②本地网段中的其他MLD路由器在收到该报文后,将报文的源IPv6地址与自己的接口地址做比较。通过比较,IPv6地址最小的路由器将成为查询器,其他路由器成为非查询器(Non-Querier)。

③所有非查询器上都会启动一个定时器(即其他查询器存在时间定时器Other Querier Present Timer)。在定时器超时前,如果收到了来自查询器的MLD查询报文,则重置该定时器;否则,就认为原查询器失效,并发起新的查询器选举过程。(2)加入IPv6多播组机制

如图5-7所示,假设Host B与Host C想要收到发往IPv6多播组G1的IPv6多播数据,而Host A想要收到发往IPv6多播组G2的IPv6多播数据,那么主机加入IPv6多播组以及MLD查询器(Router B)维护IPv6多播组成员关系的基本过程如下。图5-7 MLD查询响应示意图

①主机会主动向其要加入的IPv6多播组发送MLD成员关系报告报文以声明加入,而不必等待MLD查询器发来的MLD查询报文。

②MLD查询器(Router B)周期性地以多播方式向本地网段内的所有主机和路由器发送普遍组查询报文(目的地址为FF02::1)。

③在收到该查询报文后,关注G1的Host B与Host C其中之一(这取决于谁的延迟定时器先超时)——譬如Host B会首先以多播方式向G1发送MLD成员关系报告报文,以宣告其属于G1。由于本地网段中的所有主机都能收到Host B发往G1的报告报文,因此当Host C收到该报告报文后,将不再发送同样针对G1的报告报文,因为MLD路由器(Router A和Router B)已知道本地网段中有对G1感兴趣的主机了。这个机制称为主机上的MLD成员关系报告抑制机制,该机制有助于减少本地网段的信息流量。

④与此同时,由于Host A关注的是G2,所以它仍将以多播方式向G2发送报告报文,以宣告其属于G2。

⑤经过以上的查询和响应过程,MLD路由器了解到本地网段中有G1和G2的成员,于是由IPv6多播路由协议(如IPv6 PIM)生成(*,G1)和(*,G2)多播转发项作为IPv6多播数据的转发依据,其中的“*”代表任意IPv6多播源。

⑥当由IPv6多播源发往G1或G2的IPv6多播数据经过多播路由到达MLD路由器时,由于MLD路由器上存在(*,G1)和(*,G2)多播转发项,于是将该IPv6多播数据转发到本地网段,接收者主机便能收到该IPv6多播数据了。(3)离开IPv6多播组机制

当一个主机离开某IPv6多播组时:

①该主机向本地网段内的所有IPv6多播路由器(目的地址为FF02::2)发送离开组(Done)报文;

②当查询器收到该报文后,向该主机所声明要离开的那个IPv6多播组发送特定组查询(Multicast-Address-Specific Query)报文(目的地址字段和组地址字段均填充为所要查询的IPv6多播组地址);

③如果该网段内还有该IPv6多播组的其他成员,则这些成员在收到特定组查询报文后,会在该报文中所设定的最大响应时间(Maximum Response Delay)内发送成员关系报告报文;

④如果在最大响应时间内收到了该IPv6多播组其他成员发送的成员关系报告报文,查询器就会继续维护该IPv6多播组的成员关系;否则,查询器将认为该网段内已无该IPv6多播组的成员,于是不再维护这个IPv6多播组的成员关系。

4.MLDv2原理简介

MLDv2的原理与MLDv1基本相同,并新增了以下特性。(1)对IPv6多播源的过滤

MLDv2增加了针对IPv6多播源的过滤模式(INCLUDE/EXCLUDE),使主机在加入某IPv6多播组G的同时,能够明确要求接收或拒绝来自某特定IPv6多播源S的IPv6多播信息。当主机加入IPv6多播组时:

①若要求只接收来自指定IPv6多播源如S1,S2,…发来的IPv6多播信息,则其报告报文中可以标记为INCLUDE Sources(S1,S2,…);

②若拒绝接收来自指定IPv6多播源如S1,S2,…发来的IPv6多播信息,则其报告报文中可以标记为EXCLUDE Sources(S1,S2,…)。

如图5-8所示,网络中存在Source 1(S1)和Source 2(S2)两个IPv6多播源,均向IPv6多播组G发送IPv6多播报文。Host B仅对从Source 1发往G的信息感兴趣,而对来自Source 2的信息没有兴趣。图5-8 指定源组的IPv6多播流路径

如果主机与路由器之间运行的是MLDv1,Host B加入IPv6多播组G时无法对IPv6多播源进行选择,因此无论Host B是否需要,来自Source 1和Source 2的IPv6多播信息都将传递给Host B。

当主机与路由器之间运行了MLDv2之后,Host B就可以要求只接收来自Source 1、发往G的IPv6多播信息(S1,G),或要求拒绝来自Source 2、发往G的IPv6多播信息(S2, G),这样就只有来自Source 1的IPv6多播信息才能传递给Host B了。(2)MLD状态

运行MLDv2的多播路由器按每条直连链路上的多播地址(per multicast address per attached link)来保持IPv6多播组的状态。IPv6多播组包括以下状态。

①过滤模式:保持对INCLUDE或EXCLUDE的状态跟踪。

②源列表:保持对新增或删除IPv6多播源的跟踪。

③定时器:表示IPv6多播地址超时后切换到INCLUDE模式的过滤定时器、关于源记录的源定时器等。(3)接收者主机的状态侦听

运行MLDv2的多播路由器通过侦听接收者主机的状态,记录和维护网段上加入到源组的主机信息。

下面以MLDv2为例对MLD的报文类型进行介绍。

①MLD查询报文

MLD查询器通过发送MLD查询报文来了解相邻接口的多播侦听状态。MLD查询报文的格式如图5-9所示,各字段的含义如表5-2所示。图5-9 MLDv2查询报文格式表5-2 MLDv2查询报文各字段含义

②MLD报告报文

主机通过发送MLD报告报文来汇报当前的多播侦听状态。MLD报告报文的格式如图5-10所示,各字段的含义如表5-3所示。图5-10 MLDv2报告报文格式表5-3 MLDv2报告报文各字段含义

③MLD SSM Mapping

MLD SSM Mapping通过在路由器上配置SSM静态映射规则,从而为运行MLDv1的接收者主机提供对SSM模型的支持。

SSM模型要求在接收者主机所在的网段,路由器能够了解主机加入IPv6多播组时所指定的IPv6多播源。如果接收者主机上运行的是MLDv2,则可以在MLDv2的报告报文中直接指定IPv6多播源的地址;如果某些接收者主机只能运行MLDv1,则在MLDv1的报告报文中无法指定IPv6多播源的地址。这种情况下需要通过在路由器上配置MLD SSM Mapping功能,将MLDv1报告报文中所包含的(*,G)信息映射为(G,INCLUDE,(S1,S2,…))信息。

在如图5-11所示的IPv6 SSM网络中,Host A、Host B和Host C上分别运行MLDv1和MLDv2。在不允许将Host A和Host B升级为MLDv2的情况下,若要为Host A和Host B也提供SSM多播服务,则需在Router A上配置MLD SSM Mapping功能。图5-11 MLD SSM Mapping组网图

配置完成后,当Router A收到来自主机的MLDv1报告报文时,首先检查该报文中所携带的IPv6多播组地址G,然后根据检查结果的不同分别进行处理。

如果G不在IPv6 SSM组地址范围内,则提供ASM多播服务。

如果G在IPv6 SSM组地址范围内:(a)若Router A上没有G对应的MLD SSM Mapping规则,则无法提供SSM多播服务,丢弃该报文;(b)若Router A上有G对应的MLD SSM Mapping规则,则依据规则将报告报文中所包含的(*,G)信息映射为(G,INCLUDE,(S1,S2,…))信息,可以提供SSM多播服务。

说明:MLD SSM Mapping不对MLDv2的报告报文进行处理。

5.2.4 IPv6多播路由协议

IPv6 PIM(Protocol Independent Multicast for IPv6,协议无关多播)表示可以利用IPv6路由协议(包括RIPng、OSPFv3、IS-ISv6、BGP4+)所生成的单播路由表为IPv6多播提供路由。多播路由与所采用的单播路由协议无关,只要能够通过单播路由协议产生相应的多播路由表项即可。PIM借助RPF(Reverse Path Forwarding,逆向路径转发)机制实现对多播报文的转发。当多播报文到达本地设备时,首先对其进行RPF检查:若RPF检查通过,则创建相应的多播路由表项,从而进行多播报文的转发;若RPF检查失败,则丢弃该报文。

根据实现机制的不同,PIM分为以下两种模式。

①IPv6 PIM-DM(Protocol Independent Multicast-Dense Mode for IPv6,协议无关多播—密集模式)。

②IPv6 PIM-SM(Protocol Independent Multicast-Sparse Mode for IPv6,协议无关多播—稀疏模式)。

IPv6 PIM协议与IPv4 PIM协议除报文中IP地址结构不同外,其他协议行为基本相同, IPv6 PIM也支持SM、DM和SSM这3种模式。

IPv6 PIM发送链路本地范围的协议报文(包括PIM Hello、Join-Prune、Assert、Bootstrap、Graft、Graft-Ack和State-refresh报文)时,报文的源IPv6地址使用发送接口的链路本地地址;IPv6 PIM发送全球范围的协议报文(包括Register、Register-Stop和C-RP Advertisement报文)时,报文的源IPv6地址使用发送接口的全球单播地址。IPv6多播并不支持MSDP(Multicast Source Discovery Protocol)协议,如果需要接收来自其他IPv6 PIM域的多播数据,有以下两种实现方式。

①通过其他方式(如广告等)直接获取其他IPv6 PIM域内的多播源地址,使用IPv6 PIM-SSM发起指定源组的加入。

②使用嵌入式RP()机制,通过嵌入RP地址的IPv6多播地址来获取其他IPv6 PIM域内的RP地址,向其他域内的RP发起组加入。

对于域间IPv6多播路由信息的传递,则可以使用IPv6的MBGP协议,其与IPv4的MBGP协议也基本相同,因此就不在本书中详细介绍。

5.3 多播技术在IPv6与IPv4下的差异

5.3.1 IPv6的优势

IPv6增加了增强的多播(Multicast)支持以及对流的支持(Flow Control),这使得网络上的多媒体应用有了长足发展的机会,为服务质量(Quality of Service,QoS)控制提供了良好的网络平台。

Traffic Class(通信类别):8位,指示IPv6数据流通信类别或优先级。功能类似于IPv4的服务类型(ToS)字段。

Flow Label(流标记):20位,IPv6新增字段,标记需要IPv6路由器特殊处理的数据流。该字段用于某些对连接的服务质量有特殊要求的通信,诸如音频或视频等实时数据传输。在IPv6中,同一信源和信宿之间可以有多种不同的数据流,彼此之间以非“0”流标记区分。如果不要求路由器做特殊处理,则该字段值置为“0”。

5.3.2 IPv6多播协议差异

MLD协议与IGMP协议除报文格式不同外,协议行为完全相同。同样地,MLD Snooping与IGMP Snooping协议也基本相同。IPv6 PIM协议与IPv4 PIM协议除报文中IP地址结构不同外,其他协议行为基本相同,IPv6 PIM也支持SM、DM和SSM这3种模式。

5.4 多播技术的应用场景

以下讲述SSM模型在IPv6 PIM中的实现。

SSM(Source-Specific Multicast,指定信源多播)模型和ASM(Any-Source Multicast,任意信源多播)模型是两个完全对等的模型。目前,ASM模型包括IPv6 PIM-DM和IPv6 PIM-SM两种模式,SSM模型能够借助IPv6 PIM-SM的部分技术来实现。

SSM模型为指定源多播提供了解决方案,通过MLDv2来维护主机与路由器之间的关系。IPv6 PIM-DM在实现IPv6多播转发时,基于IPv6多播源上通过使用“flood and prune”机制建立SPT。虽然SPT具有最短路径,但是它是建立在低效率之上的。因此,IPv6的PIM-DM模式是不适合大型和中型规模的网络使用。

在实际应用中,SSM模型选择使用IPv6 PIM-SM的部分技术来实现。在SSM模型中,接收器通过公告信息知道IPv6多播源的确切位置,RP没有存在的必要,也不需要RPT,对于IPv6 PIM域,需要发现IPv6多播源,但不需要进行多播源注册的程序。

与ASM模型相比,SSM模型只需要MLDv2和IPv6 PIM-SM协议的支持。IPv6 PIM SSM模型在一个IPv6域下的运作机制可以概括如下:邻居发现、DR选举、SPT建设。

1.邻居发现

IPv6 PIM-SSM使用与IPv6 PIM-SM完全相同的邻居发现机制。

在IPv6 PIM域中,路由器通过周期性地向所有PIM路由器以多播方式发送IPv6 PIM Hello报文(以下简称Hello报文),以发现IPv6 PIM邻居,维护各路由器之间的IPv6 PIM邻居关系,从而构建和维护SPT。

2.DR选举

IPv6 PIM-SSM使用与IPv6 PIM-SM完全相同的DR选举机制。

借助Hello报文还可以为共享网络(如Ethernet)选举DR,DR将作为该共享网络中多播数据的唯一转发者。

无论是与多播源相连的网络,还是与接收者相连的网络,都需要选举DR。接收者侧的DR负责向RP发送加入报文;多播源侧的DR负责向RP发送注册报文。

说明如下。

①各路由器之间通过比较Hello报文中所携带的优先级和IP地址,可以为多路由器网段选举DR。选举出的DR对于IPv6 PIM-SM有实际的意义;而对于IPv6 PIM-DM来说,其本身其实并不需要DR,但如果IPv6 PIM-DM域中的共享网络上运行了MLDv1,则需要选举出DR来充当共享网络上的MLDv1查询器。

②在充当DR的设备上必须使能MLD,否则连接在该DR上的接收者将不能通过该DR加入多播组。

如图5-12所示,DR的选举过程如下。图5-12 DR选举示意图

①共享网络上的各路由器相互之间发送Hello报文(携带有竞选DR优先级的参数),拥有最高优先级的路由器将成为DR。

②如果优先级相同,或者网络中至少有一台路由器不支持在Hello报文中携带竞选DR优先级的参数,则根据各路由器的IP地址大小来竞选DR,IP地址最大的路由器将成为DR。

当DR出现故障时,其余路由器在超时后仍没有收到来自DR的Hello报文,则会触发新的DR选举过程。

3.构建SPT

构建为IPv6 PIM-SM服务的RPT,还是构建为IPv6 PIM-SSM服务的SPT,关键在于接收者准备加入的多播组是否属于SSM组地址范围(IANA保留的IPv6 SSM组地址范围为FF3x::/32,x需要是合法地址范围)。

如图5-13所示,Host B和Host C为多播信息的接收者(Receiver),由其借助MLDv2的报告报文向DR报告自己对来自多播源S、发往多播组G的信息感兴趣。收到该报告报文的DR先判断该报文中的组地址是否在IPv6 SSM组地址范围内。图5-13 IPv6 PIM-SSM中构建SPT示意图

①如果在IPv6 SSM组地址范围内,则构建IPv6 PIM-SSM,并向多播源S逐跳发送通道(Channel)的订阅报文(Subscribe Message)。沿途所有路由器上都创建(S,G)表项,从而在网络内构建了一棵以多播源S为根、以接收者为叶子的SPT,该SPT就是IPv6 PIM-SSM中的传输通道。

②如果不在IPv6 SSM组地址范围内,则仍旧按照IPv6 PIM-SM的流程进行后续处理,此时DR需要向RP发送(*,G)加入报文,同时需要进行多播源的注册。

第6章 移动IPv6

移动IPv6是为了支持移动节点在IPv6网络中移动时的连接性而提出的协议。当移动节点在网络中移动时,总是通过家乡地址进行寻址,而不管是连接在家乡链路还是移动到外地网络。移动IPv6对于IP层以上的协议层是完全透明的,这使得移动节点在不同子网间移动时,运行在该节点上的应用程序不需修改或配置仍然可用。

移动IPv6是未来IP移动网络的基础性协议,包含的内容非常丰富,虽然目前还有一些问题没有解决,但移动IPv6的发展前景是非常光明的。在可以预见的未来,我们将可以解决移动IPv6有关的应用问题,充分享受移动IPv6给人们带来的方便和快捷,自由翱翔在移动互联网世界里。

本章首先详细介绍了移动IP的技术背景和相关标准的发展、移动IPv6协议的网络框架、相关数据包格式、协议流程等内容,接着对快速移动IPv6、分级移动IPv6、快速分级移动IPv6等扩展协议的实现原理进行了分析,然后详细介绍了代理移动IPv6的网络框架和实现机制,最后总结了移动IPv6的优势。

6.1 移动IP基础

移动通信在迅速发展,越来越多的移动用户希望能够以更加灵活的方式随时随地接入到互联网中。移动IP技术正是为了满足这种需求而产生的一种支持移动用户与互联网连接的互连技术,它能够使移动用户在移动过程中不中断正在进行的互联网服务,因此成为当前业界研究的热点问题。

6.1.1 移动IP技术产生的背景

传统的IP技术是针对固定节点之间的相互通信而发展起来的,不适用于移动节点之间的通信。传统的固定节点拥有一个IP地址后,必须位于其IP地址所在的子网中,才能正常地接收到发往该节点的数据包。而当节点移动到另一个新的子网时,要么改变其IP地址,使其地址前缀与所访问的子网相同,要么就需要在路由器上添加主机路由来实现移动节点与其他节点之间的通信。而改变节点的IP地址或添加主机路由这两种方法在实际中都不具有灵活性和扩展性。

IP地址包括网络前缀和主机标识,同一条链路上的所有主机通常有相同的网络前缀,这样就可以根据目标节点IP地址的网络前缀进行路由选择,从而使得路由器只需要保留一条网络前缀路由,而不必为每台主机保留一条单独的路由。由于采用网络前缀路由,如果一个节点从一条链路切换到另一条链路而不改变它的IP地址,那么这个节点在新的链路上就不可能接收到发往这个节点的数据包。

针对节点移动到新的子网后通信中断这种情况,移动IPv4技术应运而生。移动IPv4通过引入家乡代理、家乡地址、外地代理、转交地址等概念,能让移动节点在移动的同时不断开连接,并且还能正确收发数据包。在移动IPv4中,每一个移动节点都有一个唯一的家乡地址,当移动节点移动时它的家乡地址是不变的,在家乡网络链路上每一个移动节点还必须有一个家乡代理来为它维护当前的位置信息,这就需要引入转交地址。当移动节点连接到外地网络链路上时,转交地址就用来标识移动节点现在所处的位置,以便进行路由选择。移动节点的家乡地址与当前转交地址的关联称作移动绑定。当移动节点得到一个新的转交地址时,通过绑定向家乡代理进行注册,以便让家乡代理即时登记移动节点的当前位置。当移动节点连接在家乡链路上时,移动节点的工作机制和固定节点一样。当移动节点连接到外地链路上时,它在外地链路上发现一个外地代理,并向这个外地代理进行注册,把这个外地代理的IP地址作为自己的转交地址,移动节点获得转交地址后,把自己的转交地址告诉本地代理。这样当有发往移动节点家乡地址的数据包时,家乡代理便截获该数据包,并根据注册的转交地址,通过隧道将数据包传送给移动节点。但是由移动节点发出的数据包可以直接选路到目的节点上,无需隧道技术。移动IPv4具有灵活性和扩展性。

如果通信节点和移动节点都在同一个外地网络上时,通信节点发出的数据包就要绕道家乡代理,因此需要进行网络路由的优化,IETF相关工作组在移动IPv6中对各个方面进行了补充和完善。

移动IPv6技术是在移动IPv4的基础上发展起来的,因此它有许多新的特点。移动IPv6不再有外地代理的概念,解决了三角路由的问题。当移动节点离开家乡链路访问外地链路时,利用IPv6的增强功能获取所访问外地链路的子网前缀,根据子网前缀生成转交地址。移动节点的家乡代理得到转交地址后,使用IPv6的邻居发现机制截获发往移动节点的数据包。同时,移动节点给通信节点发送绑定更新,使通信节点缓存移动节点当前使用的转交地址,这样通信节点发往移动节点的数据包就可以直接被路由到移动节点上,而不再发向移动节点的家乡代理,减轻了网络的负担,同时解决了移动IPv4中存在的三角路由问题。

6.1.2 移动IP相关标准的发展

1.移动IPv4标准的发展

移动IPv4最核心的协议是RFC 3344。以RFC 3344为核心,IETF陆续颁布了24个与移动IPv4相关的RFC,还有许多草案正在研究中,内容涉及隧道封装、安全、AAA、网络管理、NAT以及适用性等方面。移动IPv4主体的标准化工作已经结束,目前主要是围绕部署中存在的一些问题展开,如协议的优化和扩展、安全保护、AAA、企业网等。

无线环境下移动IP的适用性和特有问题也是一个标准研究的热点。目前主要针对域间路由、网络接入标志扩展、私有IPv4地址、定位和隐私、服务质量等问题进行研究。

2.移动IPv6标准的发展

移动IPv6最核心的协议是RFC 3775。围绕RFC 3775,还颁布了对现有标准进行完善的一些RFC,如适用性、快速切换、网络接入点标志、网络管理、安全协议、AAA、部署场景以及规模部署等。IETF目前已经完成了移动IPv6体系架构、协议、快速切换等主要标准,发布了35个相关RFC。目前IETF的研究重点是对移动IPv6的性能进行优化。3GPP2基本已经完成了移动IPv6在cdma2000网络应用的协议。

3.与移动IP相关的主要标准化组织

IETF WG:Mobile Nodes and Multiple Interfaces in IPv6。

IETF WG:Mobile Ad-hoc Networks。

IETF WG:Mobility for IP:Performance, Signaling and Handoff Optimization。

IETF WG:Network Mobility。

IETF WG:Network-based Localized Mobility Management。

3GPP/3GPP2:UMTS、cdma2000中的移动IP。

6.2 移动IPv6技术

移动IPv6是IETF于2004年6月正式推出的标准,该标准详细定义了移动IPv6及其安全性方面的要求,为移动IPv6的实际应用奠定了基础。

6.2.1 移动IPv6网络框架

移动IPv6对移动IPv4进行了改进,定义了移动节点(Mobile Node,MN)、通信节点(Corresponding Node,CN)、家乡代理(Home Agent,HA)、接入路由器(Access Router,AR)等概念,解决了移动IPv4在IP地址、路由优化、安全性、扩展性等方面的问题。

移动IPv6的网络框架如图6-1所示。图6-1 移动IPv6网络框架

移动IPv6的网络框架中包含了移动节点、通信节点、家乡代理、接入路由器等功能实体。

1.移动节点(MobiIe Node)

移动节点是能够从一条链路切换到另一条链路,并且不会中断当前通信的主机或路由器。移动节点在家乡网络获得的地址称为家乡地址(Home Address),在外地网络获得的地址称为转交地址(Care of Address),移动节点在不同接入网间移动时,仍可以通过家乡地址被寻址。每个移动节点都维护一个绑定更新列表,记录它所发送的每个绑定更新的相关信息,其中包括移动节点发往家乡代理、通信节点、前一个转交地址所在链路家乡代理的所有绑定更新。

2.通信节点(Correspondent Node)

通信节点是与移动节点进行通信的对等实体,可以是一个固定节点,也可以是一个移动节点。通信节点要为其他节点维护一个绑定缓存列表。每一条绑定缓存条目都必须包括条目所对应的移动节点的家乡地址、转交地址、该条目的剩余生存期、序号字段、该条目使用信息等。

3.家乡代理(Home Agent)

家乡代理是家乡链路上的一台路由器,主要负责维护离开家乡链路的移动节点相关的地址信息。当移动节点位于家乡链路时,家乡代理将目的地址为移动节点的数据包正常转发给移动节点;当移动节点离开家乡链路时,家乡代理将发往移动节点家乡地址的数据包通过隧道方式发往移动节点的当前转交地址。家乡代理维护两个表项:绑定缓存列表和家乡代理列表。

4.接入路由器(Access Router)

接入路由器是位于移动节点所访问的网络上的路由器,为注册的移动节点提供路由服务。它接收移动节点的家乡代理通过隧道发来的报文,进行拆封后发给移动节点。

6.2.2 移动IPv6消息格式

移动报头是移动IPv6定义的一个新的扩展报头,MN、CN和HA在创建和管理绑定消息时都会用到。移动报头只有在用于绑定确认时,才可以用类型2的路由报头来进行发送。只有绑定更新时,才可以使用家乡地址目的选项。在发送移动报头时,不能使用绑定更新列表和绑定缓存信息。移动报头的格式如图6-2所示。图6-2 移动IPv6报头格式

MH Type是一个8比特的类型域,用来指示移动报头的消息类型。移动报头传递的消息类型目前有8个,分别是绑定刷新请求消息、家乡测试初始化消息、转交测试初始化消息、家乡测试消息、转交测试消息、绑定更新消息、绑定确认消息和绑定错误消息。

1.绑定刷新请求消息(Binding Refresh Request Message)

绑定刷新请求消息是CN发送给MN通知其更新移动绑定的消息,使用移动报头类型0。当移动报头的类型域是0时,消息数据域的格式如图6-3所示。图6-3 绑定刷新请求消息格式

2.家乡测试初始化消息(Home Test Init Message)

移动节点使用家乡测试初始化消息发起返回路由可达程序,并请求一个家乡密钥产生令牌。家乡测试初始化消息使用移动报头类型1,当移动报头的类型域是1时,消息数据域的格式如图6-4所示。图6-4 家乡测试初始化消息格式

3.转交测试初始化消息(Care-of Test Init Message)

MN使用转交测试初始化消息发起一个返回路由可达程序,并向CN请求一个转交密码产生令牌,使用移动报头类型2。当移动报头的类型域是2时,消息数据域的格式如图6-5所示。图6-5 转交测试初始化消息格式

4.家乡测试消息(Home Test Message)

家乡测试消息是由CN向MN发送的对家乡测试初始化消息的回应,使用移动报头类型3。当移动报头的类型域是3时,消息数据域的格式如图6-6所示。图6-6 家乡测试消息格式

5.转交测试消息(Care-of Test Message)

转交测试消息是对转交测试初始化消息的回应,使用移动报头类型4。当移动报头的类型域是4时,消息数据域的格式如图6-7所示。图6-7 转交测试消息格式

6.绑定更新消息(Binding Update Message)

绑定更新消息是MN向其他节点发送的通告新转交地址的消息,使用移动报头类型5。当移动报头的类型域是5时,消息数据域的格式如图6-8所示。图6-8 绑定更新消息格式

7.绑定确认消息(Binding AcknowIedgement Message)

绑定确认消息用来通知绑定更新的成功接收,使用移动报头类型6。当移动报头的类型域是6时,消息数据域的格式如图6-9所示。图6-9 绑定确认消息格式

8.绑定错误消息(Binding Error Message)

绑定错误消息是CN提示移动相关错误的消息,使用移动报头类型7。当移动报头的类型域是7时,消息数据域的格式如图6-10所示。图6-10 绑定错误消息格式

Status域是8比特的无符号整数,用于标识产生错误消息的原因。1表示未知的家乡地址目的地选项绑定,2表示无法识别的移动报头类型。

移动IPv6定义了新的目的地址选项、家乡地址选项。家乡地址选项由目的地址选项扩展头携带。MN使用该选项向接收节点提供其家乡地址,其格式如图6-11所示。图6-11 家乡地址选项格式

移动IPv6引入了4种类型的ICMP消息,两种用于动态家乡代理地址发现,两种用于重编号和MN配置。

9.家乡代理地址发现请求(Home Agent Address Discovery Request Message)

家乡代理地址发现请求是MN向家乡代理发送的消息,用于动态发现家乡代理的地址,其格式如图6-12所示。图6-12 家乡代理地址发现请求消息格式

10.家乡代理地址发现应答(Home Agent Address Discovery RepIy Message)

家乡代理地址发现应答是家乡代理向MN发送的消息,用于对家乡代理地址请求的应答,其格式如图6-13所示。图6-13 家乡代理地址发现应答消息格式

11.移动前缀请求(MobiIe Prefix SoIicitation Message)

移动前缀请求是MN向家乡代理发送的移动前缀请求消息,用于从家乡代理获取移动前缀通告消息,其格式如图6-14所示。图6-14 移动前缀请求消息格式

12.移动前缀通告(MobiIe Prefix Advertisement Message)

移动前缀通告是家乡代理向MN发送的消息,用于家乡代理通告移动前缀消息,其格式如图6-15所示。图6-15 移动前缀通告消息格式

6.2.3 移动IPv6工作机制

移动IPv6通过家乡地址、转交地址以及它们之间的绑定,采用隧道机制进行数据的连续传递,其主要操作如下所述。

1.移动检测

移动检测主要是利用IPv6的邻居发现机制判断移动节点是否发生了移动,移动节点通过检查当前默认路由器是否可达来判断自己是否发生了移动。如果当前默认路由器已经不可达,并且发现了一个新的默认路由器,移动节点就可以假定自己已经移动到了新的链路上。移动节点也可以使用其他机制进行移动检测,例如使用底层协议提供的信息。

2.转交地址配置

移动节点在检测到发生了移动之后,使用新的默认路由器所提供的子网前缀形成新的转交地址。移动节点通过IPv6的无状态或有状态地址自动配置机制生成转交地址。移动IPv6允许移动节点同时拥有多个转交地址,其中一个为主转交地址。在任何时候,移动节点都只能有一个主转交地址,并且只把这个地址注册到家乡代理。此外,移动节点可以根据当前链路上的某些或全部子网前缀形成其他转交地址。移动节点形成新的转交地址之后,需要对这个地址进行重复地址检测(DAD),以确认它的唯一性。

3.转交地址注册

移动节点获得转交地址后,通过移动IPv6定义的消息向家乡代理请求注册。家乡代理确认后,将家乡地址和相应的转交地址存放在缓存中,形成家乡地址和转交地址的绑定,并向移动节点发送注册应答消息。移动节点在任何时候都可以给通信节点发送绑定更新,使通信节点缓存移动节点当前使用的转交地址。

4.分组路由

家乡代理在获得移动节点的转交地址并完成绑定后,在移动节点的家乡链路上使用代理邻居发现机制,在家乡链路上截获目的地址是移动节点的家乡地址的IPv6分组,然后通过隧道将它们转发到移动节点的主转交地址。家乡代理对分组使用IPv6封装,外层IPv6报头中目的地址是移动节点的主转交地址。通信对端和移动节点存在两种通信方式:双向隧道模式和路由优化模式。

移动IPv6对移动性的支持相对于IPv4有了很大的改进,能更好地支持移动节点的移动性等。具体的操作流程如下所述。

①当移动节点在家乡网络时,与任何固定的主机工作方式相同,移动IP不需要进行任何特别的操作。

②当移动节点离开家乡网络进入外地网络时,移动节点采用IPv6定义的无状态或有状态的自动配置机制,得到外地链路上的转交地址。

③移动节点获得转交地址后,向位于家乡网络的家乡代理申请注册,为移动节点的家乡地址和转交地址建立绑定。

④移动节点可以直接发送分组给通信节点,设置分组的源地址为移动节点的当前转交地址,家乡地址选项中是移动节点的家乡地址。

⑤通信节点发送分组给移动节点时,首先根据分组目的IP地址查询它的绑定缓存,如果在绑定中存在匹配,则直接发送分组给移动节点。如果不存在这样的匹配,则将分组发送到其家乡地址。发向家乡地址的分组被路由到移动节点的家乡链路,然后经过家乡代理的隧道转发到移动节点。

⑥移动节点接收到家乡代理转发的IPv6分组后,如果判断通信节点没有自己的绑定缓存,就向通信节点发送绑定更新。

6.3 移动IPv6扩展

为了减小移动IPv6切换时的延迟、丢包、乱码,实现快速切换和平滑切换,许多研究者提出了以下的解决方案。

①快速移动IPv6。通过移动检测预测切换过程的发生,在链路层切换之前就进行部分网络层切换操作,这样完成链路层切换后就可以很快进行网络层的切换,加速了切换过程的完成。

②分级移动IPv6。通过将移动节点的移动分为宏移动和微移动,将切换过程的影响控制在子网范围内,减小地址绑定更新过程的延时,减小信令传送的消耗。

③快速分级移动IPv6。将HMIPv6与FMIPv6结合,吸取两种技术的优点,提出FHMIPv6改进方案。

6.3.1 快速移动IPv6

移动IPv6执行的操作包括移动检测、转交地址配置和绑定更新,这些操作通常会造成较长的切换延迟,从而影响了业务的QoS。为了降低切换延迟和减少业务的中断时间,IETF在RFC 4068中提出了移动IPv6快速切换方案(Fast Handovers for Mobile IPv6,FMIPv6),提高了移动IPv6的切换性能。6.3.1.1 协议架构

FMIPv6的主要设计思想是引入链路层移动预测机制,在移动节点切换到新网络前完成移动检测、转交地址配置和重复地址检测过程,缩短切换延迟中的绑定更新延迟,从而减小切换延迟。主要思路是:在移动节点(MN)与前接入路由器(PAR)断开连接之前确定一个预期的新转交地址(NCoA)。当MN移至新接入路由器(NAR)后,MN用NCoA继续原先的通信;如果NCoA注册失败,快速切换也允许移动节点不获得新的转交地址而切换到新的网络。

FMIPv6协议的架构如图6-16所示,包括移动节点、通信节点、家乡代理、接入路由器等,同时对一些概念进行了扩展。图6-16 FMIPv6协议网络架构

前接入路由器(Previous Access Router,PAR):移动节点切换前连接的接入路由器。

新接入路由器(New Access Router,NAR):移动节点切换后连接的接入路由器。

前转交地址(Previous Care-of Address,PCoA):移动节点在PAR链路上使用的转交地址。

新转交地址(New Care-of Address,NCoA):移动节点新配置的准备在NAR链路上使用的转交地址。6.3.1.2 消息格式

为了进行快速切换,FMIPv6协议定义了一些新消息,包括路由器请求代理消息、代理路由器通告消息、快速绑定更新消息、切换发起消息、切换确认消息、快速绑定确认消息、快速邻居通告消息。

1.路由器请求代理消息RtSoIPr(Router SoIicitation for Proxy)

当移动节点移动时发现新的AP,它预测到自己将要进行切换,就发送RtSo1Pr消息给PAR。RtSolPr消息包含新发现AP的标识符,以查询与其对应的NAR的相关信息,其格式如图6-17所示。图6-17 路由器请求代理消息格式

2.代理路由器通告消息PrRtAdv(Proxy Router Advertisement)

PrRtAdv消息由PAR发送给移动节点,作为对RtSo1Pr消息的响应。PrRtAdv提供与新发现AP相对应的NAR的子网前缀或者IP地址信息,移动节点使用这些信息配置NcoA, PrRtAdv格式如图6-18所示。图6-18 代理路由器通告消息格式

3.快速绑定更新消息FBU(Fast Binding Update)

FBU由移动节点发送给PAR,PAR建立移动节点PCoA与NCoA的绑定以及它与NAR的分组转发隧道,FBU格式如图6-19所示。图6-19 快速绑定更新消息格式

4.切换发起消息HI(Handover Initiate)

在收到FBU消息之后,PAR发送HI消息给NAR。HI消息包含移动节点的PCoA和NCoA,使得NAR进行重复地址检测过程检查NCoA的合法性。HI消息的另一个作用是建立NAR到PAR的反向隧道,该隧道将移动节点发送的分组转发给PAR,HI格式如图6-20所示。图6-20 切换发起消息格式

5.切换确认消息HAck(Handover AcknowIedgement)

HAck消息由NAR发送给PAR,作为对HI消息的确认。HAck指示NCoA的合法性,或者提供另一合法的NCoA给移动节点,其格式如图6-21所示。图6-21 切换确认消息格式

6.快速绑定确认消息FBAck(Fast Binding AcknowIedgement)

FBAck消息由PAR发送给移动节点,指示FBU消息是否成功接收。该消息也可以在旧的链路上发送给移动节点,其格式如图6-22所示。图6-22 快速绑定确认消息格式

7.快速邻居通告消息FNA(Fast Neighbor Advertisement)

FNA消息由移动节点发送给NAR,通告它的到达。FNA消息同时触发一个路由器通告作为响应,指示NCoA是否合法,其格式如图6-23所示。图6-23 快速邻居通告消息格式6.3.1.3 协议流程

移动IPv6快速切换有预测式快速切换和反应式快速切换两种模式。预测式快速切换的流程如图6-24所示。图6-24 预测式快速切换流程

①MN向PAR发送RtSolPr消息,其中包含有MN将要切换到的新AP的链路层地址, PAR收到RtSolPr消息后,将新AP的链路层地址解析成其连接的AR信息,包括NAR的IPv6地址、前缀和链路层地址,然后包含在PrRtAdv消息中发送给MN。

②MN根据接收的PrRtAdv消息生成NCoA后,向PAR发送FBU消息。其中包含了PCoA和NCoA,FBU消息的目的是在PAR上建立PCoA到NCoA的绑定,用来将目的地址为PCoA的数据包转发到移动后的MN。

③PAR收到FBU消息后,检查它的邻居缓存,看是否有MN的PCoA存在,如果有就向NAR发送HI消息。NAR收到HI消息后对NCoA进行DAD检测,然后将处理结果包含在HAck消息中发送给PAR。

④PAR收到HAck消息后,与MN的NCoA之间建立隧道,并且给MN发送FBAck消息。为了确保MN能收到,FBAck消息同时向本地子网和新子网发送FBAck消息。

⑤当MN到达新的子网,向NAR发送FNA消息来通告自己的到达。同时MN创建或更新一个到PAR的反向隧道。MN发往CN的分组仍然要使用PCoA作为源地址,但应先经过封装,添加源地址为NCoA,目的地址为PAR的IPv6头标后,再将分组发往PAR,由PAR解封装后再转发给CN。

⑥NAR收到FNA消息后,将NCoA放入到缓存中,并开始转发送往MN的数据包。如果NAR为MN缓存了分组,则停止缓存发往MN的分组,并发送先前缓存的分组。

⑦MN开始绑定更新过程,同时发送邻居通告,通知新子网的其他节点更新它们的邻居缓存。

⑧在MN向CN发出了BU消息之后,就可以直接使用NCoA作为源地址向CN发送分组了。而CN在收到BU消息之前向MN发送的分组都是用PCoA作为目的地址,这些分组到达PAR后,由PAR使用隧道转发给MN。

如果MN在旧链路上开始了预测式切换过程,并且已经发送了FBU消息,但是在MN收到FBAck消息前,它就开始第二层切换过程,断开了同旧链路的连接。当MN连接到新链路后,由于它不能确定PAR是否收到了它先前在旧链路上发送的FBU消息,所以它要在发给NAR的FNA消息中封装FBU消息,即开始反应式快速切换的过程。

假如PAR收到了MN在旧链路上发送的FBU消息,则它已经向新链路发送了一个FBAck消息。NAR可能会缓存这个FBAck,当NAR收到FNA后,就会将这个缓存的FBAck发送给MN。即使NAR没有缓存FBAck消息,当PAR收到NAR转发来的FBU消息时,只需重发一个FBAck消息到新链路。可以把这种情况看作是预测式快速切换。

假如PAR没有收到MN在旧链路上发送的FBU消息,则在MN发送FNA之后的消息交换过程和反应式快速切换完全一样。可以把这种情况看作是反应式快速切换。

FMIPv6消除了移动IPv6协议切换中的移动检测、新转交地址配置与重复地址检测延迟。在丢包方面,消除了移动IPv6协议中绑定注册过程造成的数据丢失。在信令负载方面, FMIPv6比基本移动IPv6协议增加了信令交互负载。在实现复杂度方面,FMIPv6引入了链路层移动预测机制,比MIPv6增加了协议设计和实现的复杂度。

6.3.2 分级移动IPv6

移动IPv6协议不区分宏移动和微移动,移动节点每执行一次切换都要向它的家乡代理和所有通信节点注册其新位置。家乡代理和通信节点通常距离移动节点较远,并可能跨越多个网段,因而频繁地切换会在骨干网中引入大量的信令负载。特别是当移动节点远离家乡网络时,会造成较大的切换延时,从而引起严重的丢包。为了减少移动节点发往本地域外的信令负载,IETF提出了分级移动IPv6协议(Hierarchical Mobile IPv6,HMIPv6)。HMIPv6从减小位置登记开销的角度提高性能,对移动检测和地址配置延迟不做考虑,仅关心与更新相关的延迟,是对移动IPv6协议的一种扩展。6.3.2.1 协议架构

HMIPv6的设计思想是通过引入MAP代理实体,实现移动节点本地注册,减小移动节点与区域外网络间的信令交互负载。它将整个网络分成若干个管理域(Region),为每一个管理域配置一个被称作移动锚点(Mobility Anchor Point,MAP)的路由器,作为区域性移动管理中心。MAP一般位于某个网络的边界,作用类似于家乡代理,负责处理移动节点在本地域内的移动。一个MN拥有两个地址,一个是区域转交地址RCoA(Regional Care of Address),另一个是链路转交地址LCoA(On-link Care of Address),从而实现移动管理的分级。HMIPv6提高了MN在MAP域内移动时的绑定速度,一定程度上减小了切换延时。

HMIPv6的网络框架如图6-25所示。图6-25 分级移动IPv6网络框架

移动锚点(Mobility Anchor Point,MAP):位于移动节点访问网络的特殊路由器,充当移动节点的本地家乡代理,同一个访问网络中可能存在多个MAP。

区域转交地址(Regional CoA,RCoA):移动节点收到MAP选项时,根据MAP的子网前缀自动配置一个转交地址,是移动节点向家乡代理和通信节点注册的地址。

链路转交地址(On-Link CoA,LCoA):移动节点根据路由器通告消息配置的转交地址,即MIPv6协议中所指的转交地址。在本地域内,MAP使用该地址标识移动节点。

本地绑定更新(Local Binding Update,LBU):移动节点发送LBU给MAP,从而建立RCoA和LCoA的绑定关系。与BU相比,LBU添加了一个M标志位,指示该消息执行的是MAP注册。6.3.2.2 消息格式

分级移动IPv6对移动IPv6进行了扩展,修改和定义了新的消息格式。

1.本地绑定更新(LocaI Binding Update)

本地绑定更新消息是由MN向移动锚点发送的消息,其格式如图6-26所示。图6-26 本地绑定更新消息格式

其中,M用来标识该消息有别于MN向家乡代理和通信节点发送的绑定更新消息。

2.MAP选项

MAP选项用于存放MAP的相关信息,其格式如图6-27所示。图6-27 MAP选项格式

Type:IPv6邻居发现选项中的类型字段,为23。

Length:8位无符号整数,表示选项长度,单位为8字节,因此该字段的值设置为3。

Dist:4位无符号整数,表示MAP与路由器通告当前接收者之间以跳数计算的距离,默认值为1。

Pref:4位无符号整数,表示MAP的优先级。

R:若R标志为1,则必须根据选项中的子网前缀形成RCoA。

Valid Lifetime:以秒计算的MAP选项的有效生存期,指示MAP地址和RCoA的有效期。如果该字段被设置为0,说明由于某种原因MAP不再有效。

Global IP Address for MAP:该地址的64位前缀被移动节点用来配置RCoA。6.3.2.3 协议流程

在HMIPv6中,当移动节点进入一个MAP域时,它会收到包含一个或多个MAP选项的路由器通告。移动节点从中选择一个为自己服务,并形成新的RCoA和LCoA。之后,移动节点先向MAP发送LBU注册RCoA和LCoA的绑定,然后向家乡代理和通信节点注册RCoA。这样,MAP就会代替移动节点接收来自通信节点的数据分组,并通过隧道将它们转发到移动节点的LCoA。

如果移动节点在域内移动,它只需要向MAP注册新配置的LCoA,而RCoA保持不变。每一次检测到移动,移动节点都会检查原来的MAP选项是否被包含在新接收到的路由器通告中,以判断自己是否还在原来的MAP域内。如果原MAP不再有效,移动节点必须重新选择一个MAP,配置新的RCoA和LCoA,并向新的MAP注册。此外,移动节点还要向家乡代理和通信节点注册新的RCoA。其后,移动节点与通信节点之间方可开始正常的直接数据传输。

HMIPv6在信令交互负载方面比MIPv6显著提高,在切换延迟和丢包方面比MIPv6略有提高,协议还需进一步改进。

6.3.3 快速分级移动IPv6

快速移动IPv6协议从缩短切换延迟的角度提高了MIPv6的切换性能,分级移动IPv6协议从减少位置登记开销的角度提高了性能。快速分级移动IPv6协议结合了两者的优点,进一步提升了移动IPv6的切换性能。6.3.3.1 协议架构

快速分级移动IPv6结合HMIPv6和FMIPv6,利用HMIPv6的分级思想进一步降低了FMIPv6的切换延迟,但二者的结合不是对HMIPv6和FMIPv6的简单组合。FMIPv6和HMIPv6的简单组合存在三角路由问题,如图6-28所示。发送给移动节点的数据包先通过MAP代理转发给前接入路由器,前接入路由器再转发给新接入路由器。在分级网络体系中,前接入路由器转发给新接入路由器的数据包会再次经过MAP代理,形成三角路由。图6-28 HMIPv6和FMIPv6简单组合

FHMIPv6用MAP代理代替前接入路由器的功能,实现了数据流优化,如图6-29所示,发给移动节点的数据包通过MAP代理直接转发给新接入路由器,无需经过前接入路由器,避免了三角路由。与FMIPv6不同的是,FHMIPv6在MAP和NAR之间建立了快速切换的分组转发隧道。为此,移动节点和MAP交换快速切换消息。图6-29 FHMIPv6数据流程

FHMIPv6协议引入了两个新的概念:PLCoA和NLCoA,分别表示MN在PAR上使用的本地转交地址和在NAR上使用的本地转交地址。

先前链路转交地址(Previous On-Link CoA,PLCoA):移动节点在PAR链路上使用的链路转交地址,它与FMIPv6协议中的PCoA相对应。

新链路转交地址(New On-Link CoA,NLCoA):移动节点在NAR链路上使用的链路转交地址,它与FMIPv6协议中的NCoA相对应。6.3.3.2 消息格式

FHMIPv6协议使用FMIPv6中的消息完成快速切换,没有定义任何新的消息。

1.对HMIPv6消息的修改(见图6-30)图6-30 HMIPv6消息的修改

HMIPv6消息格式中增加了F标志,用来标识快速切换。

2.对FMIPv6消息的修改

FHMIPv6没有改变FMIPv6消息的格式,但消息的源节点和目的节点发生了改变,如表6-1所示。表6-1 FMIPv6消息的修改6.3.3.3 协议流程

FHMIPv6定义了在HMIPv6中引入快速切换的方法。若直接将FMIPv6与HMIPv6结合,意味着在PAR和NAR之间建立分组转发隧道。但是没有必要这样做,因为在HMIPv6协议中分组是由MAP转发给移动节点的。因此,FHMIPv6在MAP和NAR之间建立隧道,不仅免去了在PAR上建立隧道的开销,而且缩短了分组的转发路径。

假设移动节点和接入路由器都支持FHMIPv6协议,而且MAP具有支持快速切换的必要信息。FHMIPv6中由移动节点发起的切换过程如图6-31所示。

①根据链路层预测机制发现新的AP后,移动节点发送RtSolPr消息给MAP。RtSo1Pr消息包含新发现AP的标识符。

②MAP查找与新AP标识符对应的NAR,并将NAR的相关信息包含在发送给移动节点的PrRtAdv消息中。移动节点使用这些信息配置NLCoA。

③移动节点发送FBU消息给MAP,其中包含PLCoA和NLCoA。

④收到FBU消息后,MAP发送HI消息给NAR。作为响应,NAR回复HAck消息。在收到移动节点的FNA消息之前,NAR为移动节点缓冲来自MAP的分组。

⑤MAP发送FBAck消息给移动节点的PLCoA和NLCoA。然后,MAP开始将发往移动节点的分组通过隧道转发给NAR。

⑥移动节点到达NAR链路后,向NAR发送FNA消息。然后,NAR将缓冲的数据分组发送给移动节点的NLCoA。图6-31 FHMIPv6协议流程

⑦移动节点继续HMIPv6的操作过程,发送LBU消息给MAP。收到包含NLCoA的LBU后,MAP清除它与NAR之间的分组转发隧道。

⑧MAP发送LBAck给移动节点,接下来的过程与HMIPv6一致。

FHMIPv6技术综合利用了FMIPv6和HMIPv6的优点,在减小切换延迟、数据丢失和信令负载方面达到了很好的效果。FHMIPv6与简单组合方案相比,避免了域内三角路由问题,但增加了MAP代理负载。另外,它没有考虑移动节点在不断改变位置的切换过程中的数据包丢失,使得QoS没有保障。

6.4 代理移动IPv6

代理移动IPv6协议是IETF NETLMM工作组提出的基于网络的移动管理协议。基于网络的移动机制是另一种解决IP移动性需求的方法,它通过扩展移动IPv6协议的移动节点和家乡代理之间的信令消息来支持IPv6节点的移动性。这种方法不需要移动节点参与其和家乡代理的信令消息的交互。网络中的代理移动实体执行与家乡代理之间的信令并且代替连接到网络上的移动节点进行移动管理。由于对移动IPv6信令和家乡代理功能的利用和扩展,这个协议称为代理移动IPv6,简称PMIPv6。PMIPv6协议在RFC 5213中做了详细的规定。

6.4.1 代理移动IPv6网络框架

在PMIPv6协议中,通过一种移动代理实体代替家乡代理的作用,代表接入到网络的MN进行移动性管理。该移动代理网络实体能够检测到MN的移动并初始化移动信令,建立相应的路由状态。使用PMIPv6协议的网络可以支持没有安装MIPv6的MN,从而降低了MN的协议复杂性,提高了切换性能。

PMIPv6的网络框架如图6-32所示。图6-32 代理移动IPv6网络框架

在网络框架中核心实体是本地移动锚(LMA)和移动接入网关(MAG)。

1.本地移动锚(LMA)

本地移动锚是代理移动IPv6域内移动节点的家乡代理。除了具有移动IPv6规范中的家乡代理功能之外,还具有额外的功能支持代理移动IPv6协议。LMA用来维持MN的接入状态和MN的家乡网络前缀,用于维护MN家乡地址同网络的连接。

2.移动接入网关(MAG)

移动接入网关作为一个接入路由器位于接入链路上,管理连接到其接入链路上的移动节点与移动相关的信令。MAG负责跟踪移动节点的连接和离开其接入链路的移动,发送信令到移动节点的本地移动锚。

MN在移动的过程中直接接入MAG,MAG检测到MN的接入或移动信息后代表MN来执行移动性管理,向LMA发送绑定注册消息。MAG对MN进行状态检测,并代表MN进行绑定消息的发送接收和绑定状态建立的过程,减少了MN参与切换的信令交互,节省了无线链路的带宽,减小了对信令消息的处理时延。

6.4.2 代理移动IPv6消息格式

代理移动IPv6对移动IPv6协议的消息进行了扩展。

1.代理绑定更新消息(Proxy Binding Update Message)

代理绑定更新消息是由移动接入网关向移动节点的本地移动锚发送的请求消息,用于在分配到给定移动节点接口上的家乡网络前缀和它当前的转交地址之间建立绑定,其格式如图6-33所示。图6-33 代理绑定更新消息

代理绑定更新消息中包含一个新的标记P来指示本地移动锚。对于移动节点发送的代理注册,这个标识符的值必须设置为1;而对于移动节点发送的直接注册,这个标识符的值必须设置为0。

2.代理绑定应答消息(Proxy Binding AcknowIedgement Message)

代理绑定应答消息是由本地移动锚发送给移动接入网关的确认消息,其格式如图6-34所示。图6-34 代理绑定应答消息格式

代理绑定应答消息中包含一个新的标记P来指示本地移动锚,处理对应代理绑定更新消息以支持代理注册。当对应的代理绑定更新消息的代理注册标识P的值设置为1时,这个标记的值才会设置为1。

3.家乡网络前缀选项(Home Network Prefix Option)

家乡网络前缀选项用于本地移动锚和移动接入网关之间代理绑定更新消息与代理绑定确认消息的交互。该选项用于交换移动节点的家乡网络前缀信息,其格式如图6-35所示。图6-35 家乡网络前缀选项格式

4.切换指示选项(Handoff Indicator Option)

切换指示选项用于本地移动锚和移动接入网关之间代理绑定更新消息与代理绑定确认消息的交互。该选项用于交换与切换相关的指示,其格式如图6-36所示。图6-36 切换指示选项格式

5.接入类型选项(Access TechnoIogy Type Option)

接入类型选项用于本地移动锚和移动接入网关之间代理绑定更新消息与代理绑定确认消息的交互。该选项用于交换移动节点当前连接的移动接入网关的接入技术类型,其格式如图6-37所示。图6-37 接入类型选项格式

6.移动节点链路层标记选项(MobiIe Node Link-Iayer Identifier Option)

移动节点链路层标记选项用于本地移动锚和移动接入网关之间代理绑定更新消息与代理绑定确认消息的交互。该选项用于交换移动节点的链路层标识符,必须根据RFC 3775协议中指定的每个移动选项的对齐要求进行合适地对齐,其格式如图6-38所示。图6-38 移动节点链路层标记选项格式

7.本地链路地址选项(Link-IocaI Address Option)

本地链路地址选项用于本地移动锚和移动接入网关之间代理绑定更新消息与代理绑定确认消息的交互。该选项用于交换移动接入网关的本地链路地址,以8n+6的方式对齐,其格式如图6-39所示。图6-39 本地链路地址选项格式

8.时间戳选项(Timestamp Option)

时间戳选项用于代理绑定更新消息与代理绑定确认消息中,以8n+2的方式对齐,其格式如图6-40所示。图6-40 时间戳选项格式

6.4.3 代理移动IPv6工作机制

代理移动IPv6的协议流程分为移动节点进入代理移动IPv6域的过程和移动节点在代理移动IPv6域内切换的过程。

1.MN进入PMIPv6域的过程(见图6-41)图6-41 MN进入PMIPv6域的流程

①当一个移动节点进入一个PMIPv6域并且连接到一条接入链路时,接入链路上的MAG识别接入的移动节点并且获得其身份标识ID,然后确定是否对该移动节点进行授权以提供基于网络的移动管理服务。

②MAG检测到MN接入并获得MN相应的地址配置后,要向MN的LMA发送一个代理绑定更新消息PBU以更新MN的当前位置。

③LMA对MAG发来的PBU消息进行解析处理,如果接受该绑定更新,则向MAG发送一个代理绑定确认消息PBA,PBA消息中包含MN的家乡网络前缀。同时,LMA为该MN建立一个绑定缓存条目BCE,用来存储MN的身份信息和路由信息,并且建立到MAG的双向隧道。

④MAG在接收到PBA消息后建立起到LMA的双向隧道,MAG向MN发送包含MN家乡网络前缀的路由通告。

⑤MN收到路由通告消息后将会根据MN的接口允许情况,使用有状态或无状态地址配置模式来配置它的接口。

⑥LMA截获由通信节点发往MN的数据包并通过双向隧道将这些数据包传送给MN接入的MAG。MAG在隧道另一端接收到数据包后,对数据包进行解封装并通过接入链路将其转发给MN。

⑦MN发送给通信节点的所有数据包都会发送到接入链路的默认路由器MAG上,并通过双向隧道传送至MN的LMA。在隧道另一端的LMA在接收到这些数据包之后,对数据包进行解封并将其路由至目的地。

2.MN在PMIPv6域内切换的过程(见图6-42)图6-42 MN在PMIPv6域内切换的流程

①在PMIPv6域中,如果MN获得初始地址配置之后执行切换,原链路上的MAG会检测到MN的离开并通知LMA,然后删除为MN维持的绑定信息和路由状态。

②LMA在接收到该通知后,会等待一段时间再删除MN的绑定信息,以确保MN的平滑切换。

③新链路上的MAG在检测到MN的接入之后将会向LMA发送信令消息更新MN的绑定状态。

④更新完毕,MN就可以继续接收包含其家乡网络前缀的路由通告。由于家乡网络前缀不变,MN的地址配置也不改变,MN认为它连接在相同的链路上并且可以一直使用原来的地址进行通信。

6.5 移动IPv6优势

移动IPv6是一个根本解决移动性问题的方案,它吸收了移动IPv4协议的优点,对移动IPv4协议做了许多改进,如路由优化、动态家乡代理发现等,提供了管理IPv6网络移动性的功能。移动IPv6协议与移动IPv4协议相比具有以下的优势。

①海量的地址:移动IPv6协议为每个移动节点分配了全球IPv6地址,为移动节点服务的链路预留了足够多的IP地址来给移动节点分配一个或多个转交地址。而在移动IPv4环境下,由于IPv4地址的短缺,要预留足够多的全球IPv4地址是不可能的。

②动态家乡代理发现机制:移动IPv6协议有效利用了IPv6的任播地址实现动态家乡代理发现机制,通过发送绑定更新给家乡代理的任播地址,从几个家乡代理中获得最合适的一个响应,而移动IPv4无法提供类似的机制。

③地址自动配置:移动IPv6协议使用无状态地址自动配置和邻居发现机制自动配置转交地址,不需要DHCP,也不需要外地链路上的外地代理来配置转交地址。

④安全机制:移动IPv6协议为所有的安全要求使用IPSec,如授权、数据完整性保护和重发保护。而移动IPv4中IPSec的使用是可选项。

⑤路由优化机制:移动IPv6协议指定了路由优化机制,避免了由于三角路由造成的带宽浪费,而路由优化是移动IPv4的一个附加功能。

⑥入口过滤功能:移动IPv6协议能够支持入口过滤策略,一个在外地链路上的移动节点使用其转交地址作为数据包的源地址,并将其家乡地址包含在其家乡地址目标选项中,由于在外地链路上转交地址是一个有效地址,所以数据包将顺利通过入口过滤。

第二部分 IPv6部署

第7章 IPv6技术过渡

●第8章 IPv6网络部署

●第9章 IPv6支撑系统过渡

●第10章 IPv6终端过渡

●第11章 IPv6网络安全第7章 IPv6技术过渡

本章重点探讨典型的IPv6过渡技术,包括双栈、翻译和隧道等技术,后续章节集中探讨部署问题。双栈技术指设备(比如路由器、主机等)同时运行IPv4和IPv6两个协议栈,同时转发IPv4、IPv6报文,分别与IPv4节点和IPv6节点通信;隧道技术指IPv6报文封装在IPv4隧道中或者IPv4报文封装在IPv6隧道中,实现IPv6孤岛或IPv4孤岛之间互通的能力,但需要注意隧道封装后导致IP报文长度增加,可能导致MTU问题,严重时会影响应用;翻译技术指IPv4包头与IPv6包头之间互相转换,从而帮助IPv6节点与IPv4节点互相通信。由于IPv4包头和IPv6包头在结构上存在差异,部分字段在翻译后消失,可能影响个别环境的应用。

IPv6过渡技术仍然在不断发展和完善中,比如DS-Lite、6RD等技术的标准还没有完全成熟,需要继续推进。随着各种过渡技术的发展,相关的标准(如RFC)和技术也在不断成熟和完善。读者有必要持续关注这方面的技术进展。

7.1 双栈技术

双栈技术是指设备同时运行IPv4和IPv6两种协议栈的技术实现方式,主要用于IPv4向IPv6过渡的应用场景。从技术实现上看,双栈技术是最成熟的过渡技术,也是其他过渡技术的基础。过渡,如隧道端点、协议转换网关等,都需要双栈技术支持。设备已经支持IPv6协议的网络设备、软件通常也会支持IPv4协议。

本节重点介绍DS-Lite、6RD两种技术,并对两种技术的特点和应用范围作比较详细的分析。

7.1.1 DS-Lite

DS-Lite是dual stack lite的简写,字面意思是精简的双栈,由FT、Comcast等国际运营商于2010年提出,在IPv4向IPv6过渡过程中提供一种用户接入方案,目前仍处于草案阶段,有待标准化。DS-Lite技术采用IPv4-in-IPv6隧道和NAT技术,由用户自主指定IPv4地址池,从而支持双栈用户访问IPv4资源。7.1.1.1 DS-Lite标准现状和技术现状

截至2010年12月,IETF形成了大约12个DS-Lite相关的draft文档和1个IETF AD文档。这些文档分别描述了DS-Lite的部署场景和多种扩展,比如地址配置选项、DHCPv6选项扩展、Radius扩展、DS-Lite中的flow label应用、DS-Lite的多播扩展等。与DS-Lite相关的IETF标准文档概况如表7-1所示。表7-1 DS-Lite的IETF标准概况

DS-Lite技术仍在不断推进中。一方面DS-Lite技术草案要成为标准文档,另一方面设备厂商需要开发DS-Lite的CPE和AFTR等设备,如华为等正在进行相关工作。DS-Lite的应用场景也需要解决一些与部署相关的问题,比如用户溯源问题。与此同时,France Telecom、Comcast等SP研究了DS-Lite的部署方案,但离真正的商业应用还有一定距离。7.1.1.2 DS-Lite接入模型

DS-Lite提供了一种双栈用户接入方式,[I-D. ietf-software-dual-stack-lite]做了较为详细的描述,并定义了DS-Lite各网络单元的功能。

图7-1描述了DS-Lite的接入模型。DS-Lite引入了两个概念:DS-Lite基本桥接宽带单元(B4)和地址簇转换路由器(Address Family Transition Router,AFTR)。前者负责创建到AFTR的隧道、封装/发送报文。后者负责终结隧道,完成报文的NAT转换和报文发送。B4和AFTR之间采用IP-in-IP隧道。图7-1 DS-Lite体系架构图

1.IP-in-IP隧道

在DS-Lite接入模型中,B4与AFTR之间的隧道用于在IPv6网络中承载用户的IPv4流量,采用IPv4-in-IPv6的封装方式。[I-D. ietf-software-dual-stack-lite]建议的隧道封装格式如图7-2所示,并允许采用其他隧道形式。图7-2 DS-Lite隧道报文的封装格式

其中,DS-Lite隧道报文的外层包头是IPv6报头,其源地址和目的地址分别是隧道端点设备CPE和CGN设备。IPv6头的下一报头字段指向IPv4头。

2.B4功能

B4功能单元可以部署在用户的家庭网关(如CPE),也可以部署在终端主机。当B4部署在CPE,CPE必须是路由型家庭网关,支持三层网络功能。当B4部署在终端主机,B4功能必须由专用的拨号软件实现,家庭网关只需支持二层功能,不需开启三层功能。除非特别说明,本章后面部分都基于路由型CPE部署B4的方式介绍。

在DS-Lite接入模型中,路由型CPE要求实现如下任务。

①完成CPE的IPv6接入和配置、用户主机的IPv6配置,比如用户主机的IPv6前缀、DNS服务器等。路由型CPE必须支持DHCPv6 PD。

②配置IPv4私有地址池(比如192.168.0.0/16),运行DHCPv4服务器,为用户主机分配IPv4私有地址(比如192.168.0.10等)。

③创建IP-in-IP隧道,隧道对端终结在CGN设备。

3.AFTR

AFTR功能由运营级NAT设备(CGN)完成。AFTR负责终结隧道,剥离IPv6包头,完成IPv4-IPv4的NAT转换。CGN部署在ISP的城域网或类似网络中,与CPE一起实现IPv4的接入和访问,同时提供NAT44转换功能。

在DS-Lite接入模型中,CGN必须具备如下功能。

①终结IP-in-IP隧道。与CPE之间建立隧道,拆除IPv6包头。

②提供NAT44转换功能。对于来自家庭网络、采用私有IPv4源地址的报文,CGN把报文的私有源地址替换成公有IPv4地址,并转发到IPv4互联网上。

③配置和维护IPv4公有地址池。

④创建和维护IPv4私有地址、公有地址之间的映射关系。为了区分不同用户,CGN需要同时维持CPE的IPv6地址与公有地址之间的映射关系。7.1.1.3 DS-Lite网络架构

DS-Lite提供一种用户接入技术,分别由用户终端、CGN、ISP网络构成。DS-Lite技术的网络架构如图7-3所示。图7-3 DS-Lite网络架构

1.PC终端

在现有网络条件下,大量的应用程序在开发时没有考虑支持IPv6的问题,导致应用程序无法运行在仅开启IPv6协议栈的终端主机上。为了支持这些应用程序,PC终端有必要同时运行IPv4和IPv6协议栈。

同时,对于桥接型用户,PC终端运行DS-Lite软终端,执行B4功能,需要完成如下功能。

①配置IPv4地址。

②通过IPv6接入ISP网络。

③与CGN之间创建IP-in-IP隧道。

2.CPE

在DS-Lite架构中,桥接型CPE不需要运行三层功能,对DS-Lite接入透明。现有桥接型CPE可以支持DS-Lite接入。

路由型CPE运行三层网络功能,与DS-Lite接入关系密切。具体地说,路由型CPE必须实现如下功能。

①通过IPv6接入ISP网络。

②运行DHCP-PD等功能,完成用户家庭网络的配置。

③运行B4功能,与CGN之间创建隧道,完成IPv4-in-IPv6报文的封装和解封装。

3.CGN

CGN作为运营级NAT,部署在ISP网络中。CGN的核心功能是AFTR,执行如下任务。

①与CPE之间创建IP-in-IP隧道,完成报文的封装、解封装等功能。

②执行运营级NAT转换。

4.BRAS/SR

与AAA等系统一起完成用户认证,接入IPv6用户。

5.接入网络

在DS-Lite架构中,CPE与CGN之间经过接入网和ISP网络。接入网可能是三层网络,也可能是二层网络。三层接入网的典型代表是FT、Comcast等国际运营商的网络。二层接入网的典型代表是中国电信、中国网通的宽带接入网络。(1)三层接入网的DS-Lite架构

在通常情况下,如果三层接入网开启了IPv4协议栈,用户的IPv4报文只需由接入网转发,不必在IPv4报文之前增加一层IPv6报文头,也不需要增加IPv4-in-IPv6的隧道封装。如果三层接入网只开启了IPv6协议栈,用户的IPv4报文必须封装在IPv6报文里才能传送。因此,DS-Lite适用于三层接入网已经IPv6化的场景,IPv6报文由IPv6接入网转发,IPv4报文必须封装在IPv6报文中才能由IPv6接入网转发。

对于已经运行的IPv4接入网,如果要实现DS-Lite架构,IPv4接入网必须改造成IPv6接入网。首先,接入网设备必须升级,保证接入网设备的硬件和软件可以运行IPv6协议;其次,接入网设备必须升级到IPv6,运行各种IPv6协议;最后,接入网设备需要关闭IPv4协议,同时在CPE和ISP网络之间部署IPv4-in-IPv6的隧道。

如果新建接入网实现DS-Lite架构,新建接入网只需要运行IPv6协议栈,不需要运行IPv4协议栈。CPE和ISP网络之间部署IPv4-in-IPv6的隧道,完成DS-Lite各网络单元的配置,即可实现DS-Lite的部署。

在DS-Lite架构下的三层接入网可以跨域多个域,从而形成如图7-4所示的网络架构。图7-4 接入网跨多个域的DS-Lite网络架构

在图7-4中,接入网1、接入网2可以由不同的运营商管理。其中,CPE、CGN必须由同一个ISP管理。这种网络架构适合缺少接入网络的ISP提供宽带接入服务。(2)二层接入网的DS-Lite架构

在二层接入网中,用户CPE与ISP网络之间不需要运行IPv4和IPv6协议栈和各种网络协议,但需要运行二层协议,比如PPP、IEEE 802.3等,用户CPE可以通过PPPoE或IPoE接入ISP网络。

在PPPoE接入方式中,用户IPv4、IPv6报文都封装在PPP帧里,现有二层网络不需要识别IPv4和IPv6,也不需要区分两者的差异。因此,在PPPoE接入方式的DS-Lite架构下,现有接入网不受IPv6部署的影响,但要求CPE支持B4功能。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载