news 2026/2/3 1:53:54

网络层详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
网络层详解

IP协议格式

IPv4 头部字段总长度可变(最小 20 字节,最大 60 字节),各字段按顺序定义如下:

1. 4 位 版本号(version)

  • 作用:指定 IP 协议的版本
  • 取值:对于 IPv4,固定为4

2. 4 位 头部长度(header length)

  • 单位:32bit(4 字节)
  • 计算:实际头部长度 = 该字段值 × 4 字节
  • 限制:4bit 最大表示 15,因此 IP 头部最大长度为15×4=60 字节
  • 说明:最小为 5(对应 20 字节,无选项字段)

3. 8 位 服务类型(Type Of Service, TOS)

  • 结构:3 位 优先权字段(已弃用) + 4 位 TOS 字段 + 1 位 保留字段(必须置 0)
  • 4 位 TOS 字段(四者互斥,仅能选其一):
    • 最小延时:适用于 ssh、telnet 等交互型应用
    • 最大吞吐量:适用于 ftp 等大文件传输应用
    • 最高可靠性:适用于对数据完整性要求高的应用
    • 最小成本:适用于对网络费用敏感的应用

4. 16 位 总长度(total length)

  • 作用:表示整个 IP 数据报(头部 + 数据)的总字节数
  • 限制:16bit 最大表示 65535,因此 IP 数据报最大长度为 65535 字节

5. 16 位 标识(id)

  • 作用:唯一标识主机发送的单个 IP 报文
  • 分片规则:若 IP 报文在数据链路层被分片,所有分片片的 id 均相同,用于接收端重组

6. 3 位 标志字段(Flags)

  • 位 1:保留位(未使用,置 0)
  • 位 2:禁止分片位(DF)
    • 置 1:禁止分片,若报文长度超过 MTU(Maximum Transmission Unit,最大传输单元),IP 模块直接丢弃报文
    • 置 0:允许分片
  • 位 3:更多分片位(MF)
    • 置 1:表示后续还有分片
    • 置 0:表示当前是最后一个分片(结束标记)

7. 13 位 分片偏移(fragment offset)

  • 作用:表示当前分片在原始 IP 报文中的位置偏移
  • 计算:实际偏移字节数 = 该字段值 × 8 字节
  • 限制:除最后一个分片外,其他分片的长度必须是8 的整数倍,保证报文连续

8. 8 位 生存时间(Time To Live, TTL)

  • 作用:限制数据报的最大路由跳数,防止路由循环
  • 默认值:通常为64
  • 规则:每经过一个路由器,TTL 减 1;若 TTL 减至 0 仍未到达目标,则丢弃报文

9. 8 位 协议(Protocol)

  • 作用:标识 IP 上层所使用的协议类型
  • 常见取值:TCP(6)、UDP(17)、ICMP(1)等

10. 16 位 头部校验和(Header Checksum)

  • 作用:校验 IP 头部的完整性,鉴别头部是否损坏
  • 算法:使用CRC 校验,仅校验头部,不校验数据部分

11. 32 位 源地址 + 32 位 目标地址

  • 作用:分别表示发送端和接收端的IPv4 地址
  • 特点:固定 32 位,占 4 字节 each

12. 选项字段(Options)

  • 长度:不定长,最多 40 字节
  • 作用:用于扩展 IP 功能(如记录路由、时间戳等)
  • 说明:无特殊需求时可省略,此时头部长度为 20 字节

网段划分

网段划分的核心目的

如果所有网络设备的 IP 地址都没有规则,就像城市里的房子没有街道和门牌号 —— 既无法区分不同区域,也无法高效找到目标主机。

网段划分的作用就是给 IP 地址 “分区域、编门牌号”,实现两个核心目标:

  1. 区分不同网络:通过网络号保证相互连接的网段有唯一标识(类似 “街道名”);
  2. 区分同一网络内的主机:通过主机号保证同一网段内的主机有唯一标识(类似 “门牌号”);

网段划分的工具:子网掩码

网络号(Network ID)

  • 作用:标识主机所在的网段,同一网段内的所有主机,网络号必须完全相同;
  • 特点:不同网段的网络号必须不同,否则会导致网络冲突(无法区分两个网段)。

