网络(1):OSI 与 TCP/IP 分层对照、五层协议地图

0 阅读6分钟

OSI 与 TCP/IP:分层对照 + 各层典型协议一览

把网络拆成「层」,是为了:定位问题时知道该查哪一层、读文档/抓包时知道当前在看哪一层的协议。本篇只做地图与直觉,具体协议细节放在后续各篇。


1. 为什么要有分层

真实网络里,主机、路由器、交换机各自只做一部分事情。分层把「端到端传数据」拆成多个职责清晰的步骤:上层只依赖下层提供的服务,而不关心下层怎么实现。这样 TCP/IP 能在以太网上跑,换 Wi‑Fi、换光纤,上层应用往往不用改。

下面两套模型说的是同一件事的不同画法:OSI 七层偏教学,TCP/IP 偏工程实现。很多中文教材会再折中成五层(把 OSI 最上面三层合并成「应用层」)。


2. OSI、五层与 TCP/IP 的对应关系

image.png 要点只有几句:

  • 「应用层」在工程里是个大筐:OSI 的会话、表示、应用,在 TCP/IP 里往往都统称应用层协议。
  • TCP/IP 的「网络接口层」:对应 OSI 的数据链路层 + 物理层(比特怎么编码、帧怎么在介质上传),抓包时你看到的「Frame」主要来自这一带)。
  • 后文说「第几层」时,若无特别声明,按五层从下到上数:物理 → 数据链路 → 网络 → 传输 → 应用。

3. 各层「协议地图」(认路用)

image.png 先建立「这一层大概管什么、常见词有哪些」的印象;与 Wireshark 里包展开顺序(Frame → IP → TCP → HTTP)也能对上号。

层级这一层大致管什么常见协议 / 概念(举例)
应用层具体应用语义:网页、域名、邮件…HTTP/HTTPS、DNS、FTP、SMTP、SSH、MQTT…
传输层进程到进程:端口、可靠/不可靠、拥塞TCPUDP;端口(如 80、443)
网络层主机到主机:跨网段寻址与路由IPv4/IPv6ICMP、路由协议(如 OSPF、BGP 等,偏运维)
数据链路层同一链路/二层域内:帧、MAC以太网ARP(常视为紧贴 IP 的辅助)、交换机转发
物理层比特与介质:电气、光、无线电网线、光纤、Wi‑Fi 射频

ARP 常被放在「链路层与网路层之间」来讲:它为「已知 IP、求 MAC」服务,抓包常在以太帧里看到,后文写网路/链路时会再碰。


4. 封装与各层 PDU 叫法

image.png 数据从应用往下交时,每一层会给数据加上本层的控制信息(首部,有时还有尾部),像套娃一样,称为封装;对端再逐层剥掉,称为解封装

各层对自己这一层「一整块数据单元」的习惯称呼(PDU)大致是:

层级常见 PDU 称呼备注
传输层TCP (segment);UDP 数据报(datagram)口语里也有人泛称「包」
网络层分组 / IP 数据报(packet)常说「IP 包」
数据链路层(frame)以太网帧等
物理层比特流抓包里有时不单独展开

封装有什么用?每一层只读自己需要的那点头信息,就能完成本层职责,上层不必知道下层介质是网线还是 Wi‑Fi。 大致包括:在传输层用端口号区分「同一 IP 上不同进程」;在网络层用 IP 地址做跨网段选路;在链路层用 MAC / 帧在一段链路上可靠投递(还可带差错检测等);物理层只管比特如何编码传输。对端按顺序剥封装,每一层去掉自己的首部,把「载荷」交给上一层,直到应用拿到原始数据。这样分工清晰、可替换(例如换物理介质往往不必改 HTTP 语义)。


5. 输入网址到显示网页的完整过程

这是一个将前面所有分层核心概念串联起来的“终极面试题”。当我们不仅在浏览器里敲下 https://www.example.com 并按下回车时,网络世界究竟经历了什么?

image.png

  1. URL 解析与 DNS 查询(应用层查找)

    • 浏览器首先解析 URL 的结构,确定通信协议(HTTPS)与域名(www.example.com)。
    • 浏览器需要目标主机的 IP,便依次查询浏览器缓存、操作系统(hosts 文件)、本地 DNS 路由器缓存,若未命中则向 ISP 的 DNS 服务器发起请求,并最终解析出真正要通信的服务器 IP 地址
  2. TCP 建立连接(传输层三次握手)

    • 拿到目标 IP 后,操作系统的协议栈准备在双端之间建立可靠的数据通道。
    • 客户端(浏览器随机分配端口)向服务端(默认 443 端口)发起 TCP 三次握手(SYN -> SYN+ACK -> ACK)。
    • (注:因为是 HTTPS,随着 TCP 链接建成后,立刻会追加进行 TLS/SSL 四次安全握手以协商加密密钥。)
  3. 封装并发送 HTTP 请求(层层包装出海)

    • 浏览器将用户的访问意图组装成纯文本的 HTTP Request 报文(包含 Header 与体)。
    • 传输层:将超长的 HTTP 报文切分成多个 TCP 段 (Segment),标上源目的端口号与序号。
    • 网络层:将 TCP 段打包成 IP 数据报 (Packet),标上源 IP 与目标 IP。
    • 数据链路层:如果目标 IP 不在局域网内,通过查询路由表,利用 ARP 请求得出“默认网关(光猫/路由器接口)”的 MAC 地址,封装包进入以太网帧 (Frame) 中。
    • 物理层:网卡将帧转化为光电/无线电波信号,向外发送。
  4. 路由转发与寻址(网络层的万里长征)

    • 数据包离开你的路由器,进入主干网,途径经过一个个骨干路由器与交换机。
    • 路由器一层一层拆开数据包,查看网络层里的目标 IP,查询自己的路由表(最长前缀匹配Longest Prefix Match),再重新包装链路层的 MAC 后,将数据包扔向下一跳(Next Hop)。直至抵达百公里外的机房主机。
  5. 服务器处理并响应(层层解包归原)

    • 目标服务器收到光电信号后,一层接着一层去壳拆盒**(解封装)**:核对 MAC -> 剥掉 IP 头 -> 剥掉 TCP 头组装好乱序的分段 -> 将完整的 HTTP Request 数据通过预设端口递交给应用层的 Nginx / Tomcat 进程。
    • Web 进程读取完请求并查询数据库后,组装好 HTTP Response(包含 HTML 等资源)按照同样的逻辑原路发回给你的主机。
  6. 浏览器解析渲染

    • 浏览器收到回传的 HTML 页面资源后,开始解析 DOM 树与 CSSOM 树,引擎构建呈现出精美的画面。并进一步发请求拉取相应的图片与 JS 文件。