特点:
无状态 无连接 不可靠
IPv4头部结构:
4位版本号 | 4位头部长度 | 8 位 服 务 类型 | 16位总长度 |
---|---|---|---|
16位标识 | 3位标志/ 13位片偏移 | ||
8位生存时间(TTL) | 8位协议 | 16位头部校验和 | |
32 位源端IP地址 | |||
32位目的端IP地址 | |||
选项 最多四十字节 |
a. 4位版本号,IPV4的版本号为4,其他IP协议的扩展协议(SIP和PIP协议)都有不同的版本号。
b. 4位头部长度,表示头部有多少个32bit(4字节),最大为15个32bit,所以IPV4协议的头部最大为60字节。
c. 8位服务类型,前3位是优先权字段,接下来4位是TOS字段,每个位分别代表最小延时、最大吞吐量、最高可靠性和最小费用。最多只能一个为1。最后一位是保留字段。
d. 16位总长度,代表该IP数据包的总大小,单位是字节,所以以此可以得到IP数据包的大小最大为2的16次方 – 1,65535字节。
e. 16位标识,唯一标识主机所发的每一个数据报,初始值由系统生成,没发送一个就加一,同一个数据报的不同分片具有相同的标识。
f. 3位标志,第一位保留,第二位(DF)表示禁止分片,如果设置了该标志位,数据报就不会分片,如果长度超过了MTU,那么IP模块就会丢弃该数据报,然后返回一个ICMP擦错报文。第三位表示更多分片,除了IP分片的最后一个,其他分片的该标志位都置为1。
g. 13位片偏移,是指分片相对于该数据报开始位置的位移。实际上的值都是该值向左移三位之后的值,因为除了最后一个分片,每一个分片数据部分的大小都保证是8的倍数。
h. 8位生存时间(TTL),初始值由源端设置,一般为64,每经过一个路由就会减一,减为0时就会丢弃该数据报并且返回一个ICMP差错报文。TTL保证了数据报不会陷入路由循环。
i. 8位协议,用来区分上层协议。/etc/protocols中定义了所有上层协议对应的protocol字段的值。其中ICMP是1,TCP是6,UDP是7.
g. 16位头部校验和由发送端填充,接收端进行CRC算法以检验IP头部数据的完整性。
h. 32位源端IP地址和32位目的端IP地址用来标识数据报的发送和接受端。
k.可变长的可选信息,最长40个字节。选项内容包括:
(1) 记录路由,告诉数据报途径的所有路由器都将自己的IP地址填入到IP头部的选项部分,这样我们可以跟踪数据报的传递路径。
(2) 时间戳,告诉每个路由器都将数据报被转发的时间(或者时间和IP地址对)填入选项部分,我们可以跟踪数据传递的时间。
(3) 松散源路由选择,指定一个路由器IP地址列表,数据发送过程必须经过这些路由。
(4) 严格源路由选择,数据报只能经过被指定得路由器。
IPv6固定头部结构
4位版本号 | 8位通信类型 | 20位流标签 |
---|---|---|
16位净荷长度 | 8位下一个包头 | 8位跳数限制 |
128位源端IP地址 | ||
128位目的端IP地址 |
a.
4位版本号,IPv6的版本号是6。b. 8位通信类型,和IPv4中的8位服务类型类似,表示数据通信类型和优先权,TOS字段。
c. 20位流标签,是IPv6新增加的字段,用于对连接的服务质量有特殊要求的通信,比如音频、视频等实时数据传输。
d. 16位净荷长度,表示IPv6的扩展头部和数据长度之和,不包括固定头部长度。
e. 8位下一个包头,指出紧跟固定包头后的包头类型,如扩展包头或者上层协议头。类似于IPv4的8位协议字段,且相同取值有相同意义。
f. 8位跳数限制,和IPv4的TTL含义相同。
g. 128位源端IP地址和128位目的端地址,和IPv4的32位IP地址相同,只不过IP地址的表示方法不同。