Linux 网络基础之网络IP层(十)IP 协议,网段划分,IP地址相关问题

目录

一、引出IP协议

引入基本概念

初步理解IP的作用

IP地址的构成,理解路由的过程,查找目标主机的方法

[TCP 协议和 IP 协议的关系](#TCP 协议和 IP 协议的关系)

二、IP协议头格式

IP报头和有效载荷怎么分离?

[4 位首部长度:](#4 位首部长度:)

[16 位总长度(字节数):](#16 位总长度(字节数):)

有效载荷的向上层的分用问题?

[8 位协议:](#8 位协议:)

其他字段

[8 位服务类型:](#8 位服务类型:)

[16 位首部校验和:](#16 位首部校验和:)

[8 位生存时间TTL:](#8 位生存时间TTL:)

三、网段划分

网段是什么?

网段划分

查找的本质

为什么要进行网段划分?

如何进行网段划分?

[1. 传统分类划分](#1. 传统分类划分)

[2. 子网掩码划分法(CIDR)](#2. 子网掩码划分法(CIDR))

什么是子网掩码?

示例1:

示例2:

相关问题:

四、特殊的IP地址

五、IP地址的数量限制

六、总结


一、引出IP协议

网络层中有多种协议,其中最核心的是 IP 协议,除此之外还有负责地址解析的 ARP 协议、网络探测的 ICMP 协议等协议。我们只讲网络层最典型的 IP 协议,IP协议也分为 IPv4 和 IPv6,我们重点讲 IPv4,是公网中常见的IP协议。

如上图,我们可以理解为是一个主机B向另一个主机C发送数据的过程,如果两个主机不在同一个局域网内,要想发送数据就必须跨网络发送,就必须经过多个路由器设备,在不同网段间逐级转发,最终抵达目标主机。

引入基本概念

基于这个场景,我们引入几个网络层的基础概念:

  • 主机:配有 IP 地址,并需要参与路由控制的设备;
  • 路由器:既配有 IP 地址,又专门负责执行路由控制、跨网段转发数据包的设备;
  • 节点:主机和路由器的统称,是网络中所有参与通信设备的抽象描述。

路由器本质上也是主机,因此节点这个概念可以覆盖通信链路中的所有设备。后续为了表述清晰,我们约定将通信两端的终端设备称为 "主机",而将链路中负责转发的中间设备统称为 "节点"。

初步理解IP的作用

还是这幅图,主机 B 要和主机 C 通信,首先会将上层传输层(比如 TCP)的报文封装成IP 报文,加上 IP 头部信息,再把这个 IP 报文发送给它所在局域网内的路由器 F。接着,路由器 F 会将报文转发给同属一个子网的路由器 G,再由 G 转发给路由器 H、路由器 C、路由器 D,最终送达主机 C。整个过程中,IP 报文是一跳一跳地被转发的,而不是直接从主机 B "飞" 到主机 C。

主机 B 能直接把报文发给路由器 F,说明二者处于同一个子网;路由器 F 能把报文转给路由器 G,说明 F 和 G 也在同一个子网。以此类推,每一次相邻节点间的转发,都说明这两个节点处于同一子网,因为同一子网内的设备可以直接通信。所以,从主机 B 到主机 C,IP 报文需要经过无数个子网的接力转发,才能完成跨网段的交付。

那为什么主机 B 要把报文交给 F,F 又要交给 G 呢?**核心原因就藏在 IP 报文报头中的目的 IP 地址。**主机和路由器都是根据这个目的 IP,结合自身的路由表,来判断下一跳该转发给哪个相邻节点。

可以说,IP 的核心作用之一就是通过目的 IP 地址在各个互联的子网中为数据报文选择转发路径

子网是局域网吗?

我们说"主机 B 和路由器 F 在同一个子网",这里的 "子网" 是为了简化理解,默认"同一个子网 = 可以直接通信的局部网络",和 "局域网" 的效果是一样的。但严格来说,它俩是不同维度的概念:

  • 局域网是物理层面的局部
  • 子网是IP 地址层面的局部

这里需要区分。

IP地址的构成,理解路由的过程,查找目标主机的方法

1. IP 地址是什么?它和 IP 协议是什么关系?

IP 地址就是给网络中每一台设备分配的唯一编号,用来标识这台设备的网络身份。IP 协议是网络层的通信规则,它规定了数据包如何封装、如何寻址、如何转发。IP 协议靠 IP 地址,才能判断数据包该发给谁、该往哪条路径转发。

2. 为什么 IPv4 地址是 4 字节?

IPv4 地址用 4 字节 (32 位) 表示,这是早期互联网设计时定下的标准。4 字节共 32 位二进制数,理论上可以表示 2 的 32 次方个不同的地址,大约是 43 亿个。当时的设计者认为这个数量足够全球设备使用,因此选择了 4 字节的长度,用点分十进制表示,比如 192.168.1.1,就是把 4 个字节分别转成十进制数字,用点隔开。虽然现在地址已经不够用了 (催生了 IPv6),但 4 字节的 IPv4 地址依然是当前互联网的主流标准。

4字节 IP 是一个数字,同时 IP 地址也是有自己的固定构成的,IP地址 = 目标网络 + 目标主机。也就是那一串数字,有不同含义。

3. 为什么一段数字会具有指向性?

举个例子,作为大学生,每个人的学号就是一串数字,这一串数字由学院号+专业号+班级号+个人编号分为了不同的部分,每部分的编号都有唯一性和指向性,所以就能根据一个学号找到对应的人,所以"数字"可以具有一定的指向性。所以 IP 地址也是同理,也具有唯一性和指向性,就能根据IP地址找到对应的目标主机,进而支持路由。

所以我们理解IP地址并不是理解这一串数字,而且要理解这串数字各个部分的具体含义,为什么这个部分是由对应的数字表示。

4. 查找目标主机的一般方法 :

基于 IP 地址的分段设计,查找目标主机的过程就是 "先找网络,再找主机" 的过程:

第一步先定位目标网络,路由器只会看 IP 地址的目标网络部分,判断这个子网在哪个方向,然后转发给下一跳设备。这个过程就像快递员先看收货地址的 "城市 + 区县",把包裹送到对应的分拣中心,而不是直接送到收件人手里。

第二步则是定位目标主机,当数据到达目标主机所在的子网后,设备根据 IP 地址的目标主机部分,找到目标主机的 MAC 地址,把数据交付给它。这就像快递到了小区后,再根据门牌号找到具体住户。

IP 地址的分段设计,让数据先靠 "网络号" 找到目标子网,再靠 "主机号" 找到目标设备,这也是 IP 地址能实现全网寻址的根本原因。

TCP 协议和 IP 协议的关系

IP 协议解决了网络通信中最基础的问题:即 IP 协议提供了跨网络传输数据的能力,让数据能通过路径选择和路由转发,从主机 A 送到主机 B。但 IP 协议只能做到 "大概率送达",无法保证 100% 可靠 ------ 它不管数据有没有丢、有没有乱序、有没有损坏。换句话说就是 IP 协议提供了一种能力。这个能力体现在有极大的概率做成某种事。也就是有极大的概率,能从跨网络从主机A到主机B。

而互联网通信需要的是 "绝对可靠",不能接受数据丢失、乱序的情况。当 IP 转发失败的小概率事件发生时,就需要一套补救的策略机制,让 "大概率送达" 趋近于 "一定能送达",而 TCP 协议则提供了这种策略。TCP 通过各种重传机制,为数据传输提供了可靠保障。

所以,TCP+IP 的组合,才实现了跨网络可靠传输数据的完整能力 :IP 提供了能力;TCP 负责兜底,提供了可靠性保障。
从操作系统的角度来看,IP 协议和 TCP 协议都在内核中实现,二者配合工作,就构成了网络通信最核心的基础功能。

二、IP协议头格式

下面我们学习 IP 协议的IP 协议头格式 ,以及基于它解决两个关键问题:IP 包头与有效载荷的分离、有效载荷向上层的分用交付。

不管上层是 TCP 数据段还是 UDP 数据报,最终都要被封装成 IP 报文,在网络中传输。因此,我们需要先把 IP 协议头的结构理解了,再回答这两个问题。

IP报文中的数据就是上层传输层(TCP/ UDP)传下来的数据报文。

IP报头和有效载荷怎么分离?

IP 报文的结构分为两部分 : IP 报头和有效数据载荷(上层 TCP/UDP 数据)。要分离这两部分,核心依赖两个字段:

4 位首部长度:

IP 报文的 4 位首部长度和 TCP 的 4 位首部长度含义一样,表示报头的字节大小,报头 = 20字节+ 选项字段(如果有)。基础值为 5 时,首部长度就是 5×4=20 字节;如果存在选项字段,该值会大于 5,最大为 15 (对应 60 字节)。通过这个字段,内核可以精确计算出 IP 报头的结束位置。

16 位总长度(字节数):

**16 位总长度表示整个 IP 报文的总字节数。**用总长度减去 4 位首部长度,就能算出后面有效载荷的长度。内核中 sk_buff 结构体通过tail 指针的偏移来实现这一分离:根据报头长度移动指针,即可跳过 IP 报头,直接指向有效载荷的起始位置;再结合总长度,就能取出上层传输层的报文数据。

有效载荷的向上层的分用问题?

当 IP 报文到达目标主机后,内核需要把有效载荷交付给对应的上层协议 (TCP/UDP),这个过程称为 "分用"。实现分用的关键,是 IP 报头中的 8 位协议字段。

8 位协议:

这个字段记录了上层传输层的协议号 ,比如:

内核收到 IP 报文后,读取该字段的值,根据协议号找到对应的传输层协议处理入口,再将分离出来的有效载荷交付给对应的协议模块。例如,协议号为 6 时,就把数据交给 TCP 协议栈处理;协议号为 17 时,就交给 UDP 协议栈处理,以此完成向上层的分用交付。

那这个8位协议是谁来填?

由发送方来填,发送方发送数据,经过传输层到网络IP层,必然会知道是传输层的哪个协议传下来的。

其他字段

8 位服务类型:

这个字段用来标识报文的服务质量需求,由 3 位已弃用的优先级字段、4 位 TOS 控制位和 1 位保留位(必须为 0)组成。其中 4 位 TOS 分别对应:

  • 最小延时:对 ssh、telnet 这类交互式应用很重要,优先让报文走延迟更低的路径
  • 最大吞吐量:对 ftp 这类文件传输应用很重要,优先选择带宽更高的链路
  • 最高可靠性:优先选择更稳定、丢包率更低的路径
  • 最小成本:优先选择费用更低的转发路径
16 位首部校验和:

这个字段仅对 IP 报头做校验,不包含后面的数据部分。发送方计算 IP 首部的校验和并填入该字段,接收方收到报文后重新计算校验和,与报文里的该字段对比,就能判断 IP 首部在传输过程中是否出现了错误。如果校验失败,报文会被直接丢弃。

8 位生存时间TTL:

8 位生存时间TTL全称 Time To Live,它的核心作用是防止报文在网络中无限循环转发,避免环路导致的网络瘫痪

  • 它的本质是 "最大跳数",报文每经过一个路由器,TTL 值就会减 1
  • 当 TTL 减到 0 时,路由器会直接丢弃该报文,并向源主机发送超时通知
  • 常见的默认 TTL 值为 64,这个字段确保了报文不会在网络中永久循环,也限制了报文能跨的最大网段数

IP 协议报头在内核中也是有对应的结构体来表示的,这个结构体就是下图的 struct iphdr 结构体,结构体的成员和 IP 头的字段是一一对应的:

关于IP报头里的字段我们就讲完了,但是其中如上的这部分字段我们留到后面讲,这部分字段和后面的内容有关。

三、网段划分

网段是什么?

网段 :本质就是一串连续的 IP 地址范围,比如 192.168.1.0~192.168.1.255,是一堆 IP 的编号集合。

网段和子网,局域网的区别:

子网 : 是我们通过子网掩码,把一个大的网段切分成更小的网段,用来做网络隔离。比如一个大网段可以划分成多个子网,子网就是人为切割出来的、逻辑上独立的小网段 ,用来划分不同部门、不同区域的网络。网段和子网,都属于逻辑层面的 IP 划分

局域网(LAN)物理层面的本地网络,就是我们家里、公司里交换机、路由器连起来的一堆电脑、设备。局域网一般对应一个子网,一个局域网内的所有设备,都在同一个子网、同一个网段里,设备之间可以直接通信,不用经过外网路由。

网段划分

IP 地址被明确划分为两部分:网络号主机号

  • 网络号用来保证不同网段之间有唯一、不重复的标识,让路由器能区分不同的网络。
  • 主机号在同一个网段内,所有主机的网络号都相同,但主机号必须唯一,以此区分同一网络里的不同设备。

我们来看上图的例子:两个子网(子网 A 和子网 B)通过一台路由器连接起来。**路由器的一个核心能力就是构建并连接不同的子网。**在这个场景里,路由器有两张网卡,分别对应两个子网,每个网卡都配有一个对应子网的 IP 地址。我们平时的电脑、手机通常只有一张网卡,所以一次只能连接一个网络。

在子网 A 中,所有主机的网络标识(网络号)都是192.168.128,主机标识(主机号)用来唯一标识每一台设备。路由器本身也属于子网 A 里的一台主机,通常被分配为子网内的 1 号主机,所以它在子网 A 的 IP 地址就是192.168.128.1。

同样地,在子网 B 中,所有主机的网络标识都是192.168.144,路由器在子网 B 的 IP 地址就是192.168.144.1。这里的 "网络标识",正是 IP 地址构成中提到的网络号部分,而后面的 "主机标识" 就是主机号部分。

现在假设子网 B 中的一台主机要给子网 A 中的一台主机发送数据。它并不知道 192.168.128.x 这个地址对应的设备具体在哪,但它能通过 IP 地址判断出:目标主机的网络号和自己的网络号(192.168.144) 不一样,因此目标主机不在同一个子网内。这时候,主机就会把数据发送给默认网关,也就是子网 B 里的路由器(192.168.144.1),由路由器来负责跨网络的转发工作。

上面的子网 A 和子网 B 就是两个不同的网段,由路由器来划分和连接的。

判断是不是同一个网段,看的是网络号:

  • 子网 A 的网络号是 192.168.128.0/24;
  • 子网 B 的网络号是 192.168.144.0/24。

二者的网络号完全不同,所以它们就是两个独立的、不同的网段,也叫不同的子网。

/24 就表示 IP 地址的前 24 位是网络号,剩下的 8 位是主机号。
不同的子网,本质上就是把网络号相同的主机划分到一起。

子网内新增主机时,网络号必须和该子网保持一致,但主机号不能和子网内的其他主机重复。
同一子网内,各个主机的网络号相同,主机号不同。

不同子网内,各个主机的主机号可能相同,但网络号一定不同。

查找的本质

我们可以把报文交付给目标主机理解为一次大规模的查找工作。

查找的本质就是通过不断的筛选和淘汰,逐步缩小目标范围,最终定位到唯一的对象。在这个过程中,淘汰效率越高,查找的效率也就越高。如果采用线性淘汰的方式,一次只能排除一个目标,面对整个互联网数十亿台设备,这种效率是完全不可接受的。

而 IP 地址中 "网络号 + 主机号" 的分层设计,正是为了实现高效的批量淘汰。路由器在转发报文时,首先根据目标 IP 的网络号,一次性排除掉所有不匹配的网段,只保留目标主机所在的子网,这就像一次筛选就淘汰了一大批无关的设备,让查找范围瞬间缩小。

为什么要进行网段划分?

因此,我们进行网段划分的核心目的,就是为了支持查找过程中的快速批量淘汰,让路由器能以最高效的方式锁定目标主机所在的网络,从而大幅提升整个路由转发的效率。

如何进行网段划分?

有两种划分方法 :

下面我们来聊聊网段划分的第一种方式:传统分类划分法。

1. 传统分类划分

因为 IPv4 地址总共只有 32 位,理论上可用地址约 42 亿个,42亿在我们当今互联网中不算多。并且全球设备越来越多,地址不够用,所以必须节约、拆分、按需分配 。因为 IP资源有用且有限,就相当于一块大蛋糕,就注定会被争抢。因此为了按需分配、避免地址浪费,早期互联网组织就设计了这套划分方案,把所有 IP 地址分为 A、B、C、D、E 五类,通过地址开头的比特位,来区分网络号和主机号的长度。

传统分类划分的规则就是通过 IP 地址的前几位比特位来确定网络号和主机号的长度:

  1. A 类地址:最高位固定为0,接下来的 7 位作为网络号,剩下的 24 位作为主机号。它的网络号范围是0~127,理论上最多可以划分出2^7=128个 A 类网络,每个网络最多可以容纳2^24台主机,主要分配给大型国家或组织使用。

  2. B 类地址:最高两位固定为10,接下来的 14 位作为网络号,剩下的 16 位作为主机号。网络号范围是128~191,理论上可以划分出2^14个 B 类网络,每个网络最多容纳2^16台主机,通常分配给中大型企业或机构。

  3. C 类地址:最高三位固定为110,接下来的 21 位作为网络号,剩下的 8 位作为主机号。网络号范围是192~223,理论上可以划分出2^21个 C 类网络,每个网络最多容纳2^8台主机,多用于小型局域网。

  4. D 类地址:最高四位固定为1110,地址范围是224~239,专门用于多播(组播)通信,不区分网络号和主机号。

  5. E 类地址:最高五位固定为11110,地址范围是240~247,保留给未来或实验用途,不对外分配。

传统分类划分的弊端:

这种 "一刀切" 的划分方式,很快就暴露出了严重的问题:

  • 地址浪费严重:现实中很少有企业需要 B 类地址能容纳的 6 万多台主机,更不用说 A 类地址的上千万台主机。大量分配出去的地址空间被闲置,造成了巨大的浪费。
  • 地址分配不均:随着互联网快速发展,需求最大的 B 类地址很快就被申请一空,而 A 类地址又大多被少数早期机构占用,资源无法高效调配。

正是这些弊端,催生了我们后面要讲的第二种划分方式 ------子网掩码(CIDR)划分法,它能更灵活地按需分配地址,大幅减少浪费。
传统的 A、B、C 、D、E类划分,本质上是对 IP 地址的分类,而非真正意义上的网段划分。通过 IP 地址开头的固定比特位,将整个 IPv4 地址空间划分成五种不同的地址类型。这种方式只是给 IP 地址定了 "规格",规定了不同地址类型对应的默认网络规模,却无法根据实际需求灵活调整网络号的长度,也不支持将一个大的地址空间拆分成多个更小的子网,因此它解决的是早期地址分配的分类问题,而非按需划分网段的问题。而真正的网段划分,核心是通过子网掩码或 CIDR 技术,将一个连续的 IP 地址空间,按需切分成多个独立的子网,每个子网都可以独立管理、独立路由,以此解决传统分类法中地址浪费、分配不灵活的问题,让 IP 地址资源的使用更加高效、精准。

针对传统分类法地址浪费、划分不灵活的问题,我们引入了新的网段划分方案 ------CIDR(无类别域间路由) ,它的核心就是引入了子网掩码,来实现更灵活、按需的网段划分。

2. 子网掩码划分法(CIDR)

什么是子网掩码?

子网掩码是一个 32 位的正整数,通常由一串连续的 1 开头、一串连续的 0 结尾构成,它通常被设置在主机或路由器的路由表中,和 IP 地址配合使用,用来动态区分 IP 地址中的网络号和主机号。

子网掩码的核心作用就是和 IP 地址做按位与运算,运算的结果就是该 IP 地址对应的网络号,而且这个划分过程和 IP 地址本身是 A 类、B 类还是 C 类无关,实现了真正意义上的无类别网段划分。

我们看上图一个例子 : IP 地址是192.168.128.1,子网掩码是 255.255.255.0,也就是二进制形式的11111111 11111111 11111111 00000000,对应 CIDR 表示法的 /24。将 IP 地址和子网掩码进行按位与运算:


最终得到的结果是192.168.128.0,这就是该 IP 地址对应的网络号。

192.168.128.0 难道不是网络号 + 主机号吗? 为什么光说是 IP 地址对应的网络号呢?

子网掩码的作用,是为了算出网络号。后 8 位主机号部分在按位与运算中直接被子网掩码的后 8 位全 0 清零了(因为与运算只要有一个 0 结果就是 0),这不是说主机号不重要,而是说在判断 "这个 IP 属于哪个网络" 的时候,只需要看网络号部分就够了。主机号是同一个网络内部区分不同设备用的,跨网络转发时,路由器只关心 "目标网络号是多少",不关心具体主机号。

所以最后按位与出的结果 192.168.128.0 本身就是网络号,不再是 "网络号 + 主机号" 的形式,它代表的是整个 192.168.128.0/24 这个子网,不是某个主机的 IP 地址。主机号在运算中被清零,正是为了把 "网络标识" 和 "主机标识" 分开,方便路由器做跨网段转发。

192.168.128.0/24 表示的就是只看 IP 地址的前 24 位,这 24 位就是网络号。/24 就是 CIDR 表示法,它直接定义了网络号的长度为 24 位。IPv4 地址总共 32 位,前 24 位作为网络号,剩下的 8 位自然就是主机号了。对应到子网掩码就是 255.255.255.0,和 IP 地址做按位与运算后,主机号部分被清零,得到的就是网络地址 192.168.128.0

所以,不管这个子网里的主机 IP 是 192.168.128.1 还是 192.168.128.254,它们的前 24 位都完全相同,属于同一个网络号。路由器转发时,只需要看这前 24 位就能判断目标网段,不需要关心主机号部分。


那子网掩码都是统一的 255.255.255.0 吗?

不是的,255.255.255.0 只是子网掩码里最常见的一种。子网掩码的本质是一个 32 位的二进制数,规则是:

  • 前面是连续的 1,代表网络号部分
  • 后面是连续的 0,代表主机号部分

所以,只要符合这个规则的 32 位数,都是合法的子网掩码,比如:

255.255.255.0 常见的原因是因为 /24 刚好把 IP 地址分成了 "前 24 位网络号 + 后 8 位主机号",每个子网可以容纳 254 台主机,刚好满足大多数小型局域网的需求,所以我们平时家用、办公网络里最常看到它。

但在实际网络规划中,会根据需要的主机数量选择不同的掩码:只需要少量主机 (比如两个设备直连),会用 /30,每个子网只有 2 个可用主机地址,不浪费 IP。中型企业网络,可能会用 /20,把一个大网段拆分成多个子网。大型运营商网络,会用更短的掩码 (比如 /16),容纳更多主机。

示例1:

如上,首先我们手里有IP地址和子网掩码,首先我们可以看出,子网掩码前面全部都是连续的1,后面全部都是连续的0,那么先将IP地址和子网掩码分别转换成二进制,如上图右侧,接下来进行按位与操作即可,所以此时我们就得到了网络号,以及主机号的范围,主机号的范围是0到256。

示例2:

如上,首先我们手里有IP地址和子网掩码,那么先将IP地址和子网掩码分别转换成二进制,如上图右侧,接下来进行按位与操作即可,所以此时我们就得到了网络号,以及主机号的范围,主机号的范围是0到15,主机号的起始位置是64,由于主机号的范围从0到15,所以主机号的起始和结束的位置是64到79。

那么我们可以观察,子网掩码的最后一个1的位置前面全部都是 1,所以通常来讲子网掩码对于IP地址来讲还有一种简写方法,例如以第二个例子为例,IP地址是140.252.20.68,子网掩码是255.255.255.240,那么子网掩码转换成二进制之后二进制比特位为1的有n位,那么以子网掩码是255.255.255.240转换成二进制之后是1111 1111 1111 1111 1111 1111 1111 0000,所以为1的位数一共有28个,所以子网掩码对于IP地址简写为 = IP地址/n = 140.252.20.68 / 28。

所以子网掩码可以对32位的IP地址进行任意划分网络号和主机号

相关问题:

1. 比如说我现在的 IP 地址是 192.168.128.10,这个 IP 地址不是由两部分组成吗?前面是网络号,后面是主机号,那这不已经都表明是在 192.168.128 的网段了吗?为什么还要再进行子网掩码呀?

一个完整 IP 地址本身确实由网络部分和主机部分共同组成,因为单纯依靠 IP 地址本身根本没办法精准区分哪几位是网络位、哪几位是主机位,所以必须用到子网掩码。就拿 192.168.128.10 这个地址来说,单看这串数字,没有人能直接确定它归属哪一个网段,它既可以按照前二十四位划为 192.168.128.0 网段,也可以按照前十六位划入 192.168.0.0 大网段,还能划分到范围更小的子网当中,划分标准完全没有定论。在早期传统分类划分模式下,我们可以依靠地址首位数字判定类别,从而固定网络位与主机位的长度,可如今通用的灵活组网模式不再拘泥于固定类别,网段大小可以自由调整,没有统一的划分标准,此时就必须借助子网掩码来明确界定边界。子网掩码的作用就是明确划定出网络位的位数,通过和 IP 地址进行按位与运算,精准算出该 IP 所属的真实网络号,确定它具体处在哪个网段之内。只有确定好了所属网段,设备才能判断目标地址和自己是否处于同一网络,进而决定数据是直接在内网传输,还是发送给网关进行外网转发,缺少子网掩码作为判定依据,设备就无法完成网段识别,正常的网络通信也就无从实现。

换句话说,单单只看一串 IP 数字,没有任何划分标准,无法确定从哪个位置分开,分不清前面哪几位属于网络号,后面哪几位属于主机号。而子网掩码就是专门用来定分界标准的,它提前规定好了 32 位地址里,前面多少位作为网络位,剩下多少位作为主机位。再通过按位与运算,直接把主机位全部清零,精准算出对应的网络地址,彻底把网络部分和主机部分清晰区分开来。有了这个明确界限,设备才能分清自身所处网段,也能判断其他设备和自己是否同在一个网络,进而完成正常的数据收发与网络通信,缺少子网掩码这个划分依据,IP 地址就只是一串无意义的数字,根本没办法正常组网使用。

2. 那比如说这前 24 位是不是我们随便给它取的?

是的,前 24 位并不是固定好的,而是我们根据实际组网需求随意规划设定出来的。我们选用 / 24 这个格式,只是定下了网络位占 24 位、主机位占 8 位这个划分规则,至于这 24 位具体写成什么数字,没有硬性规定,全由搭建网络的人自己决定。想要组建家用局域网,就可以设定成 192.168.128 开头的网段,想要划分办公内网,也能换成 192.168.1、192.168.2 这类不同的开头,只要整体规则统一就行。不光是前 24 位的数值能自由选取,就连划分的位数也能随意更改,不想用 24 位当网络位,换成 16 位、25 位、28 位全都可以,只是一旦确定好了网络位的位数和对应的网段数字,整个局域网里所有设备都必须按照这个标准统一配置,不能各自随意改动,这样所有设备才能精准识别彼此处在同一个网络当中,顺利完成数据通信。

3. 子网掩码划分法相较传统划分法的优势:

子网掩码划分的 CIDR 方式,相比传统 IP 地址分类划分有着极大的实用优势,它诞生的初衷就是弥补传统划分方式造成大量 IP 地址浪费的弊端。我们日常熟知的后 8 位作为主机位、一个网段容纳 254 台主机,只是子网掩码为 24 位时的固定情况,而子网掩码划分最大的特点就是可以自由更改位数,不受固定规格限制,想要容纳大量主机就选用位数更少的子网掩码,让更多位数作为主机位,想要划分小型网段节省地址,就选用位数更多的子网掩码,缩减主机位数量。传统的 IP 分类划分方式十分死板,只能使用 A、B、C 三类固定规格的网络,实际使用中很容易出现网络规模和实际使用需求不匹配的问题,需求设备数量少却只能占用大网段,造成大量空闲 IP 资源闲置,需求设备数量较多时又没有合适的中间规格网段可用,只能越级选用更大网段,进一步加剧地址资源的浪费。而灵活的子网掩码划分模式能够做到按需划分子网,精准匹配不同场景下的组网需求,从根源上减少 IP 地址闲置损耗,让有限的 IPv4 地址资源得到最大化合理利用,这也是该划分方式能够彻底取代传统分类划分,成为当下主流网段划分方式的核心原因。


四、特殊的IP地址

下面我们来说一下几种特殊的 IP 地址,它们在网络通信中各有特殊用途,不能像普通主机地址一样分配给设备使用。

首先是网络号,它是将 IP 地址中的主机号部分全部设为 0 得到的,比如192.168.128.0/24,它代表的是整个局域网,而非某一台具体的主机。网络号的核心作用,就是作为这个网段的标识,让路由器能快速识别出目标主机所在的网络,从而进行跨网段转发。

其次是广播地址,它是将 IP 地址中的主机号部分全部设为 1 得到的,比如192.168.128.255/24。广播地址的用途,是向同一个链路中所有相互连接的主机发送数据包,比如当主机需要查询同一网段内所有设备的信息时,就可以向广播地址发送数据,所有主机都会收到这个广播消息。

最后是127.*开头的环回地址,这类地址专门用于本机环回测试,最常见的是127.0.0.1。当我们的主机向这个地址发送数据时,数据包不会经过真实的网络接口,而是直接在本机内部回环,用来测试本机的 TCP/IP 协议栈是否正常工作,即使主机没有连接网络,也能正常访问这个地址。

也就是说 :

五、IP地址的数量限制

IPv4 地址的数量限制,是早期互联网发展中一个核心的痛点。IPv4 地址是一个 32 位的正整数,理论上只有约 43 亿个可用地址,而随着全球联网设备数量的爆发式增长,这个数字早已无法满足需求。更严峻的是,由于网络号、广播地址、环回地址等特殊地址的存在,实际可分配的地址数量远不足 43 亿;同时,IP 地址并非按主机台数分配,而是按网卡分配,一台多网卡设备就需要多个 IP 地址,这进一步加剧了地址资源的紧张。

CIDR(无类别域间路由)技术的出现,虽然通过灵活划分子网、减少地址浪费,在一定程度上缓解了地址不足的问题,但它并没有增加 IPv4 地址的绝对数量,无法从根本上解决资源枯竭的问题。因此,行业中出现了三种主流的解决方案。第一种是动态分配 IP 地址,通过 DHCP 协议,只给当前接入网络的设备临时分配 IP 地址,设备断开连接后地址会被回收再利用,大幅提高了地址的复用率,比如我们家用网络就是通过这种方式动态获取 IP 的。第二种是 NAT(网络地址转换)技术,它允许多个设备共享同一个公网 IP 地址,通过在路由器上维护地址映射表,将内网私有地址转换为少量的公网地址,让大量内网设备能同时访问互联网,这也是目前家庭和企业网络中应用最广泛的方式。第三种则是 IPv6 协议,它采用 128 位地址格式,提供了近乎无限的地址空间,从根本上解决了地址枯竭问题,不过 IPv6 与 IPv4 并不兼容,目前尚未完全普及,仍处于过渡阶段。

六、总结

本文系统讲解了网络层IP协议的核心概念与应用。主要内容包括:1. IP协议在网络层的作用,实现跨主机寻址和路由转发;2. IP报文结构及关键字段功能,如首部长度、总长度、协议类型等;3. 网段划分的两种方法:传统分类法和CIDR子网掩码法;4. 特殊IP地址(网络号、广播地址、环回地址)的用途;5. IPv4地址数量限制及解决方案(DHCP、NAT、IPv6)。文章通过实例详细解析了IP地址构成、子网划分原理及路由转发机制,帮助理解网络层实现跨网段通信的核心技术。

谢谢大家的观看!

相关推荐
IT瑞先生1 小时前
运维专题3——业务进程排查方法论
运维·网络
枳实-叶1 小时前
【Linux驱动开发】第10天:设备树零基础入门——DTS/DTB/DTC全解+编译流程
linux·运维·驱动开发
枳实-叶1 小时前
【Linux驱动开发】第11天:设备树(Device Tree)超详细全解:从诞生背景到工作原理
linux·运维·驱动开发
IceSugarJJ1 小时前
Windows下VSCode+ WSL项目启动流程
linux·windows·vscode·ubuntu·wsl
IT大白鼠1 小时前
网络发展简史:从ARPANET到Web3.0的技术演进与社会影响
网络·web3
Bert.Cai1 小时前
Linux shift命令详解
linux·运维·服务器
叶~小兮1 小时前
Zabbix 7.0 深度原理与生产进阶运维学习笔记
运维·学习·zabbix
cui_ruicheng1 小时前
Linux网络编程(六):UDP聊天室与线程池
linux·服务器·网络·udp
小明同学011 小时前
C++后端项目:统一大模型接入 SDK(五)
服务器·c++·后端·计算机网络·语言模型