主机号(Host ID)

  • 作用:标识网段内的具体主机,同一网段内的所有主机,主机号必须完全不同;
  • 特点:主机号不能全为 0(表示网段本身,如192.168.1.0),也不能全为 1(表示网段广播地址,如192.168.1.255),一般也不是1,1默认代表网关。

怎么区分一个 IP 地址的哪部分是网络号,哪部分是主机号?答案是子网掩码—— 它是一个和 IP 地址长度相同的 32 位二进制数,通过 “按位与” 运算,提取 IP 地址的网络号。


如何判断两台主机是否在同一网段?

  • 主机 A:192.168.1.10,子网掩码255.255.255.0
  • 主机 B:192.168.1.20,子网掩码255.255.255.0
  • 主机 C:192.168.2.10,子网掩码255.255.255.0

步骤 1:将 IP 和子网掩码转换为二进制,做按位与运算,得到网络号。

  • 主机 A 网络号:192.168.1.0
  • 主机 B 网络号:192.168.1.0
  • 主机 C 网络号:192.168.2.0

步骤 2:比较网络号:

  • 主机 A 和 B 网络号相同 →同一网段,可以直接通信;
  • 主机 A 和 C 网络号不同 →不同网段,需要路由器转发才能通信。

子网的核心规则

  1. 同一子网内

    • 所有主机的网络号必须相同

    • 所有主机的主机号必须唯一

    • 主机之间可以直接通信(无需路由器)。

  2. 不同子网之间

    • 网络号必须不同

    • 主机之间无法直接通信,必须通过路由器转发(路由器负责不同网段的数据包交换)。


DHCP

手动管理子网内的 IP 是相当麻烦的事情, 手动分配不仅效率低,还容易出现 IP 重复(冲突)。

DHCP 的核心作用

DHCP(动态主机配置协议)是一种自动分配 IP 地址的技术,它可以为子网内的新增主机自动分配:

  • 唯一的 IP 地址(避免重复);
  • 子网掩码;
  • 网关(路由器 IP);
  • DNS 服务器 IP 等。

DHCP 的常见部署场景

  • 路由器内置 DHCP:家用或小型办公网络中,路由器默认开启 DHCP 功能,作为DHCP 服务器;
  • 独立 DHCP 服务器:大型企业网络中,会部署专门的 DHCP 服务器,管理多个子网的 IP 分配。

DHCP 的工作流程

  1. 新增主机(如你的电脑)启动后,广播发送DHCP 请求:“谁能给我分配一个 IP 地址?”
  2. 子网内的 DHCP 服务器(路由器)收到请求后,从IP 地址池中选择一个未分配的 IP,回复DHCP 应答;
  3. 主机收到应答后,使用该 IP 地址,完成网络配置。

有限的IPV4

地址类别二进制前缀网络号位数主机号位数地址范围(点分十进制)核心用途
A 类07 位24 位0.0.0.0 ~ 127.255.255.255大型网络(如早期大型机构、运营商)
B 类1014 位16 位128.0.0.0 ~ 191.255.255.255中型网络(如企业级网络)
C 类11021 位8 位192.0.0.0 ~ 223.255.255.255小型网络(如家庭、小型办公网络)
D 类1110-(无网络 / 主机号)28 位(多播组号)224.0.0.0 ~ 239.255.255.255多播通信(如组播数据传输)
E 类11110-(保留)27 位(保留)240.0.0.0 ~ 247.255.255.255科研、实验等特殊用途(未广泛商用)

这一分类是 IPv4 早期的地址分配方式,其核心问题是地址浪费严重(例如 A 类地址仅 7 位网络号,却包含约 1677 万主机位,多数大型网络用不完)。

解决方案1:CIDR

CIDR(无类域间路由)取代了传统的 A/B/C 类有类地址划分,通过灵活的子网掩码自由划分网络号和主机号(比如可以通过掩码把一个 C 类地址划分为多个小子网),大幅提高了 IP 地址的利用率,减少了 “大网段用不完、小网段不够用” 的浪费问题。

但CIDR 没有增加 IPv4 地址的绝对总数,依旧是42 亿的上限,无法从根本上解决地址枯竭问题。

