网络模型
网络模型把一次通信按职责分成几层:应用决定要交换什么内容,传输层组织端到端的数据传送,网络层选择跨网络的下一跳,链路层完成当前链路上的传输。
理解分层,重点是能沿着一次请求说清每层做了什么、设备能读到哪些信息。这样才能解释数据经过路由器时哪些地址会变,以及为什么按 HTTP 路径分流需要七层负载均衡。
1. 面试核心
先记住这几条,再读正文- OSI 分为七层,TCP/IP 常分为四层;TCP/IP 的应用层涵盖 OSI 应用、表示和会话三层的职责,两种模型按职责近似对应。卡 · OSI 七层模型
- 发送数据时,TCP 段封装进 IP 包,IP 包再封装进链路帧;接收端按相反方向解析。
- IP 负责跨网络转发,链路层负责当前链路上的传输。路由器会为下一跳重新封装链路帧;没有 NAT 时,源和目标 IP 保持不变。卡 · 层级之间的交互
- 四层负载均衡使用地址、端口等传输信息;七层负载均衡解析应用协议,因此能按 HTTP 路径选择后端。
2. 概述
2.1 网络模型的作用
分层让上层直接使用下层提供的能力,不必自己完成整条通信链路。例如,HTTP 需要发送消息,可以使用 TCP 提供的字节流,不必自己处理丢包重传。
这里要分清两个概念:协议约定通信双方怎样理解同一层的数据,例如两端都按 TCP 规则解释序列号;接口约定同一台主机内,相邻层怎样调用和交付数据。协议连接的是通信双方,接口连接的是本机的不同层。
2.2 OSI 与 TCP/IP 模型
OSI 是描述通信职责的七层参考模型,TCP/IP 模型则按互联网协议族划分层次。两者可以按职责近似对应,但不要求实际软件也拆成同样数量的模块。
3. OSI 七层模型
3.1 OSI 模型的设计原则
OSI 的每一层承担一组职责,并把能力通过接口交给上一层使用。这样可以分别讨论数据表示、可靠传输、寻址等问题。它描述的是功能分工,具体实现可以在同一个模块里完成多个层级的工作。
3.2 OSI 各层
| 层级 | 职责 |
|---|---|
| 7 应用层 | 向应用提供通信服务,例如请求与响应。 |
| 6 表示层 | 处理数据表示、编码和语法转换。 |
| 5 会话层 | 管理对话、同步点与恢复。 |
| 4 传输层 | 提供端到端传输服务。 |
| 3 网络层 | 处理逻辑寻址与跨网络转发。 |
| 2 数据链路层 | 在相邻节点之间组织和传输帧。 |
| 1 物理层 | 通过电、光或无线信号传送比特。 |
表里的「表示」指数据怎样编码、双方怎样理解同一份数据,不是页面怎样显示;「会话」指通信对话的管理,也不能直接等同于 Web 登录后的 Session。TCP/IP 模型把这些职责归入应用层,由应用协议和程序自行组织。
3.3 OSI 模型示意图

作者 MrsValdry,CC BY-SA 3.0,https://commons.wikimedia.org/w/index.php?curid=16941456
4. TCP/IP 四层模型
4.1 TCP/IP 模型的来源
TCP/IP 四层模型按应用、传输、网络和链路划分通信职责,RFC 1122 也按这些层次组织互联网主机要求。教学中还会看到五层模型,它把四层模型中的链路部分进一步拆成数据链路层和物理层,便于分别讨论帧和信号。
4.2 TCP/IP 各层
| TCP/IP 层 | 协议或功能 | OSI 的近似对应 |
|---|---|---|
| 应用层 | HTTP、DNS 等应用协议。 | 应用、表示、会话层。 |
| 传输层 | TCP 字节流和 UDP 数据报。 | 传输层。 |
| 网络层 | IP 寻址、路由和 ICMP。 | 网络层。 |
| 链路层 | 当前链路的访问与传输。 | 数据链路、物理层。 |
4.3 TCP/IP 模型示意图

