IP协议详细介绍
+----------------+----------------+----------------+----------------+
| 版本(4bit) | 首部长度(4bit) | 服务类型(8bit) | 总长度(16bit) |
+----------------+----------------+----------------+----------------+
| 标识(16bit) | 标志(3bit) | 片偏移(13bit) | TTL(8bit) |
+----------------+----------------+----------------+----------------+
| 协议(8bit) | 首部校验和(16bit)| 源地址(32bit) | 目的地址(32bit)|
+----------------+----------------+----------------+----------------+
| 选项(可变长)| 数据(可变长) | | |
+----------------+----------------+----------------+----------------+
下面是对各个字段的详细解释:
-
版本:4位,表示IP报文的版本号。IPv4的版本号为4,IPv6的版本号为6。在这个字符格式中,我们假设是IPv4,所以版本字段为“4”。
-
首部长度:4位,以32位字(4字节)为单位,表示IP报文头部的长度。没有选项字段时,一般为5(即20字节)。这个字段告诉接收端IP报文头部有多长,以便正确解析。
-
服务类型(TOS):8位,也称为优先级与服务类型。前3位是优先级,接下来4位是服务类型(如延迟、吞吐、可靠性等),最后1位未使用。不过,这个字段在现代网络中一般不常使用。
-
总长度:16位,表示整个IP报文(包括头部和数据)的总长度,单位为字节。这个字段用于接收端确定需要接收多少字节的数据。
-
标识:16位,是IP报文的唯一标识符。当报文被分片时,所有分片的标识字段值相同,以便接收端能够重组报文。
-
标志:3位,用于控制分片。第0位未使用,第1位为DF(Don't Fragment)标志,设置为1表示不允许分片;设置为0表示允许分片。第2位为MF(More Fragments)标志,设置为1表示后面还有分片;设置为0表示这是最后一个分片或未分片。
-
片偏移:13位,表示该分片在原报文中的偏移量,单位为8字节。这对于接收端重组报文至关重要。
-
TTL(Time To Live):8位,表示报文的生存时间,即报文在网络中可以经过的最大路由器跳数。每经过一个路由器,TTL值减1。当TTL值为0时,报文被丢弃。
-
协议:8位,表示上层协议的类型。例如,ICMP的协议号为1,TCP的协议号为6,UDP的协议号为17。
-
首部校验和:16位,用于校验IP报文头部的正确性。接收端在收到报文后,会重新计算校验和并与发送端的校验和进行比较。如果两者不同,则报文被丢弃。
-
源地址和目的地址:各32位,分别表示发送端和接收端的IP地址。
-
选项:这是一个可变长的字段,用于包含一些可选的信息。不过,在现代网络中,这个字段一般不常使用。
-
数据:这是上层的报文数据,如TCP报文、UDP报文等。它的长度是可变的,取决于总长度字段减去头部长度的值。