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 四层模型从上到下是:
- 应用层
- 传输层
- 网际层
- 网络接口层
也有教材把它讲成五层模型,把网络接口层拆成数据链路层和物理层。
这两种说法并不矛盾,主要是抽象粒度不同。
和 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 路由,还是底层链路?
层次一旦分清,网络问题就不会再变成一锅粥了。
