计算机网络
💡 学习指南:计算机网络是现代技术的基础设施。本章节通过可视化演示和实战案例,带你从五层模型到实际应用,全面理解网络通信原理、协议分析和故障排查。
0. 五层模型总览
现代计算机网络采用五层分层模型,每层负责不同的功能:
为什么需要分层?
- 🎯 模块化:每层独立设计和实现
- 🔧 易维护:修改一层不影响其他层
- 📚 标准化:统一的接口和协议
- 🔄 可扩展:新技术可以替换某一层
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. 数据链路层 (Data Link Layer)
2.1 基本概念
数据链路层负责在直连的两个节点间传输数据帧。
核心功能:
- 物理地址寻址(MAC 地址)
- 帧的封装和解封装
- 错误检测(CRC 校验)
- 介质访问控制(MAC)
2.2 MAC 地址
MAC 地址格式:00:1A:2B:3C:4D:5E
- 前 24 位:厂商标识(OUI)
- 后 24 位:设备序列号
- 全球唯一,烧录在网卡上
查看 MAC 地址:
# Windows
ipconfig /all
# macOS/Linux
ifconfig2.3 以太网帧结构
+------------+----------+---------+-----+----------+
| 目标 MAC | 源 MAC | 类型 | 数据 | FCS |
| (6 bytes) | (6 bytes)| (2 bytes)| | (4 bytes)|
+------------+----------+---------+-----+----------+常见以太网类型:
0x0800:IPv40x0806:ARP0x86DD:IPv6
2.4 交换机原理
交换机工作方式:
- 学习 MAC 地址:记录端口与 MAC 的对应关系
- 转发帧:根据目标 MAC 地址选择端口
- 过滤广播:不会转发到所有端口(集线器会)
查看交换机 MAC 表:
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.255 | 126 | 16M | 大型网络 |
| B 类 | 128.0.0.0 - 191.255.255.255 | 16K | 65K | 中型网络 |
| C 类 | 192.0.0.0 - 223.255.255.255 | 2M | 254 | 小型网络 |
私有 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 子网划分
/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 路由原理
路由器工作流程:
- 接收数据包
- 检查目标 IP 地址
- 查询路由表
- 选择最佳路径
- 转发到下一跳
路由表示例:
目标网络 子网掩码 网关 接口
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 (默认网关)查看路由表:
# Windows
route print
# macOS/Linux
netstat -rn3.4 ICMP 协议
ICMP (Internet Control Message Protocol) 用于网络诊断。
常见 ICMP 类型:
- Echo Request (Type 8):ping 请求
- Echo Reply (Type 0):ping 响应
- Destination Unreachable (Type 3):目标不可达
Ping 命令:
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 ms4. 传输层 (Transport Layer)
4.1 端口
端口号范围:
- 0-1023:系统端口(需要管理员权限)
- 1024-49151:注册端口
- 49152-65535:动态端口
常见端口:
21:FTP22:SSH80:HTTP443:HTTPS3306:MySQL5432:PostgreSQL27017:MongoDB
查看端口占用:
# macOS/Linux
lsof -i :8080
# Windows
netstat -ano | findstr :80804.2 TCP vs UDP
| 特性 | TCP | UDP |
|---|---|---|
| 连接 | 面向连接 | 无连接 |
| 可靠性 | 可靠(确认重传) | 不可靠(尽最大努力) |
| 速度 | 较慢 | 很快 |
| 开销 | 高(20字节头部) | 低(8字节头部) |
| 流量控制 | 有(滑动窗口) | 无 |
| 应用 | HTTP, FTP, SMTP, SSH | DNS, DHCP, 视频流 |
• 丢几帧没关系,关键是实时
• 重传会造成延迟和卡顿
• 内容必须完整准确
• 丢失任何数据都不可接受
• 响应速度比准确更重要
• 实时同步玩家位置
• 邮件内容不能丢失
• 可靠性是第一要务
选择建议:
- 📧 邮件、文件传输:用 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:
| 特性 | HTTP | HTTPS |
|---|---|---|
| 加密 | 否 | 是(TLS/SSL) |
| 端口 | 80 | 443 |
| 安全性 | 低(明文传输) | 高(加密传输) |
| 性能 | 略快 | 略慢(握手开销) |
| 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 记录类型:
| 类型 | 用途 | 示例 |
|---|---|---|
| A | IPv4 地址 | www.example.com → 93.184.216.34 |
| AAAA | IPv6 地址 | 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 记录:
nslookup google.com
dig google.com ANY5.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:
- 打开开发者工具(F12)
- 切换到 Network 标签
- 刷新页面或发起请求
- 查看请求详情
关键信息:
- Request Headers:请求头信息
- Response Headers:响应头信息
- Status:状态码
- Size:资源大小
- Time:请求耗时
- Waterfall:瀑布图,显示时间线
使用 Wireshark:
- 下载安装 Wireshark
- 选择网络接口
- 开始抓包
- 过滤器:
http && ip.addr == 93.184.216.34 - 分析 HTTP 报文
常用过滤器:
http # 只显示 HTTP 协议
ip.addr == 8.8.8.8 # 只显示与 8.8.8.8 的通信
tcp.port == 80 # 只显示 80 端口的流量
dns # 只显示 DNS 查询7. 网络故障排查
ping 8.8.8.8nslookup google.comipconfig /flushdns (Windows)查看浏览器代理设置尝试访问不同网站物理层 → 链路层 → 网络层 → 传输层 → 应用层
先确定问题发生在哪一层,再针对性解决
ping 本机 → ping 网关 → ping 外网 → ping 域名
系统日志、应用日志、防火墙日志记录关键信息
7.1 诊断命令
基础命令:
# 测试连通性
ping google.com
# 追踪路由
traceroute google.com
# 查看网络配置
ifconfig
ip addr show
# 查看 DNS 配置
cat /etc/resolv.conf
# 查看路由表
netstat -rn高级命令:
# 查看端口占用
lsof -i :8080
# 查看网络连接
netstat -an
# 抓包分析
tcpdump -i eth0 -w capture.pcap
# 测试带宽
speedtest-cli7.2 常见问题
问题 1:无法上网
ping 8.8.8.8测试基本连通性ping google.com测试 DNS 解析- 检查网关配置
- 清除 DNS 缓存
问题 2:网速慢
speedtest-cli测试实际带宽- 检查后台下载应用
- 重启路由器
- 更换 DNS 服务器
问题 3:延迟高
ping -c 100统计平均延迟traceroute找出高延迟路由- 检查本地网络负载
- 使用有线连接测试
问题 4:端口无法访问
netstat -tuln | grep :80检查服务监听- 检查防火墙规则
iptables -L查看防火墙- 测试本地访问:
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;
}防火墙配置:
# 允许 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 DROP9. 总结
计算机网络核心要点:
- 📚 分层模型:理解五层模型,每层职责清晰
- 🌐 IP 地址:掌握子网划分、路由原理
- 🔄 TCP/UDP:理解可靠传输 vs 快速传输
- 🔐 HTTP/HTTPS:Web 应用的基础协议
- 🛠️ 故障排查:从物理层到应用层逐层排查
学习建议:
- ✅ 多动手实践:使用 ping、traceroute、wireshark
- ✅ 理解协议细节:阅读 RFC 文档
- ✅ 抓包分析:用 Wireshark 观察实际流量
- ✅ 排查问题:系统化地诊断网络故障
- ✅ 关注安全:了解常见攻击和防御方法
掌握计算机网络,你就能理解互联网的运作原理,写出更高效的网络应用!