解决方案2:NAT技术

NAT(Network Address Translation) 是一种运行在路由器(或网关)上的技术,它可以将内网私有 IP 地址公网 IP 地址进行双向转换,实现内网主机通过公网 IP 访问互联网。

(1)静态 NAT(一对一映射)

  • 规则:将一个固定的内网私有 IP永久映射到一个固定的公网 IP。
  • 工作流程:
    1. 内网主机 A(192.168.1.10)需要访问外网服务器(203.0.113.1);
    2. 路由器收到请求后,将源 IP 从 192.168.1.10 转换为固定公网 IP(120.79.1.1);
    3. 外网服务器返回数据时,目标 IP 为 120.79.1.1,路由器再将其转换为 192.168.1.10,转发给内网主机。
  • 适用场景:需要让外网主机主动访问内网服务的场景(如内网的 Web 服务器、FTP 服务器),通过静态 NAT 可以让外网用户通过固定公网 IP 访问内网服务器。
  • 缺点:需要为每个内网服务主机分配一个公网 IP,依然消耗公网地址,无法大规模节省。

(2)动态 NAT(多对多映射)

  • 规则:路由器维护一个公网 IP 地址池,当内网主机需要访问外网时,从地址池中动态分配一个未被使用的公网 IP进行映射,主机断开连接后,公网 IP 被释放回地址池。
  • 工作流程:
    1. 路由器有公网 IP 池:120.79.1.1 ~ 120.79.1.10;
    2. 内网主机 A(192.168.1.10)访问外网,路由器分配 120.79.1.1;
    3. 内网主机 B(192.168.1.20)访问外网,路由器分配 120.79.1.2;
    4. 主机 A 断开连接后,120.79.1.1 被释放,可分配给其他内网主机。
  • 适用场景:内网主机数量多于公网 IP 数量,但又需要同时访问外网的场景。
  • 缺点:公网 IP 池的大小决定了同时访问外网的内网主机最大数量,依然需要一定数量的公网 IP。

解决方案3:NTPT

NAPT(Network Address and Port Translation) 是NAT 的扩展版本,是目前家庭、企业网络中最常用的方案。它不仅转换IP 地址,还转换传输层的端口号,实现多个内网主机共享一个公网 IP访问互联网。

TCP/UDP 协议的端口号(16 位,范围 0~65535) 可以标识主机上的不同应用程序。NAPT 通过 **“公网 IP + 公网端口号”** 与 **“内网 IP + 内网端口号”** 的一一映射,区分不同内网主机的请求。

工作流程(以家庭路由器为例)

  • 路由器公网 IP:120.79.1.1;
  • 内网主机 A:192.168.1.10,使用端口 50000 访问外网服务器(203.0.113.1,端口 80);
  • 内网主机 B:192.168.1.20,使用端口 60000 访问同一外网服务器(端口 80)。

步骤 1:内网主机发送请求

  • 主机 A 发送的数据包:源 IP=192.168.1.10,源端口 = 50000;目标 IP=203.0.113.1,目标端口 = 80;
  • 主机 B 发送的数据包:源 IP=192.168.1.20,源端口 = 60000;目标 IP=203.0.113.1,目标端口 = 80。

步骤 2:路由器做 NAPT 转换

路由器维护一个NAPT 映射表,为每个内网请求分配一个唯一的公网端口号:

内网 IP: 端口公网 IP: 端口目标 IP: 端口
192.168.1.10:50000120.79.1.1:30000203.0.113.1:80
192.168.1.20:60000120.79.1.1:30001203.0.113.1:80
  • 主机 A 的数据包被转换为:源 IP=120.79.1.1,源端口 = 30000;目标 IP 和端口不变;
  • 主机 B 的数据包被转换为:源 IP=120.79.1.1,源端口 = 30001;目标 IP 和端口不变。

步骤 3:外网服务器返回数据

外网服务器返回的数据包:

  • 给主机 A 的:源 IP=203.0.113.1:80,目标 IP=120.79.1.1:30000;
  • 给主机 B 的:源 IP=203.0.113.1:80,目标 IP=120.79.1.1:30001。

步骤 4:路由器反向转换并转发

