网络技术手册

一、网络基础概念

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:5E00-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)——带冲突检测的载波监听多路访问:

  1. 载波监听:发数据前先听,信道空闲才发
  2. 多路访问:多个节点共享一条信道
  3. 冲突检测:发的时候也听,发现冲突就停
  4. 随机重发:冲突后等一段随机时间再试

现在交换机时代,每个端口是独立的冲突域,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 台

计算方法

  1. 确定需要的子网数 → 计算需要借几位(2^n ≥ 子网数)
  2. 新的前缀长度 = 原前缀长度 + 借的位数
  3. 每个子网的块大小 = 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
  │      连接建立完成              │

为什么是三次?

  1. 第一次:客户端告诉服务器"我能发"
  2. 第二次:服务器告诉客户端"我能收、我能发"
  3. 第三次:客户端告诉服务器"我能收"

两次不够:无法确认客户端的接收能力,也无法防止历史连接(旧的 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 通过以下机制保证可靠:

  1. 序号 + 确认号:每个字节都有序号,收到了要确认
  2. 超时重传:发出去的段超时没收到确认就重传
  3. 校验和:检测传输错误
  4. 排序:乱序到达的段会按序号排好再交付
  5. 去重:重复的段会丢弃

滑动窗口(流量控制)

接收方在 TCP 头中告诉发送方自己的接收窗口大小——我还能收多少数据。

发送方根据接收方的窗口大小调整发送速率,不会发太快把接收方冲垮。

发送窗口:可以连续发而不需要确认的字节数

已发送且确认  已发送未确认  可发送  不可发送
───────────┼────────────┼───────┼──────────
  1~100    │  101~200   │ 201~300│ 301~...
           └── 发送窗口 ─┘

拥塞控制

网络拥塞时,发送方要降低速率,避免雪上加霜。

四个核心算法:

  1. 慢启动(Slow Start):刚开始发得慢,指数增长(1→2→4→8...)
  2. 拥塞避免(Congestion Avoidance):达到阈值后,线性增长(每次加 1)
  3. 快重传(Fast Retransmit):收到 3 个重复 ACK 就重传,不等超时
  4. 快恢复(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