排查接口连接问题时,我经常会先问:是应用没有正确响应,还是连接建立失败,或者连目标地址都到不了?按层看网络,有助于把这些问题逐步缩小,而不是把所有故障都叫作“网络不通”。
TCP/IP 常用四层描述;教学中的五层模型,则进一步区分数据链路和物理传输。两者划分粒度不同,不代表某些网络可以不需要物理介质。
一、四层与五层如何对应?
| TCP/IP 四层模型 | 常见五层教学模型 | 主要职责 | 示例 |
|---|---|---|---|
| 应用层 | 应用层 | 定义应用之间交换消息的格式与交互规则 | HTTP、DNS、SMTP |
| 传输层 | 传输层 | 提供端到端传输与端口复用,能力随协议不同 | TCP、UDP |
| 网际层 | 网络层 | 使用 IP 地址传递数据包,支持跨网络转发 | IPv4、IPv6 |
| 链路层/网络接口层 | 数据链路层 | 在相邻链路上组织、传送帧并进行链路寻址 | 以太网、Wi-Fi 的链路机制 |
| 链路层/网络接口层 | 物理层 | 通过介质传递比特对应的电、光或无线信号 | 双绞线、光纤、无线电 |
RFC 1122 按应用、传输、网际、链路描述互联网协议栈。五层划分便于分别讨论帧和信号;OSI 七层模型又是另一套参考模型,不能直接说 TCP/IP 本身有七层。
二、传输层与网络层的区别
“负责两台主机之间传输”还不足以区分这两层。网络层更关心数据包如何到达目标 IP,传输层通过端口把数据交给相应应用端点,并提供协议所定义的传输能力。
TCP 提供有序、可靠的字节流,处理重传和流量控制等问题;UDP 提供数据报服务,不自带同样的可靠性与顺序保证。因此不能把所有传输层协议都说成“保证数据送达”。
三、以 HTTP/1.1 请求为例
下面只画出一个常见的 HTTP/1.1 over TCP/IP 场景,省略 TLS 等细节:
应用层:组织 HTTP 请求消息 |
接收端再逐步解析并交给应用。一个 HTTP 请求不一定只对应一个 TCP 报文段;经过路由器时,链路层封装也会随下一跳链路变化。
这个例子不能套到所有 HTTP 版本上,例如 HTTP/3 使用 QUIC,而 QUIC 基于 UDP。
四、用分层思路定位故障
| 现象 | 可以优先核对的方向 |
|---|---|
| 域名解析失败 | DNS 配置、解析服务器及可达性 |
| 域名能解析,但 TCP 连接失败 | 路由、防火墙、目标端口及服务监听 |
| 连接建立成功,但返回 HTTP 500 | 应用日志、上游服务与业务处理 |
| 本地网口无链路或无线连接断开 | 介质、接口及链路状态 |
这些是排查入口,不是仅凭一个现象就能确定故障层。DNS 本身也依赖网络传输,HTTP 超时也可能发生在多个环节,仍应结合日志、抓包和具体错误进一步判断。