前言
在之前的博文中, 我们聊过了传输层中的两个重点协议 TCP 和 UDP, 本文我们再来聊聊网络层中的一个协议IP, 简单认识一下 IP 协议格式. IP 协议与 TCP 协议的复杂度也不妨多让, 不过我们在这里只是简单的聊一聊 IP 协议的报文格式就行, 毕竟网络层与我们实际开发打交道并不像传输层那样频繁, 如果还想进一步了解网络层 IP 协议, 请查询官方文档.
关注收藏, 开始学习吧🧐
IP 协议格式
- 4位版本号: 指定 IP 协议的版本, 对于IPv4来说, 就是4. 现有的大规模商用的 IP 协议只有两个, IPv4, IPv6.
- 4位头部长度: 设定同 TCP 相同, 表示 IP 头部的长度是多少个32bit, 也就是 length * 4 的字节数. 4bit表示最大的数字是15, 因此IP头部最大长度是60字节.
- 8位服务类型: 3位优先权字段 (已经弃用), 4位TOS字段, 和1位保留字段 (必须置为0). 4位TOS分别表示: 最小延时, 最大吞吐量, 最高可靠性, 最小成本. 这四者相互冲突, 只能选择一个. 其本质上类似于一个模式切换, 不同场景下选择不同类型.
- 16位总长度: IP数据报整体占多少个字节. 代表 IP 报头 + 载荷的总长度.
- 16位标识: 唯一的标识主机发送的报文. 如果 IP 报文在数据链路层被分片了, 那么每一个片里面的这个 id 标识都是相同的.
- 3位标志字段: 第一位保留 (保留的意思是现在不用, 但是还没想好说不定以后要用到). 第二位置为 1 表示禁止分片, 这时候如果报文长度超过 MTU, IP 模块就会丢弃报文. 第三位表示 “更多分片”, 如果这片分片之后还有分片的话, 最后一个分片置为 1, 如果已经结束分片置为 0. 类似于一个结束标记.
- 13位分片偏移: 是分片相对于原始 IP 报文开始处的偏移. 其实就是在表示当前分片在原报文中处在哪个位置. 实际偏移的字节数是这个值 * 8 得到的. 因此, 除了最后一个报文之外, 其他报文的长度必须是 8 的整数倍 (否则报文就不连续了).
- 8位生存时间: 数据报到达目的地的最大报文跳数, 单位是次数. 一般是 64. 每次经过一个路由, TTL 就会 -1, 一直减到0还没到达, 那么就被丢弃了. 这个字段主要是用来防止出现路由循环.
- 8位协议: 表示上层传输层中用的是哪种协议.
- 16位头部校验和: 使用 CRC 进行校验, 来鉴别头部是否损坏. 载荷部分已经被传输层协议自己检验过了.
- 32位源地址和32位目标地址: 表示发送端和接收端. 数据报, 从哪来, 到哪去.
总结
✨ 本文简单谈了下 IP 协议的报文格式.
✨ 想了解更多计算机网络的知识, 可以收藏一下本人的计算机网络学习专栏, 里面会持续更新本人的学习记录, 跟随我一起不断学习.
✨ 感谢你们的耐心阅读, 博主本人也是一名学生, 也还有需要很多学习的东西. 写这篇文章是以本人所学内容为基础, 日后也会不断更新自己的学习记录, 我们一起努力进步, 变得优秀, 小小菜鸟, 也能有大大梦想, 关注我, 一起学习.
再次感谢你们的阅读, 你们的鼓励是我创作的最大动力!!!!!