什么是 IP 协议
IP 作为整个 TCP/IP 协议族中至关重要的协议,主要负责将数据包发送给最终的目标计算机,为上层协议提供无状态、无连接、不可靠的服务。
- 无状态:无状态是指 IP 通信双方是不同步传输数据的状态信息。所有 IP 数据报的发送、传输和接收都是相互独立。
- 无连接:无连接是指IP通信双方都不长久地维持对方的任何信息。上层协议每次发送数据的时候,都需要明确指出对方的IP地址。
- 不可靠:不能保证 IP 数据报准确到达接收端,它只承诺尽最大努力交付。IP 模块一旦检测到数据报发送失败,就通知上层协议,而不会试图重传。
IP 协议头部
通过 IP 进行通信时,需要在数据的前面加入 IP 首部信息。IP 首部包含着用于 IP 协议进行发包控制时所有的必要信息。
-
版本
由 4 比特构成,用来标识 IP 首部的版本号。IPv4 版本号就是 4。关于 IP 所有版本如下图所示:
-
首部长度
表示 IP 首部的大小,单位是 4字节(32bit)。IP 头部的长度也就是 length * 4 的字节数. 当没有可选项时,length 是 5,也就是20字节。
-
区分服务(TOS)
用来表示服务的质量。可划分为 DSCP 和 ECN,DSCP 用来进行质量控制,ECN 用来报告网络拥堵情况。
-
总长度
表示的是 IP 首部 与数据部分合起来的总字节数,最大长度是 65535 字节。
-
标识
用于分片重组。同一个分片的标识值是相同的,不同分片的标识值不同。每发送一个 IP 包,它的值也会逐渐递增。
-
标志
表示包被分片的相关信息。每一位的具体含义如下图。
-
片偏移
用来标识被分片的每一个分段相对于原始数据的位置。
-
生存时间(TTL)
这个不是一个时间的概念,实际上是指可以中转多少个路由器的意思,每经过一个路由器,TTL会减少 1,直到变成0 则丢弃该包。
-
协议
表示 IP 首部的下一个首部属于哪个协议。
-
首部校验和
该字段只会校验数据包的首部,不会去校验数据部分。这个字段主要目的是用来确保 IP 数据包不被破坏。
-
源地址
表示发送端的 IP 地址。
-
目标地址
表示接收端的 IP 地址。
-
可选字段
长度可变,通常只在进行实验或诊断时使用。
-
填充
在有可选字段的情况下,首部长度可能不是 32 比特的整数倍。通过向字段填充 0,调整为 32 比特的整数倍。
-
数据
用来存入实际要传输的数据,同时将 IP 上层协议的首部也作为数据进行处理。
IPv6 协议首部
IPv6 相比 IPv4 已经发生了巨大变化。IPv6 中为了减轻路由器的负担,省略了首部校验和字段。提高了包转发的效率。
-
版本
与 IPv4 是一样的,其版本号是 6。
-
通信量类
相当于 IPv4 的 TOS 字段。
-
流标号
由 20 比特构成,准备用于服务质量的控制。在进行服务质量控制时,将流标号设置为一个随机数,然后利用一种可以设置流的协议在路由器上进行服务质量设置。
-
有效载荷长度
有效载荷是指包的数据部分。这个是不包含首部的,只表示数据部分的长度,
-
下一个首部
相当于 IPv4 的协议字段。通常表示 IP 的上一层协议是 TCP 或 UDP。
-
跳数限制
与 IPv4 中的 TTL 相同,表示可通过路由器的个数。数据每经过一次路由器就减1,减到 0 则丢弃数据。
-
源地址
表示发送端的 IP 地址。
-
目标地址
表示接收端的 IP 地址。
-
扩展首部
IPv6 首部长度是固定的,无法将可选项加入其中。取而代之的是通过扩展首部对功能进行了有效扩展。
在需要对 IP 数据报进行分片时,可以使用扩展首部。
-