一、引言
IP协议是TCP/IP协议族中最核心的协议。所有TCP、UDP、ICMP、IGMP都是以ip协议报文来传输。
IP协议不提供 可靠、和是否连接的状态。
- 对于发生错误,ip协议直接丢弃该数据,然后发送ICMP消息给信源端。可靠性要求由上层(如TCP)解决
- 每个IP数据报是相互独立的,可以不按顺序发
二、报文
* IP报文头部一共20个字节(不含选项)。传输时候采用大端字节传输。
* 4位版本号: 4 代表IP v4.
* 4位首部长度 :代表整个首部的长度(包含版本)
为什么说最长是60个字节呢?
2的4次方 从0-15, 最大就是15个单位,但这里单位是按4个字节计算。所有是15 * 4 = 60
* 8位服务类型: 目前基本上没有使用。有需要了解的再查资料
* 16位总长度:描述的这个IP报文的长度。 最大6 5 5 3 5, 但一般会做切片
* 16位标识:通常与标记字段和分片偏移字段一起用于IP报文的分片。
- 当原始报文大小超过MTU,那么就必须将原始数据进行分片。每个被分片的报文大小不得超过MTU,而这个字段还将在同一原始文件被分片的报文上打上相同的标记,一边接收设备可以识别出属于同一个报文的分片
- IP报文在传输过程中可能会多次分片,IP报文分片再传输过程中只会越分越小,不会组装,组装统一在对端主机的IP层进行
- IP层不保证IP报文之间有序。但是对端主机在IP层会拼装IP报文分片,形成一个完整的IP报文后上传。拼装过程其实就是对IP报文分片进行收集、排序的过程。
* 3位标记字段:
- 第1位没有被使用
- 第2位D是不分片位(DF),Do not fragment,顾名思义,不要分片,当DF位设置为1时,表示路由器不能对报文进行分片处理
- 第3位M表示还有后继分片(MF),More fragment,多分片,当路由器对报分进行分片时,除了最后一个分片的MF位设置为0外,其他所有分片的MF位均设置1,以便接收者直到收到MF位为0的分片为止
* 片偏移位:代表这段报文在分组的顺序
* TTL(time to live):8位生存时间, 也就是跳数的大小,即数据包能传多少跳
- 它指定了数据报的生存时间。TTL的初始值由源主机设置(通常为32或64),一旦经过一个处理它的路由器,它的值就减去1。当该字段的值为0时,数据报就被丢弃,并发送ICMP报文通知源主机
- 防止路由成环时,ip被无限转发
* 协议:标识出传输层的地址或协议号,也就是说表示数据要进行什么样的上层服务,应该交给自己上一层的哪个协议
1: ICMP, 2: IGMP,4:IP,6:TCP, 17:UDP 41:IPv6
* 首部校验和: 只校验首部数据内容, 数据部分交给数据部分自己处理
* 源IP地址:
* 目标IP地址:
* 选项:是数据报中的一个可变长的可选信息
•安全和处理限制(用于军事领域,详细内容参见RFC1108[Kent1991])
•记录路径(让每个路由器都记下它的IP地址)
•时间戳(让每个路由器都记下它的IP地址和时间)
•宽松的源站选路(为数据报指定一系列必须经过的IP地址)
•严格的源站选路(与宽松的源站选路类似,但是要求只能经过指定的这些地址,不能经过其他的地址)。
这些选项很少被使用,并非所有的主机和路由器都支持这些选项。
选项字段一直都是以32bit作为界限,在必要的时候插入值为0的填充字节。这样就保证
IP首部始终是32bit的整数倍(这是首部长度字段所要求的)。