公网 IP、私网 IP、路由表、转发表与 MAC 地址的关系

引言

学习网络时,最容易混淆的不是协议流程,而是几个看起来相近、其实不在一个层面的概念,比如:

  • 私网 IP 和公网 IP
  • 路由表和转发表
  • "在链路上"到底是什么意思
  • MAC 地址和 IP 地址分别属于哪一层

这篇文章把这些概念放到同一条线上梳理清楚,尽量用能直接形成画面的方式去理解。

私网 IP、公网 IP 和 NAT 到底是什么关系

很多人第一次接触家庭网络时,容易把 192.168.x.x 这类地址叫成"虚拟 IP"。这个说法不够准确,更准确的叫法应该是:

  • 公网 IP
  • 私网 IP
  • NAT

什么是公网 IP

公网 IP 是可以在互联网范围内参与路由的地址。通常一个家庭宽带、一个企业出口、一个云服务器,都会有一个或多个公网 IP。

从互联网的视角看,真正能被外部网络直接识别和访问的,通常是这个公网 IP。

什么是私网 IP

私网 IP 是保留给局域网内部使用的地址,不能直接在公网中路由。最常见的私网地址范围有三段:

  1. 10.0.0.0/8
  2. 172.16.0.0/12172.31.255.255
  3. 192.168.0.0/16

家里的手机、电脑、平板连上同一个路由器后,通常拿到的就是私网 IP,比如:

  • 192.168.1.2
  • 192.168.1.3
  • 192.168.1.4

路由器在这里做了什么

可以把家用路由器理解成"局域网出口"。

路由器通常同时扮演两个角色:

  1. 在内网一侧给设备分配私网 IP
  2. 在外网一侧使用公网 IP 和互联网通信

当内网设备访问外网时,数据会先发给路由器,然后由路由器通过 NAT 转换,把"内网地址 + 端口"映射成"公网地址 + 端口",再发到互联网。

外部响应返回时,路由器再根据 NAT 映射表,把数据转回对应的内网设备。

所以"虚拟 IP"这个说法哪里不准确

在家庭路由器场景里,192.168.x.x 更准确的名称是"私网 IP"或"内网 IP",而不是"虚拟 IP"。

因为这里的重点不是"虚拟化",而是:

  • 这些地址只在局域网内部有效
  • 真正和公网通信时,需要借助 NAT

所以更准确的理解应该是:

"路由器用一个公网 IP 对外通信,同时在局域网内部管理一批私网 IP,并通过 NAT 帮这些内网设备和互联网交换数据。"

路由表里显示"在链路上"是什么意思

在 Windows 的 route print 输出中,经常能看到网关一栏显示"在链路上"。

这个词的核心含义其实很简单:

"这个目标是直连可达的,不需要再交给下一跳网关。"

也可以理解成英文里的 on-link

什么叫直连可达

假设你的电脑地址是:

text 复制代码
192.168.1.100/24

那么 192.168.1.0/24 这个网段就是你当前网卡直连的本地网络。

这时如果你要访问:

text 复制代码
192.168.1.50

目标就在同一个网段里,所以不需要把数据先交给路由器。系统会直接:

  1. 查路由表,发现目标网络是直连网络
  2. 看到网关显示"在链路上"
  3. 通过 ARP 查询对方 MAC 地址
  4. 直接把帧发给目标设备

这里没有"下一跳路由器"这个环节,所以网关列不会出现一个真正的网关 IP。

常见几类"在链路上"路由

在 Windows 路由表里,下面几类条目很常见:

  • 本地局域网网段,比如 192.168.1.0/24
  • 本机地址,比如 192.168.1.100/32
  • 广播地址,比如 192.168.1.255/32
  • 回环地址,比如 127.0.0.0/8

它们的共同点都是:

  • 数据不需要经过外部网关转发
  • 系统自己就能直接处理,或者直接在当前链路内发送

所以"在链路上"不是说"链路里有很多网关",而是说:

"这个目标本来就在当前链路上,可以直接到达。"

路由表和转发表有什么区别

这两个概念很像,但职责并不完全相同。

路由表是什么

路由表更偏"控制平面"。

它保存的是路由信息,用来决定:

  • 某个目标网络应该怎么走
  • 下一跳是谁
  • 应该从哪个接口发出

典型字段包括:

  • 目标网络
  • 子网掩码
  • 下一跳
  • 出接口
  • Metric

简单说,路由表回答的是:

