赵工的个人空间


专业技术部分转网页计算转业余爱好部分


 基础资料

IP协议

IP协议完成了TCP/IP协议栈中的大部分工作,位于OSI参考模型的网络层。IP提供了一种不可靠的无连接的数据报传输访问,只是将逻辑的网络层源和目的地址加入并且传送该报文,而依靠其他层保证报文到达目的主机。当IP遇到一个错误时,它只是丢弃该数据报,产生一个ICMP报文并发送到发送主机以告知传输错误的详细信息。IP也有分段和重组等功能,当数据报太大而不能被源主机发送,要分成较小的数据报。IP把每个数据报都视为分离的实体,不需要给数据报编号。
IP从UDP或TCP中接收数据流,并且将这些信息分块,为每块数据编址,并打包成IP数据报,然后通过网络将数据报发送给目的主机。由路由器和路由选择协议决定源和目的之间的路由选择。

1. IP数据报的格式:

RFC791定义了IP及其字段和功能。在IP层的分组数据称为数据报,由报头和数据组成,其中数据部分包含高层协议需要传输的数据,这些数据对于IP模块来说是不可见的。IP报头部分除了IP选项字段的长度在20~60字节之间,其他字段都有固定的大小。


版本

报头
长度

服务
类型

总长度

标识


分段
偏移量

存活
时间


报头
校验和


地址

目标
地址



数据

0.5

0.5

1

2

2

3b

13b

1

1

2

4

4

 

 

 

2. IP头:

如果没有可选项,IP头最小包括20 字节,包含为了正确传输数据而添加的各种控制信息。
⑴版本:长度4位,一般是官方的标准版本为4,IPv6版本号为6。
⑵报头长度(IHL):字段大小为4位,指示报头长度,通过将该值乘4来获得IP报头的长度。IP数据报除数据外的部分为IP报头,其长度范围为20~60字节,最小20字节。
⑶服务类型ToS:1字节,前3位设置优先级,后4位设置服务类型,最后1位保留。优先级3位,有8个优先级,为判定何时丢弃分组指定了规则,如果数据分组被丢弃了,ICMP就生成一个错误报文,并将其发往传输层。ToS中优先位的含义如下表:

二进制值

描述

二进制值

描述

000

路由信息

100

最优先传送

001

优先权信息

101

关键信息

010

立即传送

110

网间控制

011

迅速发送

111

网络控制

大多数应用目前并不支持和使用优先比特。
服务类型(Type of Service,ToS)比特含义如下表:

二进制值

描述

0000

正常

0001

代价最小化

0010

可靠性最大化

0100

吞吐量最大化

1000

延迟最小化

也就是bit3表示延迟,1为低延迟;bit4表示吞吐量,1表示高吞吐量;bit5表示可靠性,1表示高可靠性;bit6表示代价,1表示代价小;bit7预留。
过去比较少用ToS,所以大多数情况下为0;现在更多厂商实现了ToS。
在任意时刻只能设置一个ToS位,而且只有在数据报要经过网络设备支持和提供所要求的服务质量(Quality of Service,QoS)时才有意义。
⑷总长度:16位,2字节。总长度的值为报头长度与数据长度的字节数和。如果一个数据报太大,一个帧不能容纳,数据报必须分段。少数情况下,数据报会小于某一时刻物理介质中能传输的数据量,需要用填充字段来填充剩余空间。
⑸标识:2字节,标识字段用来标识所有的分段,这些分段都是在对数据报进行分段时产生的。IP地址和此字段中指定的数字结合起来标识一个组件属于哪个数据报。每个数据报都生成一个标识号,并且此标识号将被复制到数据报所有分段的标识字段中。如果一个数据报被分成五个分段,那么五个分段将具有相同的标识号,这有助于目标计算机重组属于同一数据报的所有分段。单个帧中能传输的最大数据量叫做最大传输单元(MTU),以字节为单位,以太网的MTU是1500字节,FDDI网的MTU为4352字节,如果一个数据报不能容纳在单个帧中,那么将被拆分或分段,并发送到多个帧中。
⑹标志:帮助确定一个数据报是否可以分段,同时也指出当前分段后面是否还有更多分段,所以也被称为更多分段字段。字段为3bit,第一位未用;第二位用于指出是否要对数据报分段,也称为请勿分段位,如果设置为1则表示数据报一定不能分段,如果为0时数据报就会被分段。如果必须对数据报分段,而第二位又被设置为1,那么数据报将被丢弃。第三位指出当前分段后面是否还有更多分段,如果此位设置为0,表示当前分段为数据报的最后一个分段。
⑺分段偏移量:由目标计算机用于查找分段在整个数据报中的位置。13bit,包含分段所含的八位组的序号,从0开始编号,常跟标识字段及标志字段一起使用,以确保目标机能将属于同一个数据报的所有分段重组起来。即使只有一个分段没能正确发送,整个数据报也会被丢弃,同时ICMP将生成一个错误报文并发送给传输层。数据报中仅有数据部分能分段,数据报中分段的大小必须是8的倍数。如果一个2500字节的数据报要分段,以太网MTU为1500字节,报头需20字节,需要分成两段,第一个分段1480字节,剩下1000字节需要通过另一个分段发送,第一个分段的偏移量为0,第二个分段的偏移量为185(1480/8)。如果将要传输的字节数不是8的倍数,而是比最接近8的倍数少一些字节,就要添加额外的空间确保数据大小是8的倍数。发送端可以确定一个最优值来避免数据传输时的分段,这个功能是通过TCP路径最大传输单元侦测(Path MTU Discovery)机制来实现的。
⑻存活时间(Time to Live,TTL):用来指定数据报在网络上必须保留的时间,1字节,以秒为单位,常见设为59,最大255。TTL值必须依据网络所需要的服务类型和网络的速度来设置。数据报每经过一个路由器,TTL的值就减1,因为1s远远大于路由器处理一个数据报所需要的时间,其实TTL值表示跳数,判断此值减去了多少,就知道数据经过了多少个路由器。如果一个数据报的TTL值在数据报到达目的地之前已经是0了,那么这个数据报将被丢弃。在该数据报被丢弃后,ICMP会向传输层协议发送一个错误报文,然后传输层将决定是否重传此数据报。
⑼协议:指明IP数据报所封装的上层协议的类型,1字节。含义如下表:

