跳到主要内容

网络模型

网络模型把一次通信按职责分成几层:应用决定要交换什么内容,传输层组织端到端的数据传送,网络层选择跨网络的下一跳,链路层完成当前链路上的传输。

理解分层,重点是能沿着一次请求说清每层做了什么、设备能读到哪些信息。这样才能解释数据经过路由器时哪些地址会变,以及为什么按 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 模型示意图​

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 模型示意图​

TCP/IP 四层模型示意图

4.4 层级之间的交互​

封装是把上层交下来的数据作为本层的负载,再加上本层需要的控制信息。例如,HTTP/1.1 消息通过 TCP 发送时,TCP 把字节组织成段,IP 再把 TCP 段作为自己的负载:

HTTP 消息
→ TCP 头 + TCP 数据
→ IP 头 + IP 负载
→ 以太网头 + IP 包 + 帧校验序列

每一层增加的信息都有用途:TCP 头帮助接收端确认和排序字节,IP 头提供寻址信息,以太网头说明当前链路上交给谁。以太网还增加帧尾校验,所以封装不只是添加头部。物理层最后把这些比特编码成电、光或无线信号。

接收端做相反的事:解析链路帧,取出 IP 包,再按包里的协议字段交给 TCP,最终把收到的字节交给应用。这一过程叫解封装。

TCP/IP 模型层级交互示意图

作者 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 · 面试题卡片​

先想答案,再翻面先在心里答一遍,再点开卡片对照参考回答。卡片之间可以左右切换,看完会回到这里。
逐张翻看 2 张 →
未标记的卡读完后明天进入复习;已标记的按状态安排
本页题目与参考回答

7.1 OSI 与 TCP/IP 模型如何对应,四层和七层负载均衡怎样区分​

考察重点

  • 两种分层模型的职责与近似映射。
  • 封装、解封装和同层协议字段。
  • 四层与七层负载均衡可读取的信息和适用场景。

相关内容:OSI 七层模型至四层与七层负载均衡。

参考回答

TCP/IP 应用层对应 OSI 的上三层职责,链路层涵盖数据链路和物理传输;四层与七层负载均衡的区别在于是否解析应用协议。

OSI 的传输层、网络层分别与 TCP/IP 的同名层近似对应。这是职责上的对应,不要求实现也按层一一拆分。

四层负载均衡依据地址、端口和传输状态分配流量;七层负载均衡能读取 HTTP 等应用协议,因此可以按路径选择后端。七层也能使用客户端 IP,不能仅凭来源规则判断层级。HTTPS 的路径经过加密,代理需要先终止 TLS 才能读取。

7.2 数据经过路由器时,哪些封装信息会变化?​

考察重点:帧封装、网络转发与端到端地址。

相关内容:层级之间的交互、逐跳处理与设备分工。

参考回答

链路封装会按下一跳重新生成,TTL 或 Hop Limit 递减;没有 NAT 时,源和目标 IP 保持不变。

路由器先移除收到的链路封装,根据 IP 包里的目标地址查路由表,再用下一跳的链路地址封装新帧。因此,下一跳会变,数据报最终要去的 IP 地址不会随每次路由转发一起改变。

8. 参考资料​

来源:Coding 101 原文 · 免费阅读,引用请保留出处。内容使用说明