Linux 网络基础之网络IP层(十)IP 协议,网段划分,IP地址相关问题 目录一、引出IP协议引入基本概念初步理解IP的作用IP地址的构成理解路由的过程查找目标主机的方法TCP 协议和 IP 协议的关系二、IP协议头格式IP报头和有效载荷怎么分离?4 位首部长度:16 位总长度(字节数):有效载荷的向上层的分用问题?8 位协议:其他字段8 位服务类型:16 位首部校验和:8 位生存时间TTL:三、网段划分网段是什么?网段划分查找的本质为什么要进行网段划分如何进行网段划分?1. 传统分类划分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 到主机 CIP 报文需要经过无数个子网的接力转发才能完成跨网段的交付。那为什么主机 B 要把报文交给 FF 又要交给 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 通过各种重传机制为数据传输提供了可靠保障。所以TCPIP 的组合才实现了跨网络可靠传输数据的完整能力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×420 字节如果存在选项字段该值会大于 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^7128个 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地址构成、子网划分原理及路由转发机制帮助理解网络层实现跨网段通信的核心技术。谢谢大家的观看!