IP协议
IP数据包结构
- 数据包结构
4位版本 | 4位首部长度 | 8位服务类型 | 16位总长度 | ||||
16位标志 | 3位标志 | 13位片偏移 | |||||
8位生存时间(TTL) | 8位协议 | 16位首部校验和 | |||||
32位源IP地址 | |||||||
32位目的IP地址 | |||||||
选项 | |||||||
数据 |
- 数据包结构解释
字段 | 位数 | 用法说明 |
版本(version) | 4 | 说明用以创建该数据包的IP版本。所有接触该数据包的设备都必须支持本字段显示的版本。大部分TCP/IP产品都使用IPv4 |
首部长度(Header Length) | 4 | 以32位为单位表明IP首部的长度。因为几乎所有的IP首部都是20字节长,这个字段的值几乎都是5 |
服务类型(Type-of-Service Flags) | 8 | 给应用程序,主机和Internet上的路由器提供一个优先级服务。在这个字段设置合适的标志,应用程序可以要求这个数据包得到高优先级,而让其他数据包等待。 |
总长度(Total Packet Length) | 16 | 以字节为单位说明全部IP包的长度,包括首部和主体部分 |
标识(Fragment Identifier) | 16 | 标识数据包,在出现分片,并想把片段合并成原状时是有用的 |
标志(Fragmentation Flags) | 3 | 说明可能出现的任何分片的某些方面,也提供了分片控制服务,例如不让路由器分片某个包 |
偏移(Fragmentation Offset) | 13 | 说明这个片段提供的源IP数据包的字节范围,用8字节的偏移表示 |
生存时间(Time-to-Live) | 8 | 说明数据包在不可发送和破坏之前还可以经过的跳数 |
协议(Protocol Identifier) | 8 | 说明储存在IP数据包主体的高层协议 |
首部校验和(Header Checksum) | 16 | 用来储存IP首部的校验和 |
源IP地址(Source IP Address) | 32 | 用来储存最初发送该数据包的主机的32位的IP地址 |
目的IP地址(Destination IP Address) | 32 | 用来储存该数据包到达目的的系统的32位的IP地址 |
选项(options) | 可变 | 就像IP用type-of service 标志提供了一些优先级服务一样,附加的特殊处理选项能够通过Options字段定义。这些选项包括source routing,timestamp和其他一些选项。这些选> |
Padding(如果有需要的话) | 可变 | IP数据包的首部的长度必须是32的倍数。如果首部中引入了某些选项,首部必须填充到能够被32整除的位数 |
数据(data) | 可变 | IP数据包的数据部分。正常情况下,会包含一个完全的TCP火UDP信息,但是它也可以是其他IP数据包的一个片段 |
- 实例分析
0000 | 00 | 60 | 08 | 82 | d2 | 19 | 00 | 0b | 46 | 99 | 6a | 80 | 08 | 00 | 45 | 00 | ||||||||||||||||||||||||
0010 | 04 | 9c | 19 | ce | 40 | 00 | 7f | 06 | 57 | 39 | c0 | a8 | 02 | 02 | c0 | a8 | ||||||||||||||||||||||||
0020 | 03 | 02 | 00 | 14 | 05 | 55 | e1 | c1 | f3 | 27 | 05 | 98 | 0a | 88 | 50 | 18 | ||||||||||||||||||||||||
45:4是使用的IP版本号,IPv4,5是Header Length首部长度,32位为一个单位,一般都为20字节,也就是5. | ||||||||||||||||||||||||||||||||||||||||
00:总共八位,0000 0000,前面3位是优先权要求,此处为0,也就是普通优先级,数据越高,越优先。第四位是延迟要求Delay,0是普通值,1,为最小延迟,第五位是通信要求Throughput,0为普通值,1为最大吞吐量,6位是可靠性要求Reliability,0为普通值,1为最高可靠性。第七八位是备用,Not Used | ||||||||||||||||||||||||||||||||||||||||
04 9c:Total Length总共16位,以16进制的形式,表示IP数据包的大小(字节),包括首部和数据部分。 | ||||||||||||||||||||||||||||||||||||||||
19 ce:Identification,标识字段,用于唯一地标识主机发送的每一份数据包,产生的每一个数据包都有16位的序列号,用来让发送系统和接收系统识别该数据包。通常每发送一份报文它的值就会加1。当要发送一个数据包分片的时候,会把这个字段的内容复制到每个片中,表示这些被分割的片属于同一个数据包。 | ||||||||||||||||||||||||||||||||||||||||
4:Flags只有3位,也就是010,第一位Reserved bit :目前没有使用。第二位don’t fragment :用于说明某一IP路由是否可以分片这个IP包。为1表示不可以。第三位more fragments:用于说明源数据包是否还有其他片段。为1时表示其后还有被分割的包。 | ||||||||||||||||||||||||||||||||||||||||
40 00;Fragment Offset偏移定位,13位,0 0000 0000 0000当一个大的数据包经过一些传输单元(MTU)较小的路径时,会被分割成片进行传送,由于链路情况和其他因素的影响,数据到达时可能会失序,所以在分片时,每个片做好偏移定位标记,便于重组。这里为0表示数据包没有被分片。 | ||||||||||||||||||||||||||||||||||||||||
7f:Time-to-Live,生存时间TTL,在许多网络协议中都会碰到,它指定某个数据包在不能发送并被丢弃之前可以经过的最大跳数。这里是7f换成10进制就是127次。表示最多还可以跳127次,每跳一次就会减去1,如果这个值到达最终目的系统之前减到0,这个包会被认为不可发送并被丢弃。 | ||||||||||||||||||||||||||||||||||||||||
06:Protocol这个字段用来识别嵌入到IP数据包中的上层协议类型:值为1表示ICMP,值为2表示IGMP,值为6表示TCP,值为17表示UDP。这里值为6表示TCP | ||||||||||||||||||||||||||||||||||||||||
57 39:首部校验和,用以储存该IP首部的校验和,使得中间设备能够验证首部的内容并检验出可能的数据损坏,只应用与IP首部的值 | ||||||||||||||||||||||||||||||||||||||||
c0 a8 02 02:标识该数据包的源发送者,也就是源端系统使用的32位IP地址。换算成10进制就是192.168.2.2 | ||||||||||||||||||||||||||||||||||||||||
c0 a8 03 02:标识目的地的IP地址。 |