4.4 层级之间的交互
封装是把上层交下来的数据作为本层的负载,再加上本层需要的控制信息。例如,HTTP/1.1 消息通过 TCP 发送时,TCP 把字节组织成段,IP 再把 TCP 段作为自己的负载:
HTTP 消息
→ TCP 头 + TCP 数据
→ IP 头 + IP 负载
→ 以太网头 + IP 包 + 帧校验序列
每一层增加的信息都有用途:TCP 头帮助接收端确认和排序字节,IP 头提供寻址信息,以太网头说明当前链路上交给谁。以太网还增加帧尾校验,所以封装不只是添加头部。物理层最后把这些比特编码成电、光或无线信号。
接收端做相反的事:解析链路帧,取出 IP 包,再按包里的协议字段交给 TCP,最终把收到的字节交给应用。这一过程叫解封装。

作者 en:User:Cburnett original work, colorization by en:User:Kbrose,CC BY-SA 3.0,https://commons.wikimedia.org/w/index.php?curid=1546338
5. 逐跳处理与设备分工
二层交换机主要看帧中的目标 MAC 地址,按 MAC 转发表决定从哪个端口发出。路由器则取出 IP 包,根据目标 IP 选下一跳,再为下一段链路重新封装帧。
例如,主机把发往远端服务器的包先交给网关,当前帧的目标 MAC 是网关,而 IP 包里的目标地址仍是服务器。网关继续转发时,帧中的链路地址会换成下一跳对应的地址;未发生 NAT 时,源和目标 IP 不变,TTL 或 Hop Limit 则随路由转发递减。下一跳的地址怎样获得,见 IP。
设备名称只描述主要功能。支持三层路由的交换机也能转发 IP 包,所以判断设备处理哪一层,要看实际启用了什么功能。
6. 四层与七层负载均衡
四层负载均衡依据 IP、端口和传输连接信息分配流量;七层负载均衡还会解析 HTTP 等应用协议,可以根据 Host、路径和请求头选择后端。例如,把 /orders 转给订单服务、把 /users 转给用户服务,需要读取 HTTP 路径。
对于 HTTPS,代理必须先终止 TLS,也就是由它完成 TLS 握手并解密,才能读到路径。如果只是把 TLS 流量原样转发给后端,代理就读不到加密后的 HTTP 内容。部分代理可以预读 TLS 握手中的 SNI(目标服务器名称),但这不等于已经能读到 HTTP 路径。
七层代理也能按客户端 IP 制定规则,因此仅凭「按来源路由」不能判断它属于四层。区别在于是否解析应用协议,以及按什么信息决定转发。七层代理可以进一步做鉴权、请求重写和应用指标统计,代价是解析协议并维护两端连接。
7 · 面试题卡片
本页题目与参考回答
7.1 OSI 与 TCP/IP 模型如何对应,四层和七层负载均衡怎样区分
考察重点
- 两种分层模型的职责与近似映射。
- 封装、解封装和同层协议字段。
- 四层与七层负载均衡可读取的信息和适用场景。
参考回答
TCP/IP 应用层对应 OSI 的上三层职责,链路层涵盖数据链路和物理传输;四层与七层负载均衡的区别在于是否解析应用协议。
OSI 的传输层、网络层分别与 TCP/IP 的同名层近似对应。这是职责上的对应,不要求实现也按层一一拆分。
四层负载均衡依据地址、端口和传输状态分配流量;七层负载均衡能读取 HTTP 等应用协议,因此可以按路径选择后端。七层也能使用客户端 IP,不能仅凭来源规则判断层级。HTTPS 的路径经过加密,代理需要先终止 TLS 才能读取。
7.2 数据经过路由器时,哪些封装信息会变化?
考察重点:帧封装、网络转发与端到端地址。
参考回答
链路封装会按下一跳重新生成,TTL 或 Hop Limit 递减;没有 NAT 时,源和目标 IP 保持不变。
路由器先移除收到的链路封装,根据 IP 包里的目标地址查路由表,再用下一跳的链路地址封装新帧。因此,下一跳会变,数据报最终要去的 IP 地址不会随每次路由转发一起改变。
8. 参考资料
- RFC 1122:Requirements for Internet Hosts
- ISO/IEC 7498-1:OSI Basic Reference Model
- ITU-T X.200:OSI Basic Reference Model
- NGINX:HTTP Load Balancing
- NGINX:TCP and UDP Load Balancing
来源:Coding 101 原文 · 免费阅读,引用请保留出处。内容使用说明