
一、 网络拓扑中的“绑定关系”
(明确数据包从内网到外网的流转路径与设备职责)
-
发送方 (主机 H): 位于私有局域网内,持有的 IP(
192.168.0.3)是私有地址。私有地址在 Internet 上无法被路由,绝对不能直接暴露到公网。 -
边界守门员 (NAT 路由器 R2): 连接内网和外网的桥梁。它的左侧接口(面向 Internet)必须拥有一个合法的公网 IP,用于代表内网设备与外部通信。
-
外网第一跳 (路由器 R1): 它的接口 IP(
195.123.0.34/30)是破题的唯一线索。因为 R1 和 R2 之间连着同一根网线(点对点链路),所以 R1 的该接口与 R2 的左侧接口必定处于同一个子网中。
二、 核心考点 1:NAT(网络地址转换)的本质
-
工作原理: 当数据包离开内网前往 Internet 时,NAT 路由器会进行“偷梁换柱”,拦截该数据包,将其 IP 报头中的源 IP 地址(即主机的私有地址)强制替换为 NAT 路由器自身面向公网的接口 IP 地址。
-
解题映射: 题目问“经过 R2 转发后的源 IP 是什么”,其本质就是在问:R2 连接 R1 的那个公网接口,IP 地址是多少?
三、 核心考点 2:“魔数法”秒杀 /30 子网
(利用已知 R1 的 IP 195.123.0.34/30,反推同网段的 R2 接口 IP)
1. 提取魔数(算步长)
-
子网掩码
/30意味着前 30 位全为 1,对应的点分十进制为255.255.255.252。 -
步长(魔数) = 。(步长需要用256减)
-
物理含义:该网络的最后一个字节,是以 4 为单位划分独立区块的。
2. 划分区间(找网段)
-
以 4 为步长列出所有网络段:
0,4,8,12…28,32,36… -
R1 的 IP 尾数是
34,它恰好落在[32, 35]这个区间内。
3. 对号入座(分发 IP)
在一个步长为 4 的子网区间 [32, 35] 中,4 个地址的属性极其严格,掐头去尾后,中间的两个即可用 IP:
-
.32:网络地址(区间下界,代表网络本身,不可分配给设备) -
.33:可用主机 IP 1 -
.34:可用主机 IP 2(已被题目中的 R1 占用) -
.35:广播地址(区间上界,用于向该子网群发,不可分配给设备)
结论: 既然 R1 已经占用了 .34,与其在同一个子网的 R2,只能别无选择地配置为剩下的唯一可用地址 .33。拼上前面的网段,R2 的公网 IP 即为 195.123.0.33。
四、 考场防坑总结
-
/30子网的肌肉记忆: 在 408 考题或实际工程中,/30专门用于路由器之间的点对点链路。其可用 IP 数量永远是 个。只要知道一端的 IP,另一端必然是与之紧邻的那个奇数或偶数。 -
警惕私有 IP 陷阱: 只要看到
192.168.x.x、10.x.x.x、172.16.x.x~172.31.x.x,这些都是私网地址,它们在选项中绝不能作为经过 NAT 转换后的外网源地址。
这个问题问到了计算机科学里最本质的一个概念,也就是大家常说的“零索引(Zero-based indexing)”带来的认知偏差。
要彻底搞懂这个区别,你只需要在脑子里把这两个词区分开:“编号(坐标)”与“数量(容量)”。
为什么算掩码和 IP 地址时总是看到 255?
答案:因为 255 是一段 8 位二进制数的“最大编号”。
-
IP 地址和子网掩码,在计算机底层都是由 32 个二进制位(bit)组成的。为了方便人看,我们把它切成 4 块,每块 8 位(也就是一个字节)。
-
8 个二进制位全为 1 时(
11111111),它的十进制值是: -
所以,当我们写下一个子网掩码(比如 255.255.255.0)时,前面的 255 只是在客观描述一个二进制状态:“这一段的 8 个开关全开到了 1”。
为什么算步长(块大小)时要用 256 去减?
答案:因为 256 代表的是一个字节的“总容量(数量)”。
-
虽然最大的编号是 255,但别忘了,计算机是从 0 开始数数的!
-
从 0 数到 255(0, 1, 2, …, 255),总共有多少个数字?恰好是 256 个。
-
在数学上,8 个比特位能组合出的状态总数是 种。
-
当我们计算“步长(Block Size)”时,我们真正想求的是:“这个子网里到底能装下多少个 IP 地址?” 这是一个求“数量”的过程,而不是求“编号”。
-
所以,核心公式
256 - 掩码值 = 步长的真实物理含义是:“该字节的总容量”减去“被网络位占用的容量”,剩下的就是“这个子网的跨度(数量)”。
一个通俗的类比:数组与大楼
如果你学过编程里的数组(比如 C/C++ 或 Java):
-
你申请一个长度为 256 的数组:
int arr[256];(这就是算步长用的 256,代表总容量) -
但这个数组里最后一个元素的下标是:
arr[255](这就是算掩码时的 255,代表最大编号)
再比如一栋有 256 层楼的大厦:
-
如果一楼编号为 0,那么最高层的电梯按钮就是 255。
-
但如果你问开发商这栋楼一共能容纳多少层的住户,答案一定是 256。
总结口诀:
-
写具体的掩码和 IP 时,脑子里想的是“开关状态”,最高是 255。
-
算步长和子网跨度时,脑子里想的是“总共能装多少”,基数必须是 256。