1969 年 10 月 29 日,第一条通过 ARPANET 发送的消息是"lo"。原计划发"login",系统在收到前两个字母后崩溃了。
五十年后,这个网络的后代——互联网——每秒传输的数据量超过 10 万 GB。支撑这一切的,是一个精密的分层协议体系,其核心思想 1969 至 1983 年间逐渐成形,核心规范至今仍在使用。
这些规范有确切的生日:IP 是 RFC 791、TCP 是 RFC 793,都发表于 1981 年 9 月。1983 年 1 月 1 日,ARPANET 按计划一次性停用旧的 NCP 协议、全量切换到 TCP/IP——这种"全员同一天换协议"的做法后来被称为"旗日"(flag day)。切换出人意料地顺利,参与者甚至印了纪念徽章,上面写着"我从 TCP/IP 切换中幸存"。
破除误解:互联网不是一个东西
很多人把"互联网"当作一个有形的设施,像电网一样存在。实际上,互联网是协议的集合——所有参与其中的设备和网络,都遵守同一套通信规则。只要遵守这些规则,任何技术(光纤、Wi-Fi、4G、卫星)都可以成为互联网的一部分。
协议,是通信双方事先约定的规则。网络协议规定:数据如何格式化、如何寻址、如何传输、如何验错。没有协议,设备之间发出的信号只是互相不理解的噪声。
这些规则以 RFC(Request for Comments,征求意见稿) 的形式公开发布:没有专利费,没有准入门槛,任何人读懂文档就能实现,实现之间能互通才算数。"互联网属于所有人"不是口号,是这套发布机制的直接后果。
分层模型:把复杂性分解
TCP/IP 模型把网络通信分为四层(也有说五层的):
应用层 HTTP、DNS、SMTP、TLS
↕
传输层 TCP、UDP
↕
网络层 IP(IPv4 / IPv6)
↕
链路层 以太网、Wi-Fi(802.11)、ARP
```每一层只与紧邻的层交互,不需要知道更下面或更上面的细节。这是abstraction中"分层架构"在网络领域的具体实现。
当你在浏览器里访问一个网页:
- 应用层:浏览器生成 HTTP 请求("GET /index.html")
- 传输层:TCP 把 HTTP 消息分成多个段(Segment),加上序号、校验和
- 网络层:IP 把每个段包装成数据包(Packet),加上源 IP、目标 IP
- 链路层:以太网/Wi-Fi 把数据包封装为帧(Frame),加上 MAC 地址,发送到物理媒介
接收方逐层反向剥开,最终应用程序得到原始的 HTTP 响应。这种"套娃"式的封装叫做封装(Encapsulation)。
IP:全球地址系统
Internet Protocol(IP)解决的是寻址问题:如何在全球数十亿设备中,把一个数据包准确送到目的地?
IP 地址是设备在互联网上的"门牌号"。IPv4 地址是 32 位整数,写成四组十进制数(如 192.168.1.1),最多约 43 亿个地址——2011 年 IANA 已分配完毕。IPv6 使用 128 位,地址空间约 ,理论上给地球每粒沙子都分一个 IP 都有富余。
路由(Routing):IP 数据包从源到目的地,要经过一系列路由器(Router)。每个路由器只知道下一跳应该去哪里,就像快递中转站——不需要知道全路径,只需要知道往哪里转发。这种去中心化的寻址设计,是互联网可以无限扩展的关键。
IP 还有一个不太体面的职责:分片(Fragmentation)。链路层有最大传输单元(MTU,以太网通常是 1500 字节),过大的 IP 包要在途中被拆成碎片,到终点再拼回去。问题在于任何一片丢失,整个包作废重传,碎片还常被防火墙误伤。现代实践因此尽量绕开它:TCP 按路径探测到的 MTU 调整段大小(Path MTU Discovery),宁可从源头把包切小,也不让中途的路由器动刀。
TCP:可靠传输的代价
IP 只保证"尽力传输"——数据包可能乱序到达、重复到达、甚至丢失。Transmission Control Protocol(TCP)在 IP 之上提供可靠有序的传输。
TCP 的核心机制:
- 三次握手(Three-Way Handshake):建立连接
- ```
- Client --> Server: SYN("我想连接")
- Server --> Client: SYN-ACK("好的,我准备好了")
- Client --> Server: ACK("收到,开始传")
- ```
为什么必须是三次而不是两次?因为双方要各自确认"对方收到了我的起始序号"——两次握手只能覆盖单向。第三次 ACK 还顺带挡掉网络里游荡的过期重复连接请求,那是早期分组交换网络里真实出现过的事故类型。
- 序号与确认(Sequence Numbers & ACK):每个字节都有序号;接收方确认已收到的序号;超时未确认则重传。
- 流量控制(Flow Control):接收方告诉发送方自己的接收窗口大小,防止发送过快导致缓冲区溢出。
- 拥塞控制(Congestion Control):TCP 探测网络拥塞,动态调整发送速率,避免网络被洪水般的重传淹没。这是整个互联网稳定运行的关键机制。
拥塞控制值得展开,因为它是互联网历史上最惊险的一次"急诊手术"。1986 年 10 月,劳伦斯伯克利实验室与伯克利校园之间一条 32 Kbps 的链路,有效吞吐量跌到每秒约 40 比特——这就是拥塞崩溃(congestion collapse):丢包触发重传,重传加剧拥塞,所有人越失败越用力,网络被重传包彻底淹没。当时 TCP 没有拥塞控制,协议本身成了病因。
Van Jacobson 在 1988 年的 SIGCOMM 论文《Congestion Avoidance and Control》中给出药方:发送方维护一个拥塞窗口,限制在途未确认的数据量;连接刚建立时"慢启动",每个确认让窗口翻倍;一旦丢包就把窗口砍半,之后每个往返只线性增加一点。这套"加性增、乘性减"(AIMD)的节奏后来被称为 TCP Tahoe,它让全网发送方在无人指挥的情况下自动退避到公平份额——互联网再没发生过全局性的拥塞崩溃。
此后四十年是这条主线的连续改良。Reno(1990)加入快速恢复,丢个别包不必退回慢启动;这批算法 1999 年被整理为标准 RFC 2581。CUBIC(2008 年发表,2018 年标准化为 RFC 8312)把窗口增长改成三次函数,在高速长距离链路上更快爬回丢包前的速率,自 2006 年 Linux 2.6.19 起就是 Linux 的默认算法——你今天访问的大多数网站都在用它。Google 2016 年提出的 BBR 则换了思路:不再把丢包当作拥塞的唯一信号,而是持续测量链路的瓶颈带宽和往返时延,按"带宽 × 时延"算出该有多少数据在途。它要解决的正是无线网络上"丢包不等于拥塞"的误判。
UDP(User Datagram Protocol)是 TCP 的"无保证"替代:不握手、不确认、不重传,速度快但不可靠。适用于实时性要求高、少量丢包可接受的场景:视频通话、直播、在线游戏。
DNS:把名字变成地址
没有人想记住 172.217.160.142,人类更喜欢 google.com。
DNS(Domain Name System)是互联网的"电话簿":把人类可读的域名翻译成 IP 地址。
DNS 解析的层次结构:
你输入 www.example.com
-> 本地 DNS 缓存(如果有)
-> 本地 DNS 服务器(ISP 提供)
-> 根域名服务器(知道 .com 在哪)
-> .com 顶级域名服务器(知道 example.com 在哪)
-> example.com 的权威服务器(知道 www 的 IP)
-> 返回 IP 地址
```整个过程通常在几十毫秒内完成,而且各级都有缓存,加速重复查询。
DNS 是互联网重要的基础设施,也是攻击目标:DNS 劫持(把域名解析到错误 IP)和 DNS 放大攻击(利用 DNS 进行 DDoS)是常见的网络安全威胁。DNS 自身的层级结构、缓存机制、安全攻防与治理争议,见专文DNS:互联网的命名系统。
HTTPS:加密的 HTTP
HTTP 本身是明文协议——你访问的内容、输入的密码,在网络上可以被任何中间人看到。
TLS(Transport Layer Security,前身为 SSL)在 TCP 和 HTTP 之间加了一层加密:连接建立时完成密钥协商,之后所有数据加密传输,防止监听和篡改。
TLS 的关键技术:
- 非对称加密(RSA 或 ECDH):用于密钥协商和身份验证(服务器用证书证明自己就是 google.com)
- 对称加密(AES 等):密钥协商后,实际数据加密用对称密钥,速度更快
TLS 1.3(RFC 8446,2018 年)是对这套体系的一次大清理:删除已知不安全的算法,取消 RSA 密钥传输,密钥协商强制使用临时 Diffie-Hellman——即使服务器私钥日后泄露,过去被录下来的会话也无法被解密(前向保密)。握手从 TLS 1.2 的两个往返压缩到一个;会话恢复时甚至可以零往返直接发数据,代价是这部分数据可能被重放,应用必须自己掂量哪些请求能放在第一帧里。TLS 1.0 与 1.1 在 2021 年被正式弃用(RFC 8996),TLS 1.2 仍在服役,但新建系统的默认选择已经是 1.3。
BGP:互联网的路由织网者
IP 协议解决了单包路由;但"谁知道去某个 IP 的路?"这个问题,在全球规模上由BGP(Border Gateway Protocol,边界网关协议)解决。
互联网由成千上万个自治系统(Autonomous Systems,AS)组成:每个大型 ISP、大学、企业都是一个 AS,有唯一的 AS 号(如 Google 是 AS15169)。BGP 是 AS 之间互相公告"我能到达哪些 IP 前缀"的协议。
BGP 的设计原则与 TCP/IP 一致:去中心化、每个 AS 只知道直接邻居。一个 BGP 路由表项看起来像:
目标前缀: 8.8.8.0/24 (Google DNS)
AS 路径: 15169 (直接到达 Google)
```这意味着每个路由器收到的不只是"下一跳是谁",而是完整的 AS 路径,使得路由策略(如"不经过某国网络")成为可能。
BGP 的脆弱性:BGP 基于信任——任何 AS 都可以公告任何前缀。这种脆弱性第一次以全球规模暴露是在 1997 年 4 月 25 日:弗吉尼亚一家小运营商 AS7007 的路由器因软件缺陷,把学来的路由拆碎成更具体的 /24 前缀、抹掉原始路径后以自己是源头重新广播。BGP 偏好更具体的前缀,于是大量流量被吸进这家小公司的网络再被丢弃,互联网大面积瘫痪数小时——肇事者甚至不是攻击者,只是一个 bug。2010 年,中国电信意外(或有意,说法不一)公告了大量错误路由,导致全球部分流量绕道经过中国。2008 年,巴基斯坦电信试图封锁 YouTube,结果错误地覆盖了 YouTube 在全球的路由,造成 YouTube 断网约 2 小时。BGP 的这种"任何人都可以声称自己能到达任何地方"的性质,是互联网核心安全漏洞之一。RPKI(Resource Public Key Infrastructure)是解决方案,但部署进展缓慢。
QUIC 与 HTTP/3:重新设计传输层
TCP 在 1970 年代的设计假设:网络丢包主要是因为拥塞,而非物理错误。在有线网络中这是对的;在无线网络(Wi-Fi、4G/5G)中,丢包也可能因为信号质量,此时 TCP 的拥塞控制会错误地降速。
更大的问题是队头阻塞(Head-of-Line Blocking):HTTP/2 在一个 TCP 连接上复用多个请求流,若一个包丢失,所有流都必须等待重传,即使其他流的数据已经到达。
Google 在 2012 年开始开发 QUIC(Quick UDP Internet Connections),2021 年被 IETF 标准化为 RFC 9000,成为 HTTP/3 的传输层:
| 特性 | TCP + TLS + HTTP/2 | QUIC + HTTP/3 |
|---|---|---|
| 握手延迟 | 3+ 往返(TCP 3次握手 + TLS 1.3 1次) | 0-1 往返(连接复用时 0-RTT) |
| 队头阻塞 | 存在(TCP 级别) | 流级别独立,无跨流阻塞 |
| 连接迁移 | 不支持(IP 变化必须重建连接) | 支持(基于连接 ID,换 IP 不断连) |
| 加密 | 可选 | 强制(内置 TLS 1.3) |
截至 2026 年,全球约 25-30% 的 HTTP 流量使用 HTTP/3。QUIC 连接迁移特性使移动设备从 Wi-Fi 切换到 4G 时保持连接不中断——这对移动用户体验的改善是显著的。
QUIC 还有一个不显眼但影响深远的决定:把传输层头部也加密了。中间设备从此看不见重传率、序号这些 TCP 时代随手可得的信息——这既是对 TCP 教训的回应(中间盒动辄丢弃它不认识的选项,让 TCP 三十年没能进化,即"僵化"),也让网络运营者的故障排查变得困难。隐私与可观测性,这次协议设计者明确选了前者。
代价与争议
TCP 的性能代价:三次握手、拥塞控制、重传机制,使 TCP 在高延迟网络(如卫星互联网)上性能很差。QUIC 是解决方案,但 UDP 在某些防火墙和企业网络中被限制,影响 HTTP/3 的覆盖率。
IPv4 到 IPv6 的迁移困境:IPv6 在 1998 年标准化,至今(2026 年)仍未完全替代 IPv4。NAT(网络地址转换,RFC 1631,1994)延缓了 IPv4 枯竭,却也带来了复杂性。IPv6 过渡是互联网历史上最漫长的协议迁移,说明在拥有数十亿节点的系统里做任何改变有多困难。
网络中立性:分层模型假设底层对上层透明——运营商只转发数据,不关心内容。但现实中,ISP 可以对特定应用限速、封锁、优先传输,这是"网络中立性"争议的技术核心。
跨域连接
- 抽象:分层的收益是可替换性——以太网换 Wi-Fi、TCP 换 QUIC,其余各层不必改动,因为每层只依赖相邻接口。代价是跨层信息被隐藏,上层于是会做出错误推断:传输层看不见物理层,就只能把无线信号导致的丢包当成拥塞而降速。推论是性能问题往往不在某层内部,而在抽象泄漏的接缝处。
- 纠错码:链路层校验、传输层校验和、应用层散列看似重复,其实正是端到端论证的实例:低层的差错控制只是性能优化,它能减少重传次数,却不能免除端到端校验。原因是错误可能发生在校验覆盖之外的环节,例如路由器内存或主机总线。只信任链路校验的系统,在多跳路径上会遇到无声损坏。
- 光纤与全反射:协议之下是物理下界。光在石英纤芯中的传播速度约为真空光速的三分之二,跨洋往返时延因此有一块任何算法都掀不动的地板。推论很明确:远距离通信只剩一个可优化方向,就是减少往返次数。合并握手、连接复用、零往返重连之所以被反复投入,正因其余方向已被物理封死。
- 公共政策:网络中立之争的技术核心是分层承诺——「下层看不见上层内容」是规范而非物理事实。一旦深度包检测让运营商有能力按应用区别对待,是否允许就变成政策问题。这给出一条可观察的推论:任何提高下层可见性的做法都会扩大可被规制与歧视的面,于是加密持续上移,把可见字段一层层收回。
- 制度经济学:IPv6 标准化三十年仍未替代 IPv4,机制是标准切换的收益需要多方同时行动,单方升级几乎无回报。更微妙的是网络地址转换这类缓解措施:它降低了地址枯竭的痛感,反而延长了旧标准的寿命。推论具有一般性——兼容性补丁会推迟而非加速范式转换,这正是路径依赖的定义。
参考文献
- Cerf, V. & Kahn, R. A Protocol for Packet Network Intercommunication. IEEE Transactions on Communications, 1974. (TCP 的奠基论文)
- Postel, J. (ed.). Internet Protocol. RFC 791, IETF, 1981.(配套的还有 Transmission Control Protocol. RFC 793, 1981)
- Jacobson, V. Congestion Avoidance and Control. ACM SIGCOMM, 1988.(TCP 拥塞控制的原始论文)
- Stevens, W. TCP/IP Illustrated, Vol. 1. Addison-Wesley, 1994. (网络协议的权威技术参考)
- Tanenbaum, A. & Wetherall, D. Computer Networks. 5th ed. Pearson, 2011.
- Cardwell, N. et al. BBR: Congestion-Based Congestion Control. ACM Queue 14(5), 2016.
- IETF RFC 9000. QUIC: A UDP-Based Multiplexed and Secure Transport. 2021.
- Luckie, M. et al. AS Relationships, Customer Cones, and Validation. IMC 2013. (BGP AS 关系与互联网拓扑研究)