ipv4的头部

ipv4的头部

4位版本信息:描述IP协议的版本。   

4位头部长度:表示IP协议头部的长度

                          4个比特位表示的数值 * 4   = IP协议头部的长度

                           IP协议头部最大为60字节(固定的20字节+可选的40字节)

8位服务类型:

                

比特 含义
0     1     2 优先级(现在已经弃用了)
3 最小延时(ssh)
4 最大吞吐量(ftp)
5 最高可用性
6 最小费用
7 保留位(必须置为0)

16位总长度:表示IP数据包总体(IP协议首部+数据)的长度。  

                             IP数据报最大的长度为65535字节

16位标识:    用于分片重组。   也可以说用于识别哪些被分片的UDP数据包能组成一个完整的UDP数据包。

                          同一UDP数据包中所有的分片具有相同的标识。不同数据包的标识不相同。

                         即使不同UDP包的标识相同,也可以通过源IP地址,目的IP地址、协议等进行区分

 3位标志:

                       

比特 含义
0 保留位
1

是否进行分片;

为1时,禁止分片;

为0时,可以分片

2

标识分片,即当前分片是否是UDP包的最后一个分片。

为1时,不是最后一个分片

为0时,是最后一个分片

 

13位片偏移:用来表示被分片每一个分段相对于原始数据的位置。

                            片偏移=13个比特位表示的数值 *  8

 8位生存时间:数据在到达目的地前允许中转的路由器个数

                      TTL : 跳数,(一般为64,防止路由循环)

                      每经过一个路由设备转发之后,TTL会减1,TTL为0之后,转发设备会丢弃这个数据包

8位协议:表示传输层用的协议。接收端接收到这个数据包后通过这8位知道提交给传输层哪个协议

16位头部检验和:检验数据包在传输过程中是否损坏

32位源IP地址 :发送端IP地址

32位目的IP地址:接收端IP地址

一般情况下在转发过程中32位源IP地址和32位目的IP地址不会被改变,在NAT技术中例外。


 读到这里,ipv4头部所有内容就已经完了。

看完上面的内容可能,我们会有些疑问?

在16位标识时,为什么说它可以☞用于识别哪些被分片的UDP数据包能组成一个完整的UDP数据包呢?那TCP呢?

由于网络电气特性的影响,在数据链路层对数据帧做出了限制(最大传输单元MTU)。如果网络层提交给数据链路层数据的大小超过MTU,则需要进行分片传输。

在TCP协议的时候,我们提到

MTU=MSS+IPHeader+TCPHeader

而TCP在三次握手的时候,协商了MSS大小,TCP进行传输数据的时候,按照MSS大小传输。

也就是说:

TCP由于按照MSS给网络层提交数据,所以网络层加上IP头部之后,数据报文大小也是小于等于MTU的,不需要进行分片传输

UDP在传输时是整条数据收发的。 

网络层加上IP头部之后,数据报文大小就有可能超过MTU,则需要进行分片传输。

3位标志中第二个比特位为1时,也就是禁止分片。此时传递大于MTU的UDP数据包时,IP模块将丢弃次数据包;另外在分片的时候,网络层丢失了一个分片,造成UDP数据包不完整,IP模块也直接丢弃。所以说IP协议也是不可靠的