Skip to content

计算机网络

💡 学习指南:计算机网络是现代技术的基础设施。本章节通过可视化演示和实战案例,带你从五层模型到实际应用,全面理解网络通信原理、协议分析和故障排查。

0. 五层模型总览

现代计算机网络采用五层分层模型,每层负责不同的功能:

1
应用层
Application Layer
HTTP, HTTPS, FTP, SMTP, DNS, SSH
📱
2
传输层
Transport Layer
TCP, UDP
🚚
3
网络层
Network Layer
IP, ICMP, IGMP, ARP
🌐
4
数据链路层
Data Link Layer
Ethernet, Wi-Fi, PPP
🔗
5
物理层
Physical Layer
Ethernet PHY, Wi-Fi Radio, USB
应用层
直接为用户的应用程序(如浏览器、邮件客户端)提供网络服务接口。
主要功能
✓ 为应用程序提供网络接口
✓ 定义应用程序间通信的协议
✓ 处理数据格式和加密
✓ 用户认证和授权
常见设备
📡 网关
📡 防火墙
📡 代理服务器
数据封装过程(发送)
物理层
比特
↓ 添加头部
数据链路层
↓ 添加头部
网络层
↓ 添加头部
传输层
段/数据报
↓ 添加头部
应用层
数据

为什么需要分层?

  • 🎯 模块化:每层独立设计和实现
  • 🔧 易维护:修改一层不影响其他层
  • 📚 标准化:统一的接口和协议
  • 🔄 可扩展:新技术可以替换某一层

1. 物理层 (Physical Layer)

1.1 基本概念

物理层负责在物理介质上传输原始的比特流(0 和 1)。

关键任务

  • 定义物理设备标准(RJ45、光纤接口等)
  • 规定传输介质(双绞线、光纤、无线电波)
  • 确定电气特性(电压、频率、编码方式)

1.2 传输介质

有线介质

  • 双绞线(Twisted Pair):Cat5、Cat6,用于以太网
  • 光纤(Fiber Optic):长距离、高带宽
  • 同轴电缆(Coaxial):早期以太网、有线电视

无线介质

  • 无线电波(Wi-Fi、蓝牙、4G/5G)
  • 微波(卫星通信)
  • 红外线(短距离通信)

1.3 常见设备

  • 中继器 (Repeater):放大信号,延长传输距离
  • 集线器 (Hub):多端口中继器(已被交换机取代)

2.1 基本概念

数据链路层负责在直连的两个节点间传输数据帧。

核心功能

  • 物理地址寻址(MAC 地址)
  • 帧的封装和解封装
  • 错误检测(CRC 校验)
  • 介质访问控制(MAC)

2.2 MAC 地址

MAC 地址格式00:1A:2B:3C:4D:5E

  • 前 24 位:厂商标识(OUI)
  • 后 24 位:设备序列号
  • 全球唯一,烧录在网卡上

查看 MAC 地址

bash
# Windows
ipconfig /all

# macOS/Linux
ifconfig

2.3 以太网帧结构

+------------+----------+---------+-----+----------+
| 目标 MAC   | 源 MAC   | 类型    | 数据 | FCS      |
| (6 bytes)  | (6 bytes)| (2 bytes)|     | (4 bytes)|
+------------+----------+---------+-----+----------+

常见以太网类型

  • 0x0800:IPv4
  • 0x0806:ARP
  • 0x86DD:IPv6

2.4 交换机原理

交换机工作方式

  1. 学习 MAC 地址:记录端口与 MAC 的对应关系
  2. 转发帧:根据目标 MAC 地址选择端口
  3. 过滤广播:不会转发到所有端口(集线器会)

查看交换机 MAC 表

bash
show mac address-table  # 思科设备

3. 网络层 (Network Layer)

3.1 IP 地址

IPv4 地址格式192.168.1.1

  • 32 位,通常用点分十进制表示
  • 分为网络部分和主机部分

IP 地址分类

