TCP/IP四层模型到底怎么分

OSI 七层模型讲得细,TCP/IP 四层模型用得多。它不是把七层简单砍掉三层,而是从真实协议族出发,把应用、传输、网络和网络接口组织起来。这篇结合已有七层模型文章,配图讲清四层职责、协议分布、数据封装,以及 TCP/IP 和 OSI 到底怎么对应。

之前我们聊过计算机网络的七层结构,那篇更像一张完整的网络知识地图。

这次换一个更贴近实际开发的视角,聊聊 TCP/IP 四层模型。

很多人第一次看到 TCP/IP 四层模型,会下意识觉得它就是把 OSI 七层模型删掉三层。

其实没有这么简单。

OSI 更像是先设计出来的一套通用分层参考模型,TCP/IP 则是伴随着真实协议族发展起来的工程模型。

一个偏理论和分类,一个偏协议和落地。

我们写 HTTP 接口、查 TCP 连接、看 IP 路由、排查网卡问题,最终都绕不开 TCP/IP 这套体系。

TCP/IP 到底是什么

TCP/IP 的全称是 Transmission Control Protocol/Internet Protocol,通常翻译为传输控制协议/网际协议。

但 TCP/IP 不是只有 TCP 和 IP 两个协议。

它更准确的含义是一组用于网络通信的协议族,里面包括:

  • 应用层的 HTTP、FTP、DNS、SMTP、SSH 等
  • 传输层的 TCP、UDP 等
  • 网际层的 IP、ICMP、IGMP 等
  • 网络接口相关的以太网、Wi-Fi、ARP 等
TCP/IP = 一组围绕 IP 网络通信协作的协议集合

HTTP  DNS  FTP  SSH
  │    │    │    │
  └────┴────┴────┴── 应用层
                    │
                 TCP / UDP
                    │
                    IP
                    │
              以太网 / Wi-Fi
​

平时有人把 TCP/IP 直接叫成 TCP/IP 协议,这种说法在口语里很常见,但严格来说不够准确。

TCP 和 IP 只是这组协议族里最有代表性的两个成员。

四层模型怎么分

经典 TCP/IP 四层模型从上到下是:

  1. 应用层
  2. 传输层
  3. 网际层
  4. 网络接口层

也有教材把它讲成五层模型,把网络接口层拆成数据链路层和物理层。

这两种说法并不矛盾,主要是抽象粒度不同。

和 OSI 七层怎么对应

可以用下面这张图理解:

OSI 七层模型                 TCP/IP 四层模型

┌────────────────────┐       ┌────────────────────┐
│ 7  应用层          │       │                    │
├────────────────────┤       │                    │
│ 6  表示层          │ ───>  │     应用层         │
├────────────────────┤       │                    │
│ 5  会话层          │       │                    │
├────────────────────┤       ├────────────────────┤
│ 4  传输层          │ ───>  │     传输层         │
├────────────────────┤       ├────────────────────┤
│ 3  网络层          │ ───>  │     网际层         │
├────────────────────┤       ├────────────────────┤
│ 2  数据链路层      │       │                    │
├────────────────────┤ ───>  │   网络接口层       │
│ 1  物理层          │       │                    │
└────────────────────┘       └────────────────────┘
​

OSI 的应用层、表示层和会话层,在 TCP/IP 中通常合并成应用层。

OSI 的数据链路层和物理层,在 TCP/IP 中通常合并成网络接口层。

但这不表示 TCP/IP 把这几部分能力彻底删掉了,只是没有单独作为模型中的一层来描述。

比如 HTTPS 的加密、JSON 的编码、登录会话等能力,仍然存在,只是通常由应用层协议、库或框架共同完成。

四层和五层不是谁对谁错

五层模型通常长这样:

应用层
传输层
网络层
数据链路层
物理层
​

它是在 TCP/IP 四层模型的基础上,把网络接口层继续拆开,便于学习数据链路和物理介质。

工程实践中,四层、五层、七层经常混着出现。

看到不同版本时,先看它的分层目的,不要把层数本身当成绝对真理。

应用层负责表达业务

应用层离我们最近。

浏览器打开网页、程序调用接口、邮件客户端发邮件,最终都要通过应用层协议表达业务数据。

常见协议包括:

协议 主要用途
HTTP/HTTPS Web 页面和接口通信
DNS 域名解析
FTP 文件传输
SMTP 邮件发送
SSH 远程登录和安全管理
DHCP 自动获取网络配置

应用层解决的是“我要表达什么”。

比如 HTTP 请求里会有方法、路径、请求头和请求体:

GET /users/1001 HTTP/1.1
Host: example.com
Accept: application/json
​

这一层通常不关心网线怎么传,也不直接负责数据包怎么路由。

