网络模型
→ 返回 计算机网络
网络模型用分层思想把复杂的网络通信拆解为独立的职责层,每层只与相邻层交互,降低耦合、便于实现和替换。
OSI 七层模型
OSI(Open Systems Interconnection)是 ISO 制定的参考模型,理论完整但实际使用较少,主要用于学习和排障时的概念定位。
| 层级 | 名称 | PDU | 主要协议 / 设备 | 核心职责 |
|---|---|---|---|---|
| 7 | 应用层 | 数据(Data) | HTTP、HTTPS、DNS、FTP、SMTP、SSH | 为应用程序提供网络服务接口 |
| 6 | 表示层 | 数据(Data) | TLS/SSL、JPEG、ASCII、UTF-8 | 数据格式转换、加解密、压缩 |
| 5 | 会话层 | 数据(Data) | NetBIOS、RPC、PPTP | 建立、维护、同步会话(对话控制) |
| 4 | 传输层 | 报文段(Segment)/ 数据报(Datagram) | TCP、UDP | 端到端可靠传输,端口寻址,流量/拥塞控制 |
| 3 | 网络层 | 数据包(Packet) | IP、ICMP、OSPF、BGP、路由器 | 逻辑寻址(IP),路由选择,跨网段转发 |
| 2 | 数据链路层 | 帧(Frame) | Ethernet、802.11、MAC、交换机 | 相邻节点间帧传输,MAC 寻址,差错检测(FCS) |
| 1 | 物理层 | 比特(Bit) | 网线、光纤、Hub、网卡 | 比特流的物理传输,信号编码与调制 |
PDU(Protocol Data Unit):各层数据的称呼。数据向下封装时名称随之改变。
TCP/IP 四层模型
实际互联网使用的模型,是 OSI 的工程化简化版,由 ARPANET 演化而来:
| 层级 | 名称 | 对应 OSI 层 | 主要协议 |
|---|---|---|---|
| 4 | 应用层 | 5 + 6 + 7 | HTTP/HTTPS、DNS、SMTP、FTP、SSH、WebSocket |
| 3 | 传输层 | 4 | TCP、UDP、QUIC |
| 2 | 网络层(网际层) | 3 | IPv4、IPv6、ICMP、ARP |
| 1 | 网络接口层 | 1 + 2 | Ethernet、Wi-Fi(802.11)、PPP |
OSI vs TCP/IP
| 维度 | OSI | TCP/IP |
|---|---|---|
| 层数 | 7 层 | 4 层 |
| 定位 | 理论参考模型 | 实际实现标准 |
| 表示/会话层 | 独立分层 | 合并进应用层 |
| 先有协议还是模型 | 先有模型再设计协议 | 先有协议(TCP/IP)再归纳模型 |
| 实际使用 | 排障概念框架 | 互联网实际运行 |
数据封装与解封装
数据从发送方应用层向下逐层封装头部(和尾部),经网络传输,接收方从底层向上逐层剥除,最终交给应用:
发送方(浏览器发 HTTP 请求):
应用层 [HTTP Header | HTTP Body]
↓ 加 TCP 头
传输层 [TCP Header | HTTP Header | HTTP Body] ← Segment
↓ 加 IP 头
网络层 [IP Header | TCP Header | HTTP Header | Body] ← Packet
↓ 加以太网帧头+尾
数据链路层 [ETH Header | IP Header | TCP | HTTP | Body | FCS] ← Frame
↓ 转换为电/光信号
物理层 0101011001... ← Bits
接收方(服务器)逆序剥除各层头部,直到应用层得到 HTTP 数据
帧格式(以太网 Ethernet II)
7B 1B 6B 6B 2B 46~1500B 4B
┌─────────┬──────┬───────┬───────┬──────────┬──────────┬─────┐
│Preamble │ SFD │目标MAC│源 MAC │EtherType │ Payload │ FCS │
└─────────┴──────┴───────┴───────┴──────────┴──────────┴─────┘
前导码 帧起始 0x0800=IP 帧校验序列
0x0806=ARP
0x86DD=IPv6
IP 数据包格式(IPv4 头部,20字节固定+可选)
4bit 4bit 8bit 16bit
┌──────┬──────┬──────────┬───────────────────────┐
│版本 │首部长│服务类型DS│ 总长度 │
├──────┴──────┴──────────┼───────────┬───────────┤
│ 标识 │ 标志 │ 片偏移 │
├─────────────────────────┼───────────┼───────────┤
│ TTL(生存时间) │ 协议 │ 首部校验和 │
├─────────────────────────┴───────────┴───────────┤
│ 源 IP 地址 │
├──────────────────────────────────────────────────┤
│ 目标 IP 地址 │
└──────────────────────────────────────────────────┘
TTL(Time To Live):每经过一台路由器减 1,归零则丢弃并回 ICMP 超时,防止包在网络中无限循环。traceroute 正是利用 TTL 逐跳递增来探测路径。
各层关键设备
| 设备 | 工作层 | 寻址依据 | 说明 |
|---|---|---|---|
| Hub(集线器) | L1 物理层 | 无 | 广播所有端口,已淘汰 |
| 交换机(Switch) | L2 数据链路层 | MAC 地址 | 精准转发帧,支持 VLAN |
| 三层交换机 | L2+L3 | MAC + IP | 硬件加速的路由器+交换机 |
| Router(路由器) | L3 网络层 | IP 地址 | 跨网段转发,连接不同网络 |
| 防火墙 | L3~L7 | IP/端口/内容 | 包过滤、状态跟踪、应用检测 |
| 负载均衡器 | L4 或 L7 | IP+端口 / HTTP | 分发流量到后端集群 |
| WAF | L7 应用层 | HTTP 内容 | 过滤恶意 Web 请求 |
| 代理(Proxy) | L7 | HTTP/HTTPS | 正向/反向代理,缓存加速 |
端口号(传输层)
端口号(0~65535)是传输层用来区分同一主机上不同应用进程的标识:
| 范围 | 类型 | 说明 |
|---|---|---|
| 0~1023 | 熟知端口 | 由 IANA 分配给标准服务 |
| 1024~49151 | 注册端口 | 常用应用程序 |
| 49152~65535 | 动态/私有端口 | 客户端临时使用 |
| 端口 | 协议 | 应用 |
|---|---|---|
| 20/21 | TCP | FTP(数据/控制) |
| 22 | TCP | SSH |
| 25 | TCP | SMTP |
| 53 | UDP/TCP | DNS |
| 80 | TCP | HTTP |
| 443 | TCP | HTTPS |
| 3306 | TCP | MySQL |
| 5432 | TCP | PostgreSQL |
| 6379 | TCP | Redis |
| 27017 | TCP | MongoDB |
一次 HTTP 请求的完整层次旅程
以浏览器访问 https://example.com/api 为例:
浏览器
[应用层] 构造 HTTP GET 请求报文
[传输层] 加 TCP 头(源端口:随机, 目标端口:443)
[网络层] 加 IP 头(源IP:本机, 目标IP:DNS解析结果)
[链路层] 加以太网帧(源MAC:本机网卡, 目标MAC:网关MAC)
[物理层] 转为电信号发往网线
↓
默认网关(路由器)
[链路层] 收帧,剥以太网头
[网络层] 查路由表,决定下一跳
[链路层] 重新封装以太网帧(目标MAC换为下一跳路由器MAC)
[物理层] 转发
↓
…经过若干路由器…
↓
服务器
[物理层] 收到比特流
[链路层] 还原帧,校验 FCS
[网络层] 还原 IP 包,检查目标 IP 是否本机
[传输层] 还原 TCP 段,交给监听 443 端口的进程
[应用层] TLS 解密 → Nginx / Spring Boot 处理 HTTP 请求
网络分层的意义
替换自由:Wi-Fi 换成有线,应用层无需感知
独立演进:HTTP/2 升级不影响 TCP 层
故障隔离:ping 通但网页打不开 → L3 正常,L7 故障
标准互操作:不同厂商设备只要遵循同层协议即可互通