值(十进制)

协议

1

Internet控制报文协议(ICMP)

2

Internet组管理协议(IGMP)

3

网关对网关协议(GCP)

4

Internet协议(IP)

6

传输控制协议(TCP)

8

外部网关协议(EGP)

9

内部网关协议(IGP)

17

用户数据报协议(UDP)

41

Internet协议第六版(IPv6)

50

ESP(IPSec)

51

AH(IPSec)

86

相异网关协议(DGP)

88

内部网关路由协议(IGRP)

89

开放式最短路径优先(OSPF)

⑽报头校验和:2字节,发送端计算出报头校验和的值,然后再把它和IP报头一起发送出去,目标计算机通过对IP报头使用一个算法,使用该校验和来检验所传输数据的完整性。所有接收数据的中间设备在转发数据之前,都必须计算出报头校验和的值。发送端计算校验和的算法:把报头部分分成16位的段,使用1的补码算法将各个段中的值加在一起,再对和进行求补。接收端判断校验和是否正确:收到的报头分成16位的段,所有段中的数据使用1的补码算法加起来,然后再对和求补,如果结果为0则表示数据是完整的。
⑾IP选项:用于提供一些在数据传输时需要用到的附加功能,比如记录路由、严格源路由等,还负责数据传输的安全问题,还用于侦测和调试网络。不是必需的字段,长度可变,默认大小为0字节,最大40字节。

复制位1bit

选项类2bit

选项号5bit

选项长度8bit

选项数据(变长)

IP选项由选项码、选项长度和选项数据三部分组成,其中选项码为1字节,可分为复制位、选项类和选项号三部分。
·复制位:1bit,用于控制数据报分片时是否将选项复制到各个分片中,0表示不复制。
·选项类:2bit,用于定义选项的一般作用。
·选项号:5bit,用于定义选项的具体类型。
主要使用的选项类型见下表:

选项类

选项号

选项长度

描述

0

0

1字节

选项结束(EOL:End of Option)

0

1

1字节

空操作(NOP:No Operation)

0

7

变长

记录路由(RR:Record Rout)

2

3

可变

宽松源路由(LSRR:Loose Source Routing)

2

9

可变

严格源路由(SSRR:Strict Source Routing)

1

4

可变

Internet时间戳(TS:Internet Timestamp)

·选项长度:8bit,定义整个选项的长度。
·选项数据:变长,用于定义选项请求。
表中的6种主要选项类型的说明:
·EOL:选项结束,提示最后一个选项,必须放在所有选项的后面
·NOP:空操作,用于选项间的边界对正,当数据报有两个以上的选项时,如果其中某个选项的长度不足4字节的倍数,则可以在其中加入NOP,将长度补足到4字节的倍数,以便对正到下一个选项的起始位置。
·RR:记录路由,用于记录数据报在网络中传送过程中从信源到信宿所经过的各路由器的IP地址。因为所记录的路由器数量不定,因此该选项的长度可变。格式为:

00000111

选项长度8bit

指针8bit

第1个IP地址32bit

......

第n个IP地址32bit

其中,指针指向路由记录地址表中下一个可以存放路由器IP地址的位置,每记录一个路由IP地址,指针值增加4,直到路由记录地址表用完为止。
·SSRR:严格的源路由,用于信源预先设定数据报在网络中传送时指定数据报的传送路径并记录传输路径。格式与RR类似,但选项码为10001001。选项中所指定的路由器必须是一一相连的,并且两个相邻的路由器之间不能有其他路由器,以确保数据报根据指定的路由器能顺利地从信源传送到信宿。IP报头的目的地址只是代表数据报要传送的下一跳地址,而不是信宿地址;信宿地址是选项中路由记录指定的最后一个IP地址。
·LSRR:宽松的源路由,用于预先指定数据报传送过程中必须经过的关键路由。这些指定的路由并不一定能组成一条完备的路径,只是给出了路径上的某些关键点,并记录传送过程中所经过的路由器的IP地址。选项格式与RR类似,但选项码为10000011。
·TS:时间戳,用于记录路由器处理数据报的时间。根据时间戳可以估算数据报从一个路由器传送到另一个路由器所花费的时间,进而分析网络吞吐率和负载情况。


01000100

选项长度8bit

指针8bit

溢出4bit

标志4bit

第1个IP地址32bit

第1个时间戳32bit

......

第n个IP地址32bit

第n个时间戳32bit

其中,溢出字段用于记录因预留空间不够而未能记录下来的时间戳个数。当溢出字段也溢出时,路由器将丢弃数据报,并产生ICMP参数错报文发送给信源。标志字段用于定义时间戳选项的格式,取值范围:
·0:路由器仅记录时间戳数据,忽略IP地址
·1:路由器记录出口IP地址和时间戳
·3:仅记录信源指定地址处的时间戳
时间戳以ms为单位,从世界标准时间午夜零时开始计算。在IP数据报需要分片传送时,时间戳选项不复制到各个分片,仅在第一片出现。
⑿填充:IP头是以32bit字长为单位,有时需要填充来实现。

Copyright@dwenzhao.cn All Rights Reserved   备案号:粤ICP备15026949号
联系邮箱:dwenzhao@163.com  QQ:1608288659