类别范围网络数主机数用途
A 类1.0.0.0 - 126.255.255.25512616M大型网络
B 类128.0.0.0 - 191.255.255.25516K65K中型网络
C 类192.0.0.0 - 223.255.255.2552M254小型网络

私有 IP 地址

  • A 类:10.0.0.0 - 10.255.255.255
  • B 类:172.16.0.0 - 172.31.255.255
  • C 类:192.168.0.0 - 192.168.255.255

3.2 子网划分

基本信息
网络地址
192.168.1.0
广播地址
192.168.1.255
子网掩码
255.255.255.0
可用主机数
254
IP 范围
起始 IP
192.168.1.1
结束 IP
192.168.1.254
二进制表示
IP 地址
11000000.10101000.00000001.00000000
子网掩码
11111111.11111111.11111111.00000000
网络地址
11000000.10101000.00000001.00000000
子网类型
C 类网络
标准网络,适合小型企业或家庭
常见子网示例
💡 子网划分知识点
什么是子网? 将一个大网络分割成更小的网络,提高地址利用率和网络性能。
CIDR 表示法 /24 表示前 24 位是网络位,后 8 位是主机位。
常用子网掩码
/8 = 255.0.0.0 (A 类网络)
/16 = 255.255.0.0 (B 类网络)
/24 = 255.255.255.0 (C 类网络)

子网掩码的作用

  • 区分 IP 地址的网络部分和主机部分
  • 确定两个 IP 是否在同一网段
  • 计算网络地址和广播地址

CIDR 表示法192.168.1.0/24

  • /24 表示前 24 位是网络位
  • 剩余 8 位是主机位

子网划分示例

原网络:192.168.1.0/24
可用主机:192.168.1.1 - 192.168.1.254 (254 台)

划分为 /26 子网:
- 子网 1:192.168.1.0/26   (192.168.1.1 - 192.168.1.62,62 台)
- 子网 2:192.168.1.64/26  (192.168.1.65 - 192.168.1.126,62 台)
- 子网 3:192.168.1.128/26 (192.168.1.129 - 192.168.1.190,62 台)
- 子网 4:192.168.1.192/26 (192.168.1.193 - 192.168.1.254,62 台)

3.3 路由原理

路由器工作流程

  1. 接收数据包
  2. 检查目标 IP 地址
  3. 查询路由表
  4. 选择最佳路径
  5. 转发到下一跳

路由表示例

目标网络          子网掩码          网关          接口
192.168.1.0    255.255.255.0    0.0.0.0      eth0
192.168.2.0    255.255.255.0    192.168.1.2  eth0
0.0.0.0        0.0.0.0          192.168.1.1  eth0  (默认网关)

查看路由表

bash
# Windows
route print

# macOS/Linux
netstat -rn

3.4 ICMP 协议

ICMP (Internet Control Message Protocol) 用于网络诊断。

常见 ICMP 类型

  • Echo Request (Type 8):ping 请求
  • Echo Reply (Type 0):ping 响应
  • Destination Unreachable (Type 3):目标不可达

Ping 命令

bash
ping google.com

# 输出示例
PING google.com (142.250.185.238): 56 data bytes
64 bytes from 142.250.185.238: icmp_seq=0 ttl=117 time=12.4 ms
64 bytes from 142.250.185.238: icmp_seq=1 ttl=117 time=11.8 ms

4. 传输层 (Transport Layer)

4.1 端口

端口号范围

  • 0-1023:系统端口(需要管理员权限)
  • 1024-49151:注册端口
  • 49152-65535:动态端口

常见端口

  • 21:FTP
  • 22:SSH
  • 80:HTTP
  • 443:HTTPS
  • 3306:MySQL
  • 5432:PostgreSQL
  • 27017:MongoDB

查看端口占用

bash
# macOS/Linux
lsof -i :8080

# Windows
netstat -ano | findstr :8080

4.2 TCP vs UDP

