第二周总结:网络层深入理解
本周学习回顾
恭喜你完成了第二周的学习!本周我们深入学习了网络层的核心概念和协议。让我们一起回顾这一周的精彩内容。
📚 本周知识地图
第二周:网络层深入
├── Day 8: IP地址详解
│ ├── IPv4地址结构
│ ├── IP地址分类(A/B/C/D/E)
│ ├── 公有IP vs 私有IP
│ ├── 特殊IP地址
│ └── IP地址分析工具
│
├── Day 9: 子网划分与CIDR
│ ├── 子网掩码原理
│ ├── CIDR表示法
│ ├── 子网计算方法
│ ├── VLSM可变长子网
│ └── 子网计算器
│
├── Day 10: MAC地址与ARP
│ ├── MAC地址结构
│ ├── OUI厂商标识
│ ├── ARP工作原理
│ ├── ARP缓存机制
│ └── ARP扫描工具
│
├── Day 11: 端口和Socket深入
│ ├── 端口概念(0-65535)
│ ├── 常用端口号
│ ├── Socket编程基础
│ ├── TCP vs UDP
│ └── 端口扫描器
│
├── Day 12: DNS协议详解
│ ├── DNS层级架构
│ ├── DNS查询流程(递归/迭代)
│ ├── DNS记录类型
│ ├── DNS缓存机制
│ └── DNS查询工具
│
└── Day 13: DHCP协议详解
├── DHCP工作原理
├── DORA四次握手
├── IP地址租约管理
├── DHCP报文格式
└── DHCP分析工具
🎯 核心知识点回顾
1. IP地址体系
IPv4地址结构:
192.168.1.100
| | | |
| | | +-- 主机号
| | +---- 子网号
| +-------- 网络号
+------------ 网络类别
IP地址分类:
A类:1.0.0.0 - 126.255.255.255
0xxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx
用途:大型网络
B类:128.0.0.0 - 191.255.255.255
10xxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx
用途:中型网络
C类:192.0.0.0 - 223.255.255.255
110xxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx
用途:小型网络
D类:224.0.0.0 - 239.255.255.255
用途:组播
E类:240.0.0.0 - 255.255.255.255
用途:保留/实验
私有IP地址:
10.0.0.0/8 → A类私有
172.16.0.0/12 → B类私有
192.168.0.0/16 → C类私有
2. 子网划分
子网掩码作用:
IP地址: 192.168.1.100 11000000.10101000.00000001.01100100
子网掩码: 255.255.255.0 11111111.11111111.11111111.00000000
─────────────────────────────────────────────────────────────
网络地址: 192.168.1.0 11000000.10101000.00000001.00000000 (AND运算)
CIDR计算:
CIDR 子网掩码 可用主机数 用途
/8 255.0.0.0 16,777,214 大型网络
/16 255.255.0.0 65,534 中型网络
/24 255.255.255.0 254 小型网络
/25 255.255.255.128 126 小型子网
/26 255.255.255.192 62 更小子网
/30 255.255.255.252 2 点对点链路
子网划分示例:
原网络:192.168.1.0/24
划分为4个子网(/26):
├── 192.168.1.0/26 (192.168.1.1 - 192.168.1.62)
├── 192.168.1.64/26 (192.168.1.65 - 192.168.1.126)
├── 192.168.1.128/26 (192.168.1.129 - 192.168.1.190)
└── 192.168.1.192/26 (192.168.1.193 - 192.168.1.254)
3. MAC地址与ARP
MAC地址结构:
AA:BB:CC:DD:EE:FF
│ │ │ │
│ │ │ └─ 设备号(厂商分配)
│ │ └─────── 设备号
│ └────────── 设备号
└──────────────── OUI(厂商标识)
示例:
00:50:56:XX:XX:XX → VMware
08:00:27:XX:XX:XX → VirtualBox
AC:DE:48:XX:XX:XX → Apple
ARP工作流程:
场景:主机A (192.168.1.10) 要发送数据给主机B (192.168.1.20)
1. 主机A检查ARP缓存
└─ 没有192.168.1.20的MAC地址
2. 主机A广播ARP请求
源MAC: aa:bb:cc:dd:ee:ff
源IP: 192.168.1.10
目标MAC: ff:ff:ff:ff:ff:ff (广播)
目标IP: 192.168.1.20
问题: "192.168.1.20的MAC地址是什么?"
3. 主机B收到请求,单播ARP响应
源MAC: 11:22:33:44:55:66
源IP: 192.168.1.20
目标MAC: aa:bb:cc:dd:ee:ff
目标IP: 192.168.1.10
回答: "我是192.168.1.20,MAC是11:22:33:44:55:66"
4. 主机A更新ARP缓存
192.168.1.20 → 11:22:33:44:55:66
5. 主机A封装数据帧发送
目标MAC: 11:22:33:44:55:66 ✅
4. 端口与Socket
端口分类:
0-1023 系统端口(Well-Known Ports)
需要管理员权限
示例:HTTP(80)、HTTPS(443)、SSH(22)
1024-49151 注册端口(Registered Ports)
由IANA分配
示例:MySQL(3306)、Redis(6379)
49152-65535 动态端口(Dynamic Ports)
临时端口、客户端端口
常用端口速查:
协议/服务 端口 说明
HTTP 80 网页浏览
HTTPS 443 加密网页
SSH 22 远程登录
FTP 21 文件传输
Telnet 23 远程终端
SMTP 25 邮件发送
POP3 110 邮件接收
IMAP 143 邮件接收
DNS 53 域名解析
DHCP 67/68 IP地址分配
MySQL 3306 数据库
PostgreSQL 5432 数据库
Redis 6379 缓存数据库
MongoDB 27017 文档数据库
TCP Socket流程:
服务器端: 客户端:
socket() socket()
↓ ↓
bind() ---
↓ ↓
listen() connect() ────→ 三次握手
↓ ↓
accept() ←───────────────────────┘
↓ ↓
recv() ←─────────────────────── send()
↓ ↓
send() ─────────────────────→ recv()
↓ ↓
close() close()
5. DNS协议
DNS层级结构:
完整域名:www.example.com.
│ │ │ │
│ │ │ └─ 根域
│ │ └───── 顶级域(TLD)
│ └─────────────二级域(SLD)
└─────────────────子域/主机名
DNS查询流程(递归+迭代):
1. 客户端 → 本地DNS服务器
"www.example.com的IP是什么?"
2. 本地DNS → 根DNS服务器
根DNS → "去问.com服务器,地址是X.X.X.X"
3. 本地DNS → .com DNS服务器
.com DNS → "去问example.com的权威DNS,地址是Y.Y.Y.Y"
4. 本地DNS → example.com 权威DNS
权威DNS → "www.example.com的IP是93.184.216.34"
5. 本地DNS → 客户端
"答案是93.184.216.34"
总耗时:通常50-200ms
DNS记录类型:
A记录 → IPv4地址 www.example.com → 93.184.216.34
AAAA记录 → IPv6地址 www.example.com → 2606:2800:220:1:...
CNAME记录 → 别名 blog.example.com → www.example.com
MX记录 → 邮件服务器 example.com → mail.example.com (优先级10)
NS记录 → 域名服务器 example.com → ns1.example.com
TXT记录 → 文本信息 用于SPF、DKIM验证
PTR记录 → 反向解析 IP → 域名
DNS缓存层级:
浏览器缓存 (几分钟)
↓
操作系统缓存 (根据TTL)
↓
路由器缓存 (根据TTL)
↓
本地DNS服务器缓存 (根据TTL)
↓
权威DNS服务器 (真实数据源)
6. DHCP协议
DORA四次握手:
D - Discover 客户端广播:"有DHCP服务器吗?"
O - Offer 服务器响应:"这里有个IP:192.168.1.100"
R - Request 客户端广播:"我要192.168.1.100"
A - Ack 服务器确认:"好的,分配给你了!"
时间线:
t=0ms 客户端发送Discover
t=10ms 服务器响应Offer
t=15ms 客户端发送Request
t=20ms 服务器发送Ack
✅ 客户端配置完成,可以上网
DHCP配置内容:
必需配置:
├── IP地址 192.168.1.100
├── 子网掩码 255.255.255.0
└── 租约时间 86400秒 (24小时)
可选配置:
├── 默认网关 192.168.1.1
├── DNS服务器 8.8.8.8, 8.8.4.4
├── 域名 example.com
└── 其他参数 NTP服务器、WINS服务器等
租约时间管理:
租约周期:24小时 (86400秒)
时间点:
0% 开始时间:2024-01-15 10:00:00
↓
50% T1续约: 2024-01-15 22:00:00
(直接联系原DHCP服务器)
↓
87.5% T2重绑: 2024-01-16 04:30:00
(广播寻找任何DHCP服务器)
↓
100% 到期时间:2024-01-16 10:00:00
(释放IP,重新DORA)
🔗 知识串联
让我们把这一周的知识串联起来,看看它们如何协同工作:
场景:你的电脑如何访问 www.baidu.com
步骤1:获取网络配置 (DHCP)
─────────────────────────────────
开机 → DHCP DORA过程
↓
获得配置:
- IP地址:192.168.1.100
- 子网掩码:255.255.255.0
- 网关:192.168.1.1
- DNS:8.8.8.8
步骤2:DNS域名解析
─────────────────────────────────
浏览器输入:www.baidu.com
↓
查询本地DNS缓存
↓ (未命中)
本地DNS → 递归查询
↓
得到IP:110.242.68.66
步骤3:判断是否同一子网
─────────────────────────────────
目标IP:110.242.68.66
本机IP:192.168.1.100/24
本机网络:192.168.1.0
110.242.68.66 ∉ 192.168.1.0/24
↓
需要通过网关转发
步骤4:ARP获取网关MAC地址
─────────────────────────────────
需要发送给:192.168.1.1(网关)
↓
查询ARP缓存
↓ (未命中)
广播ARP请求:"192.168.1.1的MAC是什么?"
↓
收到ARP响应:"MAC是aa:bb:cc:dd:ee:ff"
↓
更新ARP缓存
步骤5:封装数据包并发送
─────────────────────────────────
应用层:HTTP请求 GET / HTTP/1.1
↓
传输层:TCP段 (源端口:54321 → 目标端口:80)
↓
网络层:IP包
源IP: 192.168.1.100
目标IP: 110.242.68.66
↓
链路层:以太网帧
源MAC: 你的电脑MAC
目标MAC: aa:bb:cc:dd:ee:ff (网关MAC)
↓
发送到网关
步骤6:网关转发
─────────────────────────────────
网关收到数据包
↓
查看目标IP:110.242.68.66
↓
查询路由表,找到下一跳
↓
转发给运营商路由器
↓
... 经过多个路由器 ...
↓
到达百度服务器
步骤7:接收响应
─────────────────────────────────
百度服务器处理请求
↓
返回HTTP响应
↓
... 原路返回 ...
↓
到达你的电脑
↓
浏览器显示网页 ✅
完整的网络层协议栈
┌────────────────────────────────────────┐
│ 应用层 │
│ HTTP、FTP、SMTP、DNS │
├────────────────────────────────────────┤
│ 传输层 │
│ TCP (端口)、UDP (端口) │
├────────────────────────────────────────┤
│ 网络层 │
│ IP (地址)、ICMP、ARP │
├────────────────────────────────────────┤
│ 链路层 │
│ 以太网 (MAC地址)、WiFi │
├────────────────────────────────────────┤
│ 物理层 │
│ 电信号、光信号、无线电波 │
└────────────────────────────────────────┘
💻 综合实战项目
项目:网络配置诊断工具
创建一个综合工具,整合本周所学知识:
# 综合诊断
python week02_network_diagnostic.py --full
# 单项检查
python week02_network_diagnostic.py --check-ip
python week02_network_diagnostic.py --check-dns
python week02_network_diagnostic.py --check-gateway
项目代码:见 code/week02/week02_network_diagnostic.py
功能清单:
- ✅ 显示本机IP配置(IP、掩码、网关、DNS)
- ✅ 分析IP地址类型(公有/私有、类别)
- ✅ 计算子网信息(网络地址、广播地址、可用主机)
- ✅ 查看ARP缓存
- ✅ 扫描网关可达性
- ✅ 测试DNS解析
- ✅ 显示DHCP租约信息
- ✅ 检查常用端口
- ✅ 网络连通性测试
- ✅ 生成诊断报告
📝 知识测验
基础题(每题10分)
1. IP地址 172.16.50.100 属于哪一类?是公有IP还是私有IP?
- 类别:B类(第一个字节172,10xxxxxx开头)
- 类型:私有IP(172.16.0.0/12 是B类私有地址范围)
2. 子网掩码 255.255.255.192 对应的CIDR是多少?有多少个可用主机?
- CIDR:/26
- 计算:255.255.255.192 = 11111111.11111111.11111111.11000000 共有26个1,所以是/26
- 可用主机数:2^(32-26) - 2 = 2^6 - 2 = 64 - 2 = 62个
3. MAC地址 00:50:56:12:34:56 是哪个厂商的设备?
- 厂商:VMware
- 判断:OUI前缀 00:50:56 属于VMware
4. 端口号 3306 通常用于什么服务?
- 服务:MySQL数据库
- 默认端口:3306/tcp
5. DNS的A记录和CNAME记录有什么区别?
A记录:直接指向IPv4地址 示例:www.example.com → 93.184.216.34
CNAME记录:指向另一个域名(别名) 示例:blog.example.com → www.example.com
区别:
- A记录直接解析,CNAME需要再次查询
- 根域名只能用A记录
- CNAME不能与其他记录共存
6. DHCP的T1和T2分别是租约时长的多少?
- T1(续约时间):租约时长的 50%
- T2(重绑时间):租约时长的 87.5%
示例:租期24小时
- T1 = 12小时(直接联系原服务器)
- T2 = 21小时(广播寻找任何服务器)
- 到期 = 24小时(释放IP)
进阶题(每题15分)
7. 请计算网络 192.168.10.0/24 划分为8个等大小子网的结果。
划分为8个子网,需要3位(2^3=8) 新的子网掩码:/24 + 3 = /27 子网掩码:255.255.255.224
8个子网:
- 192.168.10.0/27 (192.168.10.1 - 192.168.10.30)
- 192.168.10.32/27 (192.168.10.33 - 192.168.10.62)
- 192.168.10.64/27 (192.168.10.65 - 192.168.10.94)
- 192.168.10.96/27 (192.168.10.97 - 192.168.10.126)
- 192.168.10.128/27 (192.168.10.129 - 192.168.10.158)
- 192.168.10.160/27 (192.168.10.161 - 192.168.10.190)
- 192.168.10.192/27 (192.168.10.193 - 192.168.10.222)
- 192.168.10.224/27 (192.168.10.225 - 192.168.10.254)
每个子网:30个可用主机
8. 描述完整的ARP请求和响应过程(包括MAC地址和IP地址)。
场景:主机A要与主机B通信
已知信息:
- 主机A:IP=192.168.1.10, MAC=aa:bb:cc:dd:ee:ff
- 主机B:IP=192.168.1.20, MAC=11:22:33:44:55:66
步骤:
ARP请求(广播):
- 源MAC:aa:bb:cc:dd:ee:ff
- 目标MAC:ff:ff:ff:ff:ff:ff(广播)
- 源IP:192.168.1.10
- 目标IP:192.168.1.20
- 询问:“谁是192.168.1.20?请告诉192.168.1.10”
ARP响应(单播):
- 源MAC:11:22:33:44:55:66
- 目标MAC:aa:bb:cc:dd:ee:ff
- 源IP:192.168.1.20
- 目标IP:192.168.1.10
- 回答:“我是192.168.1.20,我的MAC是11:22:33:44:55:66”
主机A更新ARP缓存表: 192.168.1.20 → 11:22:33:44:55:66
后续通信直接使用缓存的MAC地址
9. 解释DNS递归查询和迭代查询的区别,并说明哪里用递归哪里用迭代。
递归查询(Recursive Query):
- 定义:查询者发出请求后,DNS服务器负责完成整个查询
- 特点:“帮我查到结果再告诉我”
- 返回:最终答案或错误
迭代查询(Iterative Query):
- 定义:DNS服务器只返回下一步应该查询的服务器地址
- 特点:“我不知道,但你可以去问XX服务器”
- 返回:推荐查询的服务器地址
实际应用:
客户端 → 本地DNS 【递归查询】
↓
本地DNS → 根DNS 【迭代查询】
↓
本地DNS → TLD DNS 【迭代查询】
↓
本地DNS → 权威DNS 【迭代查询】
↓
本地DNS → 客户端 【递归查询】
为什么这样设计?
- 客户端用递归:简单,不需要多次查询
- 服务器间用迭代:减轻单个服务器负担,避免递归导致的深度过深
10. 如果DHCP服务器在另一个子网,如何实现DHCP服务?
问题:DHCP使用广播,广播无法跨越路由器
解决方案:DHCP Relay(中继代理)
工作原理:
[子网1: 192.168.1.0/24]
↓ 客户端广播Discover
[路由器 - DHCP Relay]
↓ 单播转发到DHCP服务器
[子网2: 192.168.2.0/24 - DHCP服务器]
详细流程:
- 客户端在子网1广播DHCP Discover
- 路由器(配置为DHCP Relay)收到
- 路由器修改报文:
- 源IP改为路由器接口IP (192.168.1.1)
- 目标IP改为DHCP服务器IP (192.168.2.100),单播
- Gateway IP字段填入192.168.1.1
- Hops字段加1
- DHCP服务器看到Gateway IP,知道客户端在子网1
- 从子网1的地址池分配IP
- 服务器单播响应给路由器
- 路由器转发响应给客户端
配置示例(Cisco):
interface GigabitEthernet0/0
ip address 192.168.1.1 255.255.255.0
ip helper-address 192.168.2.100
计分标准
- 90-100分:优秀,完全掌握本周内容
- 75-89分:良好,大部分知识点已掌握
- 60-74分:及格,基础知识掌握,需加强练习
- 60分以下:需要重新学习本周内容
🎓 实践建议
1. 动手实验
必做实验:
□ 使用ipconfig/ifconfig查看本机网络配置
□ 计算自己所在网络的子网信息
□ 查看并分析ARP缓存表
□ 使用nslookup/dig查询DNS
□ 释放并重新获取DHCP地址
□ 扫描局域网内的活跃主机
选做实验:
□ 搭建简单的DHCP服务器(虚拟机)
□ 配置DNS服务器(bind9)
□ 使用Wireshark抓包分析DHCP过程
□ 编写子网划分计算器
□ 实现简单的ARP欺骗检测
2. 工具使用
命令行工具:
# Windows
ipconfig /all # 查看详细网络配置
ipconfig /displaydns # 查看DNS缓存
arp -a # 查看ARP缓存
nslookup www.baidu.com # DNS查询
netstat -an # 查看端口状态
# Linux/Mac
ifconfig / ip addr # 查看网络配置
arp -n # 查看ARP缓存
dig www.baidu.com # DNS查询
netstat -tuln # 查看监听端口
ss -tuln # 更快的端口查看
图形化工具:
- Wireshark:抓包分析
- Advanced IP Scanner:网络扫描
- Angry IP Scanner:跨平台IP扫描
- Fiddler:HTTP抓包
3. 延伸学习
推荐阅读:
1. RFC 791 - IP协议规范
2. RFC 826 - ARP协议规范
3. RFC 1918 - 私有IP地址分配
4. RFC 1035 - DNS协议规范
5. RFC 2131 - DHCP协议规范
6. RFC 4632 - CIDR地址分配
推荐视频/课程:
- Wireshark网络分析教程
- 子网划分实战演练
- DNS深入解析
- DHCP服务器搭建
🚀 下周预告
第三周:传输层协议详解
我们将学习:
Day 15: TCP协议基础
- TCP报文格式
- TCP三次握手
- TCP四次挥手
- TCP状态机
Day 16: TCP可靠传输
- 序列号和确认号
- 滑动窗口机制
- 流量控制
- 拥塞控制
Day 17: UDP协议详解
- UDP报文格式
- UDP vs TCP对比
- UDP应用场景
- UDP编程实战
Day 18: Socket编程进阶
- 非阻塞Socket
- Socket选项设置
- 多路复用(select/poll/epoll)
- 实战:聊天室服务器
Day 19: HTTP协议基础
- HTTP请求和响应
- HTTP方法(GET/POST等)
- HTTP状态码
- Cookie和Session
Day 20: HTTPS与安全
- HTTPS工作原理
- SSL/TLS握手
- 证书验证
- 中间人攻击防护
Day 21: 第三周总结
- 传输层协议综合复习
- TCP/UDP深入对比
- 综合实战项目
📊 学习进度追踪
第一周 ✅ 网络基础入门
├─ Day 1-7 完成 ✅
└─ 周总结完成 ✅
第二周 ✅ 网络层深入
├─ Day 8: IP地址详解 ✅
├─ Day 9: 子网划分 ✅
├─ Day 10: MAC与ARP ✅
├─ Day 11: 端口与Socket ✅
├─ Day 12: DNS协议 ✅
├─ Day 13: DHCP协议 ✅
└─ Day 14: 周总结 ✅
第三周 ⏳ 传输层协议
└─ Day 15-21 待学习
总进度:14/180 天 (7.8%)
✅ 本周检查清单
在进入下一周之前,请确保:
□ 理解IP地址分类和私有IP范围
□ 能够计算子网掩码和CIDR
□ 掌握子网划分的方法
□ 理解MAC地址结构和OUI
□ 掌握ARP工作原理
□ 熟悉常用端口号
□ 理解Socket编程基础
□ 掌握DNS查询流程
□ 理解DNS记录类型
□ 掌握DHCP DORA过程
□ 理解租约管理机制
□ 完成本周所有代码练习
□ 能够使用基本的网络诊断命令
💬 学习心得
在这里记录你的学习收获和疑问:
本周最大收获:
_________________________________________________
_________________________________________________
还不太理解的地方:
_________________________________________________
_________________________________________________
下周学习计划:
_________________________________________________
_________________________________________________
🎉 总结
恭喜你完成第二周的学习!这一周我们深入学习了网络层的核心概念:
- ✅ 掌握了IP地址体系和子网划分
- ✅ 理解了MAC地址和ARP协议
- ✅ 学会了端口和Socket编程
- ✅ 深入了解DNS和DHCP协议
- ✅ 编写了多个实用的网络工具
这些知识是网络工程师的必备基础。在实际工作中,你会频繁地使用这些概念来:
- 规划和分配IP地址
- 排查网络连通性问题
- 配置网络服务
- 开发网络应用
继续保持学习的热情,我们下周见! 🚀
记住:网络知识需要大量实践才能真正掌握。多动手、多实验、多思考!