路由器根据 NAPT 映射表,将目标 IP 和端口转换回内网 IP 和端口:

  • 目标 30000 → 转发给 192.168.1.10:50000;
  • 目标 30001 → 转发给 192.168.1.20:60000。

NAPT 的核心优势

  • 极致节省公网 IP:一个公网 IP 理论上可以支持65535 个内网主机(通过不同端口号区分),完全满足家庭、小型企业的需求;
  • 隐藏内网结构:外网主机只能看到路由器的公网 IP,无法直接访问内网主机,提高了内网安全性。

终极方案:IPV6

IPv6 是为彻底解决IPv4 地址枯竭问题而设计的新一代互联网协议,同时优化了 IPv4 的诸多缺陷,是互联网的长远发展方向。

IPv6 地址是128 位的二进制数,其理论地址总数为:2128≈3.4×1038这个数量级相当于 “给地球上每一粒沙子分配数万亿个 IP 地址”,彻底解决了地址不足的问题。

IPv6 地址不再使用 IPv4 的 “点分十进制”,而是采用冒分十六进制表示(将 128 位分为 8 组,每组 4 位十六进制数,组间用冒号分隔)。

例如:2001:0db8:85a3:0000:0000:8a2e:0370:7334

为了简化冗长的地址,IPv6 支持两种压缩方式:

  • 规则 1:每组前导零可省略(但至少保留 1 位)例:0db8db800000
  • 规则 2:连续的全零组可替换为::(仅能使用一次)例:2001:0db8:85a3:0000:0000:8a2e:0370:7334→ 压缩为2001:db8:85a3::8a2e:370:7334

错误示例2001::db8::7334::使用了两次,无法确定全零组的数量,是非法地址)

目前 IPv6 处于逐步普及、与 IPv4 共存的阶段:


私有IP与公网IP

IP 地址按 “是否能在互联网上直接路由” 分为两类:

类型核心特点用途
私有 IP 地址仅用于局域网内部通信,无法在互联网(公网)上直接路由;不同局域网内可重复使用家庭、企业等局域网的主机地址
公网 IP 地址由互联网分配机构(ICANN)统一分配,全球唯一,可在互联网上直接路由互联网设备(如服务器、运营商路由器)的地址

私有 IP 地址范围

为了规范局域网的 IP 使用,RFC 1918(互联网标准文档)规定了 3 个私有 IP 地址段,所有局域网均从这 3 段中选择地址:

私有 IP 段网络号长度地址范围可用地址数量典型场景
10.*8 位(前 8 位固定为 10)10.0.0.0 ~ 10.255.255.255约 1677 万大型企业局域网
172.16.* ~ 172.31.*12 位(前 12 位固定为 172.16)172.16.0.0 ~ 172.31.255.255约 104 万中型企业局域网
192.168.*16 位(前 16 位固定为 192.168)192.168.0.0 ~ 192.168.255.255约 6.5 万家庭、小型办公局域网
  • 同一局域网内的私有 IP 必须唯一(避免内网冲突);
  • 不同局域网内的私有 IP 可以完全重复(因为彼此处于独立子网,不互通)。

路由器的WAN 口与LAN 口

家用 / 企业路由器是 “连接内网与外网” 的核心设备,它会同时配置两个 IP 地址,分别对应不同的网络:

LAN 口 IP(局域网 IP)
  • 类型:私有 IP(通常是 192.168.1.1、192.168.0.1 等);

  • 作用:作为内网网关,是局域网内所有主机的 “出口”;

  • 特点:同一路由器下的所有内网主机,必须与 LAN 口 IP 处于同一子网(如 LAN 口是 192.168.1.1,主机 IP 需是 192.168.1.x)。

WAN 口 IP(广域网 IP)
  • 类型:可能是公网 IP,也可能是上级路由器的私有 IP(取决于网络层级);

  • 作用:是路由器在 “上级网络” 中的身份标识,用于与外网通信;

  • 示例:

    • 若你家是光纤直连,WAN 口 IP 可能是运营商分配的公网 IP(如 120.79.1.1);

    • 若你家是小区共享网络,WAN 口 IP 可能是小区路由器分配的私有 IP(如 10.100.2.3)。

