IPv4 和 IPv6 头部结构主要区别

IPv4,是互联网协议(Internet Protocol,IP)的第四版,也是第一个被广泛使用,构成现今互联网技术的基石的协议。  IPv6是Internet Protocol Version 6的缩写,其中Internet Protocol译为“互联网协议”。IPv6是IETF(互联网工程任务组,Internet Engineering Task Force)设计的用于替代现行版本IP协议(IPv4)的下一代IP协议。

让我们来看一下IPV4和IPV6的区别在哪里

31                                     0
     |----|----|------|--|-------------------|----------
     |ver |ihl | -tos -|    tot_len        |
     |----|----|------|--|-------------------|
     |       id          |   frag_off       -|
     |---------|---------|-------------------|
     |   ttl   |protocol |    check          | 20 Bytes
     |---------|---------|-------------------|
     |                saddr                  |
     |---------------------------------------|
     |                daddr                  |
     |---------------------------------------|
----------
     |                                       |
    -|                options                |
 40 Bytes
     |                                       |

     |
---------------------------------------|

            
              IPv4 (Internel协议)头部 

 

 

这里对IPv4IPv6头部的一些常用的重要字段进行整理总结,没做出解释的是一些不常用到的字段,有兴趣可以自行查阅。

 

MAC header

IPv4 header

Data :::

 

1.      IPv4 header:

 

00

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

Version

IHL

Differentiated Services

Total length

Identification

Flags

Fragment offset

TTL

Protocol

Header checksum

Source IP address

Destination IP address

Options and padding :::

 

 

·         VersionIP版本号4 ;

·         IHL: IP 头部长度,以字节表示;

·         Total Length:整个IP报长度,包含IP头部和数据,以字节表示 ;结合IP头部长度便可确定IP报数据部分的开始和结束;

·         TTL:IP数据包生存周期,通常每经过一次路由该值就会被减一;

·         Protocol:表示传输层是哪种协议,该值有IANA统一规定(http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml)

·         Source/Destination IP address消息的源/目的IP地址,这两地址不会随着消息的路由而发生变化。

IPv4数据报分片相关的Field

首先接受为何要分片,以太网规定网络间传输的MTU1500个字节,超过1500个字节的IP报就需要被分片;此外不同的链路层(Token Ring,FDDI…)规定的MTU值是不同的,在一个IP报从源地址送到目的地的过程中可能需要经过各种不同的网络,所以即使在以太网里面不分片,在其他网络里面可能被分片。

·         Identification源主机每发出一个数据包就会为该数据包分配一个唯一的Identification值,通常是依次递增的方式分配;加入IP报在某个路由上需要分片,则 Identification会被复制到每一个分片的IP头中。

·         Flags:一共有三个bit,第一个bit目前不用,始终为0;第二个bit0表示允许分片;为1表示不允许分片;第三个bit0表示这是最后一个IP报分片,为1表示后面还有更多的IP报分片;

·         Fragement Offset:表示该分片距离原始IP数据包的偏移字节数;

·         Total LengthIP报被分片后,该值需要被更新为新分片的总长度;

 

MAC header

IPv6 header

Data :::

 

2.      IPv6 header:

 

00

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

Version

Traffic Class

Flow Label

Payload Length

Next Header

Hop Limit

Source address :::

Destination address :::

Data :::

 

·         VersionIP版本号6 ;

·         Payload Length:由于IPv6的基本头部的长度是固定的,所以只需要记录Payload的长度即可定位一个IP数据包的结束,这里的Payload包含IPv6的扩展头部。

·         Hop Limit:和IPv4中的TTL作用一致;

·         Source/Destination IP address消息的源/目的IP地址,格式变为IPv6IP地址格式;这两地址不会随着消息的路由而发生变化。

·         Next Header:相当于IPv4中的protocol域,标识上层协议(协议的标识值与IPv4兼容);此外的另一个作用是标识IPv6的扩展头部,目前IPv6定义了7中扩展头部,每一中扩展头部都有一个数值来标识,比如基本头部中的Next Header中的值是44,表示基本头部后面紧跟一个分段扩展头部;

 

0

逐跳头

43

选路头( R H )

44

分段头( F H)

51

身份验证头( A H )

52

封装安全性净荷( E S P )

59

没有下一个头

60

目的地选项头

 

扩展头部的基本结构如下:

扩展头部的第一字节也是Next Header,作用同基本头部中的Next HeaderIPv6除了基本头部之外可以带多个扩展头部,如果带有扩展头部则基本头部中的Next Header指示第一个扩展头部类型,否则指示传输层的协议类型;如果带有多个扩展头部,则扩展头部中的Next Header依次指示下一个扩展头部类型,最后一个扩展头部的Next Header指示传输层的协议类型;如下图所示:

 

扩展头部的第二个字节是该扩展头部的长度,依此可找到该扩展头部的结束位置;某些类型的扩展头部(比如,分段扩展头部)长度是固定的,则该字节作为保留字节不用。

IPv6的分片:

IPv6IPv4的分片进行了以下主要改进:

1)      IPv6只允许源节点对数据包进行分片,不允许中间路由分片,这样一来一个数据包如果需要分片则只进行一次分片即可;源主机为了判断是否需要分片,需要获取路径MTU

2)      IPv4的头部有些字段只和分片有关系,也就是说,在无需分片的时候,这些字段是没有用的,IPv6对此进行了改进,只有在需要分片的时候,才加一个“分段扩展头部”,把和分片相关的信息放到这个扩展头部中,从而提高了传输效率。

分段扩展头部结构:

 

·         分段偏移值:与 I P v 4的分段偏移值字段很相似。此字段共 1 3位,以8字节为单位,表示此包(分段)中数据的第一个字节与原来整个包中可分段部分的数据的第一个字节之间的位置关系。换言之,若该值为1 7 5,表示分段中的数据从原包的第1 4 0 0字节开始。

·         M:此位表示是否还有后续字段。若值为 1,表示后面还有后续字段;若值为 0则表示这是最后一个分段。

·         标识:该字段与I P v 4的标识字段类似,但是为3 2位,而在I P v 4中为1 6位。源节点为每个被分段的I P v 6包都分配一个3 2位标识符,用来唯一标识最近 (在包的生存期内)从源地址发送到目的地址的包。

注意:整个I P v 6包中只有部分可以被分段,可分段的部分包括:净荷和只能在到达最终目的地时才处理的扩展头。对于 I P v 6头和在发往目的节点的途中必须由路由器处理的扩展头,如选路头或逐跳选项头,则不允许进行分段。





有什么问题可以加群,100852896
点击这里加入此群 在线提问
文章来自: 本站原创
Tags: 协议 ipv4 ipv6 socket编程
评论: 0 | 查看次数: 5173
博主QQ: 友情链接请找我
QQ群: 灰色档案
返回顶部 关闭