写在前面:说实话,网络层是我当年学计算机网络时最头疼的一章。什么子网划分、路由协议,一堆概念看着就犯困。后来做项目配路由器的时候才发现,这些知识根本不是纸上谈兵------你连个内网都规划不好,后面的服务部署全得乱套。这篇文章我把网络层的核心知识点全部过了一遍,尽量用大白话讲清楚,配合大量实例和表格,保证你看完就能上手算子网、配路由。别嫌长,每一段都是干货。

文章目录
-
- 一、IPv4地址基础
-
- [1.1 IPv4地址格式](#1.1 IPv4地址格式)
- [1.2 IP地址是什么?------门牌号类比](#1.2 IP地址是什么?——门牌号类比)
- [1.3 IPv4地址分类------社区类比](#1.3 IPv4地址分类——社区类比)
- [1.3 私有地址](#1.3 私有地址)
- 问题与解答
- 二、IPv6下一代互联网协议
-
- [2.1 IPv6基本格式](#2.1 IPv6基本格式)
- [2.2 IPv4 vs IPv6对比](#2.2 IPv4 vs IPv6对比)
- 问题与解答
- 三、子网划分与子网掩码
-
- [3.1 子网掩码的作用](#3.1 子网掩码的作用)
- [3.2 子网划分------切蛋糕类比](#3.2 子网划分——切蛋糕类比)
- [3.3 子网划分计算实例](#3.3 子网划分计算实例)
- [3.4 VLSM(可变长子网掩码)](#3.4 VLSM(可变长子网掩码))
- [3.4 CIDR(无类域间路由)](#3.4 CIDR(无类域间路由))
- 问题与解答
- 四、IP数据报格式
-
- [4.1 IP分片与重组](#4.1 IP分片与重组)
- 问题与解答
- 五、ARP协议
-
- [5.1 ARP工作原理](#5.1 ARP工作原理)
- [5.2 ARP缓存查看](#5.2 ARP缓存查看)
- 问题与解答
- 六、ICMP协议
-
- [6.1 常用ICMP消息](#6.1 常用ICMP消息)
- [6.2 ping和traceroute](#6.2 ping和traceroute)
- 问题与解答
- 七、DHCP协议
-
- [7.1 DHCP四步流程](#7.1 DHCP四步流程)
- [7.2 DHCP租约](#7.2 DHCP租约)
- 问题与解答
- 八、NAT/PAT网络地址转换
-
- [8.1 NAT的作用](#8.1 NAT的作用)
- [8.2 NAT三种模式](#8.2 NAT三种模式)
- 问题与解答
- 九、路由算法与路由协议
-
- [9.1 自治系统AS](#9.1 自治系统AS)
- [9.2 路由算法分类](#9.2 路由算法分类)
- [9.3 四种路由协议对比](#9.3 四种路由协议对比)
- [9.4 RIP协议](#9.4 RIP协议)
- [9.5 OSPF协议](#9.5 OSPF协议)
- [9.6 BGP协议](#9.6 BGP协议)
- 问题与解答
- 十、拥塞控制与VPN
-
- [10.1 网络层拥塞控制](#10.1 网络层拥塞控制)
- [10.2 VPN(虚拟专用网络)](#10.2 VPN(虚拟专用网络))
- 问题与解答
- 十一、新手常见误区
-
- 误区1:IP地址和MAC地址傻傻分不清
- 误区2:子网掩码写成IP地址的形式就以为它也是地址
- 误区3:认为NAT是安全机制
- [误区4:认为ping不通 = 网络不通](#误区4:认为ping不通 = 网络不通)
- 十二、面试高频考点汇总
- 十三、模拟测试题
- 互动话题
- 参考资料
一、IPv4地址基础
1.1 IPv4地址格式
IPv4地址是32位 的二进制数,为了方便人类阅读,我们用点分十进制来表示。比如:
11000000.10101000.00000001.00000001
写成点分十进制就是 192.168.1.1,是不是顺眼多了?
每一组是8位(一个字节),取值范围是 0~255。所以你看到有人写IP地址写了300,那他一定是在搞笑。
1.2 IP地址是什么?------门牌号类比
很多新手刚学网络的时候,会被IP地址和MAC地址搞混。这里用一个生活化的类比帮你彻底分清:
IP地址就像你家的门牌号,比如"幸福小区3栋2单元501"。你搬家了,门牌号就变了,但你的身份证号不会变。
MAC地址就像你的身份证号,出厂时就写死在网卡里了,全球唯一,一辈子不会变。
数据在网络中传输时,IP地址负责"送到哪个城市哪个小区" (网络层寻址),MAC地址负责"送到具体哪一户"(数据链路层寻址)。就像快递先按省市区分发(IP),到了本地再由快递员按具体地址派送(MAC)。
踩坑提醒:有些同学以为IP地址和MAC地址是同一层的东西,其实它们分属不同层次。IP地址是网络层的逻辑地址,可以动态分配、可以变化;MAC地址是数据链路层的物理地址,固定不变。两者配合使用,缺一不可。
1.3 IPv4地址分类------社区类比
IPv4地址分为五类,这个是考试必考的,别搞混了:
| 类别 | 前缀位 | 网络号范围 | 默认子网掩码 | 最大网络数 | 每网络最大主机数 | 用途 |
|---|---|---|---|---|---|---|
| A类 | 0 | 1.0.0.0 ~ 126.0.0.0 | 255.0.0.0 (/8) | 126 | 16,777,214 | 大型网络 |
| B类 | 10 | 128.0.0.0 ~ 191.255.0.0 | 255.255.0.0 (/16) | 16,384 | 65,534 | 中型网络 |
| C类 | 110 | 192.0.0.0 ~ 223.255.255.0 | 255.255.255.0 (/24) | 2,097,152 | 254 | 小型网络 |
| D类 | 1110 | 224.0.0.0 ~ 239.255.255.255 | 无 | 无 | 无 | 组播 |
| E类 | 1111 | 240.0.0.0 ~ 255.255.255.255 | 无 | 无 | 无 | 保留/实验 |
用社区类比来理解:
A类 = 超大型社区:比如一个城市的所有小区。网络号只占1个字节(8位),后面3个字节都是主机号,能容纳1600多万台设备。像大型跨国企业、运营商骨干网才用得上。
B类 = 中型社区:比如一个大学城或科技园区。网络号占2个字节,主机号占2个字节,能容纳6万多台设备。中型企业、大学常用。
C类 = 小型社区:比如一栋办公楼或一个居民小区。网络号占3个字节,主机号只占1个字节,最多254台设备。小公司、家庭网络最常见。
D类 = 广播站:专门用来群发消息,比如视频会议、IPTV。
E类 = 预留空地:暂时不用,留给未来规划。
踩坑提醒 :127.0.0.0/8 是环回地址(loopback),ping 127.0.0.1 其实是在测试本机的网络协议栈,数据根本不会到网卡上。别把127开头的地址当成A类地址来用。
1.3 私有地址
有些地址是留给内部网络用的,不会在公网上路由,这就是私有地址:
| 私有地址范围 | CIDR表示 | 可用地址数 |
|---|---|---|
| 10.0.0.0 ~ 10.255.255.255 | 10.0.0.0/8 | 约1677万 |
| 172.16.0.0 ~ 172.31.255.255 | 172.16.0.0/12 | 约104万 |
| 192.168.0.0 ~ 192.168.255.255 | 192.168.0.0/16 | 约6.5万 |
你家里路由器分配的 192.168.1.x 就是C类私有地址。这三个范围在全球任何地方都可以重复使用,因为它们不会在公网上被路由。
问题与解答
Q1:为什么A类地址从1开始而不是0?
A:因为 0.0.0.0/8 被保留为默认路由,表示"任何网络"。而 127.0.0.0/8 是环回地址。所以A类实际可用的网络号是 1~126。
Q2:D类地址到底怎么用?
A:D类用于组播(Multicast),比如视频会议、IPTV等场景。数据包发送到一个组播地址,所有加入该组的接收者都能收到,比广播更精准,比单播更高效。
二、IPv6下一代互联网协议
2.1 IPv6基本格式
IPv6地址是128位 ,用冒分十六进制表示:
2001:0db8:85a3:0000:0000:8a2e:0370:7334
为了简化写法,有两套规则:
- 省略前导零 :
0370可以写成370 - 连续全零压缩 :用
::替换连续的一组或多组全零(但一个地址中只能用一次)
简化后:2001:db8:85a3::8a2e:370:7334
2.2 IPv4 vs IPv6对比
| 对比维度 | IPv4 | IPv6 |
|---|---|---|
| 地址长度 | 32位 | 128位 |
| 地址表示 | 点分十进制 | 冒分十六进制 |
| 地址数量 | 约43亿 | 约3.4×10³⁸ |
| 头部大小 | 20~60字节(可变) | 固定40字节 |
| 分片 | 路由器和发送方都可以 | 只有发送方可以 |
| 安全性 | 可选(IPsec) | 内置支持(IPsec) |
| 广播 | 支持 | 不支持(用组播替代) |
| 配置 | 手动/DHCP | 自动配置(SLAAC) |
| NAT | 大量使用 | 基本不需要 |
踩坑提醒:IPv6虽然地址空间巨大,但并不是说我们可以随便浪费。良好的地址规划仍然是网络设计的基础。而且IPv6的部署进度比你想象的慢得多,很多企业网络至今还是IPv4为主。
问题与解答
Q1:IPv6的 ::1 相当于IPv4的什么?
A:相当于 127.0.0.1,是IPv6的环回地址。全零地址 :: 相当于IPv4的 0.0.0.0。
Q2:为什么IPv6取消了广播?
A:广播风暴是IPv4网络中一个经典问题。IPv6用组播替代了广播,只有感兴趣的设备才会收到组播包,大大减少了不必要的网络开销。
三、子网划分与子网掩码
3.1 子网掩码的作用
子网掩码用来区分IP地址中哪些位是网络号 ,哪些位是主机号。掩码中1对应网络位,0对应主机位。
比如 255.255.255.0(即 /24):
IP地址: 11000000.10101000.00000001.00000001 (192.168.1.1)
子网掩码:11111111.11111111.11111111.00000000 (255.255.255.0)
网络地址:11000000.10101000.00000001.00000000 (192.168.1.0)
把IP地址和子网掩码做按位与运算,就能得到网络地址。
3.2 子网划分------切蛋糕类比
子网划分是很多新手的噩梦,但其实用"切蛋糕"的类比一想就通:
一个完整的C类地址(比如
192.168.1.0/24)就像一整个大蛋糕,能切出256块(0~255)。子网掩码就是切蛋糕的规则:
/24(掩码255.255.255.0)= 不切,整个蛋糕就是一块,能放254台主机/25(掩码255.255.255.128)= 切一刀,分成2块,每块能放126台主机/26(掩码255.255.255.192)= 切两刀,分成4块,每块能放62台主机/27(掩码255.255.255.224)= 切三刀,分成8块,每块能放30台主机每多切一刀(网络位多借1位),块数翻倍,但每块的大小减半。
核心公式记住这三条:
子网数量 = 2^n(n = 借用的主机位数)
每子网主机数 = 2^m - 2(m = 剩余主机位数,减2是去掉网络地址和广播地址)
块大小 = 256 - 子网掩码最后一段的十进制值
踩坑提醒:很多新手算子网的时候,只记得"2的n次方",却忘了减2!每个子网的第一个地址是网络地址(全0),最后一个地址是广播地址(全1),这两个都不能分配给主机。如果题目问"可用主机数",一定要减2;如果问"总地址数",才不用减。
3.3 子网划分计算实例
下面从简单到复杂,给出3道完整的子网划分计算例题。
例题1(基础题)
题目 :给定IP地址 192.168.10.150,子网掩码 255.255.255.192(即 /26),求网络地址、广播地址和可用主机范围。
解题步骤:
- 先把掩码转成二进制:
255.255.255.192=11111111.11111111.11111111.11000000 - 主机位有6位(32-26=6),每个子网有 2⁶ = 64 个地址
- 块大小 = 256 - 192 = 64
- 子网范围:
- 192.168.10.0 ~ 192.168.10.63
- 192.168.10.64 ~ 192.168.10.127
- 192.168.10.128 ~ 192.168.10.191 ← 150在这里
- 192.168.10.192 ~ 192.168.10.255
所以答案:
- 网络地址 :
192.168.10.128 - 广播地址 :
192.168.10.191 - 可用主机范围 :
192.168.10.129 ~ 192.168.10.190 - 可用主机数 :64 - 2 = 62台
踩坑提醒:计算子网的时候,千万别忘了减去网络地址和广播地址!每个子网的第一个地址是网络地址,最后一个地址是广播地址,这两个都不能分配给主机。
例题2(中等题------VLSM应用)
题目 :某公司获得网段 192.168.1.0/24,需要划分给三个部门:
- 技术部:50台主机
- 市场部:25台主机
- 行政部:10台主机
请给出最合理的子网划分方案。
解题步骤:
-
先算各部门需要的主机位数:
- 技术部50台:需要 2^m - 2 ≥ 50,m=6(64-2=62),所以掩码是 /26
- 市场部25台:需要 2^m - 2 ≥ 25,m=5(32-2=30),所以掩码是 /27
- 行政部10台:需要 2^m - 2 ≥ 10,m=4(16-2=14),所以掩码是 /28
-
按从大到小的顺序分配(VLSM的原则,避免地址碎片):
- 技术部
/26:192.168.1.0/26(地址范围 0~63,可用主机 1~62) - 市场部
/27:192.168.1.64/27(地址范围 64~95,可用主机 65~94) - 行政部
/28:192.168.1.96/28(地址范围 96~111,可用主机 97~110)
- 技术部
-
剩余地址 :
192.168.1.112 ~ 192.168.1.255,可以留作以后扩展。
踩坑提醒 :VLSM划分一定要从大到小分配!如果你先给行政部分了一个/28(16个地址),再给市场部分一个/27(32个地址),地址就对不齐了,会造成浪费和冲突。就像切蛋糕,先切大块,再切小块。
例题3(进阶题------跨段计算)
题目 :给定IP地址 172.16.35.100,子网掩码 255.255.240.0(即 /20),求网络地址、广播地址和可用主机范围。
解题步骤:
-
分析掩码:
255.255.240.0- 前两个字节全是255,说明前16位是网络位
- 第三个字节是240 =
11110000,说明又借了4位 - 总共网络位 = 16 + 4 = 20位,即
/20
-
计算块大小:
- 关键看第三个字节的变化:
256 - 240 = 16 - 所以子网在第三个字节上以16为间隔划分
- 关键看第三个字节的变化:
-
确定子网范围:
- 第三个字节是35,落在哪个16的倍数区间?
- 16 × 2 = 32,16 × 3 = 48
- 所以 32 ≤ 35 < 48,子网是
172.16.32.0
-
广播地址:
- 下一个子网是
172.16.48.0 - 广播地址 =
172.16.47.255(下一个子网的前一个地址)
- 下一个子网是
-
可用主机范围:
172.16.32.1 ~ 172.16.47.254
-
可用主机数:
- 主机位 = 32 - 20 = 12位
- 总地址数 = 2^12 = 4096
- 可用主机数 = 4096 - 2 = 4094台
踩坑提醒 :跨字节计算子网时(比如/20涉及第三个字节),不要试图把整个IP转成32位二进制来算,那样太费时间。抓住块大小这个关键:看掩码中不是255也不是0的那个字节,用256减去它,就是块大小。然后找IP对应字节落在哪个块里,一下就能定位子网。
3.4 VLSM(可变长子网掩码)
VLSM允许同一个网络的不同子网使用不同长度的子网掩码。这样可以根据实际需求灵活分配地址。
比如你有 192.168.1.0/24,可以这样划分:
- 需要一个100台主机的大子网:
192.168.1.0/25(126台主机) - 需要两个50台主机的中子网:
192.168.1.128/26(62台)、192.168.1.192/26(62台)
没有VLSM的话,你只能统一用 /24,一个子网就分完了,非常浪费。
3.4 CIDR(无类域间路由)
CIDR打破了传统的A/B/C类地址分类,用前缀长度 来表示网络大小。比如 192.168.0.0/16 就表示前16位是网络位。
CIDR的核心优势是路由聚合(Route Aggregation),可以把多个小网络合并成一条路由:
192.168.0.0/24
192.168.1.0/24
192.168.2.0/24
192.168.3.0/24
可以聚合为 192.168.0.0/22,路由表从4条变成1条,大大减小了路由表的规模。
问题与解答
Q1:/28的子网能容纳多少台主机?
A:主机位 = 32 - 28 = 4位,总地址数 = 2⁴ = 16,可用主机数 = 16 - 2 = 14台。
Q2:VLSM和CIDR有什么区别?
A:VLSM是在一个网络内部灵活划分子网(向内分),CIDR是把多个网络聚合成一条路由(向外合)。两者方向相反,但都是为了更高效地利用IP地址。
四、IP数据报格式
IP数据报是网络层的核心数据结构,了解一下关键字段:
0 16 32
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|版本|头部长度|服务类型| 总长度 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 标识符 |标志|片偏移|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 生存时间 | 协议 | 头部校验和 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 源IP地址 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 目的IP地址 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 选项(可选) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
几个重要字段:
| 字段 | 说明 |
|---|---|
| 版本 | IPv4是4,IPv6是6 |
| 头部长度 | 以4字节为单位,最小值5(20字节) |
| 总长度 | 整个IP数据报的长度(头部+数据),最大65535字节 |
| TTL(生存时间) | 每经过一个路由器减1,为0时丢弃。防止数据包无限循环 |
| 协议 | 指示上层协议:TCP=6,UDP=17,ICMP=1 |
| 标识符/标志/片偏移 | 用于IP分片与重组 |
| 头部校验和 | 只校验头部,不校验数据部分 |
4.1 IP分片与重组
当IP数据报的大小超过链路的**MTU(最大传输单元)**时,就需要分片。以太网的MTU通常是 1500字节。
分片后,每个片段都有相同的标识符,用标志位和片偏移来标记顺序。只有目的主机才会重组,中间路由器不会。
踩坑提醒:IPv6不允许路由器分片!如果路由器收到的IPv6包太大,会直接丢弃并返回ICMP错误消息。所以IPv6的发送方必须自己控制包的大小。
问题与解答
Q1:为什么TTL是必需的?
A:如果没有TTL,一个路由环路中的数据包会永远在网络中循环,不断消耗带宽和路由器资源。TTL确保了数据包有"保质期",过期就会被丢弃。
Q2:为什么头部校验和只校验头部不校验数据?
A:两层考虑:一是性能,校验整个数据包开销太大;二是数据层的校验交给上层协议(TCP/UDP有自己的校验和),分层设计各司其职。
五、ARP协议
5.1 ARP工作原理
ARP(Address Resolution Protocol,地址解析协议)的作用是把IP地址解析为MAC地址。因为在局域网中,数据链路层需要MAC地址来转发帧。
用快递收件类比来理解:
假设你要寄快递给"张三"(IP地址 = 收件人姓名)。
但快递员(数据链路层)不认识"张三"这个名字,他需要的是手机号(MAC地址)才能直接联系到收件人。
所以你需要先问:"谁是张三?他的手机号是多少?"(ARP广播请求)
张三回复:"我是张三,我的手机号是138xxxx8888。"(ARP单播应答)
你记下这个对应关系(存入ARP缓存表),下次再寄快递给张三,直接填手机号就行了,不用再问。
实际工作过程:
-
主机A要知道主机B的MAC地址
-
A在本地ARP缓存中查找,如果没有
-
A发送ARP广播请求 (目标MAC是
FF:FF:FF:FF:FF:FF) -
局域网内所有主机都收到这个广播
-
只有IP匹配的主机B会回复ARP单播应答
-
A把B的IP-MAC映射缓存到ARP表中
主机A: "谁是 192.168.1.10?请告诉 192.168.1.1" (广播)
主机B: "我是 192.168.1.10,我的MAC是 00:11:22:33:44:55" (单播给A)
踩坑提醒 :ARP是没有认证机制的!这意味着任何人都可以伪造ARP应答,这就是经典的ARP欺骗攻击。在公共WiFi环境下尤其要注意。
5.2 ARP缓存查看
在命令行中可以查看ARP缓存:
bash
# Linux/Mac
arp -a
# Windows
arp -a
输出类似:
? (192.168.1.1) at aa:bb:cc:dd:ee:ff [ether] on eth0
? (192.168.1.10) at 11:22:33:44:55:66 [ether] on eth0
问题与解答
Q1:ARP能跨网段工作吗?
A:不能。ARP广播不能穿过路由器。跨网段通信时,主机先把包发给网关(路由器),路由器再用自己的ARP在目标网络中解析。
Q2:什么是免费ARP(Gratuitous ARP)?
A:主机发送一个ARP请求,查询自己的IP地址。主要用于:检测IP冲突、宣告自己的MAC地址(比如换了网卡后通知其他设备)。
六、ICMP协议
ICMP(Internet Control Message Protocol,互联网控制报文协议)是网络层的"诊断工具"。
6.1 常用ICMP消息
| 类型 | 名称 | 用途 |
|---|---|---|
| 0 | Echo Reply | ping的应答 |
| 3 | Destination Unreachable | 目的不可达 |
| 8 | Echo Request | ping的请求 |
| 11 | Time Exceeded | TTL超时(traceroute用到) |
6.2 ping和traceroute
ping就是用ICMP Echo Request和Echo Reply来测试连通性:
bash
ping 8.8.8.8
# 输出:64 bytes from 8.8.8.8: icmp_seq=1 ttl=117 time=12.3 ms
traceroute (Windows下是 tracert)利用TTL递增来探测路径上每一跳的路由器:
bash
traceroute 8.8.8.8
# 输出:
# 1 gateway (192.168.1.1) 0.5ms
# 2 10.0.0.1 5.2ms
# 3 8.8.8.8 12.1ms
原理:先发TTL=1的包,第一个路由器返回ICMP Time Exceeded;再发TTL=2的包,第二个路由器返回......以此类推。
踩坑提醒:很多防火墙会禁止ICMP包。所以ping不通不代表网络不通,可能是被防火墙挡了。我见过太多人因为ping不通就判断网络故障,结果折腾半天发现是防火墙的问题。
问题与解答
Q1:ICMP是传输层协议吗?
A:不是。ICMP封装在IP数据报的数据部分,属于网络层协议。它不使用TCP或UDP,而是直接使用IP服务。
Q2:为什么traceroute在Linux上用UDP,在Windows上用ICMP?
A:Linux的traceroute默认发送UDP包(目标端口33434+),而Windows的tracert使用ICMP Echo Request。两者原理相同,都是利用TTL超时来逐跳探测。
七、DHCP协议
DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)让设备能自动获取IP地址,不用手动配置。
用租房类比来理解:
DHCP服务器 = 房东
IP地址 = 房间
租约 = 租房合同
续租 = 续约
你刚来到一个城市(接入网络),需要找个地方住(获取IP地址)。你不可能自己随便占一间房(手动配IP容易冲突),而是去找房东(DHCP服务器)。房东手里有一批空房(地址池),跟你签一份租房合同(租约),告诉你"这间房给你住8天"(租期)。住到第4天的时候,你觉得这房子还不错,想继续住,就去找房东续约(Renew)。房东说"行,再续8天"。如果第7天房东还没理你,你就得赶紧找房东重新签合同(Rebind),不然8天一到,你就得搬出去(IP失效)。
踩坑提醒:有些设备在DHCP租约到期前没有及时续约,导致IP突然失效,网络断开。如果你遇到过"明明连上了WiFi,突然就没网了"的情况,很可能就是DHCP续约出了问题。企业网络中通常会把租期设长一些(比如8天),家庭路由器一般默认24小时。
7.1 DHCP四步流程
客户端 DHCP服务器
| |
|--- 1. DHCP Discover (广播) --->|
| |
|<-- 2. DHCP Offer (单播/广播) --|
| |
|--- 3. DHCP Request (广播) ---->|
| |
|<-- 4. DHCP Ack (单播/广播) ----|
| |
- Discover:客户端广播寻找DHCP服务器("谁来给我分配个IP?")
- Offer:服务器回复一个可用的IP地址及租约信息
- Request:客户端广播确认要使用这个IP(告诉所有服务器"我要这个")
- Ack:服务器确认分配,租约生效
踩坑提醒:注意第3步Request也是广播!这是因为网络中可能有多个DHCP服务器,客户端需要通知所有服务器自己选择了哪一个,避免地址冲突。
7.2 DHCP租约
DHCP分配的IP有租期(通常是8天)。到期前客户端会尝试续约(Renew),如果续约失败,租期到了就得重新走四步流程。
问题与解答
Q1:DHCP分配的地址会变吗?
A:正常续约成功的话不会变。但如果租约到期且续约失败,或者DHCP服务器地址池耗尽,就可能分配不同的地址。
Q2:DHCP使用什么传输层协议?
A:DHCP基于UDP。客户端监听68端口,服务器监听67端口。
八、NAT/PAT网络地址转换
8.1 NAT的作用
NAT(Network Address Translation)让内网的私有地址可以访问公网。路由器在转发数据包时,会把源IP替换成公网IP,回来的时候再替换回去。
用收发室类比来理解:
公司内网 = 公司内部
公网 = 外部世界
NAT = 公司收发室前台
假设你在一栋大公司里工作(内网),公司有1000个员工,但公司对外只有一个地址:"北京市海淀区中关村大街1号"(公网IP)。你想给外地的客户寄一封信(访问公网),你写上自己的名字和部门(内网IP:192.168.1.100),然后把信交给收发室(NAT路由器)。收发室前台把你的名字换成"中关村大街1号 转100号信箱"(公网IP+端口号),然后寄出去。
客户回信的时候,地址写的是"中关村大街1号 转100号信箱",收发室一看"100号信箱",就知道是给你的,把信转交给你(把公网IP替换回你的内网IP)。
这样,外部世界根本不知道公司内部有1000个人,他们只看到一个地址------中关村大街1号。这就是NAT的妙处:一个公网IP就能让成百上千的内网设备上网。
踩坑提醒:NAT虽然省公网IP,但也带来一个问题------外部世界无法主动联系到内网的某个人(因为外部不知道内部的真实地址)。就像客户只知道"中关村大街1号",不知道你的工位在哪。所以P2P下载、视频通话等需要"打洞"(NAT穿透)才能直连。
8.2 NAT三种模式
| 模式 | 说明 | 特点 |
|---|---|---|
| 静态NAT | 一对一固定映射,内网IP ↔ 公网IP | 需要公网IP数量等于内网主机数 |
| 动态NAT | 从公网地址池中动态分配,一对一 | 公网IP池用完就排队 |
| PAT(NAPT) | 多对一,用端口号区分不同主机 | 最常用,一个公网IP就能让整个内网上网 |
PAT(Port Address Translation)也叫NAPT,你家里的路由器用的就是这种。它通过修改源端口号来区分不同的内网主机:
内网主机A: 192.168.1.10:5000 → 公网: 203.0.113.1:10001
内网主机B: 192.168.1.20:5000 → 公网: 203.0.113.1:10002
踩坑提醒 :NAT会导致P2P通信困难,因为外网主机无法主动连接到NAT后面的内网主机。这就是为什么BT下载和视频通话有时候需要"打洞"(NAT Traversal)。
问题与解答
Q1:NAT和防火墙是一回事吗?
A:不是。NAT是地址转换技术,虽然客观上起到了一定的隔离作用(外网无法直接访问内网),但它不是安全机制。真正的防火墙有包过滤、状态检测等安全策略。
Q2:为什么IPv6时代NAT就不需要了?
A:IPv6有足够的公网地址,每个设备都可以分配一个全球唯一的地址,不需要做地址转换。但现实中有些ISP出于管理目的仍然会使用IPv6 NAT。
九、路由算法与路由协议
9.1 自治系统AS
互联网由大量**自治系统(AS,Autonomous System)**组成。每个AS由一个组织管理(比如一个ISP、一个大学),内部使用自己的路由策略。
AS之间用BGP 交换路由信息,AS内部可以用RIP 或OSPF等协议。
9.2 路由算法分类
| 类型 | 说明 | 代表协议 |
|---|---|---|
| 静态路由 | 管理员手动配置,不自动更新 | 手动配置 |
| 距离矢量 | 每个路由器只和邻居交换距离信息 | RIP |
| 链路状态 | 每个路由器掌握全网拓扑,用Dijkstra算法 | OSPF |
| 路径矢量 | 在距离矢量基础上增加路径属性 | BGP |
用导航类比来理解路由协议:
RIP = 只数红绿灯数量的导航
RIP只关心"到目的地要经过几个路由器(跳数)",就像导航只数红绿灯数量,不考虑路况、距离、限速。所以RIP可能会把你导到一条"红绿灯少但严重拥堵"的路上。而且RIP最多只认15个红绿灯(15跳),超过就认为到不了。
OSPF = 知道全城路况的智能导航OSPF每个路由器都掌握全网的完整地图(链路状态数据库),用Dijkstra算法算出真正的最优路径。就像导航知道每条路的实时路况、距离、限速,能给你规划出最快路线。而且OSPF支持分区导航(区域划分),计算量更小。
BGP = 跨国导航BGP用于不同国家(自治系统AS)之间的路由。就像你要从中国开车去美国,你需要知道"先到俄罗斯,再到欧洲,再坐船到美国"这样的跨国路径。BGP不仅看距离,还看政策(比如有些国家不让过境)、成本、合作关系等多种因素。
踩坑提醒:很多新手觉得RIP简单就想用它,但RIP的15跳限制和慢收敛(分钟级)决定了它只适合极小型的网络。企业网络几乎都用OSPF。BGP更复杂,一般只有运营商和大型数据中心才会接触。
9.3 四种路由协议对比
| 对比维度 | 静态路由 | RIP | OSPF | BGP |
|---|---|---|---|---|
| 适用范围 | 小型网络 | 小型AS内部 | 大中型AS内部 | AS之间 |
| 算法 | 手动配置 | Bellman-Ford | Dijkstra(SPF) | 路径矢量 |
| 度量 | 管理员指定 | 跳数(最大15跳) | 开销(带宽相关) | 多属性(AS-PATH等) |
| 收敛速度 | 无需收敛 | 慢(分钟级) | 快(秒级) | 较慢 |
| 更新方式 | 手动 | 周期性广播完整路由表 | 触发式增量更新 | 增量更新 |
| 规模 | 几条到几十条 | 最多15跳 | 支持大规模 | 全球互联网 |
| 防环机制 | 无 | 最大跳数15 | 链路状态数据库 | AS-PATH属性 |
9.4 RIP协议
RIP(Routing Information Protocol)是最简单的路由协议:
- 每30秒向邻居广播自己的完整路由表
- 跳数作为度量,最大15跳,16跳视为不可达
- 收敛慢,容易产生路由环路
- 有RIPv1(广播)和RIPv2(组播、支持VLSM)两个版本
9.5 OSPF协议
OSPF(Open Shortest Path First)是目前最常用的内部网关协议:
- 每个路由器维护一个链路状态数据库(LSDB),掌握全网拓扑
- 用Dijkstra最短路径算法计算最优路由
- 支持区域划分(Area),减少路由计算开销
- 支持VLSM和CIDR
- 收敛速度快,触发式更新
9.6 BGP协议
BGP(Border Gateway Protocol)是互联网的"骨架协议":
- 用于AS之间的路由交换
- 基于TCP(端口179),可靠性有保障
- 选择路径时考虑多种属性:AS-PATH长度、本地偏好、MED等
- 是唯一能承载全球互联网路由表的协议
踩坑提醒:RIP的最大跳数限制是15,这意味着RIP只能用于小型网络。如果你在面试中听到有人说"RIP适合大型网络",那他一定是在胡说。
问题与解答
Q1:为什么OSPF比RIP更适合大型网络?
A:RIP每30秒广播完整路由表,网络越大开销越大。OSPF只在拓扑变化时发送增量更新,而且通过区域划分限制了路由计算的规模。此外RIP的15跳限制也限制了网络规模。
Q2:BGP为什么基于TCP而不是UDP?
A:BGP需要在AS之间传输大量路由信息(全球路由表超过80万条),需要可靠传输。基于TCP(端口179)可以省去自己实现可靠机制,而且TCP的流量控制也能避免淹没对端。
十、拥塞控制与VPN
10.1 网络层拥塞控制
网络层也有拥塞控制机制,和传输层的不同:
RED(Random Early Detection,随机早期检测):
- 路由器在队列满之前就开始随机丢弃数据包
- 通过丢包来通知发送方降低发送速率
- 比尾部丢弃(Tail Drop)更公平,能避免全局同步
漏桶算法:
┌───┐
入 ───> │漏桶│ ───> 出(恒定速率)
└───┘
- 不管输入速率多快,输出速率恒定
- 超出桶容量的数据包被丢弃
- 保证输出流量平滑
令牌桶算法:
┌─────┐
入 ───> │令牌桶│ ───> 出(允许突发)
└─────┘
↑
令牌(固定速率生成)
- 以固定速率生成令牌,每个令牌允许发送一定量的数据
- 有令牌就发,没令牌就等或丢弃
- 允许一定程度的突发流量,比漏桶更灵活
| 对比 | 漏桶 | 令牌桶 |
|---|---|---|
| 输出速率 | 恒定 | 可变(允许突发) |
| 突发支持 | 不支持 | 支持 |
| 适用场景 | 严格限速 | 允许突发的流量整形 |
10.2 VPN(虚拟专用网络)
VPN在公网上建立加密隧道,实现安全的远程访问。
| 类型 | 工作层次 | 特点 |
|---|---|---|
| IPsec VPN | 网络层(第3层) | 加密整个IP包,安全性高,适合站点间互联 |
| SSL VPN | 应用层(第4-7层) | 基于HTTPS,无需客户端安装,适合远程接入 |
IPsec VPN有两种模式:
- 传输模式:只加密数据部分,IP头不加密
- 隧道模式:整个原始IP包都加密,再加新的IP头
踩坑提醒:IPsec VPN和SSL VPN不是竞争关系,而是互补的。企业站点间互联用IPsec VPN,员工远程办公用SSL VPN,很多企业两种都在用。
问题与解答
Q1:令牌桶和漏桶哪个更好?
A:没有绝对的好坏。漏桶适合需要严格恒定速率的场景(比如视频编码输出),令牌桶适合允许突发但需要限制平均速率的场景(比如网络流量整形)。实际中令牌桶用得更多。
Q2:VPN为什么能保证安全?
A:VPN通过加密 (数据不可读)、认证 (确认通信双方身份)、完整性校验(数据未被篡改)三个机制来保证安全。IPsec VPN在IP层实现这些,SSL VPN在传输层/应用层实现。
十一、新手常见误区
学完网络层,很多新手容易在以下几个概念上踩坑。这里集中梳理一下,帮你提前避雷。
误区1:IP地址和MAC地址傻傻分不清
错误理解:"IP地址和MAC地址都是地址,作用差不多,有一个就够了。"
正确理解:
- IP地址是逻辑地址 ,网络层使用,负责跨网段寻址,可以动态变化
- MAC地址是物理地址 ,数据链路层使用,负责局域网内寻址,固定不变
类比:IP地址是门牌号(搬家会变),MAC地址是身份证号(终身不变)。快递跨省运输看门牌号(IP),到了小区派送看身份证确认收件人(MAC)。两者缺一不可。
踩坑提醒:面试常问"为什么有了MAC地址还需要IP地址?"答案是:MAC地址是扁平的,没有层次结构,如果全球都用MAC地址寻址,路由表会爆炸。IP地址有网络号+主机号的层次结构,可以聚合、可以路由。
误区2:子网掩码写成IP地址的形式就以为它也是地址
错误理解 :"子网掩码 255.255.255.0 长得和IP地址一样,那它也是一个IP地址吧?"
正确理解:子网掩码不是地址,而是一把"尺子",用来量出IP地址中哪些位是网络位、哪些位是主机位。掩码中的1对应网络位,0对应主机位。它和IP地址做按位与运算,才能得到网络地址。
踩坑提醒:有些新手会把子网掩码和网关搞混。网关是一个真实的IP地址(通常是该网段的第一个或最后一个可用地址),而子网掩码是一个"掩码",两者的作用完全不同。
误区3:认为NAT是安全机制
错误理解:"NAT把内网地址隐藏起来了,所以NAT就是防火墙,能保护内网安全。"
正确理解 :NAT的本质是地址转换,它的设计目的是解决IPv4地址不足的问题。虽然NAT客观上让外网无法直接访问内网,但这只是"副作用",不是安全机制。真正的防火墙有包过滤、状态检测、入侵检测等安全策略。不要指望NAT来保护你的网络安全!
踩坑提醒:很多家用路由器宣传"NAT防火墙",这其实是一种营销话术。NAT确实能挡住一些 unsolicited 的连接,但对于应用层攻击、钓鱼邮件等完全无能为力。
误区4:认为ping不通 = 网络不通
错误理解:"ping不通某台服务器,说明网络断了,或者服务器挂了。"
正确理解 :ping使用ICMP协议,而很多服务器和防火墙会主动禁用ICMP 。ping不通可能只是对方禁ping,但HTTP、SSH等TCP服务完全正常。判断网络是否通畅,应该尝试实际的业务端口(如 telnet IP 80 或 curl),而不是只靠ping。
踩坑提醒:我见过太多运维新手因为ping不通就折腾半天网络配置,结果发现是防火墙禁了ICMP。生产环境中,很多安全策略默认就是禁ping的。
十二、面试高频考点汇总
面试题1:给定IP地址和子网掩码,如何计算网络地址?
答:将IP地址和子网掩码分别转换为32位二进制,做按位与(AND)运算,得到的结果就是网络地址。
举例:IP = 172.16.5.130,掩码 = 255.255.255.128(/25)
- 主机位7位,块大小 = 256 - 128 = 128
- 子网范围:172.16.5.0~127 和 172.16.5.128~255
- 130在第二个子网,所以网络地址 =
172.16.5.128 - 广播地址 =
172.16.5.255 - 可用主机:
172.16.5.129 ~ 172.16.5.254,共126台
面试题2:详细描述ARP协议的工作过程
答:
- 当主机需要发送数据给同一网段的目标IP时,先查本地ARP缓存表
- 如果缓存中有目标IP对应的MAC地址,直接使用
- 如果没有,发送ARP广播请求(源MAC是自己的,目标MAC是全1广播地址)
- 网段内所有主机都收到广播,但只有IP地址匹配的主机处理该请求
- 匹配的主机发送ARP单播应答,包含自己的MAC地址
- 请求方将IP-MAC映射缓存到ARP表中,设置老化时间(通常20分钟)
- 后续通信直接使用缓存中的MAC地址
面试题3:RIP和OSPF的核心区别是什么?
答:
- 算法:RIP用距离矢量算法(Bellman-Ford),OSPF用链路状态算法(Dijkstra)
- 信息交换:RIP只和邻居交换路由表,OSPF向全网泛洪链路状态信息
- 拓扑感知:RIP不知道全网拓扑,OSPF每个路由器都有完整的链路状态数据库
- 收敛速度:RIP慢(分钟级),OSPF快(秒级)
- 规模:RIP最大15跳,OSPF支持大规模网络
- 度量:RIP只看跳数,OSPF考虑带宽等多因素
- 更新方式:RIP周期性完整更新,OSPF触发式增量更新
面试题4:NAT的工作原理是什么?PAT和NAT有什么区别?
答:NAT在路由器转发数据包时,替换IP地址的某些字段:
- 出方向:将内网源IP替换为公网IP
- 入方向:将目的公网IP替换回内网IP
PAT(端口地址转换)是NAT的一种特殊形式:
- 静态NAT:一对一映射,一个内网IP固定对应一个公网IP
- 动态NAT:从地址池动态分配,仍是一对一
- PAT:多对一映射,通过端口号区分不同的内网主机。一个公网IP可以支持数千个内网连接
PAT是最常用的NAT形式,家用路由器用的就是PAT。
面试题5:ICMP协议的作用是什么?ping和traceroute分别怎么工作的?
答:ICMP是网络层的控制报文协议,用于传递差错报告和诊断信息。
ping:发送ICMP Echo Request报文,目标主机返回Echo Reply。通过往返时间和是否收到回复来判断连通性和网络质量。
traceroute:逐步发送TTL从1递增的IP数据报。每经过一个路由器,TTL减1变为0时,路由器返回ICMP Time Exceeded报文。通过收集这些报文的源地址,就能得到到目标的完整路径和每一跳的延迟。
十三、模拟测试题
选择题/填空题
1. IP地址 192.168.5.0/27 的子网掩码是多少?
2. 以下哪个是私有IP地址?
- A. 8.8.8.8
- B. 172.32.0.1
- C. 192.168.1.100
- D. 202.114.0.1
3. ARP协议的作用是( ),它通过( )请求和( )应答来工作。
4. OSPF协议使用的最短路径算法是( ),RIP协议使用的算法是( )。
5. DHCP的四步流程依次是:Discover →( )→ Request →( )。
参考答案
1. /27 表示前27位是网络位,即 255.255.255.224(11111111.11111111.11111111.11100000,最后一段 128+64+32=224)。
2. C。192.168.0.0/16 是私有地址范围。A是Google DNS公网地址,B的172.32不在私有范围(私有是172.16~31),D是公网地址。
3. 将IP地址解析为MAC地址;广播;单播。
4. Dijkstra算法(最短路径优先算法);Bellman-Ford算法(距离矢量算法)。
5. Offer;Ack。
互动话题
你在实际工作或学习中有没有遇到过子网划分算错导致网络不通的情况?或者配路由器的时候踩过什么坑?欢迎在评论区分享你的经历,大家一起交流学习!
参考资料
- RFC 791 - Internet Protocol (IPv4)
- RFC 826 - An Ethernet Address Resolution Protocol (ARP)
- RFC 768 - User Datagram Protocol (UDP)
本文为计算机网络系列教学文章第3篇,下一篇我们将深入传输层,详细讲解TCP和UDP协议,包括三次握手、四次挥手、拥塞控制等核心内容。敬请期待!