🔒
TCP
传输控制协议
可靠传输
面向连接
流量控制
拥塞控制
速度较慢
开销较大
应用场景
网页浏览文件传输邮件发送
三次握手
SYN
SYN-ACK
ACK
UDP
用户数据报协议
快速传输
开销小
无连接
支持多播
不可靠
可能丢包
应用场景
视频直播在线游戏语音通话
直接发送
直接发送数据
特性TCPUDP
连接面向连接无连接
可靠性可靠(确认重传)不可靠(尽最大努力)
速度较慢很快
开销高(20字节头部)低(8字节头部)
流量控制有(滑动窗口)
应用HTTP, FTP, SMTP, SSHDNS, DHCP, 视频流
🎬 实际应用示例
📺
视频直播
使用 UDP,因为:
• 丢几帧没关系,关键是实时
• 重传会造成延迟和卡顿
🌐
网页浏览
使用 TCP,因为:
• 内容必须完整准确
• 丢失任何数据都不可接受
🎮
在线游戏
使用 UDP,因为:
• 响应速度比准确更重要
• 实时同步玩家位置
📧
邮件发送
使用 TCP,因为:
• 邮件内容不能丢失
• 可靠性是第一要务

选择建议

  • 📧 邮件、文件传输:用 TCP(不能丢数据)
  • 📺 视频、直播:用 UDP(实时性优先)
  • 🌐 网页浏览:用 TCP(可靠性重要)
  • 🎮 在线游戏:用 UDP(速度优先)

4.3 TCP 三次握手

客户端                                服务器
  |                                    |
  | -------- SYN (seq=x) -----------> |
  |     (同步请求,x 是随机数)          |
  |                                    |
  | <------- SYN-ACK (seq=y, ack=x+1) -|
  |     (同步确认,y 是随机数,确认号=x+1)|
  |                                    |
  | -------- ACK (ack=y+1) ----------> |
  |     (确认,确认号=y+1)              |
  |                                    |
  |          连接建立成功                  |

为什么需要三次?

  • 防止已失效的连接请求报文段突然又传送到了服务端
  • 确认双方的发送和接收能力都正常
  • 同步双方的初始序列号

4.4 TCP 四次挥手

客户端                                服务器
  |                                    |
  | -------- FIN (seq=u) -----------> |
  |     (请求关闭连接)                    |
  |                                    |
  | <------- ACK (ack=u+1) ----------- |
  |     (确认收到关闭请求)                |
  |                                    |
  | <------- FIN (seq=w) --------------|
  |     (服务器也可以关闭连接)            |
  |                                    |
  | -------- ACK (ack=w+1) ----------> |
  |     (确认服务器关闭)                  |
  |                                    |
  |          连接完全关闭                  |

为什么需要四次?

  • TCP 是全双工协议,双方都可以发送数据
  • 当一方关闭连接时,另一方可能还有数据要发送
  • 需要双方分别确认关闭各自方向的连接

5. 应用层 (Application Layer)

5.1 HTTP/HTTPS

HTTP (HyperText Transfer Protocol) 超文本传输协议。

HTTP 请求方法

方法描述示例
GET获取资源查看网页
POST提交数据表单提交
PUT更新资源更新用户信息
DELETE删除资源删除文章
PATCH部分更新修改状态

HTTP 状态码

2xx 成功
- 200 OK:请求成功
- 201 Created:资源创建成功

3xx 重定向
- 301 Moved Permanently:永久重定向
- 302 Found:临时重定向

4xx 客户端错误
- 400 Bad Request:请求错误
- 401 Unauthorized:未授权
- 403 Forbidden:禁止访问
- 404 Not Found:资源不存在

5xx 服务器错误
- 500 Internal Server Error:服务器内部错误
- 502 Bad Gateway:网关错误
- 503 Service Unavailable:服务不可用

HTTPS vs HTTP

特性HTTPHTTPS
加密是(TLS/SSL)
端口80443
安全性低(明文传输)高(加密传输)
性能略快略慢(握手开销)
SEO不友好友好

HTTPS 工作流程