它把业务数据交给传输层,后面的事情交给下面几层继续处理。

应用层不只是一个端口

有些人会把应用层简单理解成端口号,这是不对的。

端口主要属于传输层,用来区分同一台主机上的不同应用。

应用层真正关心的是通信双方如何理解数据:字段怎么定义、请求怎么表达、响应怎么解释。

HTTP 和 FTP 都可能使用 TCP,但它们的业务语义完全不同。

协议的“语言”在应用层,数据怎么可靠送达则是传输层的事。

传输层负责端到端

传输层连接的是两个应用进程,而不只是两台机器。

它需要解决:数据发给本机哪个应用、数据是否按顺序到达、丢包后怎么办、发送速度要不要调整。

TCP 和 UDP 是这一层最常见的两个协议。

TCP 是什么

TCP 是面向连接的可靠传输协议。

它通过序号、确认、重传、滑动窗口和拥塞控制等机制,尽量让应用收到一段有序、完整的数据流。

TCP 建立连接通常会经历三次握手,连接结束还会有挥手过程。

客户端                                      服务器
   │                                           │
   │  SYN                                      │
   │────────────────────────────────────────>  │
   │  SYN + ACK                                │
   │  <─────────────────────────────────────── │
   │  ACK                                      │
   │────────────────────────────────────────>  │
   │                                           │
   │          TCP 连接建立                     │
​

TCP 只提供字节流,不理解上层的 JSON、HTML 或图片。

它负责把一串字节可靠地送到对端,至于这些字节代表什么,由应用层协议解释。

UDP 是什么

UDP 是无连接的传输协议。

它不会像 TCP 那样建立连接,也不保证数据一定到达、按顺序到达或只到达一次。

但“不保证可靠”不等于“完全不可靠”。

UDP 的意思是把可靠性控制交给上层或业务自己决定。

它的头部更简单、开销更小,适合实时音视频、DNS 查询、游戏同步和某些自定义协议。

TCP:先建立连接,再传输字节流,可靠但有维护成本
UDP:直接发送数据报,开销小,但可靠性由业务自己处理
​

到底选 TCP 还是 UDP,不是看哪个更快,而是看业务是否需要可靠、有序和连接状态。

网际层负责寻址和路由

网际层也叫网络层,主要解决主机之间怎么找到彼此。

它使用 IP 地址标识网络中的主机或网络接口,并根据路由把数据包从一个网络转发到另一个网络。

客户端网络        路由器A          路由器B        服务器网络
192.168.1.10  ->  运营商网络  ->  公网路由  ->  203.0.113.20
                       │              │
                       └── 根据目标 IP 选择下一跳
​

这一层最重要的协议是 IP。

IP 提供的是无连接、尽力而为的数据报传递服务。

它会尽力把数据包送到目标地址,但不保证一定送达,也不保证顺序,更不会负责重传。

这些可靠性能力如果需要,通常由 TCP 在传输层补上。

IP 和端口不是一回事

IP 地址主要用来定位一台主机或网络接口。

端口则用来定位这台主机上的具体应用进程。

IP:找到哪台机器
端口:找到机器上的哪个应用

203.0.113.20:443
└───────┬──────┘
      主机       应用入口
​

所以一个网络连接通常要结合 IP 和端口来描述。

TCP 或 UDP 的端口信息,会和 IP 地址一起完成从应用到主机的定位。

ICMP 和 IGMP

ICMP 常用于传递网络控制和错误信息。

我们熟悉的 ping 就会使用 ICMP Echo 报文,路由跟踪也会利用相关 ICMP 响应。

IGMP 则用于 IPv4 网络中的组播成员管理。

它们不负责像 TCP 那样传输应用字节流,但属于 IP 网络正常运行的重要组成部分。

网络接口层负责落地

网络接口层位于最底部,负责让数据真正通过某种网络介质传出去。

它涉及网卡、网线、无线网络、以太网帧、MAC 地址等内容。

网际层数据包
       │ 放入
       ▼
以太网帧 / Wi-Fi 帧
       │ 放到
       ▼
网卡、交换机、无线电波
​

TCP/IP 模型没有规定所有网络必须使用同一种底层协议。

只要能够承载 IP 数据包,下面可以是以太网,也可以是 Wi-Fi、光纤链路、蜂窝网络或其他网络技术。

ARP 放在哪一层

ARP 用于在 IPv4 局域网中根据 IP 地址查询 MAC 地址。

在很多教材里,ARP 会被放到网络接口层,或者认为它位于网络层和数据链路层之间。

它的作用可以简单理解成:

已知目标 IP:192.168.1.20
需要目标 MAC:AA:BB:CC:DD:EE:FF

