二周总结:网络层深入理解

第二周总结:网络层深入理解

本周学习回顾

恭喜你完成了第二周的学习!本周我们深入学习了网络层的核心概念和协议。让我们一起回顾这一周的精彩内容。


📚 本周知识地图

第二周:网络层深入
├── 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

功能清单

  1. ✅ 显示本机IP配置(IP、掩码、网关、DNS)
  2. ✅ 分析IP地址类型(公有/私有、类别)
  3. ✅ 计算子网信息(网络地址、广播地址、可用主机)
  4. ✅ 查看ARP缓存
  5. ✅ 扫描网关可达性
  6. ✅ 测试DNS解析
  7. ✅ 显示DHCP租约信息
  8. ✅ 检查常用端口
  9. ✅ 网络连通性测试
  10. ✅ 生成诊断报告

📝 知识测验

基础题(每题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

  • 区别:

    1. A记录直接解析,CNAME需要再次查询
    2. 根域名只能用A记录
    3. 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个子网:

  1. 192.168.10.0/27 (192.168.10.1 - 192.168.10.30)
  2. 192.168.10.32/27 (192.168.10.33 - 192.168.10.62)
  3. 192.168.10.64/27 (192.168.10.65 - 192.168.10.94)
  4. 192.168.10.96/27 (192.168.10.97 - 192.168.10.126)
  5. 192.168.10.128/27 (192.168.10.129 - 192.168.10.158)
  6. 192.168.10.160/27 (192.168.10.161 - 192.168.10.190)
  7. 192.168.10.192/27 (192.168.10.193 - 192.168.10.222)
  8. 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

步骤:

  1. 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”
  2. 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”
  3. 主机A更新ARP缓存表: 192.168.1.20 → 11:22:33:44:55:66

  4. 后续通信直接使用缓存的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. 客户端在子网1广播DHCP Discover
  2. 路由器(配置为DHCP Relay)收到
  3. 路由器修改报文:
    • 源IP改为路由器接口IP (192.168.1.1)
    • 目标IP改为DHCP服务器IP (192.168.2.100),单播
    • Gateway IP字段填入192.168.1.1
    • Hops字段加1
  4. DHCP服务器看到Gateway IP,知道客户端在子网1
  5. 从子网1的地址池分配IP
  6. 服务器单播响应给路由器
  7. 路由器转发响应给客户端

配置示例(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地址
  • 排查网络连通性问题
  • 配置网络服务
  • 开发网络应用

继续保持学习的热情,我们下周见! 🚀


记住:网络知识需要大量实践才能真正掌握。多动手、多实验、多思考!