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在传输时是整条数据收发的。