目录

网络-01 网络分层模型

本文是网络系列的第一篇。整个系列自底向上展开:先讲清每一层负责什么,再逐层深入到链路层、网络层、传输层、应用层。 如果你想先看一个请求从头到尾发生了什么,可以从 网络-00 一个请求的完整旅程 开始——那篇是全系列的地图和考点索引。

1. 网络分层

./网络分层图.png

在OSI七层模型中,每一层的作用和对应的协议如下:

./网络分层及代表协议.png

我们都知道数据从应用层发下来,会在每一层都会加上头部信息,进行封装,然后再发送到数据接收端。接收端的操作就刚好与此相反,它是一层一层剥数据的过程。 每个数据都会经过数据的封装和解封装的过程。

  • 第7层 应用层 应用层(Application Layer)提供为应用软件而设的接口,以设置与另一应用软件之间的通信。例如: HTTP,HTTPS,FTP,TELNET,SSH,SMTP,POP3.HTML.等。

  • 第6层 表示层 表示层(Presentation Layer)把数据转换为能与接收者的系统格式兼容并适合传输的格式。在传输之前是否进行加密或压缩处理。

  • 第5层 会话层 会话层(Session Layer)负责在数据传输中设置和维护计算机网络中两台计算机之间的通信连接,包括会话的建立、管理与终止。

  • 第4层 传输层 传输层(Transport Layer)把传输表头(TH)加至数据以形成数据包。传输表头包含了所使用的协议等发送信息。例如:传输控制协议(TCP)等。udp并不能保证可靠传输,这个时候就要依赖应用层来保证了。

  • 第3层 网络层 网络层(Network Layer)决定数据的路径选择和转寄,将网络表头(NH)加至数据包,以形成报文。网络表头包含了网络数据。例如:互联网协议(IP)等。负责规划最佳路径,规划IP地址。网络层并不能保证成功传输。 整个包最大65535字节。

  • 第2层 数据链路层 数据链路层(Data Link Layer)负责网络寻址、错误侦测和改错。当表头和表尾被加至数据包时,会形成帧。帧的开始和结束,透明传输,差错校验(但不能纠错,纠错由传输层)。 分为两个子层:逻辑链路控制(logical link control,LLC)子层和介质访问控制(Medium access control,MAC)子层。 以太网帧的载荷最大 1500 字节,这个上限就是 MTU(算上帧头和帧尾 FCS,整个帧最大 1518 字节)。IP 数据报超过 MTU 时由网络层负责分片(注意分片动作发生在 IP 层,不是链路层)。IP 首部里的"标识"字段用于重组:同一个 IP 数据报分出来的各个片,标识值是相同的。详见 网络-04 MTU 与 MSS

  • 第1层 物理层 物理层(Physical Layer)在局部局域网上传送数据帧(data frame),它负责管理计算机通信设备和网络媒体之间的互通。包括了针脚、电压、线缆规范、集线器、中继器、网卡、主机接口卡等。

2. TCP/IP 四层模型

OSI 七层是理论模型,实际工程里用的是 TCP/IP 四层模型——它才是互联网真正的实现。两者的对应关系:

OSI 七层 TCP/IP 四层 典型协议 数据单位 设备
应用层 / 表示层 / 会话层 应用层 HTTP、DNS、SSH、SMTP 报文(Message)
传输层 传输层 TCP、UDP 段(Segment)/ 数据报
网络层 网络层 IP、ICMP 包(Packet) 路由器
数据链路层 / 物理层 网络接口层 以太网、ARP/NDP、PPP、Wi-Fi 帧(Frame)/ 比特 交换机、网卡

为什么表示层和会话层在实践中消失了?因为它们的职责(加密、压缩、会话管理)在真实实现里都被并进了应用层——比如 TLS 加密由应用自己调用,HTTP 的会话靠 Cookie 维持。OSI 是先有模型后有实现,TCP/IP 是先有实现后有模型,所以后者更贴近现实。

面试里被问"网络分层"时,答 OSI 七层显得基础扎实,但一定要补一句"实际使用的是 TCP/IP 四层",并且能说清每层的代表协议和数据单位——这三个点才是考察重点。

3. 一次完整的封装过程

理解分层最好的方式是跟一次数据发送:

应用层     [        HTTP 报文        ]                    ← 你的数据
              ↓ 交给传输层
传输层  [TCP头][        HTTP 报文        ]                 ← 段  加端口号
              ↓ 交给网络层
网络层 [IP头][TCP头][      HTTP 报文      ]                ← 包  加 IP 地址
              ↓ 交给链路层
链路层 [帧头][IP头][TCP头][   HTTP 报文   ][帧尾FCS]        ← 帧  加 MAC 地址
              ↓ 物理层转为比特流发出

接收端反过来逐层拆包(解封装),每层拆掉自己的头部,把剩下的交给上层。

每层头部里最关键的信息,正好回答了"数据往哪送"这个问题的不同粒度:

  • 帧头的 MAC 地址 → 送到同一局域网内的哪块网卡(逐跳,每经过一个路由器就重写)
  • IP 头的 IP 地址 → 送到互联网上的哪台主机(逻辑上端到端,NAT 场景会被网关改写)
  • TCP 头的端口号 → 送到这台主机上的哪个进程

这三句话串起来就是整个网络通信的骨架,后面每一篇都是在展开其中的某一层。

4. 本章面试题

说一下网络分层模型

先答 OSI 七层,但一定要补一句"实际使用的是 TCP/IP 四层"

OSI 七层 TCP/IP 四层 代表协议 数据单位 设备
应用/表示/会话 应用层 HTTP、DNS、SSH 报文
传输层 传输层 TCP、UDP 段 / 数据报
网络层 网络层 IP、ICMP 路由器
数据链路/物理 网络接口层 以太网、ARP/NDP、Wi-Fi 帧 / 比特 交换机、网卡

考察重点是每层的代表协议和数据单位,而不是背定义。

表示层和会话层在实践中消失了,因为它们的职责(加密、压缩、会话管理)都被并进了应用层——OSI 是先有模型后有实现,TCP/IP 是先有实现后有模型

数据发送时是怎么逐层封装的?每层加了什么关键信息?
应用层  [HTTP 报文]
传输层  [TCP头][HTTP 报文]           加端口号
网络层  [IP头][TCP头][HTTP 报文]     加 IP 地址
链路层  [帧头][IP头][TCP头][报文][FCS]  加 MAC 地址

接收端逐层拆掉自己的头部往上交(解封装)。

三个头部回答了"数据往哪送"的不同粒度

  • 帧头的 MAC → 送到同一局域网的哪块网卡(逐跳,每经过一个路由器就重写)
  • IP 头的 IP → 送到互联网上的哪台主机(逻辑上端到端,NAT 场景会改写)
  • TCP 头的端口 → 送到这台主机上的哪个进程