引言
学习网络时,最容易混淆的不是协议流程,而是几个看起来相近、其实不在一个层面的概念,比如:
- 私网 IP 和公网 IP
- 路由表和转发表
- "在链路上"到底是什么意思
- MAC 地址和 IP 地址分别属于哪一层
这篇文章把这些概念放到同一条线上梳理清楚,尽量用能直接形成画面的方式去理解。
私网 IP、公网 IP 和 NAT 到底是什么关系
很多人第一次接触家庭网络时,容易把 192.168.x.x 这类地址叫成"虚拟 IP"。这个说法不够准确,更准确的叫法应该是:
- 公网 IP
- 私网 IP
- NAT
什么是公网 IP
公网 IP 是可以在互联网范围内参与路由的地址。通常一个家庭宽带、一个企业出口、一个云服务器,都会有一个或多个公网 IP。
从互联网的视角看,真正能被外部网络直接识别和访问的,通常是这个公网 IP。
什么是私网 IP
私网 IP 是保留给局域网内部使用的地址,不能直接在公网中路由。最常见的私网地址范围有三段:
10.0.0.0/8172.16.0.0/12到172.31.255.255192.168.0.0/16
家里的手机、电脑、平板连上同一个路由器后,通常拿到的就是私网 IP,比如:
192.168.1.2192.168.1.3192.168.1.4
路由器在这里做了什么
可以把家用路由器理解成"局域网出口"。
路由器通常同时扮演两个角色:
- 在内网一侧给设备分配私网 IP
- 在外网一侧使用公网 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
目标就在同一个网段里,所以不需要把数据先交给路由器。系统会直接:
- 查路由表,发现目标网络是直连网络
- 看到网关显示"在链路上"
- 通过 ARP 查询对方 MAC 地址
- 直接把帧发给目标设备
这里没有"下一跳路由器"这个环节,所以网关列不会出现一个真正的网关 IP。
常见几类"在链路上"路由
在 Windows 路由表里,下面几类条目很常见:
- 本地局域网网段,比如
192.168.1.0/24 - 本机地址,比如
192.168.1.100/32 - 广播地址,比如
192.168.1.255/32 - 回环地址,比如
127.0.0.0/8
它们的共同点都是:
- 数据不需要经过外部网关转发
- 系统自己就能直接处理,或者直接在当前链路内发送
所以"在链路上"不是说"链路里有很多网关",而是说:
"这个目标本来就在当前链路上,可以直接到达。"
路由表和转发表有什么区别
这两个概念很像,但职责并不完全相同。
路由表是什么
路由表更偏"控制平面"。
它保存的是路由信息,用来决定:
- 某个目标网络应该怎么走
- 下一跳是谁
- 应该从哪个接口发出
典型字段包括:
- 目标网络
- 子网掩码
- 下一跳
- 出接口
- Metric
简单说,路由表回答的是:
"去这个目标网络,原则上该走哪条路?"
转发表是什么
转发表更偏"数据平面"。
当数据包真正到达路由器,需要立即转发时,设备不会每次都拿复杂的路由信息重新计算,而是直接查更适合快速匹配的数据结构,这就是转发表。
它更像是:
"最终给硬件或转发引擎使用的快速查表结果。"
两者的关系
可以这样理解:
- 路由表负责产出转发决策
- 转发表负责执行快速转发
在很多设备里,转发表往往是由路由表计算、筛选、收敛之后生成的。
所以如果要一句话区分:
- 路由表偏"怎么选路"
- 转发表偏"怎么转包"
MAC 地址和 IP 地址分别属于哪一层
这一点也很容易记混。
MAC 地址属于数据链路层
MAC 地址是网卡层面的硬件地址,用于局域网内的二层通信。
它解决的问题是:
"这一帧数据,当前这一跳到底发给哪块网卡?"
注意,MAC 地址属于数据链路层,不属于物理层。物理层负责的是比特流、电信号、光信号和传输介质,而不是地址编址。
IP 地址属于网络层
IP 地址用于跨网络定位主机,解决的是:
"这个包最终要送到哪台主机?"
所以 IP 地址的作用范围比 MAC 地址更高一层,也更广。
为什么既需要 MAC,又需要 IP
因为它们解决的不是同一个问题。
- IP 负责"最终送到谁"
- MAC 负责"这一跳交给谁"
例如从你电脑访问公网服务器时:
- IP 头里的目标 IP 可能是远端服务器地址
- 但二层帧里的目标 MAC,往往先写的是你家路由器的 MAC
也就是说,IP 决定终点,MAC 决定当前这一跳。
把这些概念串起来理解
假设你的电脑地址是 192.168.1.100,家里路由器 LAN 口是 192.168.1.1,路由器对外有一个公网 IP。
当你访问外网服务器时,大致过程如下:
- 电脑查路由表,发现目标不在本地网段
- 因此走默认路由,把数据交给网关
192.168.1.1 - 电脑通过 ARP 获得路由器的 MAC 地址
- 数据帧先发给路由器
- 路由器执行 NAT,把私网地址转换为公网地址
- 路由器根据自己的路由信息继续转发到互联网
- 返回流量再通过 NAT 映射回到内网主机
如果访问的是同网段设备,比如 192.168.1.50,流程就不一样:
- 电脑查路由表,发现目标"在链路上"
- 不需要经过网关
- 直接 ARP 查询目标 MAC
- 直接发送二层帧
这样就把私网 IP、公网 IP、NAT、路由表、MAC 地址这些概念串起来了。
总结
这篇文章的重点可以压缩成四句话:
192.168.x.x这类地址更准确地叫"私网 IP",不是"虚拟 IP"- "在链路上"表示目标是直连可达的,不需要经过下一跳网关
- 路由表负责选路,转发表负责高速转发
- MAC 地址属于数据链路层,IP 地址属于网络层
把这四点想清楚,后面再看 ARP、默认网关、NAT、路由转发时,很多原来容易混的概念都会一下子顺起来。
参考资料
- Microsoft Q&A: https://learn.microsoft.com/zh-cn/answers/questions/2677829/question-2677829
- windows-路由表 | 心若天府: https://qianchenglong.github.io/2015/02/06/windows-路由表/
- 你提供的讨论链接: http://bbs.pcbeta.com/viewthread-1037548-1-1.html
如果这篇文章对你有帮助,欢迎继续阅读本系列后续内容。若文中有不准确或需要补充的地方,也欢迎指出。