深入解析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协议进行转发的过程,该过程及其复杂,在这里只讨论简化的模型。
路由选择的方式是启发式/探索式,他并不是一次到达某个地址,而是通过“问路”的方式不断接近,最终抵达。
网络环境非常复杂的环境,任何一个路由器,无法存储所有的网络信息的,但是每个路由器,是可以知道附近的网络情况(至少知道谁和他相连)。
当数据包在路由器转发的时候,询问去目的地址的路如何走,如果查询到了就往该节点走,如果没有就去该路由器的上一层路由器。