IP协议
IP详解
1、前言
网际协议(Internet Protocol,也称互联网协议)是用于分组交换数据网络的一种协议。
IP是在TCP/IP协议族中的网络层的主要协议,任务仅仅是根据源主机和目的主机的地址来传送数据。为此目的。IP地址了寻址方法和数据包的封装结构。
2、IPv4
2.1头部
2.2字段详解:
Version(版本号):长度4比特。表示目前采用的IP协议的版本号,一般值为0100(IPv4)、0110(IPv6)
IHL(Header Length,IP包头长度):长度4bit,这个地段的作用是为了描述IP包头的长度,因为在IP包头中有变长的可选部分。该部分占32bit(4字节),即本区域值=IP头部长度(bit)/(8*4),因此,一个IP白头的长度最长为“1111”,即15*4=60个字节。IP白头最小长度为20字节
TyPe of Service(服务类型):长度8bit。按位被如下定义PPP D T R C 0:
PPP:定义包的优先级,取值越大数据越重要
000 普通(Routine)
001 优先(Priority)
010 立即发送(Immediate)
011 闪电式(Flash)
100 比闪电还快的闪电式(Flash Override)
101 CRI/TIC/ECP
110 网间控制(Internetwork Control)
111 网络控制(Network COntrol)
D 时延:0 普通 ;1 延迟尽量小
T 吞吐量:0 普通 ;1 流量尽量大
R 可靠性:0 普通 ; 1 可靠性尽量大
M 传输成本:0 普同 ; 1 成本尽量小
0 最后一位保留,恒定为0
Totlal Length(IP包总长度):长度16bit。以字节为单位计算的IP包的长度(包含头部和数据),所以IP包的最大长度65535字节。
Identification(标识符):长度为16bit,该字段和Flags和Fragment Offest字段联合使用,对较大的上层数据包进行分段(Fragment)操作。路由器将一个包拆分后,所有拆分的小包被标记相同的值,以便目的端设备能够区分那个包属于被拆开的包的一部分。
Flags(标记):长度3bit,
该字段第一位不使用,作为保留。
DF(Don‘t Fragment)位,DF位置1时表明路由器不能对该上层数据包分段。如果一个上层数据包无法在不分段的情况下进行转发,则路由器会丢弃该上层数据包并返回一个错误信息。
MF(More Franment)位,当路由器对一个上层数据包分段,则路由器会在除最后一个分段的IP包的包头中将MF置为1.
Fragment Offset(片偏移):长度13bit,表示该IP包在该组分片包中位置,接收端依照此数据进行还原IP包。
举例:片偏移以8哥字节为偏移单位,假定MTU=1500
三个包标识ID相同,三个包DF都为0,前两个MF=1,之后一个MF=0
TTL(生存时间):长度8bit。当IP包进行传送时,先会对该字段赋予某个特定的值。当IP包经过每一个沿途的路由器的时候,每一个沿途的路由器都会将IP包的TTL值减少1,如果TTL值减少为0,则该IP包会被丢弃。这个字段可以用于防止路由环路而导致IP包在网络中不停被转发。
Windows : TTL 128
Linux:TTL 64 #可通过/proc/sys/net/ipv4/ip_default_ttl进行修改
Protocol(协议):长度8bit,标识了上层所使用的协议。
Header Checksum(头部校验):长度16bit。用来做IP头部的正确性检测,但不包含数据部分,因为每个路由器要改变TTL的值,所以路由器会为每个通过的数据包重新计算这个值。
Source and Destination Addresses(源和目的地址):长度分别为32bit。标识了这个IP包的源地址和目的地址。注意如果使用了NAT,那么在整个传输过程中,这两个地址会发生改变。
3、IPv6
3.1IPv6基本数据包头格式
3.2字段详解
版本:Internet协议的4bit版本,此处0110(IPv6)
通信类:8bit通信类字段
流标签:20bit,源可以使用IPv6标头钟的20bit“流标签”字段标记要请求IPv6路由器进行特殊处理的数据包序列。不支持“流标签”字段功能的主机或路由器需要在发起数据包时将其设置为0,在转发数据包时将其转递为不变,并在接收数据包时忽略该字段。
有效负荷长度:16bit无符号整数,这是紧随IPv6数据包头之后的其余数据部分(用8位字节表示)
下一个头:8bit选定器,标识紧跟在IPv6数据包头后面的类型,使用与IPv4协议字段相同的值
跃点限制:8bit无符号整数。按转发包的每个节点逐一递减,如果跃点限制递减到零,那么数据包会被丢弃。
源地址:128bit。包初始发送者的地址
目标地址:128bit,包预定接收者的地址。如果存在可选的路由头,则预定接收者不一定就是接收者。
3.2IPv6扩展字段
IPv6选项位于包中的IPv6数据包头和传输层头之间的单独扩展头中。在包到达其他最终目标之前,包传送路径中的任何路由器都不会检查或处理大多数IPv6扩展头。此功能显著改进了路由器对于包含选项的包的路由性能。在IPv4中,只要存在任何选项,就会要求路由器检查所有的选项。
与 IPv4 选项不同,IPv6 扩展头可以为任意长度。此外,一个包可承载的选项数量也不限于 40 字节。除了 IPv6 选项的处理方式,此功能还允许将 IPv6 选项用于那些在 IPv4 中不可行的功能。
为了在处理后续选项头以及随后的传输协议时提高性能,IPv6 选项始终设置为 8 个八位字节长度的整数倍。8 个八位字节长度的整数倍可以使后续的头保持对齐。
下面是目前已定义的IPv6扩展头:
逐跳寻径选项(Hop-by-Hop Options):用于携带可选信息,这些信息必须由数据包传递路径上的每个节点检查。
路由(Routing):扩展路由,IPv6源使用路由表头列出到数据包目的的途中要“访问”的一个或多个节点。此功能与IPv4的“松散源和记录路由”选项非常相似
分段(Fragment):分段和重新装配,IPv6源使用Fragment报头巴松一个比其目的地的路径MTU更大的数据包(注:与IPv4不同,IPv6中的分段仅由源节点执行,而不由数据包经过的路由器执行)。
目标选项(Destination Options):用于携带可选信息,这些信息仅需由数据包的目标节点进行检查。
认证(Autnentication):用于为IP数据提供无连接完整性和数据源身份验证,并提供防止重放的保护。AH为尽可能多的IP报头以及数据提供保护。
封装安全有效负荷(Encapsulating Security Payload):提供保密性,旨在提供IPv4和IPv6中混合的安全服务,可以在一对通信主机之间,一对通信安全网关之间或安全网关和主机提供安全服务。
注:ESP和AH提供的身份验证之间的主要区别时覆盖范围;特别是,ESP不会保护任何IP表头字段,除非这些字段由ESP封装(隧道模式)。
1.3IPv6数据包构建顺序
当在同一个数据包钟使用多个扩展头时,建议使用如下顺序:
IPv6 header
Hop-by-Hop Options header
Destination Options header (note 1)
Routing header
Fragment header
Authentication header
Encapsulating Security Payload header
Destination Options header (note 2)
upper-layer header
注:
note 1:用于由“IPv6目标地址”字段钟显示的第一个目标以及“路由”标头钟列出的后续目标选项。
note 2:数据包的最终目的地的选项
4、与IPv4的区别
包头区别:
1)IPv6报文头部是定长(固定位40字节),IPv4报文头部是变长。(这个意味着,写代码处理IPv6数据报文的效率会提供很多。
2)IPv6中的Hop Limit(跃点限制)字段含义类似IPv4的TTL。
3)IPv6中的Traffice class(通信类)字段含义类似IPv4中的TOS(Type Of Service)。
4)IPv6的报文头部取消了校验字段:取消这个字段也是对IPv4的一个改进。当IPv4报文在网络间传输,每经过一个路由器转发就要修改TTL值,就需要重新计算校验和,而由于数据链路层L2和传输层L4的校验已经足够强壮,因此IPv6取消这个字段会提高路由器的转发效率。值得一提的是,在IPv6协议下,传输层L4协议UDP、TCP是强制需要进行校验和的(IPv4是可选的)。
5)IPv6报文头部中的Next Header字段表示“承载上一层的协议类型”或“扩展头部类型”。
这里的含义与IPv4由很大却别,需要加以解释:
当IPv6数据报文承载的是上层协议ICMPv6、TCP、UDP等的时候,Next header的值分别位58、6、17,这个时候和IPv4报文头部中的Protocol字段很类似。
当不是以上3种协议的时候,IPv6报文头部紧接的是扩展头部。扩展头部是IPv6引入的一个新的概念,每个IPv6的数据报文可以承载0个或多个扩展头部,扩展头部通过链表的形式组织起来。当IPv6数据报文承载这扩展头部的时候,Next Header的数值为扩展头部的类型值。
6)在分段(Fragment)功能上,面对大型数据的处理上与IPv4不同,IPv6中的分段仅由源节点执行,而不由数据包经过的路由器执行。