网络技术手册
一、网络基础概念
1.1 什么是计算机网络
计算机网络是将地理位置不同的、具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统、网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。
简单说:把多台计算机连起来,让它们能互相通信、共享资源。
1.2 网络的分类
按覆盖范围
| 类型 | 英文 | 范围 | 举例 |
|---|---|---|---|
| 局域网 | LAN(Local Area Network) | 几公里内 | 家庭、办公室、校园 |
| 城域网 | MAN(Metropolitan Area Network) | 城市范围 | 城市光纤网 |
| 广域网 | WAN(Wide Area Network) | 跨城市/国家 | 互联网 |
| 个域网 | PAN(Personal Area Network) | 几米内 | 蓝牙、无线耳机 |
按拓扑结构
| 结构 | 说明 | 优点 | 缺点 |
|---|---|---|---|
| 总线型 | 所有节点连在一条总线上 | 布线简单 | 故障难定位,总线断了全瘫 |
| 星型 | 所有节点连到中心节点 | 易管理、故障易隔离 | 中心节点是单点故障 |
| 环型 | 节点连成一个环 | 结构简单 | 一个节点断了全瘫 |
| 树型 | 星型的层级扩展 | 易扩展 | 根节点是单点故障 |
| 网状型 | 节点之间有多条路径 | 可靠性高 | 成本高、复杂 |
互联网是典型的网状型拓扑。
1.3 网络协议
什么是协议
协议(Protocol) 是通信双方约定的规则集合——怎么发、发什么、收到怎么回,都要有统一的约定。
协议的三要素:
| 要素 | 说明 | 举例 |
|---|---|---|
| 语法 | 数据的格式和结构 | HTTP 的请求行、请求头、空行、请求体 |
| 语义 | 每个部分的含义 | GET 表示获取资源,200 表示成功 |
| 时序 | 通信的顺序和规则 | 先建连接,再发请求,再收响应 |
协议分层
网络协议太复杂,所以分成了多层——每层只负责一部分功能,层与层之间通过接口交互。
分层思想:每一层只关心自己的事,把其他层的功能当作黑盒。上层调用下层的服务,下层为上层提供服务。
分层的好处:
- 独立性强:每层只关心自己的功能
- 易于维护:修改一层不影响其他层
- 可替换性:某层的实现可以替换(如以太网换 WiFi)
- 便于学习:逐层理解,降低复杂度
1.4 数据封装与解封装
发送方:从上到下,逐层加头(封装)
应用层数据 → [应用层头 + 数据] → [传输层头 + 应用数据] →
[网络层头 + 传输数据] → [数据链路层头 + 网络数据 + 尾] → 比特流
接收方:从下到上,逐层去头(解封装)
比特流 → [链路头 + 数据 + 尾] → [网络头 + 数据] →
[传输头 + 数据] → [应用头 + 数据] → 应用数据
每层的数据单位叫不同的名字:
| 层次 | 数据单位 | 英文 |
|---|---|---|
| 应用层 | 消息 / 数据 | Message / Data |
| 传输层 | 段 / 报文段 | Segment(TCP)/ Datagram(UDP) |
| 网络层 | 分组 / 包 | Packet |
| 数据链路层 | 帧 | Frame |
| 物理层 | 比特 | Bit |
二、OSI 七层模型与 TCP/IP 四层模型
2.1 OSI 七层模型
OSI(Open Systems Interconnection) 开放式系统互联参考模型,是 ISO(国际标准化组织)制定的网络通信标准框架。
注意:OSI 是理论模型,实际广泛使用的是 TCP/IP 模型。但 OSI 是理解网络的基础框架。
┌─────────────────────────────┐
│ 7. 应用层(Application) │ ← 用户接触的层
├─────────────────────────────┤
│ 6. 表示层(Presentation) │
├─────────────────────────────┤
│ 5. 会话层(Session) │
├─────────────────────────────┤
│ 4. 传输层(Transport) │
├─────────────────────────────┤
│ 3. 网络层(Network) │
├─────────────────────────────┤
│ 2. 数据链路层(Data Link) │
├─────────────────────────────┤
│ 1. 物理层(Physical) │ ← 最底层,物理传输
└─────────────────────────────┘
2.2 各层职责速记
| 层 | 名称 | 核心职责 | 关键协议/设备 | 数据单位 |
|---|---|---|---|---|
| 7 | 应用层 | 给用户提供服务 | HTTP、FTP、DNS、SMTP | 消息 |
| 6 | 表示层 | 数据格式转换、加密解密、压缩解压缩 | SSL/TLS、JPEG、ASCII | — |
| 5 | 会话层 | 建立、管理、终止会话 | RPC、NetBIOS | — |
| 4 | 传输层 | 端到端的可靠传输、流量控制、差错控制 | TCP、UDP | 段 |
| 3 | 网络层 | 路由选择、逻辑寻址(IP) | IP、ICMP、路由器 | 包 |
| 2 | 数据链路层 | 物理寻址(MAC)、差错检测、流量控制 | Ethernet、ARP、交换机 | 帧 |
| 1 | 物理层 | 比特流传输、物理介质 | 网线、光纤、集线器、无线 | 比特 |
记忆口诀:物数网传会表应(从下到上)。
2.3 TCP/IP 四层模型
实际互联网使用的模型,将 OSI 的七层合并为四层:
┌─────────────────────────────┐
│ 应用层(Application Layer) │ ← OSI 的 5+6+7 层合并
├─────────────────────────────┤
│ 传输层(Transport Layer) │ ← 对应 OSI 第 4 层
├─────────────────────────────┤
│ 网际层(Internet Layer) │ ← 对应 OSI 第 3 层
├─────────────────────────────┤
│ 网络接口层(Link Layer) │ ← OSI 的 1+2 层合并
└─────────────────────────────┘
2.4 两个模型的对比
| OSI 七层 | TCP/IP 四层 | TCP/IP 核心协议 |
|---|---|---|
| 应用层 | 应用层 | HTTP、FTP、DNS、SMTP、SSH |
| 表示层 | TLS/SSL | |
| 会话层 | — | |
| 传输层 | 传输层 | TCP、UDP |
| 网络层 | 网际层 | IP、ICMP、ARP |
| 数据链路层 | 网络接口层 | Ethernet、PPP、Wi-Fi |
| 物理层 | 各种物理介质 |
2.5 为什么要分层
用一个寄快递的类比来理解:
| OSI 层 | 快递类比 | 做什么 |
|---|---|---|
| 应用层 | 寄件人/收件人 | 你要寄什么东西(数据内容) |
| 表示层 | 包装 | 把东西打包成标准盒子(格式转换、加密) |
| 会话层 | 下单/签收 | 建立寄件关系,结束后确认 |
| 传输层 | 快递公司 | 确保包裹完整送达,丢了重发(端到端) |
| 网络层 | 分拨中心 | 选择运输路线,从一个城市到另一个城市(路由) |
| 数据链路层 | 货车司机 | 一段路一段路地运输,相邻节点之间 |
| 物理层 | 公路/铁路/飞机 | 物理运输方式 |
你寄快递只需要关心"寄什么"(应用层),中间怎么运输的你不用管——这就是分层的好处。
三、物理层
3.1 物理层的作用
物理层是最底层,负责在物理介质上传输比特流(0 和 1)。
它不关心比特的含义,只关心怎么把 0 和 1 变成物理信号传出去,再怎么从物理信号还原成 0 和 1。
3.2 传输介质
有线介质
| 介质 | 说明 | 带宽 | 距离 | 抗干扰 | 成本 |
|---|---|---|---|---|---|
| 双绞线 | 扭在一起的铜线,分屏蔽(STP)和非屏蔽(UTP) | 10Mbps~10Gbps | 100m | 一般 | 低 |
| 同轴电缆 | 铜芯 + 绝缘层 + 屏蔽层 | 较高 | 几公里 | 好 | 中 |
| 光纤 | 光在玻璃纤维中传输 | 极高(Tbps 级) | 几十公里 | 极好(不受电磁干扰) | 高 |
无线介质
| 介质 | 说明 | 频率 |
|---|---|---|
| 无线电波 | 广播、通信 | 低频~高频 |
| 微波 | 卫星通信、微波接力 | 300MHz~300GHz |
| 红外线 | 遥控器、短距离 | 红外波段 |
| 蓝牙 | 短距离设备互联 | 2.4GHz |
| Wi-Fi | 无线局域网 | 2.4GHz / 5GHz / 6GHz |
3.3 双绞线分类
常见的以太网双绞线(网线):
| 类别 | 带宽 | 频率 | 典型用途 |
|---|---|---|---|
| 五类线(Cat5) | 100Mbps | 100MHz | 百兆以太网 |
| 超五类(Cat5e) | 1000Mbps | 100MHz | 千兆以太网 |
| 六类线(Cat6) | 10Gbps | 250MHz | 千兆/万兆以太网 |
| 超六类(Cat6a) | 10Gbps | 500MHz | 万兆以太网 |
| 七类线(Cat7) | 10Gbps+ | 600MHz | 万兆+ |
注意:网线有直连线和交叉线两种。现在设备基本都支持自动翻转(Auto MDI-X),不用区分了。
3.4 物理层设备
| 设备 | 工作层次 | 作用 |
|---|---|---|
| 中继器(Repeater) | 物理层 | 放大信号,延长传输距离 |
| 集线器(Hub) | 物理层 | 多端口中继器,所有端口共享带宽,广播式 |
集线器是半双工的,所有端口在一个冲突域——同一时间只能有一个设备发数据,否则会冲突。现在基本被交换机淘汰了。
四、数据链路层
4.1 数据链路层的作用
数据链路层在物理层之上,负责在相邻节点之间可靠地传输数据帧。
主要职责:
- 封装成帧:把网络层的包加上头尾,变成帧
- 物理寻址:用 MAC 地址标识节点
- 流量控制:协调收发双方的速度
- 差错控制:检测(甚至纠正)传输错误
- 介质访问控制:决定谁可以发数据
4.2 MAC 地址
MAC(Media Access Control)地址,也叫物理地址、硬件地址,是网络接口的全球唯一标识。
- 长度:48 位(6 字节),通常表示为 12 个十六进制数
- 格式:
前 24 位(厂商标识 OUI)+ 后 24 位(厂商分配的序列号) - 举例:
00:1A:2B:3C:4D:5E或00-1A-2B-3C-4D-5E
MAC 地址是烧录在网卡上的,理论上全球唯一。但可以软件修改(MAC 地址欺骗)。
查看本机 MAC 地址:
# Windows
ipconfig /all
# Linux / Mac
ifconfig
# 或
ip link show
4.3 以太网(Ethernet)
以太网是最常用的局域网技术,定义了数据链路层和物理层的标准。
以太网帧格式
┌───────┬───────┬───────┬──────┬───────┬──────┐
│ 目的MAC │ 源MAC │ 类型 │ 数据 │ FCS │ 前导码 │
│ 6字节 │ 6字节 │ 2字节 │ 46~1500│ 4字节 │ 8字节 │
└───────┴───────┴───────┴──────┴───────┴──────┘
| 字段 | 长度 | 说明 |
|---|---|---|
| 前导码 | 8 字节 | 同步时钟,让接收方准备好 |
| 目的 MAC | 6 字节 | 接收方的 MAC 地址 |
| 源 MAC | 6 字节 | 发送方的 MAC 地址 |
| 类型 | 2 字节 | 上层协议类型(0x0800=IP,0x0806=ARP) |
| 数据 | 46~1500 字节 | 上层数据(IP 包) |
| FCS | 4 字节 | 帧校验序列,CRC 校验,检测错误 |
MTU(最大传输单元)
以太网的 MTU 是 1500 字节——数据部分最大 1500 字节。
如果 IP 包超过 1500 字节,需要分片(fragmentation)。
4.4 CSMA/CD
早期共享式以太网(集线器时代)的介质访问控制方法:
CSMA/CD(Carrier Sense Multiple Access with Collision Detection)——带冲突检测的载波监听多路访问:
- 载波监听:发数据前先听,信道空闲才发
- 多路访问:多个节点共享一条信道
- 冲突检测:发的时候也听,发现冲突就停
- 随机重发:冲突后等一段随机时间再试
现在交换机时代,每个端口是独立的冲突域,CSMA/CD 用得少了。
4.5 ARP 协议
ARP(Address Resolution Protocol) 地址解析协议——用 IP 地址找 MAC 地址。
工作原理
主机 A 想给主机 B 发数据,知道 B 的 IP,但不知道 MAC:
1. A 广播 ARP 请求:"谁是 192.168.1.2?你的 MAC 是什么?"
2. 所有主机都收到,只有 B 发现是问自己的
3. B 单播 ARP 回复:"我是 192.168.1.2,我的 MAC 是 xx:xx:xx:xx:xx:xx"
4. A 收到后,把 B 的 IP-MAC 映射存入 ARP 缓存
ARP 缓存
每个主机都有 ARP 缓存表,存储 IP → MAC 的映射,有过期时间(通常几分钟)。
# 查看 ARP 缓存
arp -a # Windows / Linux / Mac
ip neigh show # Linux
免费 ARP(Gratuitous ARP)
主机自己发 ARP 请求查询自己的 IP,用来:
- 检测 IP 冲突
- 更新其他主机的 ARP 缓存
ARP 欺骗(ARP Spoofing)
攻击者发送伪造的 ARP 报文,让受害者把流量发给攻击者——中间人攻击的基础。
防御:静态 ARP、DAI(动态 ARP 检测)、端口安全。
4.6 交换机
工作原理
交换机工作在数据链路层,根据 MAC 地址转发帧。
核心机制:
1. 学习:收到帧后,把源 MAC 和端口的映射存入 MAC 地址表
2. 转发:根据目的 MAC 查找 MAC 地址表,从对应端口转发
3. 泛洪:如果目的 MAC 不在表中,从所有端口广播(除了入口)
MAC 地址表
MAC 地址 端口
──────────────────────
AA:BB:CC:DD:EE:01 Port 1
AA:BB:CC:DD:EE:02 Port 2
AA:BB:CC:DD:EE:03 Port 3
交换机 vs 集线器
| 对比项 | 集线器(Hub) | 交换机(Switch) |
|---|---|---|
| 工作层次 | 物理层 | 数据链路层 |
| 转发方式 | 广播(所有端口复制) | 根据 MAC 地址定向转发 |
| 带宽 | 所有端口共享总带宽 | 每个端口独立带宽 |
| 冲突域 | 所有端口一个冲突域 | 每个端口一个冲突域 |
| 双工模式 | 半双工 | 全双工 |
| 效率 | 低 | 高 |
简单说:集线器是"大喇叭",交换机是"快递员"。
4.7 VLAN
VLAN(Virtual Local Area Network) 虚拟局域网——把一个物理交换机逻辑上分成多个虚拟局域网。
作用
- 隔离广播域:不同 VLAN 之间不能直接通信,减少广播风暴
- 安全隔离:不同部门/业务隔离
- 灵活组网:不受物理位置限制
VLAN 类型
- 基于端口的 VLAN:最常用,把交换机端口划分到不同 VLAN
- 基于 MAC 的 VLAN:根据 MAC 地址划分
- 基于协议的 VLAN:根据协议类型划分
- 基于 IP 子网的 VLAN:根据 IP 子网划分
802.1Q 标签
VLAN 帧在以太网帧中插入一个 4 字节的 VLAN 标签(Tag):
┌───────┬───────┬──────┬───────┬───────┬──────┐
│ 目的MAC │ 源MAC │ TPID │ TCI │ 类型 │ 数据...│
│ 6字节 │ 6字节 │ 2字节 │ 2字节 │ 2字节 │ │
└───────┴───────┴──────┴───────┴───────┴──────┘
- TPID:固定 0x8100,表示这是 802.1Q 标签帧
- TCI:包含 VLAN ID(12 位,0~4095,可用 1~4094)
链路类型
- Access 链路:接入链路,连接终端,帧不带标签(untagged),只属于一个 VLAN
- Trunk 链路:干道链路,连接交换机,帧带标签(tagged),承载多个 VLAN
VLAN 之间的通信需要三层设备(路由器或三层交换机)。
五、网络层
5.1 网络层的作用
网络层负责在不同网络之间选择路径,把数据包从源送到目的。
主要职责:
- 逻辑寻址:IP 地址,标识网络中的主机
- 路由选择:选择数据包传输的最佳路径
- 分组转发:把数据包从一个网络转发到另一个网络
- 拥塞控制:网络拥塞时的处理
5.2 IP 协议
IP(Internet Protocol) 网际协议,是 TCP/IP 体系的核心协议。
特点:
- 无连接:不建立连接,每个包独立路由
- 不可靠:不保证送达,不保证顺序,不保证不重复
- 尽力而为:Best Effort,尽量送,送不到就算了
可靠性由上层(TCP)保证。
5.3 IPv4 地址
什么是 IP 地址
IP 地址是网络层的逻辑地址,用来标识网络中的主机。
- 长度:32 位(4 字节)
- 表示:点分十进制,如
192.168.1.1 - 组成:网络号 + 主机号
- 网络号:标识主机所在的网络
- 主机号:标识网络中的具体主机
分类编址(早期)
| 类别 | 第一位 | 网络号 | 主机号 | 范围 | 用途 |
|---|---|---|---|---|---|
| A 类 | 0 | 1 字节 | 3 字节 | 0.0.0.0 ~ 127.255.255.255 | 大型网络 |
| B 类 | 10 | 2 字节 | 2 字节 | 128.0.0.0 ~ 191.255.255.255 | 中型网络 |
| C 类 | 110 | 3 字节 | 1 字节 | 192.0.0.0 ~ 223.255.255.255 | 小型网络 |
| D 类 | 1110 | — | — | 224.0.0.0 ~ 239.255.255.255 | 组播 |
| E 类 | 1111 | — | — | 240.0.0.0 ~ 255.255.255.255 | 保留 |
分类编址浪费严重,现在基本不用了,改用 CIDR。
CIDR(无类别域间路由)
CIDR(Classless Inter-Domain Routing)——不再按 A/B/C 类划分,而是用子网掩码灵活划分网络。
表示方法:IP地址/前缀长度
- 前缀长度:网络号的位数
- 例如:
192.168.1.0/24表示前 24 位是网络号,后 8 位是主机号
子网掩码
子网掩码用来区分网络号和主机号——网络号部分全 1,主机号部分全 0。
| 前缀 | 子网掩码 | 可用主机数 |
|---|---|---|
| /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 |
| /27 | 255.255.255.224 | 30 |
| /28 | 255.255.255.240 | 14 |
| /29 | 255.255.255.248 | 6 |
| /30 | 255.255.255.252 | 2 |
可用主机数 = 2^主机位数 - 2(减 2 是因为网络地址和广播地址不能用)。
特殊 IP 地址
| 地址 | 说明 |
|---|---|
0.0.0.0 | 本机所有地址 / 未知地址 |
127.0.0.0/8 | 回环地址(loopback),本机访问自己 |
255.255.255.255 | 受限广播地址 |
10.0.0.0/8 | 私有地址(A 类) |
172.16.0.0/12 | 私有地址(B 类) |
192.168.0.0/16 | 私有地址(C 类) |
169.254.0.0/16 | 链路本地地址(自动配置失败时用) |
224.0.0.0/4 | 组播地址 |
私有地址
私有地址不能在公网上路由,只能在局域网内使用:
| 范围 | 数量 |
|---|---|
10.0.0.0 ~ 10.255.255.255 | 1 个 A 类网络 |
172.16.0.0 ~ 172.31.255.255 | 16 个 B 类网络 |
192.168.0.0 ~ 192.168.255.255 | 256 个 C 类网络 |
私有地址访问公网需要 NAT(网络地址转换)。
5.4 子网划分
把一个大网络划分成多个小网络(子网),提高地址利用率,隔离广播域。
方法
从主机号借几位作为子网号:
原网络:192.168.1.0/24(254 台主机)
借 2 位划分子网:
- 子网 0:192.168.1.0/26 → 192.168.1.0 ~ 192.168.1.63
- 子网 1:192.168.1.64/26 → 192.168.1.64 ~ 192.168.1.127
- 子网 2:192.168.1.128/26 → 192.168.1.128 ~ 192.168.1.191
- 子网 3:192.168.1.192/26 → 192.168.1.192 ~ 192.168.1.255
每个子网可用主机:62 台
计算方法
- 确定需要的子网数 → 计算需要借几位(2^n ≥ 子网数)
- 新的前缀长度 = 原前缀长度 + 借的位数
- 每个子网的块大小 = 2^(32 - 新前缀长度)
5.5 IPv6
为什么需要 IPv6
IPv4 地址只有 32 位,约 43 亿个,已经不够用了。IPv6 有 128 位,地址空间极大。
地址格式
- 长度:128 位(16 字节)
- 表示:冒分十六进制,8 组,每组 4 个十六进制数
- 举例:
2001:0db8:85a3:0000:0000:8a2e:0370:7334
简化规则:
1. 每组的前导 0 可以省略:2001:db8:85a3:0:0:8a2e:370:7334
2. 连续的全 0 组可以用 :: 代替(只能用一次):2001:db8:85a3::8a2e:370:7334
地址类型
| 类型 | 前缀 | 说明 |
|---|---|---|
| 单播 | — | 一对一通信 |
| 组播 | ff00::/8 | 一对多通信 |
| 任播 | — | 一对最近通信(多个接口同一地址,路由到最近的) |
| 链路本地 | fe80::/10 | 同一链路内通信 |
| 唯一本地 | fc00::/7 | 私有地址,类似 IPv4 的 192.168 |
| 回环 | ::1/128 | 类似 127.0.0.1 |
| 未指定 | ::/128 | 类似 0.0.0.0 |
5.6 IP 包头
┌───┬───┬───────┬───────────────┬───────────────────────┐
│版本│IHL│ 服务类型│ 总长度 │ 标识 │
│4位 │4位│ 8位 │ 16位 │ 16位 │
├───┴───┴───────┼───┬───────────┼───────────────────────┤
│ 标志 │ 片偏移 │ 生存时间(TTL)│ 协议 │ 头部校验和 │
│ 3位 │ 13位 │ 8位 │ 8位 │ 16位 │
├───────────────┴───────────────┴───────────────────────┤
│ 源 IP 地址(32 位) │
├───────────────────────────────────────────────────────┤
│ 目的 IP 地址(32 位) │
├───────────────────────────────────────────────────────┤
│ 选项(可选,0~40 字节) │
├───────────────────────────────────────────────────────┤
│ 数据(传输层段) │
└───────────────────────────────────────────────────────┘
关键字段:
| 字段 | 说明 |
|---|---|
| 版本 | IP 版本(4 或 6) |
| 总长度 | 整个 IP 包的长度(字节) |
| 标识/标志/片偏移 | 分片用 |
| TTL | 生存时间,每经过一个路由器减 1,到 0 就丢弃(防止环路) |
| 协议 | 上层协议(6=TCP,17=UDP,1=ICMP) |
| 源 IP | 发送方 IP |
| 目的 IP | 接收方 IP |
5.7 ICMP 协议
ICMP(Internet Control Message Protocol) 互联网控制报文协议——用来在 IP 网络中传递控制消息(错误、诊断等)。
常见 ICMP 报文:
| 类型 | 代码 | 说明 |
|---|---|---|
| 0 | 0 | Echo Reply(回显应答)—— ping 的响应 |
| 3 | 0 | Destination Unreachable(目的不可达) |
| 8 | 0 | Echo Request(回显请求)—— ping 的请求 |
| 11 | 0 | Time Exceeded(超时)—— TTL 耗尽 |
ping 命令
用 ICMP Echo Request/Reply 测试网络连通性:
ping 192.168.1.1
ping baidu.com
ping -c 4 baidu.com # 发 4 个包(Linux/Mac)
ping -n 4 baidu.com # 发 4 个包(Windows)
traceroute / tracert
用 TTL 超时机制追踪路由路径:
traceroute baidu.com # Linux / Mac
tracert baidu.com # Windows
原理:发 TTL=1 的包,第一跳路由器回 ICMP 超时;再发 TTL=2 的包,第二跳回超时... 直到到达目的地。
5.8 路由与路由器
什么是路由
路由就是选择数据包从源到目的的路径的过程。
路由器是工作在网络层的设备,负责连接不同的网络,根据路由表转发数据包。
路由表
路由器维护一张路由表,记录"去哪个网络,从哪个口走,下一跳是谁":
目标网络 子网掩码 下一跳 接口 度量值
────────────────────────────────────────────────────────────
192.168.1.0 255.255.255.0 直连 eth0 0
192.168.2.0 255.255.255.0 192.168.1.2 eth0 1
0.0.0.0 0.0.0.0 202.103.0.1 eth1 10
- 直连路由:直接相连的网络,自动学习
- 静态路由:管理员手动配置
- 动态路由:通过路由协议自动学习
最长匹配原则
当一个数据包的目的 IP 匹配路由表中的多条记录时,选择前缀最长(最具体)的那条。
例如:目的 IP 是 192.168.1.10,路由表中有:
- 192.168.1.0/24 → 下一跳 A
- 192.168.1.0/16 → 下一跳 B
选 /24 那条(更长、更具体)。
默认路由
0.0.0.0/0 是默认路由——所有不匹配的包都走这里。相当于"其他情况走默认"。
路由协议
| 类型 | 协议 | 说明 |
|---|---|---|
| 距离矢量 | RIP | 基于跳数,简单,适合小型网络 |
| 链路状态 | OSPF | 基于链路状态,复杂,适合大型网络 |
| 路径矢量 | BGP | 互联网的路由协议,基于 AS 路径 |
- IGP(内部网关协议):AS(自治系统)内部用,如 RIP、OSPF
- EGP(外部网关协议):AS 之间用,如 BGP
5.9 NAT
NAT(Network Address Translation) 网络地址转换——把私有地址转换成公网地址。
为什么需要 NAT
- 解决 IPv4 地址不足:多个私网主机共用一个公网 IP
- 安全:隐藏内部网络结构
- 灵活:内部地址变化不影响外部
NAT 类型
| 类型 | 说明 |
|---|---|
| 静态 NAT | 一个私网 IP 对应一个公网 IP(一对一) |
| 动态 NAT | 私网 IP 从公网地址池中动态分配 |
| PAT/NAPT | 端口地址转换,多个私网 IP 共用一个公网 IP,用端口区分 |
PAT(Port Address Translation)是最常用的,也是家里路由器用的方式。
工作原理(PAT)
内网主机 192.168.1.100:5000 访问 公网服务器 8.8.8.8:80
路由器做转换:
源 IP: 192.168.1.100 → 公网 IP 202.103.0.1
源端口: 5000 → 10001(路由器分配的端口)
NAT 表:
私网地址:端口 公网地址:端口
─────────────────────────────────
192.168.1.100:5000 202.103.0.1:10001
服务器响应:目的 202.103.0.1:10001
路由器查 NAT 表,转换回 192.168.1.100:5000
NAT 的问题
- 破坏了端到端原则:外部主机不能主动访问内部主机
- P2P 困难:两个都在 NAT 后面的主机无法直接连接
- 需要用**端口映射(端口转发)或NAT 穿透(STUN/TURN)**解决
5.10 DHCP
DHCP(Dynamic Host Configuration Protocol) 动态主机配置协议——自动给主机分配 IP 地址等网络配置。
工作过程(四步)
客户端 服务器
│ │
│── DHCP Discover(广播)──→ │ "谁能给我 IP?"
│ │
│←── DHCP Offer(广播)───────│ "我可以,给你 192.168.1.100"
│ │
│── DHCP Request(广播)──→ │ "我就要这个了"
│ │
│←── DHCP ACK(广播)─────────│ "确认,租期 X 小时"
│ │
记忆口诀:DORA(Discover → Offer → Request → ACK)
分配的信息
- IP 地址
- 子网掩码
- 默认网关
- DNS 服务器
- 租期(IP 的使用期限)
租期到了之前,主机会续租(renew)。
六、传输层
6.1 传输层的作用
传输层负责端到端的通信——在源主机和目的主机的进程之间提供可靠的数据传输。
网络层是主机到主机(IP 到 IP),传输层是进程到进程(端口到端口)。
主要职责:
- 进程寻址:用端口号标识进程
- 分段与重组:把应用层数据分段,接收端重组
- 可靠传输:保证数据完整、有序(TCP)
- 流量控制:发送方不要发太快,接收方处理不过来
- 拥塞控制:网络拥塞时降低发送速率
6.2 端口
端口(Port) 是传输层的地址,用来标识主机上的不同进程。
- 长度:16 位,范围 0 ~ 65535
- IP + 端口 = 唯一标识一个进程(套接字)
端口分类
| 范围 | 名称 | 说明 |
|---|---|---|
| 0 ~ 1023 | 知名端口(Well-known) | 固定分配给常用服务 |
| 1024 ~ 49151 | 注册端口(Registered) | 注册给特定服务 |
| 49152 ~ 65535 | 动态/私有端口 | 客户端临时使用 |
常用端口
| 端口 | 协议 | 服务 |
|---|---|---|
| 20 | TCP | FTP 数据端口 |
| 21 | TCP | FTP 控制端口 |
| 22 | TCP | SSH |
| 23 | TCP | Telnet |
| 25 | TCP | SMTP(发邮件) |
| 53 | UDP/TCP | DNS |
| 67/68 | UDP | DHCP |
| 80 | TCP | HTTP |
| 110 | TCP | POP3(收邮件) |
| 143 | TCP | IMAP(收邮件) |
| 443 | TCP | HTTPS |
| 3306 | TCP | MySQL |
| 6379 | TCP | Redis |
| 8080 | TCP | HTTP 代理/备用 |
6.3 TCP vs UDP
| 对比项 | TCP | UDP |
|---|---|---|
| 全称 | Transmission Control Protocol | User Datagram Protocol |
| 连接性 | 面向连接(三次握手建立) | 无连接(直接发) |
| 可靠性 | 可靠(确认、重传、排序) | 不可靠(尽力而为) |
| 顺序保证 | 保证顺序 | 不保证顺序 |
| 流量控制 | 有(滑动窗口) | 无 |
| 拥塞控制 | 有(慢启动、拥塞避免等) | 无 |
| 首部开销 | 20~60 字节 | 8 字节 |
| 速度 | 较慢 | 较快 |
| 应用场景 | 文件传输、网页、邮件 | 视频直播、游戏、DNS、语音 |
简单说:TCP 像打电话(先建立连接,可靠对话),UDP 像发短信(发了就完事,不一定收到)。
6.4 TCP 详解
TCP 特点
- 面向连接:传输前先建立连接(三次握手)
- 可靠传输:丢了重传,错了重传,保证送达
- 有序:数据按顺序交付
- 全双工:双方可以同时发数据
- 面向字节流:没有消息边界,是连续的字节流
- 流量控制:滑动窗口
- 拥塞控制:慢启动、拥塞避免、快重传、快恢复
TCP 报文段格式
┌───────────────────────────────────────────────────────┐
│ 源端口(16 位) │ 目的端口(16 位) │
├───────────────────────────────────────────────────────┤
│ 序号(Sequence Number,32 位) │
├───────────────────────────────────────────────────────┤
│ 确认号(Acknowledgment Number,32 位) │
├──────┬──────┬─────────────────────────────────────────┤
│ 数据偏移│ 保留 │ 控制位(URG/ACK/PSH/RST/SYN/FIN) │ 窗口大小 │
│ 4位 │ 6位 │ 6位 │ 16位 │
├──────┴──────┴─────────────────────────────────────────┤
│ 校验和(16 位) │ 紧急指针(16 位) │
├───────────────────────────────────────────────────────┤
│ 选项(可选,0~40 字节) │
├───────────────────────────────────────────────────────┤
│ 数据(应用层数据) │
└───────────────────────────────────────────────────────┘
关键字段:
| 字段 | 说明 |
|---|---|
| 序号(SEQ) | 本报文段数据的第一个字节的序号 |
| 确认号(ACK) | 期望收到对方下一个字节的序号 |
| SYN | 同步标志,建立连接时用 |
| FIN | 结束标志,断开连接时用 |
| ACK | 确认标志,确认号有效时置 1 |
| RST | 复位标志,异常断开 |
| 窗口大小 | 接收方的接收窗口大小,用于流量控制 |
三次握手(建立连接)
客户端 服务器
│ │
│── SYN, seq=x ─────────────→ │ SYN=1, 序号=x
│ │
│←── SYN+ACK, seq=y, ack=x+1 ──│ SYN=1, ACK=1
│ │ 序号=y, 确认号=x+1
│── ACK, seq=x+1, ack=y+1 ──→ │ ACK=1
│ │ 序号=x+1, 确认号=y+1
│ 连接建立完成 │
为什么是三次?
- 第一次:客户端告诉服务器"我能发"
- 第二次:服务器告诉客户端"我能收、我能发"
- 第三次:客户端告诉服务器"我能收"
两次不够:无法确认客户端的接收能力,也无法防止历史连接(旧的 SYN 迟到了)。
三次就够了:双方的收发能力都确认了,也能防止历史连接。
四次挥手(断开连接)
客户端 服务器
│ │
│── FIN, seq=u ─────────────→ │ 客户端说:我发完了
│ │
│←── ACK, seq=v, ack=u+1 ─────│ 服务器说:收到
│ │ (服务器可能还有数据要发)
│ │
│←── FIN, seq=w, ack=u+1 ─────│ 服务器说:我也发完了
│ │
│── ACK, seq=u+1, ack=w+1 ──→ │ 客户端说:收到
│ │
│ TIME_WAIT(2MSL) │
│ 等待后关闭 │
为什么是四次?
因为 TCP 是全双工的,关闭需要双方各关一个方向:
1. 客户端关发送方向(FIN)
2. 服务器确认(ACK)
3. 服务器关发送方向(FIN)
4. 客户端确认(ACK)
为什么 TIME_WAIT 要等 2MSL?
1. 确保最后一个 ACK 能到达对方(丢了对方会重发 FIN)
2. 让本次连接的所有报文在网络中消失,不影响下一次连接
可靠传输的实现
TCP 通过以下机制保证可靠:
- 序号 + 确认号:每个字节都有序号,收到了要确认
- 超时重传:发出去的段超时没收到确认就重传
- 校验和:检测传输错误
- 排序:乱序到达的段会按序号排好再交付
- 去重:重复的段会丢弃
滑动窗口(流量控制)
接收方在 TCP 头中告诉发送方自己的接收窗口大小——我还能收多少数据。
发送方根据接收方的窗口大小调整发送速率,不会发太快把接收方冲垮。
发送窗口:可以连续发而不需要确认的字节数
已发送且确认 已发送未确认 可发送 不可发送
───────────┼────────────┼───────┼──────────
1~100 │ 101~200 │ 201~300│ 301~...
└── 发送窗口 ─┘
拥塞控制
网络拥塞时,发送方要降低速率,避免雪上加霜。
四个核心算法:
- 慢启动(Slow Start):刚开始发得慢,指数增长(1→2→4→8...)
- 拥塞避免(Congestion Avoidance):达到阈值后,线性增长(每次加 1)
- 快重传(Fast Retransmit):收到 3 个重复 ACK 就重传,不等超时
- 快恢复(Fast Recovery):快重传后不是回到慢启动,而是减半继续
拥塞控制的目标:在不拥塞的前提下,尽量充分利用网络带宽。
6.5 UDP 详解
UDP 特点
- 无连接:发数据前不需要建立连接
- 不可靠:不保证送达,不保证顺序,不保证不重复
- 面向报文:保留消息边界,发一个就是一个
- 首部开销小:只有 8 字节
- 没有流量控制和拥塞控制:发多快都行,不管网络状况
UDP 报文格式
┌───────────────────────────────┐
│ 源端口(16 位)│ 目的端口(16 位)│
├───────────────────────────────┤
│ 长度(16 位) │ 校验和(16 位) │
├───────────────────────────────┤
│ 数据(应用层数据) │
└───────────────────────────────┘
只有 8 字节首部,非常简洁。
UDP 的适用场景
- 实时性要求高:视频直播、语音通话、在线游戏(丢一点没关系,不能卡)
- 请求-响应模式:DNS(一次请求一次响应,比建连接快)
- 广播/组播:一对多通信
- 隧道协议:VXLAN、GRE 等
UDP 虽然不可靠,但可以在应用层自己实现可靠性(如 QUIC 协议)。
6.6 套接字(Socket)
Socket(套接字) 是应用层与传输层之间的编程接口——应用程序通过 Socket 来使用传输层服务。
可以理解为:Socket 是网络编程的 API。
套接字的组成
一个套接字由 IP 地址 + 端口号 组成,唯一标识网络中的一个进程。
- TCP 套接字:四元组(源 IP、源端口、目的 IP、目的端口)唯一标识一条连接
- UDP 套接字:二元组(目的 IP、目的端口)标识目的地
TCP Socket 编程流程
服务器端 客户端
│ │
socket() socket() 创建套接字
bind() │ 绑定地址端口
listen() │ 监听
accept() │ 等待连接
│ 阻塞等待 │
│ ←────────────────────────── connect() 发起连接
│ │
read() ←────────────────────── write() 收发数据
write() ──────────────────────→ read()
│ │
close() close() 关闭
七、应用层
7.1 应用层的作用
应用层是最上层,直接为用户的应用程序提供网络服务。
每个应用层协议对应一种具体的应用:
- 浏览网页 → HTTP/HTTPS
- 文件传输 → FTP
- 发邮件 → SMTP
- 收邮件 → POP3/IMAP
- 域名解析 → DNS
- 远程登录 → SSH/Telnet
7.2 HTTP 协议
HTTP(HyperText Transfer Protocol) 超文本传输协议,是万维网(WWW)的基础协议。
特点
- 基于 TCP(HTTP/3 基于 UDP/QUIC)
- 请求-响应模式
- 无状态(每个请求独立,服务器不记录客户端状态)
- 默认端口 80
HTTP 请求结构
请求行 → 方法 路径 版本
请求头 → 键值对,每行一个
空行
请求体 → 可选,POST/PUT 等方法有
示例:
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html
Accept-Language: zh-CN
Connection: keep-alive
HTTP 响应结构
状态行 → 版本 状态码 原因短语
响应头 → 键值对,每行一个
空行
响应体 → 响应数据
示例:
HTTP/1.1 200 OK
Date: Wed, 13 Aug 2026 12:00:00 GMT
Server: Apache
Content-Type: text/html; charset=UTF-8
Content-Length: 1234
Connection: keep-alive
<html>
<body>Hello, World!</body>
</html>
HTTP 方法
| 方法 | 作用 | 幂等 | 有请求体 |
|---|---|---|---|
| GET | 获取资源 | ✓ | ✗ |
| POST | 提交数据/创建资源 | ✗ | ✓ |
| PUT | 上传/替换资源 | ✓ | ✓ |
| DELETE | 删除资源 | ✓ | ✗ |
| HEAD | 获取响应头(和 GET 一样但没有 body) | ✓ | ✗ |
| OPTIONS | 查询服务器支持的方法 | ✓ | ✗ |
| PATCH | 部分更新资源 | ✗ | ✓ |
| TRACE | 追踪请求路径 | ✓ | ✗ |
| CONNECT | 建立隧道 | ✗ | ✗ |
幂等:执行一次和执行多次的效果一样。
HTTP 状态码
| 类别 | 范围 | 说明 |
|---|---|---|
| 1xx | 100~199 | 信息性,请求已接收,继续处理 |
| 2xx | 200~299 | 成功,请求正常处理完毕 |
| 3xx | 300~399 | 重定向,需要进一步操作 |
| 4xx | 400~499 | 客户端错误,请求有问题 |
| 5xx | 500~599 | 服务器错误,服务器处理出错 |
常见状态码:
| 状态码 | 说明 |
|---|---|
| 200 OK | 成功 |
| 201 Created | 创建成功 |
| 204 No Content | 成功但没有响应体 |
| 301 Moved Permanently | 永久重定向 |
| 302 Found | 临时重定向 |
| 304 Not Modified | 未修改,用缓存 |
| 400 Bad Request | 请求格式错误 |
| 401 Unauthorized | 未认证 |
| 403 Forbidden | 禁止访问 |
| 404 Not Found | 资源不存在 |
| 405 Method Not Allowed | 方法不允许 |
| 500 Internal Server Error | 服务器内部错误 |
| 502 Bad Gateway | 网关错误 |
| 503 Service Unavailable | 服务不可用 |
| 504 Gateway Timeout | 网关超时 |
常见请求头
| 头字段 | 说明 |
|---|---|
| Host | 目标主机名(虚拟主机用) |
| User-Agent | 客户端标识(浏览器类型) |
| Accept | 能接受的内容类型 |
| Accept-Language | 能接受的语言 |
| Accept-Encoding | 能接受的编码(压缩方式) |
| Content-Type | 请求体的类型 |
| Content-Length | 请求体的长度 |
| Cookie | 客户端的 Cookie |
| Referer | 来源页面 URL |
| Authorization | 认证信息 |
| Connection | 连接方式(keep-alive / close) |
| Cache-Control | 缓存控制 |
常见响应头
| 头字段 | 说明 |
|---|---|
| Content-Type | 响应体的类型 |
| Content-Length | 响应体的长度 |
| Content-Encoding | 响应体的编码(压缩方式) |
| Set-Cookie | 设置 Cookie |
| Location | 重定向的目标 URL |
| Server | 服务器软件 |
| Date | 响应时间 |
| Cache-Control | 缓存控制 |
| ETag | 资源标识(缓存验证用) |
| Last-Modified | 最后修改时间 |
Cookie 与 Session
HTTP 是无状态的,但很多场景需要记住用户状态——用 Cookie 和 Session。
Cookie:
- 服务器通过 Set-Cookie 响应头设置
- 浏览器保存在本地
- 后续请求自动带上 Cookie 请求头
- 有过期时间、域、路径等属性
Session:
- 服务器端的会话机制
- 用 Session ID 标识(通常存在 Cookie 里)
- 服务器存储 Session 数据
Cookie 存在客户端,Session 存在服务端。
HTTP/1.1 vs HTTP/2 vs HTTP/3
| 特性 | HTTP/1.1 | HTTP/2 | HTTP/3 |
|---|---|---|---|
| 底层协议 | TCP | TCP | UDP + QUIC |
| 多路复用 | 否(队头阻塞) | 是(二进制分帧) | 是 |
| 头部压缩 | 无 | HPACK | QPACK |
| 服务器推送 | 无 | 有 | 有 |
| 握手延迟 | 1 RTT(TCP)+ TLS | 同 HTTP/1.1 | 0~1 RTT(QUIC) |
| 队头阻塞 | 有(TCP 层) | 有(TCP 层) | 无(UDP 流独立) |
7.3 HTTPS
HTTPS(HTTP Secure) = HTTP + TLS/SSL——在 HTTP 下加了一层加密。
默认端口 443。
为什么需要 HTTPS
HTTP 是明文传输,有三个问题:
1. 窃听:第三方可以看到内容
2. 篡改:第三方可以修改内容
3. 冒充:第三方可以冒充服务器
HTTPS 解决这三个问题:
1. 加密:防窃听
2. 完整性校验:防篡改
3. 身份认证:防冒充
TLS 握手过程
客户端 服务器
│ │
│── ClientHello ────────────→ │ 支持的加密套件、随机数
│ │
│←── ServerHello ─────────────│ 选定的加密套件、随机数
│←── Certificate ─────────────│ 服务器证书(含公钥)
│←── ServerHelloDone ─────────│
│ │
│── ClientKeyExchange ──────→ │ 预主密钥(用服务器公钥加密)
│── ChangeCipherSpec ───────→ │ 切换到加密通信
│── Finished ───────────────→ │ 加密的握手验证
│ │
│←── ChangeCipherSpec ─────────│
│←── Finished ─────────────────│
│ │
│ 加密的 HTTP 数据 │
简化理解:
1. 客户端说"你好,我支持这些加密方式"
2. 服务器说"你好,我们用这种方式,这是我的证书"
3. 客户端验证证书,生成密钥,用服务器公钥加密发过去
4. 双方都算出会话密钥,开始加密通信
证书与 CA
数字证书:证明"这个公钥确实属于这个域名"的电子文件。
CA(Certificate Authority):证书颁发机构,受信任的第三方。
信任链:
根 CA(内置在浏览器/系统中)
└── 中间 CA
└── 服务器证书
浏览器验证证书的过程:从服务器证书往上追溯,直到找到受信任的根 CA。
对称加密 vs 非对称加密
| 对比项 | 对称加密 | 非对称加密 |
|---|---|---|
| 密钥 | 同一个密钥加密解密 | 公钥加密,私钥解密(一对) |
| 速度 | 快 | 慢 |
| 用途 | 加密大量数据 | 加密密钥、数字签名 |
| 代表 | AES、DES | RSA、ECC |
TLS 的做法:用非对称加密交换密钥,然后用对称加密传输数据。
7.4 DNS
DNS(Domain Name System) 域名系统——把域名翻译成 IP 地址。
人好记域名(baidu.com),机器只认 IP(110.242.68.3),DNS 就是翻译官。
域名结构
域名是层级结构,从右到左:
www.baidu.com.
│ │ │ └─ 根域名(.)
│ │ └───── 顶级域名(com)
│ └────────── 二级域名(baidu)
└────────────── 三级域名(www,主机名)
DNS 解析过程
浏览器输入 baidu.com
│
├─ 浏览器缓存 → 有?直接用
│
├─ 操作系统缓存 → 有?直接用
│
├─ hosts 文件 → 有?直接用
│
└─ 本地 DNS 服务器(递归查询)
│
├─ 缓存 → 有?直接返回
│
└─ 迭代查询
├─ 根 DNS 服务器 → 返回 com 的 NS
├─ com 顶级域名服务器 → 返回 baidu.com 的 NS
└─ baidu.com 权威服务器 → 返回 IP
递归查询:我问你,你帮我查到底,把结果给我。
迭代查询:我问你,你不知道就告诉我该去问谁。
DNS 记录类型
| 类型 | 说明 |
|---|---|
| A | IPv4 地址记录 |
| AAAA | IPv6 地址记录 |
| CNAME | 别名记录,指向另一个域名 |
| MX | 邮件交换记录 |
| NS | 域名服务器记录 |
| TXT | 文本记录(验证、SPF 等) |
| PTR | 反向解析(IP → 域名) |
| SOA | 起始授权记录 |
DNS 工具
# 查询域名的 IP
nslookup baidu.com
dig baidu.com
host baidu.com
# 查询特定类型的记录
dig baidu.com MX
dig baidu.com NS
# 指定 DNS 服务器查询
dig @8.8.8.8 baidu.com
7.5 其他应用层协议
FTP
FTP(File Transfer Protocol) 文件传输协议——在客户端和服务器之间传输文件。
- 端口:21(控制)、20(主动模式数据)
- 两种模式:主动模式(PORT)、被动模式(PASV)
- 明文传输,不安全 → 用 SFTP(SSH 文件传输)或 FTPS(FTP over TLS)
SSH
SSH(Secure Shell) 安全外壳协议——加密的远程登录。
- 端口:22
- 替代不安全的 Telnet
- 基于公钥认证
- 还可以做端口转发、隧道
SMTP / POP3 / IMAP
邮件协议三件套:
| 协议 | 作用 | 端口 |
|---|---|---|
| SMTP | 发邮件 | 25 / 465(SSL)/ 587(STARTTLS) |
| POP3 | 收邮件(下载到本地) | 110 / 995(SSL) |
| IMAP | 收邮件(服务器端管理) | 143 / 993(SSL) |
SMTP 是"邮局",负责投递;POP3/IMAP 是"邮箱",负责收件。
DHCP
见第五章 5.10 节。
八、网络安全
8.1 常见攻击类型
网络层攻击
| 攻击 | 说明 | 防御 |
|---|---|---|
| IP 欺骗 | 伪造源 IP 地址 | 入站过滤、加密认证 |
| Smurf 攻击 | 利用广播放大 ICMP 流量 | 禁用广播、限速 |
| ARP 欺骗 | 伪造 ARP 报文,中间人攻击 | 静态 ARP、DAI |
传输层攻击
| 攻击 | 说明 | 防御 |
|---|---|---|
| SYN Flood | 大量 SYN 请求,占满半连接队列 | SYN Cookie、限速、防火墙 |
| UDP Flood | 大量 UDP 包,耗尽带宽 | 限速、清洗 |
| 端口扫描 | 扫描开放端口,探测服务 | 防火墙、端口隐藏 |
应用层攻击
| 攻击 | 说明 | 防御 |
|---|---|---|
| XSS | 跨站脚本,注入恶意脚本 | 输入过滤、输出编码、CSP |
| CSRF | 跨站请求伪造,冒用用户身份 | Token、SameSite Cookie、验证码 |
| SQL 注入 | 注入 SQL 语句,操作数据库 | 参数化查询、ORM、输入校验 |
| DDoS | 分布式拒绝服务,打垮服务 | 高防、CDN、流量清洗 |
| 中间人攻击 | 拦截并篡改通信内容 | HTTPS、证书验证 |
| 暴力破解 | 穷举密码 | 限速、锁定、强密码、MFA |
8.2 防火墙
防火墙是网络安全设备,根据规则控制进出网络的流量。
分类
| 类型 | 工作层次 | 说明 |
|---|---|---|
| 包过滤防火墙 | 网络层 | 根据 IP、端口、协议过滤 |
| 状态检测防火墙 | 传输层 | 跟踪连接状态,只放行合法的响应 |
| 应用层防火墙 | 应用层 | 理解应用协议(如 WAF) |
防火墙规则
通常是五元组过滤:
| 字段 | 说明 |
|---|---|
| 源 IP | 来源地址 |
| 目的 IP | 目标地址 |
| 源端口 | 来源端口 |
| 目的端口 | 目标端口 |
| 协议 | TCP / UDP / ICMP 等 |
动作:允许(Accept) 或 拒绝(Drop/Reject)
8.3 VPN
VPN(Virtual Private Network) 虚拟专用网络——在公网上建立加密的专用通道。
作用
- 远程访问:在家访问公司内网
- 安全传输:公网传输加密,防窃听
- 突破限制:访问受限网络
- 隐藏 IP:隐藏真实 IP 地址
常见类型
| 类型 | 说明 |
|---|---|
| IPsec VPN | 网络层 VPN,站点到站点 |
| SSL VPN | 应用层 VPN,浏览器即可用 |
| OpenVPN | 开源 VPN,SSL/TLS 加密 |
| WireGuard | 现代 VPN,轻量高效 |
| PPTP / L2TP | 老式 VPN,安全性差 |
8.4 加密与认证
对称加密
- 同一个密钥加密和解密
- 速度快,适合大量数据
- 代表:AES、DES、3DES、ChaCha20
非对称加密
- 公钥加密,私钥解密(一对密钥)
- 速度慢,适合加密小数据(如密钥)
- 代表:RSA、ECC、ElGamal
哈希函数
- 任意长度输入 → 固定长度输出
- 单向:无法从输出反推输入
- 碰撞:不同输入可能有相同输出(好的哈希函数很难碰撞)
- 代表:MD5(已不安全)、SHA-1(已不安全)、SHA-256、SHA-3
数字签名
用私钥签名,公钥验证——保证数据的完整性和来源真实性。
过程:
1. 发送方对数据做哈希,用私钥加密哈希值 → 签名
2. 接收方用公钥解密签名得到哈希,对数据做哈希
3. 两个哈希一致 → 数据完整且来自声称的发送方
九、网络设备
9.1 设备总览
| 设备 | 工作层次 | 主要功能 |
|---|---|---|
| 中继器 | 物理层 | 放大信号,延长距离 |
| 集线器(Hub) | 物理层 | 多端口中继器,广播式 |
| 网桥 | 数据链路层 | 连接两个网段,隔离冲突域 |
| 交换机(Switch) | 数据链路层 | 根据 MAC 转发,隔离冲突域 |
| 三层交换机 | 网络层 | 交换 + 路由,VLAN 间路由 |
| 路由器(Router) | 网络层 | 根据 IP 转发,隔离广播域 |
| 防火墙 | 网络层/应用层 | 安全过滤,访问控制 |
| 负载均衡器 | 传输层/应用层 | 分发流量到多台服务器 |
| 网关 | 传输层以上 | 协议转换 |
9.2 交换机 vs 路由器
| 对比项 | 交换机 | 路由器 |
|---|---|---|
| 工作层次 | 数据链路层 | 网络层 |
| 寻址依据 | MAC 地址 | IP 地址 |
| 功能 | 同一网络内转发 | 不同网络间转发 |
| 隔离 | 隔离冲突域 | 隔离广播域 |
| 速度 | 快(硬件转发) | 相对慢 |
| 接口 | 以太网口 | 各种类型接口 |
简单说:交换机管内网,路由器管外网。
9.3 网关
网关(Gateway) 是网络的出口——不同网络之间的出入口。
- 默认网关:主机发往外网的数据包都发给默认网关
- 网关可以是路由器、三层交换机、防火墙等
9.4 负载均衡
负载均衡(Load Balancing) 把流量分发到多台服务器,提高可用性和性能。
四层负载均衡
- 工作在传输层
- 根据 IP + 端口分发
- 速度快
- 代表:LVS、F5
七层负载均衡
- 工作在应用层
- 根据 URL、Host、Header 等分发
- 更灵活
- 代表:Nginx、HAProxy
常用算法
| 算法 | 说明 |
|---|---|
| 轮询 | 按顺序轮流分配 |
| 加权轮询 | 按权重分配(性能好的多分配) |
| 随机 | 随机分配 |
| 最少连接 | 分配给当前连接数最少的 |
| IP 哈希 | 根据源 IP 哈希,同一 IP 总是到同一台 |
| URL 哈希 | 根据 URL 哈希(七层) |
十、网络调试工具
10.1 查看网络配置
# Windows
ipconfig
ipconfig /all
# Linux
ifconfig # 老式
ip addr show # 新式
ip link show
# Mac
ifconfig
10.2 测试连通性
# ping:测试连通性和延迟
ping 192.168.1.1
ping baidu.com
ping -c 4 baidu.com # Linux/Mac:发 4 个包
ping -n 4 baidu.com # Windows:发 4 个包
# traceroute / tracert:追踪路由路径
traceroute baidu.com # Linux/Mac
tracert baidu.com # Windows
# mtr:ping + traceroute 结合
mtr baidu.com
10.3 查看端口与连接
# netstat:查看网络连接、端口
netstat -an # 所有连接
netstat -tlnp # Linux:TCP 监听端口 + 进程
netstat -ano # Windows:所有连接 + PID
# ss:Linux 新式工具,替代 netstat
ss -tlnp # TCP 监听端口
ss -s # 连接统计
# lsof:查看打开的文件(含网络连接)
lsof -i :80 # 查看 80 端口被谁占用
lsof -i TCP # 所有 TCP 连接
# Windows 查看端口占用
netstat -ano | findstr :8080
tasklist | findstr PID
10.4 DNS 工具
# nslookup
nslookup baidu.com
nslookup -type=MX baidu.com
nslookup baidu.com 8.8.8.8 # 指定 DNS 服务器
# dig(Linux/Mac)
dig baidu.com
dig baidu.com MX
dig @8.8.8.8 baidu.com
dig +trace baidu.com # 追踪解析过程
# host
host baidu.com
10.5 抓包工具
tcpdump(命令行)
# 抓取所有网卡的包
tcpdump -i any
# 抓取指定网卡
tcpdump -i eth0
# 抓取指定主机
tcpdump host 192.168.1.1
# 抓取指定端口
tcpdump port 80
tcpdump port 80 or 443
# 抓取指定协议
tcpdump icmp
tcpdump tcp
# 组合条件
tcpdump -i eth0 src host 192.168.1.1 and dst port 80
# 保存到文件
tcpdump -w capture.pcap
# 从文件读取
tcpdump -r capture.pcap
Wireshark(图形化)
最流行的图形化抓包分析工具:
- 支持各种协议的解析
- 强大的过滤语法
- 图形化的分析界面
- 跨平台(Windows / Linux / Mac)
常用过滤表达式:
ip.addr == 192.168.1.1 # 指定 IP
tcp.port == 80 # 指定 TCP 端口
http # HTTP 协议
dns # DNS 协议
tcp.flags.syn == 1 # SYN 包
10.6 HTTP 调试
# curl:命令行 HTTP 客户端
curl https://baidu.com
curl -v https://baidu.com # 详细输出
curl -I https://baidu.com # 只看响应头
curl -X POST -d "key=value" url # POST 请求
curl -H "Content-Type: application/json" -d '{}' url # 自定义头
# wget:下载工具
wget https://example.com/file.zip
wget -c https://example.com/file.zip # 断点续传
10.7 其他工具
| 工具 | 用途 |
|---|---|
| telnet | 测试端口连通性(telnet host port) |
| nc / netcat | 网络瑞士军刀,端口测试、传输文件等 |
| iperf | 网络带宽测试 |
| speedtest-cli | 命令行测速 |
| arp | 查看 ARP 缓存 |
| route / ip route | 查看路由表 |
| nmap | 端口扫描、网络探测 |
附录
A. 常用端口速查表
| 端口 | 协议 | 服务 |
|---|---|---|
| 20 | TCP | FTP 数据 |
| 21 | TCP | FTP 控制 |
| 22 | TCP | SSH |
| 23 | TCP | Telnet |
| 25 | TCP | SMTP |
| 53 | UDP/TCP | DNS |
| 67/68 | UDP | DHCP |
| 80 | TCP | HTTP |
| 110 | TCP | POP3 |
| 143 | TCP | IMAP |
| 443 | TCP | HTTPS |
| 465 | TCP | SMTPS |
| 993 | TCP | IMAPS |
| 995 | TCP | POP3S |
| 3306 | TCP | MySQL |
| 5432 | TCP | PostgreSQL |
| 6379 | TCP | Redis |
| 27017 | TCP | MongoDB |
| 8080 | TCP | HTTP 代理/备用 |
| 8443 | TCP | HTTPS 备用 |
B. OSI 各层设备与协议
| 层 | 协议 | 设备 |
|---|---|---|
| 应用层 | HTTP、FTP、DNS、SMTP、SSH | 网关、防火墙、负载均衡 |
| 表示层 | SSL/TLS、JPEG、ASCII | — |
| 会话层 | RPC、NetBIOS | — |
| 传输层 | TCP、UDP | 四层负载均衡、防火墙 |
| 网络层 | IP、ICMP、ARP、OSPF、BGP | 路由器、三层交换机 |
| 数据链路层 | Ethernet、PPP、VLAN | 交换机、网桥、网卡 |
| 物理层 | — | 中继器、集线器、网线、光纤 |
C. 参考资源
- 《计算机网络》 —— 谢希仁,国内经典教材
- 《计算机网络:自顶向下方法》 —— Kurose & Ross,国外经典
- 《TCP/IP 详解》 —— W. Richard Stevens,TCP/IP 圣经
- 《图解 HTTP》 —— 上野宣,HTTP 入门好书
- Wireshark 官网 —— https://www.wireshark.org/
- Mozilla MDN 网络文档 —— https://developer.mozilla.org/zh-CN/docs/Web/HTTP