IPv4 header 分析

来源:互联网 发布:sql添加语句多条数据 编辑:程序博客网 时间:2024/06/05 01:51

IPv4 数据报的 header 格式如下:

Ipv4 Header

下面解释一下每个字段的含义:
Version
IP 协议的版本号,4个bit。目前只支持版本4和版本6。由于 IPv4 的 header 格式和 IPv6 的不一样,所以 Version 字段放在 header 的最前面,根据这个值就能知道怎么解释后面的字段。

Header Length (IHL)
IP header 的长度,包括 IP Options的长度,但不包括所负载的数据长度。这个字段占4个bit,每一个bit表示4个字节(units of 32bits),这个字段最大值是0xFFFF (15),所以 IPv4 Header 最长占60个字节,去掉IP Header中固定的20个字节的长度,剩下可有40个字节的长度留给 IP Options。

Type of Service (TOS)
服务类型,占8个bit。这个字段标明这个数据报属于何种类型的应用,需要网络层上的路由器怎么处理。它关系到优先级和拥塞控制等,比如是要尽量低延迟的还是高吞吐型的。这个字段又分几个子字段,而且其间的组合和含义又被 IETF 改变过。

Total Length
整个IP数据报的长度,以字节为单位,包括 IP Header的长度和所负载的数据的长度,占16个bit。那一般情况下实际的所负载的数据的长度就是这个字段的值减去4倍的HeaderLength的值。当IP数据报的总长度小于链路层所规定的最小长度时,链路层协议就会自动填充数据报的长度(但不会改变TotalLength这个字段),所以通过这个字段,上层协议就可以知道这个IP数据报中实际有效的数据量了。IP数据报所负载的数据长度最小为0,最大为64K字节。

Identification, DF (Don't Fragment), MF (More Fragments), Fragment Offset
这几个字段都是在 IP 分片中会用到。

Time To Live (TTL)
IP数据报在网络上存活的时间,其实是数据报在网络上路由器间转发的次数。每个路由器在接受到一个数据报时都会把它的TTL值减1,当TTL值为0时就会被路由器丢弃,并会向IP数据报中 source IP 发送一个 ICMP 的错误信息。TTL占8个bit,最大跳数为255。

Protocol
传输层协议字段,这个字段表明这个IP数据报是使用 L4 中哪一种协议的,常见的值有 IPPROTO_ICMP = 1,IPPROTO_TCP = 6, IPPROTO_UDP = 17 等。

Header Checksum
IP数据报头的校验码,不包含其所负载的数据的校验,那是 L4 的事。

Source Address, Destination Address
IP数据报的发送和接受IP地址

Options
IP数据报选项字段,长度介于0到40字节之间。

原创粉丝点击