基本全对——标准的网络知识体系,无一硬伤。三个值得补充的精确化:
1. ARP 的层级位置:说 ARP「依赖数据链路层」不够精确——ARP 是运行在以太网帧之上的辅助协议(直接封装在以太网帧中,不经 IP),它本身是「为 IP 服务」的二层半角色。说「IP 依赖 ARP」是对的。
2. DNS 的 TCP 回退:DNS 默认 UDP 53,但响应超过 512 字节(或启用 DNSSEC)、区域传送时自动改用 TCP 53——这个回退机制值得记住。
3. HTTP/3 改变了游戏规则:「应用层都依赖 TCP」在 HTTP/3 时代不再绝对——QUIC 跑在 UDP 上(RFC 9000),HTTP/3 = HTTP over QUIC over UDP,完全绕开了 TCP。这是近年最重要的协议层变化。
| 层 | OSI 七层 | TCP/IP 四层 | 核心问题 |
|---|---|---|---|
| 7 | 应用层 | 应用层 | 为应用提供什么服务 |
| 6 | 表示层 | 数据怎么编码/加密 | |
| 5 | 会话层 | 会话怎么建立维持 | |
| 4 | 传输层 | 传输层 | 端到端可靠还是快速 |
| 3 | 网络层 | 网络接口层 | 怎么跨网找到对方 |
| 2 | 数据链路层 | 同一局域网怎么传帧 | |
| 1 | 物理层 | ↑ | 比特怎么变成信号 |
上层依赖下层提供的服务;下层对上层透明。
排错自底向上:物理通 → 链路通 → IP 通 → 端口通 → 应用通。
每一层只知道下一层能给自己什么,不关心再往下怎么实现。这就是为什么:换 Wi-Fi 还是换网线,浏览器不用改(链路层透明);TCP 负责重传,HTTP 不用自己管丢包(传输层兜底);MCP 从 stdio 换成 HTTP 传输,工具调用逻辑不用改(传输抽象)。
| 层 | 关键协议 | 依赖谁 | 一句话职责 |
|---|---|---|---|
| 物理层 | 电/光/无线电 | — | 把比特变成信号 |
| 数据链路层 | 以太网、ARP* | 物理层 | MAC 地址在同一局域网传帧 |
| 网络层 | IP、ICMP | 以太网(+ARP 解析 MAC) | IP 地址跨网路由 |
| 传输层 | TCP、UDP | IP | 端到端:TCP 可靠 / UDP 快 |
| 应用层 | HTTP、DNS、SSH、TLS* | TCP/UDP | 应用语义 |
*ARP 直接封装在以太网帧中(不经 IP),是「为 IP 服务」的链路层辅助协议;*TLS 严格说是会话/表示层角色,实践中夹在 TCP 与应用协议之间。
1. DNS 解析 :查缓存 → hosts → 问 DNS 服务器(UDP 53,大响应转 TCP) 2. ARP :拿到网关 IP,广播 ARP 请求换网关 MAC 3. TCP 三次握手 :与目标 443 端口建连(SYN → SYN+ACK → ACK) 4. TLS 握手 :证书验证 + 密钥协商(TLS 1.3 只需 1-RTT) 5. HTTP 请求 :GET / HTTP/1.1 + Host 头 6. 服务器响应 :200 OK + 内容 7. 渲染与子资源 :页面内每个资源重复 3-6(HTTP/2 多路复用可共用连接) 8. 挥手收尾 :FIN 四次断开(或 keep-alive 保持)
| TCP | UDP | |
|---|---|---|
| 连接 | 面向连接(三次握手) | 无连接 |
| 可靠性 | 确认+重传+排序 | 尽力而为 |
| 速度 | 慢一点(握手+确认开销) | 快(无建立开销) |
| 类比 | 靠谱物流公司 | 闪电快递 |
| 用例 | 网页/文件/邮件/SSH | 直播/游戏/DNS 查询/VoIP |
HTTP → TLS(https 时)→ TCP → IP → 以太网/物理 HTTP/3 → QUIC → UDP → IP(新路线,绕开 TCP)
| 版本 | 依赖 | 关键特性 |
|---|---|---|
| HTTP/1.1 | TCP | keep-alive 复用连接,但应用层队头阻塞 |
| HTTP/2 | TCP | 多路复用,但 TCP 层队头阻塞仍在 |
| HTTP/3 | QUIC/UDP | 彻底解决队头阻塞,0-RTT 重连,弱网优势 |
方法:GET(读)/ POST(建)/ PUT(全量改)/ PATCH(部分改)/ DELETE(删)
状态码:200 OK / 201 Created / 301 302 重定向 / 400 请求错 / 401 未认证 / 403 无权限 / 404 没有 / 429 太频繁 / 500 服务器错 / 502 网关错 / 504 超时
# 基础 GET
curl https://api.example.com/users
# POST JSON(最常用的 API 调用形态)
curl -X POST https://api.example.com/users \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <token>" \
-d '{"name": "abel"}'
# 看完整握手过程(理解依赖链的最好方式)
curl -v https://example.com 2>&1 | grep -E "Trying|Connected|SSL|> |< "
RFC 6455(2011)。借 HTTP 的门进 TCP 的场:先发一个 HTTP Upgrade 请求,服务器回 101 Switching Protocols,之后这条 TCP 连接升级为全双工长连接——双方随时互发消息,不再受请求-响应配对约束。
依赖链:WebSocket → TCP → IP(必须 TCP,无 UDP 版)
握手 :HTTP GET + Upgrade: websocket + Sec-WebSocket-Key
← HTTP/1.1 101 Switching Protocols
| HTTP | WebSocket | |
|---|---|---|
| 方向 | 请求-响应(客户端发起) | 全双工(服务端可主动推) |
| 连接 | 短连接为主 | 长连接(心跳保活) |
| 开销 | 每次带完整头 | 帧头仅 2-14 字节 |
| 用例 | API 调用、网页 | 聊天、行情推送、协同编辑、Agent 状态流 |
const ws = new WebSocket('wss://example.com/ws');
ws.onopen = () => ws.send(JSON.stringify({type: 'subscribe', channel: 'agent_status'}));
ws.onmessage = (e) => console.log('收到:', e.data);
ws.onclose = () => console.log('关闭(可指数退避重连)');
单向版 WebSocket:服务端 → 客户端的持续 HTTP 流(Content-Type: text/event-stream)。LLM 流式输出的标准方案——OpenAI 兼容 API 的 stream: true 就是 SSE。只要「服务端推、客户端收」就选 SSE:更简单、自动重连、过代理友好。
你的代码 → HTTPS POST /v1/chat/completions → TLS → TCP → DNS/CDN 流式输出:同一连接上 SSE 流回 token
模型 API 没有发明新传输层,只是把 HTTP 用到了极致。
curl -X POST https://api.openai.com/v1/chat/completions \
-H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-d '{"model": "gpt-6.1-sol",
"messages": [{"role": "user", "content": "你好"}],
"stream": true}'
兼容此格式的:OpenAI / DeepSeek / GLM(zai) / Qwen / 本地 vLLM、Ollama 等。stream: true 时响应是 SSE:每行 data: {...chunk...},最后 data: [DONE]。
| 非流式 | 流式(SSE) | |
|---|---|---|
| 首字延迟 | 等全部生成完 | 首个 token 即到 |
| 实现 | 简单 | 需处理分片解析 |
| 用例 | 批处理、后处理 | 聊天界面、实时反馈 |
① API 编排:A 模型输出作为 B 模型输入(脚本串联)——最简单,当前主流。
② A2A 协议(见第七节):Agent 间标准化互操作。
③ 共享工作区:多模型读写同一存储(数据库/文件/消息队列)实现间接协作。
Anthropic 2024-11 开源的模型↔工具连接标准。解决的问题:每个模型接每个工具都写一遍适配(M×N 问题)→ 统一成一个协议(M+N 问题)。类比:USB-C 接口——任何设备插任何线。
MCP Host(Claude Desktop / 你的 Agent)
└─ MCP Client(每个 Server 一个连接)
└─ MCP Server(工具提供方:GitHub/数据库/文件系统/业务 API)
传输层两种(消息格式相同,均为 JSON-RPC 2.0):
stdio:本地进程标准输入输出(最快,适合本机工具);Streamable HTTP:远程 Server,HTTP POST + 可选 SSE(适合云端/共享工具)。
| 原语 | 方向 | 类比 | 例 |
|---|---|---|---|
| Tools | 模型可调用 | POST 端点 | 查数据库、发消息 |
| Resources | 模型可读取 | GET 端点 | 文件、配置、schema |
| Prompts | 提供给用户 | 模板 | 预设分析框架 |
{"jsonrpc":"2.0","method":"tools/call",
"params":{"name":"query_db","arguments":{"sql":"SELECT count(*) FROM users"}},
"id":1}
Google 2025-04 发布(50+ 企业共建)的 Agent↔Agent 互操作标准。MCP 连接「Agent 与工具」,A2A 连接「Agent 与 Agent」——互补而非竞争。
发现:Agent Card(JSON 名片)发布在 /.well-known/agent.json
(能力、技能、端点 URL、认证要求)
通信:JSON-RPC 2.0 over HTTPS(复用 Web 安全体系)
任务:task 生命周期(submitted → working → completed/failed)
产物:Artifacts(文件/结构化数据)
依赖链:A2A → HTTPS → TLS → TCP → IP——纯 Web 技术栈,零新传输层。
你的旅行 Agent(Claude 系)需要订机票 → 读取航司 Agent 的 Agent Card(发现它有 search_flights 技能) → A2A tasks/send 派发子任务 → 航司 Agent(GPT 系)在自己的环境完成查询 → 返回 Artifact(航班列表) → 你的 Agent 整合结果给用户
全程双方不暴露内部记忆与工具,只交换任务与产物——这是 A2A 与「直接共享 API」的本质区别:不透明协作。
| MCP | A2A | |
|---|---|---|
| 连接 | Agent ↔ 工具/数据 | Agent ↔ Agent |
| 类比 | USB-C(设备接电脑) | 名片+邮件(公司与公司) |
| 一句话 | 给 Agent 发工具箱 | Agent 之间互相外包任务 |
| 发起 | Anthropic | |
| 传输 | JSON-RPC over stdio/HTTP | JSON-RPC over HTTPS |
| 场景 | 选什么 | 依赖链 |
|---|---|---|
| 网站/API 调用 | HTTP/2+ | TCP |
| 高频 API/弱网 | HTTP/3 | QUIC/UDP |
| 服务端主动推(简单) | SSE | TCP |
| 双向实时(聊天/行情) | WebSocket | TCP |
| 给模型接工具 | MCP | stdio / HTTP |
| Agent 调 Agent | A2A | HTTPS |
| 大文件可靠传输 | TCP(FTP/HTTP) | — |
| 实时音视频 | UDP(RTP/WebRTC) | — |
| 域名解析 | DNS | UDP 53(大包 TCP) |
| 症状 | 大概率的层 | 排查命令 |
|---|---|---|
| ping 不通 | 链路层(ARP)/网络层(ICMP) | ping → arp -a → traceroute |
| ping 通但 API 超时 | 传输层(端口)/防火墙 | telnet host 443、curl -v |
| TLS 报错 | 证书/系统时间 | 查时间、openssl s_client |
| API 401/403 | 应用层认证 | 检查 key、token 过期 |
| MCP 连不上 | stdio 进程没起/HTTP 端点错 | 手动跑 server 命令看 stderr |
| A2A 发现失败 | Agent Card 路径/网络 | curl 对方 /.well-known/agent.json |
| WebSocket 秒断 | 代理不支持 Upgrade/心跳缺失 | 查 proxy、加 ping/pong |
所有新协议都是老依赖栈上的新语义:HTTP、WebSocket、SSE、MCP、A2A——没有一个发明了新的传输层,它们全部站在 TCP/UDP + IP + 以太网的肩膀上,只是约定了新的对话方式。理解了分层依赖,就拿到了一切协议的地图。
本文经典网络部分基于 TCP/IP 标准知识体系整理;MCP 规格基于 Anthropic 官方开源仓库,A2A 规格基于 Google 官方发布(协议处于快速演进期,以官方仓库最新版本为准);HTTP/3/QUIC 基于 RFC 9000。文中命令示例以类 Unix 环境为准。
一手来源:RFC 9000(QUIC)、RFC 6455(WebSocket);Anthropic Model Context Protocol 官方仓库(github.com/anthropics/model-context-protocol);Google A2A 官方发布(github.com/google-a2a/A2A);OpenAI API 官方文档
缘起:网络工程师-波哥《梳理网络协议的依赖关系》(抖音/B站)