首先IP协议是一种不可靠的协议,它提供的不可靠的通信服务称为数据包服务。主要负责对数据分组的寻址和路由。
IP协议
IP协议的核心是IP地址,在IP网络中为每一个主机都分配了一个IP地址。准确的说IP地址不是分配给主机的,而是分配给主机的网络接口卡(即网卡)。也就是说如果一个电脑有多个网卡,并且为每个网卡分配一个唯一的IP,这台主机就有多个IP地址。网络接口卡是主机与底层物理通信信道的连接,因此IP协议的数据传输过程如下:
图1-IP分组在网络中的传输过程
IP地址是一个32位二进制数,分为网络号和主机号两部分。网络号很重要,路由器在转发分组时主要根据目的主机IP地址中的网络号进行转发。网路号的长度不定,一般有子网掩码来决定网络号的长度。子网掩码是一个有若干个连续的1和若干个连续的0组成的32为二进制数。路由器通过将分组中目的IP地址与子网掩码做逻辑与运算来获得目的网络号。不同网络之间的通信必须经过路由器。
IP分组
一个IP分组由首部和数据两部分组成。首部的前一部分长度是固定的20字节,固定部分的后面是一些可选字段,其长度是可变的,但是首部长度必须为4字节的整数倍,如果不满4字节的着整数倍需要进行填充。
接下来对IP数据报格式中的各个字段进行详解。
字段 | 长度 | 取值 | 描述 | 备注 |
版本 | 4bit | 0100 | 表示IPv4 | |
首部长度 | 4bit | 最大15 | 首部长度最大为60字节 | |
服务类型 | 8bit | 区分服务 | ||
总长度 | 16bit | 最大65535 | IP数据报最大长度为65535字节(首部+数据) | |
标识 | 16bit | 当数据包需要分片时,标识标记属于同一数据包的所有分片。 | ||
标志 | 3bit | 目前只有两位使用, 第一位MF, MF=1,表示后面还有数据分片,MF=0,表示最后一个数据分片。 第二位DF, DF=1,数据不能分片, DF=0,数据可以分片。 | ||
片位移 | 13bit | 某片数据相对用户数据起始字段的相对位置,以8个字节为单位,即每个分片的数据长度都是8字节的整数倍。 | ||
生存时间 | 8bit | 32/64,scapy默认64 | TTL,数据报在网络中的寿命。以秒为单位。每经过一个路由器就减去在路由器所花费的时间,不足1秒,当1秒计算。当TTL减为0,丢弃数据报。 | |
协议 | 8bit | 6-TCP, 17-UDP | 由上层协议填充。 | |
首部检验和 | 16bit | 只检查首部,不检查数据部分 | ||
源地址 | 32bit | IP地址 | ||
目的地址 | 32bit | IP地址 | ||
选项部分 | 可变(0~40字节) | 基本用不到 | ||
数据部分 | 可变(0~65515字节) | 用户自定义 |