客户端                              服务器
  |                                  |
  | -------- Client Hello ---------> |
  | (支持的加密算法、随机数)              |
  |                                  |
  | <------- Server Header --------- |
  | (服务器证书、随机数、选择的加密方法)    |
  |                                  |
  | 验证证书                           |
  | 生成会话密钥                        |
  |                                  |
  | -------- 用公钥加密会话密钥 ------> |
  |                                  |
  | <------- 加密通信开始 ------------ |
  | (用会话密钥加密所有数据)              |

5.2 DNS

DNS (Domain Name System) 域名系统,将域名转换为 IP 地址。

DNS 查询过程

用户查询 google.com

浏览器缓存(最近查询)
    ↓ 未命中
系统缓存(/etc/hosts)
    ↓ 未命中
路由器缓存
    ↓ 未命中
ISP DNS 服务器
    ↓ 未命中
根域名服务器(.)
    ↓ 指向 .com 服务器
顶级域名服务器(.com)
    ↓ 指向 google.com 服务器
权威 DNS 服务器
    ↓ 返回 IP 地址

DNS 记录类型

类型用途示例
AIPv4 地址www.example.com → 93.184.216.34
AAAAIPv6 地址www.example.com → 2606:2800:220:1:248:1893:25c8:1946
CNAME别名www.example.com → example.com
MX邮件服务器mail.example.com
TXT文本记录SPF、DKIM 验证

查看 DNS 记录

bash
nslookup google.com
dig google.com ANY

5.3 常见应用协议

FTP (File Transfer Protocol):文件传输

  • 端口:21(控制)、20(数据)
  • 主动模式 vs 被动模式

SSH (Secure Shell):远程登录

  • 端口:22
  • 加密通信

SMTP (Simple Mail Transfer Protocol):发送邮件

  • 端口:25
  • 端口:465(SSL)、587(TLS)

POP3/IMAP:接收邮件

  • POP3:端口 110,下载到本地
  • IMAP:端口 143,服务器同步

6. 浏览器请求全过程

6.1 完整流程

1. URL 解析
   - 解析协议、域名、端口、路径
   - 编码特殊字符

2. DNS 查询
   - 查找域名对应的 IP 地址

3. TCP 连接
   - 三次握手建立连接

4. TLS 握手(HTTPS)
   - 协商加密参数

5. 发送 HTTP 请求
   GET /page HTTP/1.1
   Host: www.example.com

6. 服务器处理
   - 路由匹配
   - 业务逻辑
   - 生成响应

7. 接收 HTTP 响应
   HTTP/1.1 200 OK
   Content-Type: text/html

8. 解析 HTML
   - 构建 DOM 树

9. 下载资源
   - CSS、JS、图片等

10. 渲染页面
    - 构建渲染树
    - 布局、绘制

6.2 抓包实战

使用浏览器 DevTools

  1. 打开开发者工具(F12)
  2. 切换到 Network 标签
  3. 刷新页面或发起请求
  4. 查看请求详情

关键信息

  • Request Headers:请求头信息
  • Response Headers:响应头信息
  • Status:状态码
  • Size:资源大小
  • Time:请求耗时
  • Waterfall:瀑布图,显示时间线

使用 Wireshark

  1. 下载安装 Wireshark
  2. 选择网络接口
  3. 开始抓包
  4. 过滤器:http && ip.addr == 93.184.216.34
  5. 分析 HTTP 报文

常用过滤器

http                    # 只显示 HTTP 协议
ip.addr == 8.8.8.8      # 只显示与 8.8.8.8 的通信
tcp.port == 80          # 只显示 80 端口的流量
dns                     # 只显示 DNS 查询

7. 网络故障排查

