网络-04-IP协议

227 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第11天,点击查看活动详情

IP协议

上一节介绍了网络分层以及物理层和数据链路层,这一节将继续围绕网络分层,了解数据链路层的上一层网络层,详细介绍一下网络层最主要的IP协议,分析IP协议的首部格式。

IP协议首部

如下图,IP协议首部由以下几个部分组成

截屏2022-12-17 19.53.54.png

需要注意的是每一个部分基本都是4的倍数大小,比较特殊的是标志以及片偏移的大小,它们分别是3字节和13字节。接下来将分别讲一下首部中每一个部分的作用。

首部第一行

版本

4位,如果是0100则是IPv4,如果是0110则是IPv6

首部长度

4位,首部长度需要乘以4才是最终的长度。

比如0101是5,那么首部长度则是20,这是首部的最小值,因为固定字段的长度就是20个字节。

显而易见的1111为最大值,也就是60个字节,那么我们就可以得出可选字段最长为40字节。

区分服务

8位,用于提高网络的服务质量(QoS)

总长度

16位,首部加数据的长度,最大值为65535个字节。

前面讲到数据链路层是说过,一个帧的最长长度MTU为1500个字节,因此对于较长的IP数据包要进行分片(fragments)。那么要怎么判断这是同一个IP包下的数据呢?

下一行的字段就是帮助我们去进行分片的,并且每一片都有自己的IP首部。

首部第二行(分片相关)

标识

16位,数据包的ID,当数据包要进行分片时,同一个数据包的标识都是一样的。会有一个计数器去管理数据包的ID,每当发一个数据包,ID就加一。

标志

3位,每一个字节都代表一个状态。

第一位(Reserved Bit):保留

第二位(Don't Fragment):1表示不允许分片,0表示允许分片

第三位(More Fragment):1代表不是最后一片,0代表是最后一片。如果没有这个标志,只是有后面的偏移量的话,就不知道这个数据到底结束了没有。

片偏移

13位,片偏移乘以8就是就是字节偏移,也就是说每一片的长度都是8的整数倍。

截屏2022-12-17 22.01.06.png

首部第三行

生存时间(TTL)

8位,每个路由器在转发后TTL减一,一旦发现TTL减为0,则立即返回错误报告。在ping后可以看返回的TTL是多少就能判断经过了多少路由器。一般的Linux服务器TTL为64。

协议

8位,表述封装的数据是使用了什么协议,常见的几种协议

协议ICMPIPTCPUDPIPv6
1461741

首部校验和

16位,用于检查首部是否正确。

剩下的源IP和目标地址IP就是我们需要去传输的主机标识。

总结

本节将IP地址的首部每一个字段都进行了分析,下一节将进入传输层的学习,也就是我们耳熟能详的TCP协议和UDP协议。运输层是非常重要的一层,会分成几节去进行介绍。

感谢观看!