当前位置: 首页 > news >正文

深入解析IP协议:组成、地址管理与路由选择

  

在这里插入图片描述


🔍 开发者资源导航 🔍
🏷️ 博客主页: 个人主页
📚 专栏订阅: JavaEE全栈专栏

IP协议(Internet Protocol)是互联网的核心网络层协议,其主要功能是为网络中的设备提供逻辑地址分配和数据包路由转发服务。该协议定义了IP地址的格式和分配方式,采用分组交换技术将数据封装为IP数据报进行传输,本文将简单介绍它的三个方面:协议组成地址管理以及路由选择

一、协议组成

 IP协议和TCP协议的复杂程度是差不多的~

四位版本号包括IPv4以及IPv6,这两个是大规模商用的版本。

四位首部长度,IP协议的报头也是变长的,因为也有选项的存在,单位是四字节。

8位服务类型决定了IP协议的工作方式,包括最小延时、最大吞吐量、最高可靠性、最小成本,这四者互相冲突,只能选择一个。

16位总长度=包头+载荷,最大是64KB。


我们知道TCP的长度是没有限制的,IP协议的64KB不够用了咋办

IP协议内置了组包和拆包功能,因此如果要携带一个大的TCP数据包,IP协议会自动分成多个IP数据报共同传输一个TCP数据。

1. 如何确认是同一个包?

IP协议在拆包时,将16位标识值设为同一个,组包时按照这个值进行组包。

2. 如何保证组包时的顺序?

在拆包时会设置13位片偏移值,按照顺序位置设置为一个有序的数列,组包时按照该顺序组包。

3. 如何判断组包的结束以及是否组包?

三位标志位其中一个表示是否是最后一个,还有一个表示是否触发了拆包操作,最后一个标志位作为保留没有意义留给未来扩展。


8位生存时间(TTL)表示一个IP协议数据报在网络上可以传输的最大次数。

每经过一个路由器转发一次TTL就减一,减到0后就丢弃。

这样做的目的是为了避免它在网络上的无限传播,例如使用了一个错误的IP地址,那么它永远也无法抵达。

TTL默认值

  • Windows 默认 128:历史原因(早期 Windows 网络栈设计)。

  • Linux/Unix/macOS 默认 64:足够覆盖大多数网络路径(一般互联网路径跳数 ≤ 30)。

  • 路由器默认 255:因为路由器可能位于复杂网络环境,需要更大的跳数限制。

 8位协议标识传输层用的是什么协议类型,例如6是TCP,17是UDP。

16位首部校验和:校验包头是否存在发生错误。


 二、地址管理

IP地址在网络上是唯一的,可以用于确认你在网络上的位置。

IPv4是一个32位的数值,为了方便查看,一般使用点分十进制的方式表示,例如192.2.1.98

IP地址分为两部分,前部分称之为“网络号”,后部分称为“主机号”。

网络号和主机号的划分是通过子网掩码进行区分,子网掩码是一个前部分为1,后部分为0的一个数值,不会出现01交错的情况,1的部分就表示那些bit位是网络号。

 在同一个局域网中的两个设备,网络号必须相同,主机号不能相同;

在不同的局域网中的两个设备,网络号必须不同,主机号可以相同。


在IP地址中存在部分特殊的IP地址。

1. 将IP地址的主机号全部设为0,就成为了网络号,代表这个局域网,因此不能把主机号设为0。

2. 将IP地址的主机号全部设为1,就代表一个广播地址,向该地址发送的信息会被转发到该局域网上的所有设备。

3. 127.*是环回IP,无论你真实的IP是多少,用该地址都可以指向你的本机。


三、路由选择

路由选择是通过IP协议进行转发的过程,该过程及其复杂,在这里只讨论简化的模型。

路由选择的方式是启发式/探索式,他并不是一次到达某个地址,而是通过“问路”的方式不断接近,最终抵达。

网络环境非常复杂的环境,任何一个路由器,无法存储所有的网络信息的,但是每个路由器,是可以知道附近的网络情况(至少知道谁和他相连)。

当数据包在路由器转发的时候,询问去目的地址的路如何走,如果查询到了就往该节点走,如果没有就去该路由器的上一层路由器。

http://www.lryc.cn/news/594711.html

相关文章:

  • Tomato靶机通关教程
  • 安装docker可视化工具 Portainer中文版(ubuntu上演示,所有docker通用) 支持控制各种容器,容器操作简单化 降低容器门槛
  • 板凳-------Mysql cookbook学习 (十二--------4)
  • 技能学习PostgreSQL中级专家
  • 借助AI学习开源代码git0.7之六write-cache
  • 基于 STM32 的数字闹钟系统 Proteus 仿真设计与实现
  • 从一开始的网络攻防(六):php反序列化
  • 金仓数据库:融合进化,智领未来——2025年数据库技术革命的深度解析
  • STM32 USB键盘实现指南
  • 最严电动自行车新规,即将实施!
  • FreeSwitch通过Websocket(流式双向语音)对接AI实时语音大模型技术方案(mod_ppy_aduio_stream)
  • 朝歌智慧盘古信息:以IMS MOM V6重构国产化智能终端新生态
  • 【初识数据结构】CS61B中的最小生成树问题
  • Car Kit重构车机开发体验,让车载应用开发驶入快车道
  • 【PTA数据结构 | C语言版】拓扑排序
  • OR条件拆分:避免索引失效的查询重构技巧
  • 【web自动化】-5- fixture集中管理和项目重构
  • 2024年ASOC SCI2区TOP,基于Jaya算法的粒子滤波器用于非线性模型贝叶斯更新,深度解析+性能实测
  • 代码随想录算法训练营第二十七天
  • 为什么 tcp_syncookies 不能取代半连接队列?
  • 【前端】jszip+file-saver:多个视频url下载到zip、页面预加载视频、预览视频、强制刷新视频
  • Python并发编程:突破GIL枷锁,高效利用多核CPU
  • 服务器系统时间不准确怎么办?
  • PHP反序列化漏洞详解
  • 4 种更新的方法将消息从安卓传输到 Mac
  • 2025三掌柜赠书活动第二十五期 网络安全应急响应实战
  • 2025年终端安全管理系统的全方位解析,桌面管理软件的分析
  • 基于python django的BOSS直聘网站计算机岗位数据分析与可视化系统,包括薪酬预测及岗位推荐,推荐算法为融合算法
  • 【设计模式】迭代器模式 (游标(Cursor)模式)
  • Netty实现单通道并发读写,即多路复用