ToB企服应用市场:ToB评测及商务社交产业平台
标题:
网络网络层之(5)IPv6协议
[打印本页]
作者:
莱莱
时间:
2024-6-28 07:09
标题:
网络网络层之(5)IPv6协议
网络网络层之(5)IPv6协议
Author: Once Day Date: 2024年5月12日
一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,大概尽头只是一场白日梦…
漫漫长路,有人对你微笑过嘛…
全系列文档可参考专栏:通讯网络技能_Once-Day的博客-CSDN博客。
参考文章:
《TCP/IP详解卷一》
【网络协议详解】——IPv6协议(学习笔记)_ipv6 csdn-CSDN博客
一文看懂IPv6 - 知乎 (zhihu.com)
IPv6网络协议 | 最全参考资料 - whilewell - 博客园 (cnblogs.com)
Info-Finder(在线工具) 报文格式 (huawei.com)
IP 报文格式大全 (huawei.com)
1. 先容
1.1 IPv6协议
随着互联网的快速发展,IPv4地点空间面临耗尽的题目。为相识决这一题目,互联网工程使命组(IETF)在20世纪90年代初开始研究下一代互联网协议。经过多年的努力,IPv6协议最终于1998年12月由IETF正式发布。
IPv6(互联网协议版本6)是互联网协议(IP)的最新版本,旨在办理IPv4地点枯竭题目,并为将来互联网的发展提供更好的支持。
主要特点如下:
巨大的地点空间
:IPv6使用128位地点,总地点数量是2的128次方,理论上可以说地点数量近乎无限,IPv6可以给地球上的每粒沙子都分到1个地点。
简化的报文头
:IPv6优化了报文头布局,并且固定头部大小为40字节,淘汰了开销,进步了路由效率。
内置安全性
:IPv6支持IPsec协议,可以实现端到端的加密和身份验证。
更好的服务质量(QoS)
:IPv6引入了流标签和优先级字段,方便实现差异化服务。
无状态自动配置
:IPv6支持无状态地点自动配置(SLAAC),简化了网络管理。
与IPv4的区别和接洽:
地点长度差别
:IPv4使用32位地点,而IPv6使用128位地点。
报文头布局差别
:IPv6简化了报文头布局,取消了某些字段,并引入了扩展头。
安全性差别
:IPv6内置了IPsec支持,而IPv4需要额外配置。
过渡机制
:为了实现从IPv4到IPv6的平滑过渡,引入了多种过渡机制,如双栈、隧道等。
兼容性
:IPv6是向后兼容的,可以与IPv4共存。但IPv4装备无法直接与IPv6装备通讯,需要借助过渡机制。
IPv6是互联网协议的将来,它办理了IPv4地点枯竭题目,并为将来互联网的发展提供了更好的支持。
1.2 IPv6相关协议
这些协议族协同工作,构建了一个完整的IPv6网络架构,每个协议都有其特定的功能和用途:
IPv6基本协议(RFC 8200)
,定义了IPv6数据包的格式和处理规则,包罗地点格式、报文头布局、扩展头等。
ICMPv6(互联网控制消息协议版本6,RFC 4443)
,用于通报错误消息和控制信息,包罗邻居发现、路径MTU发现、多播侦听器发现等功能。
NDPv6(邻居发现协议版本6,RFC 4861)
,用于发现同一链路上的邻居节点,包罗路由器发现、前缀发现、地点解析、重复地点检测等功能
DHCPv6(动态主机配置协议版本6,RFC 8415)
,用于自动分配IPv6地点和配置网络参数,包罗有状态和无状态两种模式。
IPsec(互联网安全协议,RFC 4301)
,提供了Authentication Header(AH)和Encapsulating Security Payload(ESP)两种安全机制,用于掩护IPv6数据包的完整性、机密性和真实性。
MLD(多播侦听器发现协议,RFC 3810)
,用于IPv6组播管理,允许主机向路由器报告其地点的多播组,类似于IPv4中的IGMP协议。
SEND(安全性增强的邻居发现协议,RFC 3971)
,为NDPv6提供安全性增强,防止诱骗攻击。
移动IPv6(RFC 6275)
,支持移动节点在差别网络之间环游,保持通讯一连性。
流量标签(RFC 3697)
,用于标识一个流,以便网络装备提供特定的服务质量(QoS)。
隧道协议(如6to4、6rd、ISATAP等)
,用于在IPv4网络上传输IPv6数据包,实现IPv6过渡。
1.3 相关RFC文档
以下是与IPv6相关的主要RFC文档:
RFC 2460 - Internet Protocol, Version 6 (IPv6) Specification
,定义了IPv6协议的基本规范,包罗地点格式、报文格式等。
RFC 4291 - IP Version 6 Addressing Architecture
,描述了IPv6的地点体系布局,包罗地点范例、格式和分配方式。
RFC 4443 - Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification
,定义了ICMPv6协议,用于通报错误消息和控制信息。
RFC 4861 - Neighbor Discovery for IP version 6 (IPv6)
,描述了IPv6的邻居发现协议(NDP),用于发现同一链路上的邻居节点。
RFC 4862 - IPv6 Stateless Address Autoconfiguration
,定义了IPv6的无状态地点自动配置(SLAAC)机制。
RFC 3315 - Dynamic Host Configuration Protocol for IPv6 (DHCPv6)
,描述了DHCPv6协议,用于自动分配IPv6地点和配置网络参数。
RFC 4301 - Security Architecture for the Internet Protocol
,定义了IPsec协议,为IPv6提供安全性掩护。
RFC 3810 - Multicast Listener Discovery Version 2 (MLDv2) for IPv6
, 描述了MLDv2协议,用于IPv6组播管理。
RFC 3971 - SEcure Neighbor Discovery (SEND)
,为NDP提供安全性增强,防止诱骗攻击。
RFC 6275 - Mobility Support in IPv6
,描述了移动IPv6协议,支持移动节点在差别网络之间环游。
RFC 3697 - IPv6 Flow Label Specification
,定义了IPv6流量标签,用于标识一个流,提供服务质量(QoS)。
RFC 5095 - Deprecation of Type 0 Routing Headers in IPv6
,废弃了IPv6中的0型路由头,以进步安全性。
RFC 7045 - Transmission and Processing of IPv6 Extension Headers
,规定了IPv6扩展头的传输和处理规则。
RFC 8200 - Internet Protocol, Version 6 (IPv6) Specification
,更新了RFC 2460,是当前IPv6协议的最新规范。
1.4 RFC2460和RFC 8200区别
RFC 2460和RFC 8200都是关于IPv6协议规范的文档,但RFC 8200是RFC 2460的更新版本:
文档状态
,RFC 2460是IPv6的原始规范,发布于1998年12月。RFC 8200是IPv6的更新规范,发布于2017年7月,废弃了RFC 2460。
扩展头的处理
,RFC 2460中,节点必须按照扩展头在报文中出现的顺序依次处理每个扩展头。RFC 8200中,节点只需检察目标地点之前的扩展头,处理顺序不再严格要求。
逐跳选项扩展头的处理
,RFC 2460要求所有节点都必须处理逐跳选项扩展头。RFC 8200允许中间节点在转发数据包时忽略逐跳选项扩展头,以进步性能。
路由头的处理
,RFC 2460定义了0型路由头(RH0),但厥后发现RH0存在安全漏洞。RFC 8200明确禁止使用RH0,并引用了RFC 5095关于弃用RH0的规定。
分片头的处理
,RFC 2460中,分片头可以出如今扩展头链的恣意位置。RFC 8200要求分片头必须紧跟在目标地点之后,以简化分片处理。
校验和的计算
,RFC 2460和RFC 8200对IPv6报文校验和的计算方法做了一些细微的调解,以适应扩展头处理方式的变革。
RFC 8200在保持IPv6协议基本稳定的环境下,对一些细节做了优化和调解,以进步协议的安全性、效率和实现的灵活性
。
2. 报文格式
2.1 IPv6报文格式
IPv6数据包由两部分组成:IPv6基本首部和有效载荷。IPv6基本首部是固定长度的40字节。
IPv6首部字段先容如下:
版本(Version,4位)
,指定互联网协议的版本号,对于IPv6,其值为6。
通讯范例(Traffic Class,8位)
,用于区分差别范例的数据包,以提供差异化服务,分为两个小字段:
差异化服务(DiffServ或DS,6位)
和
显式拥塞通知(ECN,2位)
。
流标签(Flow Label,20位)
,用于标识一个特定的流,以便网络装备提供特定的服务质量(QoS)。
有效载荷长度(Payload Length,16位)
,指定IPv6数据包中有效载荷的长度,以字节为单位。
下一个首部(Next Header,8位)
,指定紧跟在IPv6基本首部之后的扩展头或上层协议范例,如TCP、UDP等。
跳数限制(Hop Limit,8位)
,指定数据包在网络中可以经过的最大跳数,每经过一个节点就减1,当跳数限制为0时,数据包将被扬弃。
源地点(Source Address,128位)
,指定数据包的源IPv6地点。
目标地点(Destination Address,128位)
,指定数据包的目标IPv6地点。
2.2 IPv4首部和IPv6首部差别
IPv6首部相对于IPv4首部进行了一些字段的删除和更改:
版本(Version)
,IPv4和IPv6都有版本字段,但IPv6的版本号固定为6。
首部长度(Header Length)
,IPv6删除了首部长度字段,由于IPv6的基本首部长度固定为40字节。
总长度(Total Length)
,IPv6删除了总长度字段,引入了有效载荷长度(Payload Length)字段,只指定有效载荷的长度。
标识(Identification)、标志(Flags)、片偏移(Fragment Offset)
,IPv6删除了这些字段,由于IPv6不允许中间节点进行分片,相应功能包含在IPv6数据报的分片扩展首部中。
生存时间(Time to Live,TTL)
,IPv6将生存时间字段重命名为跳数限制(Hop Limit),功能相同。
协议(Protocol)
,IPv6将协议字段重命名为下一个首部(Next Header),功能相同。
首部校验和(Header Checksum)
,IPv6删除了首部校验和字段,由于链路层和上层协议已经提供了足够的错误检测机制。
选项(Options)
,IPv6删除了选项字段,引入了扩展头的概念,更加灵活和高效。
2.3 IPv6流标签
IPv6首部中的流标签(Flow Label)字段是一个20位的标识符,用于标识一个特定的数据流。流标签的主要功能是为IPv6数据包提供一种特殊的处理方式,以满足某些应用或服务的需求。
服务质量(QoS)支持
,流标签可以用于辨认需要特定服务质量的数据流,如实时音视频、在线游戏等。
流量工程(Traffic Engineering)
,流标签可以用于实现流量工程,即根据网络状态和策略,将特定的数据流导向指定的网络路径。
负载均衡(Load Balancing)
,流标签可以用于实现负载均衡,即将同一数据流的数据包分配到差别的网络路径或服务器上处理。
流量统计和分析
,流标签可以用于辨认和统计特定的数据流,如用户会话、应用流量等。
流量加密和认证
,流标签可以与IPsec等安全机制结合使用,为特定的数据流提供加密和认证服务。
需要注意的是,流标签的使用是可选的,并非所有的IPv6数据包都必须使用流标签。
流标签的值由源节点生成,并在数据包的整个生命周期内保持稳定,中间节点不能修改流标签的值,但可以根据流标签提供特定的处理
。
2.4 IPv6扩展首部
参考华为产品支持文档:IP 报文格式大全 (huawei.com)
扩展报头。IPv6取消了IPv4报头中的选项字段,并引入了多种扩展报文头,在进步处理效率的同时还增强了IPv6的灵活性,为IP协议提供了良好的扩展本领
。当高出一种扩展报头被用在同一个分组里时,报头必须按照下列顺序出现:
IPv6基本报头
,顺序1,值41。
逐跳选项扩展报头(Hop-by-Hop Options)
,顺序2,值为0,在IPv6基本报头中定义。
目的选项扩展报头(Destination Options)
,顺序3/8,值为60,指那些将被分组报文的最终目的地处理的选项。
路由扩展报头(Routing)
,顺序4,值为43,用于源路由选项和Mobile IPv6。
分片扩展报头(Fragment)
,顺序5,值为44,在源节点发送的报文高出Path MTU时对报文分片时使用。
授权扩展报头(Authentication Header)
,顺序6,值为51,用于IPSec,提供报文验证、完整性检查。定义和IPv4中相同)
封装安全有效载荷扩展报头(Encapsulating Security Payload)
,顺序7,值为50,用于IPSec,提供报文验证、完整性检查和加密。定义和IPv4中相同。
上层扩展报头
,如TCP/UDP/ICMP等,详细请见:IP 报文格式大全 (huawei.com)。
除了目的选项扩展报头出现两次(一次在路由扩展报头之前,另一次在上层扩展报头之前),别的扩展报头只出现一次。不是所有的扩展报头都需要被转发路由装备检察和处理的。路由装备转发时根据基本报头中Next Header值来决定是否要处理扩展头。
2.5 IPv6逐跳选项和目的地选项
IPv6逐跳选项和目的选项都是IPv6扩展头部,用于在IPv6数据包中携带额外的信息。它们的编码格式如下:
|动作(2位)|chg(1位)|类型子字段(5位)|选项数据长度(8位)|选项数据.....
|----- Type(选项类型) ------|
复制代码
逐跳选项(Hop-by-Hop Options)和目的选项(Destination Options)都可以出现多次,选项统一编码为TLV格式(范例-长度-值)。
动作
,在选项没有被辨认时指示一个IPv6节点如何执行下一步动作。
改变(chg)
,指明在数据包转发时选项数目是否改变。
选项数据长度
,给出选项数据的字节长度。
选项范例的前两位“动作”字段用于确定不辨认选项时的处理方式:
00:忽略该选项,继续处理头部。
01:扬弃数据包,保持沉默。
10:扬弃数据包,并发送一个
ICMP参数题目
消息给源地点(除非数据包有多播目的地点)。
11:扬弃数据包,并发送一个
ICMP参数题目
消息给源地点(纵然数据包有多播目的地点)。
下面是携带在逐跳选项(H)或者目的地选项(D)扩展头部中的IPv6选项:
选项名头部(H/D)动作改变范例长度RFC文档填充1(Pad1)H/D0000N/ARFC 8200填充N(PadN)H/D0001可变RFC 8200超大有效载荷(Jumbo Payload)H1101948RFC 2675隧道封装限制(Tunnel Encapsulation Limit)D00044RFC 2473路由器告诫(Router Alert)H00054RFC 2711快速启动(Quick-Start)H00168RFC 4782家乡地点(Home Address)D01020116RFC 6275CALIPSOD00078-256RFC 5570 表格说明:
头部(H/D):H表示逐跳选项,D表示目的地选项。
动作:表示节点不辨认选项时的处理方式,参考之条件到的选项范例前两位。
改变:表示选项是否可以被中间节点修改,"0"表示不可修改。
范例:选项的范例值。
长度:选项的长度范围(以字节为单位)。
2.6 IPv6超大有效载荷
IPv6超大有效载荷(Jumbo Payload)选项是一种IPv6逐跳选项,用于支持长度高出65535字节的IPv6数据包。在IPv6基本头部中,有效载荷长度字段为16位,最大值为65535。当数据包长度高出此限制时,就需要使用Jumbo Payload选项。
当IPv6数据包的有效载荷长度高出65535字节时,IPv6基本头部中的有效载荷长度字段必须设置为0
。
Jumbo Payload选项必须作为逐跳选项头部的最后一个选项出现。
所有处理Jumbo Payload选项的节点都必须支持高出65535字节的数据包。
如果节点不支持Jumbo Payload选项,它应该发送一个ICMP参数题目消息。
使用场景:
IPv6 Jumbograms:支持超大数据包传输,进步网络效率,特殊适用于高速网络环境。
大规模数据传输:如科学计算、数据中心之间的数据迁移等。
2.7 IPv6隧道封装限制
IPv6隧道封装限制(Tunnel Encapsulation Limit)选项是一种IPv6目的地选项,用于限制IPv6数据包在封装隧道中的嵌套深度。当IPv6数据包通过多个隧道传输时,每个隧道都会为数据包添加一层新的封装。如果嵌套深度过大,大概会导致数据包处理耽误增加、网络性能降落,甚至出现环路。
Tunnel Encapsulation Limit选项仅在目的地选项头部中有效。
当一个节点吸收到带有Tunnel Encapsulation Limit选项的数据包时,它应该检查隧道封装限制字段的值:
如果该值为0,节点应该扬弃数据包并发送一个ICMP参数题目消息。
如果该值非0,节点应该将其减1,并将数据包转发到下一个隧道或最终目的地。
当一个节点封装数据包时,如果数据包中已经存在Tunnel Encapsulation Limit选项,节点应该将隧道封装限制字段的值减1。如果减1后的值为0,节点应该扬弃数据包并发送一个ICMP参数题目消息。
如果封装后的数据包中不存在Tunnel Encapsulation Limit选项,节点可以在新的目的地选项头部中插入该选项,并设置得当的隧道封装限制值。
使用场景:
防止隧道嵌套过深:通过限制隧道嵌套深度,可以制止数据包在网络中无限循环或过度耽误。
网络安全:限制隧道嵌套深度可以低落某些范例的攻击(如DOS攻击)的风险。
2.8 IPv6路由头部
IPv6路由头部(Routing Header)是一种IPv6扩展头部,用于指定数据包在到达最终目的地之前经过的一个或多个中间节点。通过使用路由头部,源节点可以控制数据包的转发路径,实现诸如源路由、移动IPv6等功能。
|下一个头部(1字节)|头部扩展长度(1字节)|路由类型(1字节)|剩余部分(1字节)|保留(4字节)|N个IPv6地址...
复制代码
下一个头部
,标识跟在路由头部后面的头部范例。
头部扩展长度
,表示路由头部的长度(不包罗前8字节),以8字节为单位。
路由范例
,标识路由头部的范例,差别范例有差别的格式和处理方式。
剩余部分
,指示剩余未处理的路由段数量。
保留地点
,保留为零值。
IPv6地点
,包含特定于路由范例的数据,如路由地点列表。
常见的路由范例:
范例0(已弃用)
,源路由,指定数据包经过的完整节点列表。
范例1
,宽松源路由(Nimrod,已弃用)。
范例2
,移动IPv6的路由头部,用于优化移动节点与对应节点之间的通讯。
范例3
,RPL(IPv6路由协议for 低功耗有损网络)的源路由头部。
范例4
,节点定义的路由头部,用于实验或特定应用。
处理流程:
当一个节点吸收到带有路由头部的数据包时,它应该检查路由范例字段:
如果节点不支持该路由范例,它应该扬弃数据包并发送一个ICMP参数题目消息,指向路由范例字段。
如果节点支持该路由范例,它应该根据范例特定数据和剩余部分字段来处理数据包。
处理完路由头部后,节点应该将剩余部分字段减1,并将数据包转发到下一个目的地(如果还有剩余路由段)或最终目的地。
如果剩余部分字段减为0,表示路由头部已处理完毕,数据包应该被通报到上层协议或应用程序。
过度使用路由头部大概会引入安全风险(如IP诱骗、DOS攻击等)和性能题目,
一些路由范例(如范例0)由于安全题目已被弃用
。
2.9 IPv6分片头部
IPv6分片头部(Fragment Header)是一种IPv6扩展头部,用于支持IPv6数据包的分片和重组功能。当一个IPv6数据包的大小高出传输路径的MTU(最大传输单元)时,需要对数据包进行分片。分片头部包含了分片相关的信息,以便目的节点可以大概精确地重组分片。
|下一个头部(8位)|保留0(8位)|分片偏移(13位)|Res(2位)|M(1位)|标识符(32位)
复制代码
下一个头部
,标识跟在分片头部后面的头部范例。
保留
,保留字段,必须设置为0。
分片偏移
,指定分片在原始数据包中的偏移量,以8字节为单位。
Res
,保留字段,必须设置为0。
M标志
,指示是否还有更多的分片,1表示后面还有分片,0表示这是最后一个分片。
标识
,标识属于同一原始数据包的所有分片,用于重组。
处理流程
:
当一个节点需要发送的数据包大小高出传输路径的MTU时,它应该对数据包进行分片:
将原始数据包划分为多个小于便是MTU的分片。
为每个分片生成一个新的IPv6头部,并设置分片头部的相关字段。
将每个分片作为独立的IPv6数据包发送。
当一个节点吸收到带有分片头部的数据包时:
检查分片头部的字段是否有效,如果无效,扬弃数据包并发送ICMP参数题目消息。
根据标识字段判断分片是否属于同一原始数据包。
使用分片偏移和数据包长度将分片按顺序组装起来。
当收到所有分片(M标志为0的分片)时,重组原始数据包并通报给上层协议或应用程序。
如果一个节点在重组过程中遇到题目(如缺失分片、重叠分片等),它应该扬弃所有相关分片并发送ICMP超时消息。
IPv6的分片功能与IPv4有所差别。在IPv6中,只有源节点可以执行分片,中间节点不允许对数据包进行分片。这种计划可以简化网络处理,进步效率。
Once Day
也信尤物终作土,不堪幽梦太急忙......
如果这篇文章为您带来了资助或启发,不妨点个赞
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4