选择问题类型
无法访问网页
浏览器无法打开网站,显示连接错误
🔧 解决步骤
1
检查网络连接
ping 8.8.8.8
测试是否能够连接到互联网(8.8.8.8 是 Google DNS)
2
检查 DNS 解析
nslookup google.com
测试域名是否能正确解析为 IP 地址
3
清除 DNS 缓存
ipconfig /flushdns (Windows)
清除本地 DNS 缓存,可能解决 DNS 污染或过期问题
4
检查代理设置
查看浏览器代理设置
确认没有配置错误的代理服务器
5
测试其他网站
尝试访问不同网站
确定是单个网站问题还是全局网络问题
📋 常用诊断命令
ping
ping [host]
测试到目标主机的连通性和延迟
traceroute
traceroute [host]
显示数据包到达目标的路由路径
nslookup
nslookup [domain]
查询域名的 DNS 记录
netstat
netstat -tuln
显示网络连接和监听端口
curl
curl -v [url]
测试 HTTP 请求并查看详细信息
tcpdump
tcpdump -i eth0
抓取网络数据包进行分析
💡 故障排查技巧
1
从底层到顶层
物理层 → 链路层 → 网络层 → 传输层 → 应用层
2
分层排查
先确定问题发生在哪一层,再针对性解决
3
二分法定位
ping 本机 → ping 网关 → ping 外网 → ping 域名
4
查看日志
系统日志、应用日志、防火墙日志记录关键信息

7.1 诊断命令

基础命令

bash
# 测试连通性
ping google.com

# 追踪路由
traceroute google.com

# 查看网络配置
ifconfig
ip addr show

# 查看 DNS 配置
cat /etc/resolv.conf

# 查看路由表
netstat -rn

高级命令

bash
# 查看端口占用
lsof -i :8080

# 查看网络连接
netstat -an

# 抓包分析
tcpdump -i eth0 -w capture.pcap

# 测试带宽
speedtest-cli

7.2 常见问题

问题 1:无法上网

  1. ping 8.8.8.8 测试基本连通性
  2. ping google.com 测试 DNS 解析
  3. 检查网关配置
  4. 清除 DNS 缓存

问题 2:网速慢

  1. speedtest-cli 测试实际带宽
  2. 检查后台下载应用
  3. 重启路由器
  4. 更换 DNS 服务器

问题 3:延迟高

  1. ping -c 100 统计平均延迟
  2. traceroute 找出高延迟路由
  3. 检查本地网络负载
  4. 使用有线连接测试

问题 4:端口无法访问

  1. netstat -tuln | grep :80 检查服务监听
  2. 检查防火墙规则
  3. iptables -L 查看防火墙
  4. 测试本地访问:curl http://localhost

8. 网络安全基础

8.1 常见攻击

DDoS 攻击

  • 分布式拒绝服务
  • 大量请求耗尽服务器资源
  • 防御:CDN、流量清洗

中间人攻击

  • 拦截通信数据
  • 防御:使用 HTTPS、验证证书

SQL 注入

  • 通过输入框注入恶意 SQL
  • 防御:参数化查询、输入验证

XSS 攻击

  • 跨站脚本攻击
  • 防御:输出编码、CSP 策略

8.2 安全实践

HTTPS 强制

# Nginx 配置
server {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name example.com;
    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;
}

防火墙配置

bash
# 允许 SSH
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# 允许 HTTP/HTTPS
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# 拒绝其他连接
iptables -A INPUT -j DROP

9. 总结

计算机网络核心要点:

  • 📚 分层模型:理解五层模型,每层职责清晰
  • 🌐 IP 地址:掌握子网划分、路由原理
  • 🔄 TCP/UDP:理解可靠传输 vs 快速传输
  • 🔐 HTTP/HTTPS:Web 应用的基础协议
  • 🛠️ 故障排查:从物理层到应用层逐层排查

学习建议

  • ✅ 多动手实践:使用 ping、traceroute、wireshark
  • ✅ 理解协议细节:阅读 RFC 文档
  • ✅ 抓包分析:用 Wireshark 观察实际流量
  • ✅ 排查问题:系统化地诊断网络故障
  • ✅ 关注安全:了解常见攻击和防御方法

掌握计算机网络,你就能理解互联网的运作原理,写出更高效的网络应用!