子网的层级结构:从家庭到运营商

实际网络是多层子网嵌套的结构,私有 IP 与公网 IP 通过层级逐步衔接:

  1. 家庭子网

    • 路由器 LAN 口 IP(192.168.1.1)是网关,手机、电脑的 IP 是 192.168.1.2、192.168.1.3(私有 IP);
    • 路由器 WAN 口 IP 是小区路由器分配的私有 IP(如 10.100.2.3)。
  2. 小区子网

    • 小区路由器的 LAN 口 IP 是 10.100.2.1(私有 IP),管理多个家庭路由器;
    • 小区路由器的 WAN 口 IP 是运营商区域路由器分配的 IP(如 202.103.1.5)。
  3. 运营商核心网络

    • 最外层的运营商核心路由器,WAN 口 IP 是公网 IP(直接在互联网上可路由)。

核心逻辑:每一层路由器都将 “下级子网” 封装为自己的一个节点,最终通过最外层的公网 IP 接入互联网。

为什么需要公网 IP 服务器?

如果想让自己的程序(如 Web 服务器)被互联网上的用户访问,必须满足一个条件:程序所在的主机拥有公网 IP。原因是:互联网上的用户只能通过 “全球唯一的公网 IP” 找到目标设备,而私有 IP 仅能在局域网内被识别。

家庭 / 企业内网的主机(用私有 IP)无法直接被公网访问,因此通常将程序部署在云服务器上, 云服务器会被分配一个固定公网 IP,可直接在互联网上被访问到。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/31 8:58:22

还在用ByteBuffer?是时候升级到Java Foreign Memory API了!

第一章:Shell脚本的基本语法和命令Shell脚本是Linux/Unix系统中自动化任务的核心工具,通过编写可执行的文本文件,用户能够组合命令、控制流程并处理数据。其语法简洁,适合系统管理、日志分析、批量处理等场景。变量定义与使用 She…

作者头像 李华
网站建设 2026/2/2 19:08:19

HTML嵌入Jupyter输出图表:基于TensorFlow 2.9镜像的数据展示

HTML嵌入Jupyter输出图表:基于TensorFlow 2.9镜像的数据展示 在深度学习项目中,一个常见的挑战是:如何让非技术人员——比如产品经理、客户或管理层——真正“看懂”模型的训练结果?我们经常遇到这样的场景:开发者在Ju…

作者头像 李华
网站建设 2026/1/30 2:11:07

飞算JavaAI代码生成实测:1行提示生成完整Spring Boot模块,效率逆天

第一章:飞算JavaAI代码自动生成飞算JavaAI是一款面向企业级Java开发的智能化代码生成工具,深度融合人工智能与工程实践,能够根据业务需求描述自动生成高质量、可维护的Java代码。该工具支持Spring Boot项目结构下的Controller、Service、DAO等…

作者头像 李华
网站建设 2026/1/31 20:17:47

如何用Prometheus + Grafana + ML实现Java微服务故障预测?

第一章:Java微服务故障预测的智能运维新范式 在现代分布式系统中,Java微服务架构因其灵活性和可扩展性被广泛采用。然而,服务实例的动态性和调用链路的复杂性使得传统被动式运维难以应对突发故障。智能运维(AIOps)通过…

作者头像 李华
网站建设 2026/2/1 12:53:44

2025专科生必看!10个AI论文平台测评,写论文不再愁

2025专科生必看!10个AI论文平台测评,写论文不再愁 2025年专科生论文写作新选择:AI平台测评全面解析 随着人工智能技术的不断进步,越来越多的专科生开始借助AI工具提升论文写作效率。然而,面对市场上琳琅满目的AI论文平…

作者头像 李华
网站建设 2026/1/31 3:06:39

JBoltAI提示词全生命周期管理:AI应用工程化核心实践

在AI应用开发领域,模型、算法与算力常占据焦点,而驱动AI运转的提示词却多以零散字符串形式存在,沦为易被忽视的“隐形短板”。提示词散落代码、维护困难、无法评测、复用性低等痛点,成为制约AI应用工程化发展的关键瓶颈。JBoltAI以…

作者头像 李华