加载中...

本篇要回答的问题:从网络应用程序的角度看,互联网世界是怎么划分子系统的?每一层负责什么?我们写互联网软件时,TCP/IP 层和 HTTP 层的编程接口分别长什么样、差别多大?

上一讲讲了 IP 网络的工作原理(封包、寻址、传输)。本讲换到"应用程序视角"——架构第一步是需求分析,之后是概要设计(子系统划分)。我们顺着分层全视图,看清网络应用依赖的庞大基础平台,再落到 HTTP 协议的设计精妙之处和 TCP/IP 与 HTTP 两种编程接口的对比。

网络应用程序的全视图

网络应用程序的分层全视图

一个典型网络应用从下到上分五层,每层承接的变化点不同:

名称 负责什么 类比单机
物理层 网络设备原生能力 ——
数据链路层 局部网络的数据传输(固网/WiFi/4G/5G 层出不穷) ——
IP 网络层 互联网世界的一体化、彼此包容 操作系统的核心
TCP/UDP 传输层 让通讯可信赖,降低开发负担 与 IP 一起构成"内核"
应用平台层 HTTP、SMTP/POP3 等应用层协议 应用软件

关键判断:IP 网络是互联网"操作系统"的核心,是互联网世界可编程的开始;TCP/IP 这层"操作系统"才真正实现了网络价值的最大化——连接一切。

主流应用层协议对比:

协议 应用场景 现状
HTTP 万维网(WWW),承载 RESTful API、gRPC 已演化为通用传输协议,甚至有 HTTP DNS
SMTP/POP3 电子邮件 借用少,但因 Email 的开放性连接了世界每个人和企业
FTP/NFS/Telnet 文件/远程登录 范围小,部分被 HTTP 替代

洞见:微信连接了几乎所有中国人,但相比电子邮件仍是小巫见大巫——因为开放的力量。“用微信的方式打败微信很难,但微信是封闭协议,开放也许是机会。”

应用层协议与网关

NAT 网关是工作在传输层(第四层)的透明代理;若限定数据包是某种应用层协议,就出现了应用层网关(七层网关),如 Nginx、Apache,通常处理 HTTP/HTTPS。

HTTP 请求/回复格式:协议头 + 空行 + 正文。请求行三部分(命令 / 资源路径 / 版本),回复行三部分(版本 / 状态码 / 状态文本)。

操作 命令 业务语义
读取 GET 获取资源
创建 PUT(或 POST) 新建资源,需授权
修改 POST 改资源,需授权
删除 DELETE 删资源,需授权

HTTP 协议好在哪?关键在协议头设计

优点 表现
极其开放的协议头 用户可加自定义字段,惯例以 X- 开头(如七牛 X-Reqid
规范了业务表达范式 用"资源路径"表达资源,PUT-POST-GET-DELETE 表达 CURD
规范了应用层路由 强制的 Host 字段以域名表征目标主机,"域名 + 资源路径"是更好的路由依据

关键洞见:正因为这些好处,HTTP 逐渐成为网络应用层协议的模板——无论业务如何,都能基于它表达自己的业务逻辑。

TCP/IP 层 vs. HTTP 层编程接口

网络的可编程性从 IP 协议开始。三种协议的编程接口对比:

维度 IP UDP TCP
连接 无连接 无连接 基于连接
地址 IPAddr(IP+Zone) UDPAddr(多了 Port) TCPAddr(IP+Port+Zone)
可靠性 不保证到达/次序 不保证,开销极小 解决丢包重传、纠正乱序
适用 几乎不直接用 音视频(宁可丢帧) 通用可靠传输

洞见:IP 和 UDP 区别极小(UDP 只多了端口),所以很少有应用直接基于 IP 编程;而 TCP 的可靠性对音视频反而是坏特性——重传会加剧网络拥塞。

端口(port):解决软件间冲突,ip:port 唯一定位通讯地址;最初设计意图是区分应用层协议(80=HTTP,25=SMTP),客观上也缓解了 IPv4 地址紧张。

服务端编程差异:TCP 每 Accept 一个连接可起独立 goroutine 处理;UDP 无连接,需手工按来源 IP+port 分派。

而 HTTP 层编程则简便得多——客户端直接 Get/Post;服务端靠 ServeMux 完成基于"资源路径"的路由:

mux := http.NewServeMux()
mux.HandleFunc("/abc/example", handleAbcExampe)
http.ListenAndServe(addServer, mux)

关键判断:基于 HTTP 与基于 TCP/IP 裸写业务,复杂程度不可同日而语——前者程序架子已成型,只需填业务逻辑。这就是采纳成熟应用层协议的威力。如无特殊理由,架构师应优先选 HTTP。

总结

本讲给出网络应用的分层全视图:物理层→链路层→IP 层→传输层→应用平台层,逐层承接不同变化点,IP+TCP 是互联网的"操作系统内核"。HTTP 凭借开放协议头、规范业务范式、规范应用层路由三大优点成为应用协议模板。编程接口上,TCP/IP 裸写繁琐,HTTP 简便高效。

先把"是什么"回答清楚

概念 一句话说明
互联网"操作系统" IP 网络层 + TCP/UDP 传输层构成的内核
应用层网关 工作在第七层、处理 HTTP 的代理(Nginx/Apache)
HTTP 协议头 开放可扩展、规范 CURD、以 Host 做路由
端口 port ip:port 唯一定位软件通讯地址
ServeMux HTTP 服务端基于资源路径的路由器

一句话速记

IP+TCP 是互联网的操作系统内核,HTTP 是应用协议的模板——能用 HTTP 就别裸写 TCP,架子现成只填业务。

几条值得记住的判断

  • 不要轻易创造新协议,优先选 HTTP 这样成熟的应用层协议。
  • UDP ≈ IP + 端口,TCP 才解决可靠性,但可靠性对音视频是坏事。
  • 开放是封闭协议的天敌——Email 连接世界靠的就是开放。

思考题

你做业务架构时,是选择自定义网络协议、基于 gRPC,还是基于 HTTP 提供 RESTful API?回到你手上的项目:你为某个内部服务"省事"地自造了一套协议吗?如果改用 HTTP,会失去什么、又能省下多少基础设施(网关、日志、链路追踪)的重复建设?

公告栏
这是我的个人知识库。
记录技术,也记录生活 —— 读过的、试过的、想明白的,都堆在这儿。
最新文章
网站资讯
文章数目 :
5
已运行时间 :
本站总字数 :
15.7k
本站访客数 :
本站总访问量 :
最后更新时间 :
全局知识图谱
当前页面 已访问 文章 标签
ESC 关闭 · 滚轮缩放 · 拖拽移动 · Ctrl+G 开关