ARP 请求:谁是 192.168.1.20?
ARP 响应:我是,对应 MAC 是 AA:BB:CC:DD:EE:FF
​

不同资料对 ARP 的层次归类可能略有区别,不必为了它到底属于哪一层争论太久。

理解它在局域网里完成 IP 到 MAC 的解析,更重要。

一次请求如何穿过四层

我们用访问一个 HTTP 接口来串起整个过程。

假设应用要发送:

GET /api/users HTTP/1.1
​

数据从上往下会逐层添加自己的控制信息,这个过程叫封装。

应用层:        [ HTTP 数据 ]
                    │
传输层:    [ TCP 头 ][ HTTP 数据 ]
                    │
网际层: [ IP 头 ][ TCP 头 ][ HTTP 数据 ]
                    │
接口层:[ 帧头 ][ IP 头 ][ TCP 头 ][ HTTP 数据 ][ 帧尾 ]
​

到了对端之后,再从下往上逐层拆开,这叫解封装。

发送方向:应用数据 -> TCP 段 -> IP 包 -> 链路帧
接收方向:链路帧 -> IP 包 -> TCP 段 -> 应用数据
​

不同层对数据的叫法也不一样:

层次 常见数据单元
应用层 消息、数据
传输层 TCP 段、UDP 数据报
网际层 IP 数据包
网络接口层 帧、比特流

这就是为什么抓包时会看到一层套一层的头部。

每一层只处理自己负责的那部分信息,同时把上层数据当成自己的载荷。

协议和层次怎么记

可以用下面这张图先建立一个整体印象:

┌─────────────────────────────────────────────┐
│ 应用层:HTTP HTTPS DNS FTP SSH SMTP DHCP    │
├─────────────────────────────────────────────┤
│ 传输层:TCP UDP                              │
├─────────────────────────────────────────────┤
│ 网际层:IP ICMP IGMP                         │
├─────────────────────────────────────────────┤
│ 网络接口层:Ethernet Wi-Fi ARP               │
└─────────────────────────────────────────────┘
​

不要把协议和层次硬背成一张没有上下文的清单。

更好的记法是想它们各自解决什么问题:

  • 应用层:双方要表达什么
  • 传输层:数据交给哪个进程,是否需要可靠传输
  • 网际层:目标主机在哪里,下一跳往哪走
  • 网络接口层:当前这一跳通过什么介质发送

这样遇到实际问题时,定位会更快。

比如接口返回 404,优先看应用层;TCP 连接建立失败,看传输层和监听端口;路由不通,看 IP 和路由;同一局域网访问异常,再看 ARP、交换机和网卡。

TCP/IP 和 OSI 怎么选

OSI 七层模型和 TCP/IP 四层模型不是互相排斥的两套知识。

它们更像是两张不同缩放比例的地图。

OSI 的优点是划分细、概念清楚,适合描述网络功能和学习分层思想。

TCP/IP 的优点是和真实互联网协议结合得紧,HTTP、TCP、IP、以太网这些实际技术都能直接放进去。

OSI:先抽象功能,再描述协议应该放在哪里
TCP/IP:协议族先发展起来,再总结出工程上的分层模型
​

两者的主要差异可以简单记成:

  • OSI 是七层,TCP/IP 常见是四层,也有五层教学模型
  • OSI 把表示层和会话层单独列出,TCP/IP 通常合并到应用层
  • OSI 把物理层和数据链路层分开,TCP/IP 通常合并到网络接口层
  • TCP/IP 以真实协议族为中心,适用范围没有 OSI 那么抽象
  • OSI 概念完整但偏复杂,TCP/IP 更贴近实际互联网实现

实际工作中,看到“七层”“四层”“五层”先不用争论谁更正统。

先确认对方是在讲功能分层、负载均衡层级,还是在讲网络协议模型,避免同一个“第七层”说的不是同一件事。

小结

TCP/IP 四层模型可以这样记:

  • 应用层:HTTP、DNS、FTP,负责表达业务和应用数据
  • 传输层:TCP、UDP,负责进程到进程的传输
  • 网际层:IP、ICMP,负责主机寻址和数据包路由
  • 网络接口层:以太网、Wi-Fi、ARP,负责把数据落到具体网络中

一条请求从应用出发,会经历:

应用数据
  -> TCP/UDP 封装
  -> IP 封装
  -> 以太网或 Wi-Fi 封装
  -> 网络传输
  -> 对端逐层解封装
​

一句话总结:OSI 更像精细的分析模型,TCP/IP 更像真正跑在互联网上的协议族模型。

以后再抓包、排查接口超时或分析连接问题,可以先问自己:现在卡在应用表达、传输连接、IP 路由,还是底层链路?

层次一旦分清,网络问题就不会再变成一锅粥了。

更多推荐

章节目录