前言
众所周知一般经过封装好的数据包如下:
而我们今天要了解的就是数据包中的IP包头结构,如果说高层数据是老板,TCP/UDP头是秘书,而帧头(MAC子层)帧尾(FCS)是汽车,那IP包头就是老司机了,数据要往哪走,全看IP包头怎么说。所以别看IP包头只是小小的一个头部信息,最大也只有60字节,但是它的构造却一点也不简单,不信继续往下瞧:
一、一张图了解IP数据包头
IP包头固定部分大小共20字节;选项字段长度可变一般为32bit的整数倍,最小无,最大为40字节,当有可选项字段且不足32bit时,余下部分用无用数据来填充;所以一个完整的IP包头最小为20字节,最大为60字节。
二、各部分作用具体分析
版本号(4bit):
告知IP地址是ipv4地址还是ipv6地址
首部长度(4bit):
告知这个数据包头的长度,由此推断出有无可选项
服务类型(8bit):
按位被定义为 PPP DTRM0
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
总长度(16bit):
告知IP数据报文的总长度(包括被分片数据在内),最大承载量为1500字节,超过将进行数据分片
片偏移量(13bit):
决定IP分片数据的先后顺序,只能是0或1480的倍数,第一个分片数据发送时偏移量为0,第二个为1480,第三个为2960,以此类推。
目的端重组数据包时靠偏移量来按顺序组合分片数据
标志位(3bit):
第一位bit未启用为0
第二位bit如果需要分片第二位为0,不需要分片第二位为1
第三位比特为1代表还有后续分片,为0代表为最后一个分片
共有三种情况:
001(需要分片且还有后续分片)
000(需要分片且当前为最后一个分片)
010(不需要分片)
标识符(16bit):
区分不同的IP数据包的分片数据,在目的端重组分片数据时能快速找到同一数据包的分片数据
生存时间TTL(8bit):
范围为1-255;
单位为跳数,数据包每经过一台路由器即为一跳,TTL值减一;当TTL为0时,丢弃数据包。
作用是防止数据包在网络中永久的循环
Windows系统TTL一般为128,Linux系统TTL为1-128之间,通常为56,64。
注:跳点跟踪命令:tracert IP地址
协议(8bit):
区分上层协议;6代表TCP协议,17代表UDP协议
首部校验和(16bit):
校验三层IP包头是否有误
源IP地址(32bit):
指发送数据包的主机地址
目标IP地址(32bit):
指接收数据包的目标主机地址
选项字段(长度可变,0-40Byte):
通常不会使用到,因为IP包头部分的长度单位为32bit,因此可选项字段的长度必须为32bit的整数倍,
当使用时且剩余部分不足32bit会自动填充无用数据来补足32bit。
总结
小小的IP数据包头,却内涵大大的乾坤;数据该往哪走,该怎么走,一切尽在IP包头中!