"去这个目标网络,原则上该走哪条路?"

转发表是什么

转发表更偏"数据平面"。

当数据包真正到达路由器,需要立即转发时,设备不会每次都拿复杂的路由信息重新计算,而是直接查更适合快速匹配的数据结构,这就是转发表。

它更像是:

"最终给硬件或转发引擎使用的快速查表结果。"

两者的关系

可以这样理解:

  1. 路由表负责产出转发决策
  2. 转发表负责执行快速转发

在很多设备里,转发表往往是由路由表计算、筛选、收敛之后生成的。

所以如果要一句话区分:

  • 路由表偏"怎么选路"
  • 转发表偏"怎么转包"

MAC 地址和 IP 地址分别属于哪一层

这一点也很容易记混。

MAC 地址属于数据链路层

MAC 地址是网卡层面的硬件地址,用于局域网内的二层通信。

它解决的问题是:

"这一帧数据,当前这一跳到底发给哪块网卡?"

注意,MAC 地址属于数据链路层,不属于物理层。物理层负责的是比特流、电信号、光信号和传输介质,而不是地址编址。

IP 地址属于网络层

IP 地址用于跨网络定位主机,解决的是:

"这个包最终要送到哪台主机?"

所以 IP 地址的作用范围比 MAC 地址更高一层,也更广。

为什么既需要 MAC,又需要 IP

因为它们解决的不是同一个问题。

  • IP 负责"最终送到谁"
  • MAC 负责"这一跳交给谁"

例如从你电脑访问公网服务器时:

  1. IP 头里的目标 IP 可能是远端服务器地址
  2. 但二层帧里的目标 MAC,往往先写的是你家路由器的 MAC

也就是说,IP 决定终点,MAC 决定当前这一跳。

把这些概念串起来理解

假设你的电脑地址是 192.168.1.100,家里路由器 LAN 口是 192.168.1.1,路由器对外有一个公网 IP。

当你访问外网服务器时,大致过程如下:

  1. 电脑查路由表,发现目标不在本地网段
  2. 因此走默认路由,把数据交给网关 192.168.1.1
  3. 电脑通过 ARP 获得路由器的 MAC 地址
  4. 数据帧先发给路由器
  5. 路由器执行 NAT,把私网地址转换为公网地址
  6. 路由器根据自己的路由信息继续转发到互联网
  7. 返回流量再通过 NAT 映射回到内网主机

如果访问的是同网段设备,比如 192.168.1.50,流程就不一样:

  1. 电脑查路由表,发现目标"在链路上"
  2. 不需要经过网关
  3. 直接 ARP 查询目标 MAC
  4. 直接发送二层帧

这样就把私网 IP、公网 IP、NAT、路由表、MAC 地址这些概念串起来了。

总结

这篇文章的重点可以压缩成四句话:

  1. 192.168.x.x 这类地址更准确地叫"私网 IP",不是"虚拟 IP"
  2. "在链路上"表示目标是直连可达的,不需要经过下一跳网关
  3. 路由表负责选路,转发表负责高速转发
  4. MAC 地址属于数据链路层,IP 地址属于网络层

把这四点想清楚,后面再看 ARP、默认网关、NAT、路由转发时,很多原来容易混的概念都会一下子顺起来。

参考资料


如果这篇文章对你有帮助,欢迎继续阅读本系列后续内容。若文中有不准确或需要补充的地方,也欢迎指出。

相关推荐
.select.2 小时前
TCP 5(socket编程)
服务器·网络·tcp/ip
z10_143 小时前
享住宅IP、长效代理ip是什么?有什么用?
网络·网络协议·tcp/ip
Lecxcy_Kastreain3 小时前
如何自适应 MacOS
macos
翻斗包菜3 小时前
Python 网络编程从入门到精通:TCP/UDP/Socket 实战详解
网络·python·tcp/ip
闻道且行之4 小时前
虚拟机三种网络模式全解析(桥接 / NAT / 仅主机)
网络·智能路由器·vmware·虚拟机
.select.5 小时前
TCP 6(重传机制)
linux·服务器·tcp/ip
简单点了5 小时前
mac安装node环境
macos
天启HTTP5 小时前
HTTP代理和隧道代理的底层区别与适用场景分析
开发语言·网络协议·tcp/ip·php
深念Y5 小时前
从路由器到SSD:关于自制NAND编程器的幻想与现实
智能路由器·路由器·ssd·主控·nand·闪存·智能机顶盒