你此刻正在使用互联网——打开浏览器、输入网址、页面加载完成。这个过程不到一秒,但在这不到一秒的时间里,你的请求穿越了至少十几台路由器、跨越了可能数千公里的光纤、经过了 DNS 查询、TCP 握手、TLS 协商、HTTP 请求/响应……而你对这一切几乎毫无感知。
这正是互联网设计者追求的目标:复杂性对用户透明。但如果你是一个工程师,你需要理解这些复杂性——不是出于好奇,而是因为当页面加载慢了 200 毫秒、当 SSH 连接莫名断开、当微服务之间的调用延迟飙升时,你需要知道问题出在哪一层。
本章是整个系列的”地图”。不会深入任何一层的细节(那是后续章节的任务),而是从宏观视角俯瞰互联网的整体架构:互联网是怎么从一个小型军事实验变成全球基础设施的?为什么 IP 协议是整个网络的”窄腰”?数据包从浏览器到服务器到底经历了什么?端到端原则为什么是互联网最根本的设计哲学?
带着这些问题的答案,后续每一章的学习就有了锚点。
一、互联网是什么:从 ARPANET 到全球互联
1.1 冷战催生的实验
1969 年 10 月 29 日晚上 10 点 30 分,UCLA 的程序员 Charley Kline 试图向斯坦福研究所(SRI)发送一条消息——“LOGIN”。他成功发送了”L”和”O”,然后系统崩溃了。第一次互联网传输的数据只有两个字母:“LO”。
这不是一个浪漫的起源故事。ARPANET 的诞生有着明确的军事动机:美国国防部需要一个能在核打击中存活的通信网络。传统的电话网络是中心化的——摧毁一个交换中心,整个区域通信瘫痪。ARPANET 的核心创新是分组交换(Packet Switching):数据被切分成小包,每个包独立寻路,即使部分节点被摧毁,数据包仍能通过其他路径到达目的地。
与分组交换相对的是电路交换——传统电话网络的方式。打电话时,交换机在两端之间建立一条独占的物理通路,通话期间这条通路被你独占,哪怕你沉默不语,带宽也被浪费。分组交换则让所有人共享同一条链路——你的数据包和别人的数据包交替传输,链路利用率大幅提升。
1.2 TCP/IP:统一的语言
ARPANET 最初使用的协议是 NCP(Network Control Protocol),但它有一个致命缺陷:只能连接同构网络。1973 年,Vint Cerf 和 Bob Kahn 开始设计一种能连接异构网络的协议——这就是 TCP/IP。
关键转折发生在 1983 年 1 月 1 日,ARPANET 从 NCP 切换到 TCP/IP。这一天后来被称为”互联网的生日”。为什么 TCP/IP 如此重要?因为它定义了一种通用的网络互联语言——不管底层是以太网、令牌环网还是电话线,只要运行 TCP/IP,就能互相通信。
这次切换并非一帆风顺。所有 ARPANET 节点必须在同一天完成迁移,任何没有及时升级的节点都会从网络中消失——这大概是历史上最大规模的”flag 日期”(Flag Day)迁移。
1.3 从学术到大众
1989 年,Tim Berners-Lee 在 CERN 发明了万维网(WWW)。但互联网真正走向大众是 1990 年代的事,而且每一步转折都由一个具体的技术突破驱动:
- 1993 年:Mosaic 浏览器发布——第一个图形化网页浏览器,让普通人第一次能通过点击浏览网页,而不需要记住命令行参数
- 1995 年:商业 ISP 出现,互联网不再局限于学术界和军方——Netscape IPO 标志着互联网商业化的开始
- 2000 年:宽带(DSL/Cable)取代拨号上网——从 56 Kbps 跃升到 1-10 Mbps,流媒体和在线游戏成为可能
- 2007 年:iPhone 发布,移动互联网时代开启——手机不再是缩小版的电脑,而是重新定义了人与网络的交互方式
- 2020 年代:5G 与卫星互联网(Starlink)——5G 将移动网络延迟压到 10ms 以下,Starlink 用低轨卫星把互联网覆盖到地球的每一个角落
互联网(Internet)和万维网(World Wide Web)不是一回事。互联网是基础设施——由光缆、路由器、协议组成的全球网络;万维网是运行在互联网上的一个应用——由 HTML、HTTP、URL 组成的信息系统。电子邮件、SSH、在线游戏都运行在互联网上,但它们不是万维网。
1.4 互联网治理:没有”老板”的网络
互联网最独特的地方在于:没有人拥有整个互联网。它由数以千计的独立网络(Autonomous System,AS)互联而成,每个 AS 由不同的组织运营。你的家庭网络连接到 ISP 的 AS,ISP 的 AS 通过互联网交换中心(IXP)与其他 AS 互联。
# 查看你的网络接口配置ip addr show
# 典型输出:# 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP# link/ether 00:1a:2b:3c:4d:5e brd ff:ff:ff:ff:ff:ff# inet 192.168.1.100/24 brd 192.168.1.255 scope global eth0# inet6 fe80::1/64 scope link从这个输出你能读到:MAC 地址(00:1a:2b:3c:4d:5e)、IPv4 地址(192.168.1.100)、MTU(1500 字节)、接口状态(UP)。这些概念在以太网与交换和IP 地址与子网中详细解释。
这种”无中心”的架构不是偶然的,而是设计哲学的体现——理解了分层架构和端到端原则后,你会看到这个哲学贯穿互联网的每一层设计。
二、互联网沙漏模型:为什么 IP 是”窄腰”
2.1 沙漏的形状
互联网的协议栈有一个著名的视觉隐喻——沙漏模型(Hourglass Model)。沙漏的顶部是各种应用层协议(HTTP、SMTP、DNS、SSH……),底部是各种链路层技术(以太网、Wi-Fi、光纤、卫星……),而中间最窄的地方只有一个协议:IP。
2.2 窄腰的力量
IP 为什么是”窄腰”?这背后是一个深刻的工程决策:在异构性最大的地方,用最少的协议做最通用的抽象。
试想如果网络层有 10 种不同的协议,就像链路层有 10 种不同的技术一样——那么每个应用层协议都需要为每种网络层协议写一个适配器,每个链路层技术都需要为每种网络层协议写一个驱动。组合数会爆炸。
IP 作为唯一的窄腰,创造了一个解耦点:
- 应用层不需要关心底层用什么链路技术——你写 HTTP 请求时不需要知道数据是通过 Wi-Fi 还是 4G 传输的
- 链路层不需要关心上面跑什么应用——以太网交换机不需要知道它转发的帧里装的是 HTTP 还是 DNS
- IP 是唯一的粘合层——它把上面的一切和下面的一切连接起来
这就是为什么互联网能从 1983 年的 ARPANET 演进到今天的 5G 和卫星互联网——底层链路技术换了无数代,应用层协议从 FTP 进化到 HTTP/3,但 IP 这个窄腰始终没变。
2.3 沙漏模型各层对比
| 层次 | 协议/技术数量 | 设计目标 | 变化速度 | 典型代表 |
|---|---|---|---|---|
| 应用层 | 数十种 | 满足各种应用需求 | 快(每年都有新协议) | HTTP/3、gRPC、WebSocket |
| 传输层 | 两种(TCP/UDP) | 提供不同级别的传输保障 | 慢(TCP 从 1981 年至今基本不变) | TCP、UDP、QUIC |
| 网络层 | 一种(IP) | 提供统一的寻址和路由 | 极慢(IPv4→IPv6 花了 25 年还没完成) | IPv4、IPv6 |
| 链路层 | 数十种 | 适配各种物理介质 | 中等(以太网不断升级速率) | 以太网、Wi-Fi 7、5G |
理解沙漏模型是理解互联网演进的关键。当你看到 QUIC(运行在 UDP 上的新传输协议)或 HTTP/3 时,不要觉得它们打破了沙漏——它们恰恰是在沙漏的上半部分创新,而 IP 这个窄腰保持不变。详细的 QUIC 分析见QUIC 与 HTTP/3。
三、分层架构:五层模型与封装
3.1 为什么需要分层
互联网的协议栈采用分层架构——每一层只关心自己的事情,通过明确定义的接口与相邻层交互。这种设计带来的好处是:
- 关注点分离:每一层只需要理解本层的协议,不需要知道其他层的细节
- 独立演进:Wi-Fi 从 802.11b 升级到 802.11ax,HTTP 从 1.1 升级到 3,两者互不影响
- 故障隔离:网络不通时可以逐层排查——是物理层断线?链路层 MAC 地址冲突?网络层路由错误?传输层端口被占?
3.2 五层模型
互联网协议栈通常用五层模型来描述(它是 OSI 七层模型的简化版,去掉了现实中几乎不用的表示层和会话层):
| 层次 | 名称 | 核心任务 | 数据单位 | 关键协议/设备 |
|---|---|---|---|---|
| 5 | 应用层 | 定义应用间通信的语义 | 消息(Message) | HTTP、DNS、SSH |
| 4 | 传输层 | 端到端的可靠传输 | 报文段(Segment) | TCP、UDP |
| 3 | 网络层 | 全局寻址与路由 | 数据报(Datagram) | IP、ICMP |
| 2 | 链路层 | 相邻节点间的帧传输 | 帧(Frame) | 以太网、ARP |
| 1 | 物理层 | 比特流在介质上的传输 | 比特(Bit) | 光纤、双绞线、无线电波 |
3.3 封装:俄罗斯套娃
当你在浏览器中输入 https://example.com 并按下回车,浏览器构造的 HTTP 请求并不是直接扔到网线上的。它要经过逐层封装——每一层都在上层交付的数据前面加上自己的头部(Header),就像俄罗斯套娃一样:
3.4 一个 HTTP GET 请求的封装过程
用具体的数字来看一个 HTTP GET 请求是如何被封装的:
# 你在浏览器中访问 http://93.184.216.34/# 浏览器构造的 HTTP 请求:GET / HTTP/1.1\r\nHost: example.com\r\nUser-Agent: Mozilla/5.0\r\nAccept: text/html\r\n\r\n第一步:应用层 → 传输层
浏览器将 HTTP 请求交给 TCP。TCP 添加自己的头部(20 字节),包含源端口(如 54321)、目的端口(80)、序号、确认号等:
[TCP 头部: 20 字节] [HTTP 请求: ~150 字节]第二步:传输层 → 网络层
TCP 段交给 IP。IP 添加自己的头部(20 字节),包含源 IP(如 192.168.1.100)、目的 IP(93.184.216.34)、TTL(64)等:
[IP 头部: 20 字节] [TCP 头部: 20 字节] [HTTP 请求: ~150 字节]第三步:网络层 → 链路层
IP 数据报交给以太网。以太网添加帧头(14 字节,包含源 MAC 和目的 MAC)和帧尾(4 字节 FCS 校验):
[以太网帧头: 14 字节] [IP 头部: 20 字节] [TCP 头部: 20 字节] [HTTP 请求: ~150 字节] [FCS: 4 字节]一个约 150 字节的 HTTP 请求,经过封装后变成了约 228 字节的以太网帧。额外的 78 字节都是协议头部——这就是”协议开销”。
3.5 解封装:接收端的逆向过程
当服务器收到这个帧时,解封装的过程恰好相反:
- 链路层:检查目的 MAC 是否匹配,验证 FCS,剥离帧头帧尾,将 IP 数据报交给网络层
- 网络层:检查目的 IP 是否匹配,检查 TTL,剥离 IP 头部,将 TCP 段交给传输层
- 传输层:检查目的端口(80),验证校验和,剥离 TCP 头部,将 HTTP 请求交给应用层
- 应用层:Web 服务器解析 HTTP 请求,生成响应
每一层只看自己的头部,不关心其他层的内容——这就是分层的力量。
四、端到端原则:互联网的设计哲学
4.1 什么是端到端原则
1984 年,Jerome Saltzer、David Reed 和 David Clark 发表了一篇论文 “End-to-End Arguments in System Design”,提出了互联网最根本的设计原则:
功能应该在通信系统的端点实现,而不是在网络中间实现。
翻译成大白话:网络中间的路由器和交换机应该尽可能”傻”,只做转发;智能逻辑(可靠性、安全性、拥塞控制)应该放在通信的两端(发送方和接收方)。
4.2 电话网络 vs 互联网:两种设计哲学
为了理解端到端原则,最好的方式是对比两种截然不同的网络设计:
| 维度 | 电话网络 | 互联网 |
|---|---|---|
| 设计哲学 | 智能网络,傻瓜终端 | 傻瓜网络,智能终端 |
| 通信方式 | 电路交换(独占一条通路) | 分组交换(共享网络带宽) |
| 可靠性保障 | 网络保证(交换机负责) | 端点保证(TCP 重传) |
| 安全性 | 网络保证(物理隔离) | 端点保证(TLS 加密) |
| 新应用部署 | 需要网络设备升级 | 只需端点软件升级 |
| 计费方式 | 按时间/距离 | 按带宽 |
| 典型故障模式 | 交换机故障→大面积瘫痪 | 路由器故障→自动绕路 |
4.3 为什么端到端原则让互联网如此灵活
考虑一个具体例子:1990 年代,没有人想到互联网上会跑视频通话(Zoom、FaceTime)。如果互联网像电话网络一样,在网络中间实现”通话”功能,那么要支持视频通话就需要升级全球所有的交换机——这几乎不可能。
但互联网是”傻瓜网络”——路由器只做转发,不关心数据包里装的是什么。所以当视频通话应用出现时,只需要在端点(你的电脑和 Zoom 服务器)安装软件就行了,中间的路由器完全不需要改动。
这就是端到端原则的威力:网络中间越简单,端点能做的事情就越多。
4.4 端到端原则的例外
当然,端到端原则不是绝对的。现实中有很多”违反”端到端原则的设计,而且它们有充分的理由:
- NAT(网络地址转换):在路由器上修改 IP 地址和端口,解决了 IPv4 地址不足的问题,但也破坏了端到端的可达性。详细的 NAT 机制见NAT 与中间盒
- CDN(内容分发网络):在网络边缘缓存内容,减少延迟,但引入了中间节点
- 防火墙:在网络中间过滤流量,提供安全性,但违反了”网络不检查内容”的原则
NAT 是互联网最大的”技术债”。它解决了 IPv4 地址耗尽的燃眉之急,但也让 P2P 通信变得困难、让端到端加密更复杂、让网络调试更痛苦。IPv6 的设计目标之一就是消除 NAT,但迁移进度远比预期慢。IPv6 的详细分析见NAT 与中间盒。
五、一个数据包的完整旅程预览
现在,把前面学到的所有概念串起来,跟踪一个数据包从浏览器到服务器的完整旅程。这个旅程会经过后续几乎每一章涉及的主题。
5.1 场景:访问 https://example.com
你在浏览器地址栏输入 https://example.com 并按下回车。接下来发生的事情:
5.2 旅程的每一步
第 1 步:DNS 查询 — 浏览器需要知道 example.com 的 IP 地址。它向 DNS 服务器发送查询,DNS 服务器返回 93.184.216.34。DNS 是互联网的”电话簿”——把人类可读的域名翻译成机器可读的 IP 地址。详细机制见DNS 域名系统。
第 2 步:TCP 三次握手 — 拿到 IP 地址后,浏览器与服务器建立 TCP 连接。三次握手(SYN → SYN-ACK → ACK)确保双方都准备好收发数据。为什么需要握手?因为网络是不可靠的——旧的连接请求可能还在网络中游荡,握手可以避免混淆。详细分析见TCP 连接管理。
第 3 步:TLS 握手 — 因为 URL 以 https 开头,浏览器需要与服务器协商加密参数。TLS 握手交换证书、协商密钥、验证身份,确保后续数据传输是加密的。详细过程见TLS 与安全通道。
第 4 步:发送 HTTP 请求 — TLS 通道建立后,浏览器发送 HTTP GET 请求。HTTP 定义了请求的格式和语义。详细协议分析见HTTP 协议演进。
第 5 步:交换机转发 — 数据包从你的电脑出发,首先到达本地交换机。交换机工作在链路层,根据 MAC 地址转发帧。它不关心 IP 地址,只看”下一跳”的 MAC 地址。详细的以太网和交换机机制见以太网与交换。
第 6 步:路由器转发 — 数据包到达路由器,路由器工作在网络层,根据 IP 地址查路由表决定下一跳。路由表是怎么构建的?这涉及路由协议(OSPF、BGP)。详细机制见域内路由和BGP 与域间路由。
第 7 步:穿越 ISP — 数据包从你的家庭网络进入 ISP 的网络。ISP 是互联网的”骨干”——它们拥有大范围的光纤网络和路由器集群。详细的 ISP 生态见运营商骨干网与流量工程。
第 8 步:经过 IXP — 如果目标服务器不在你的 ISP 网络内,数据包需要通过 IXP(互联网交换中心)转移到另一个 ISP 的网络。IXP 是不同 ISP 之间”握手”的地方。详细机制见IXP 与互联网交换。
第 9 步:到达服务器 — 数据包经过对端 ISP 的路由器,最终到达目标服务器所在的数据中心。服务器逐层解封装,最终将 HTTP 响应沿同一路径(或不同路径)返回。
5.3 用 traceroute 观察真实路径
你可以用 traceroute 命令观察数据包经过的每一跳路由器:
# Linux/macOStraceroute example.com
# Windowstracert example.com典型的输出如下:
traceroute to example.com (93.184.216.34), 30 hops max, 60 byte packets 1 _gateway (192.168.1.1) 0.523 ms 0.389 ms 0.312 ms 2 10.0.0.1 (10.0.0.1) 1.234 ms 1.156 ms 1.089 ms 3 isp-router-1.net (203.0.113.1) 5.678 ms 5.432 ms 5.321 ms 4 core-router-2.net (198.51.100.1) 12.345 ms 12.234 ms 12.123 ms 5 ixp-peering.net (185.0.1.1) 15.678 ms 15.567 ms 15.456 ms 6 peer-router-1.net (172.16.0.1) 18.901 ms 18.789 ms 18.678 ms 7 dc-edge.example.com (93.184.216.1) 20.123 ms 20.012 ms 19.901 ms 8 example.com (93.184.216.34) 21.456 ms 21.345 ms 21.234 ms每一行代表一跳路由器,三个时间值是三次探测的延迟。从这个输出可以看到:数据包从家庭网关(第 1 跳)出发,经过 ISP 路由器(第 3-4 跳),穿越 IXP(第 5 跳),到达对端网络(第 6-8 跳)。
traceroute 的原理很巧妙:它发送 TTL(Time To Live)从 1 开始递增的 IP 数据包。每经过一个路由器,TTL 减 1;当 TTL 减到 0 时,路由器丢弃该包并返回 ICMP 超时消息。这样就能逐跳探测路径。TTL 和 ICMP 的详细机制见IP 地址与子网。
5.4 用 ping 测量延迟
# 测量到 example.com 的往返延迟ping -c 5 example.com
# 输出:# PING example.com (93.184.216.34) 56(84) bytes of data.# 64 bytes from 93.184.216.34: icmp_seq=1 ttl=56 time=21.3 ms# 64 bytes from 93.184.216.34: icmp_seq=2 ttl=56 time=20.8 ms# 64 bytes from 93.184.216.34: icmp_seq=3 ttl=56 time=21.1 ms# 64 bytes from 93.184.216.34: icmp_seq=4 ttl=56 time=20.9 ms# 64 bytes from 93.184.216.34: icmp_seq=5 ttl=56 time=21.0 ms# --- example.com ping statistics ---
# rtt min/avg/max/mdev = 20.800/21.020/21.300/0.172 msping 使用 ICMP 协议(工作在网络层),发送一个 Echo Request,等待对方返回 Echo Reply。从输出可以看到:5 个包全部到达,平均往返延迟约 21ms,丢包率 0%。
六、互联网的关键数字
理解互联网不仅需要概念框架,还需要对真实数据有直觉。以下数字帮助你建立这种直觉。
6.1 延迟:距离的代价
光速是物理定律,它给网络延迟设定了不可逾越的下限。光在真空中的速度约 300,000 km/s,但在光纤中(折射率约 1.5)只有约 200,000 km/s。再加上路由器的处理延迟和排队延迟,实际延迟远高于光速极限:
# 查看本机路由表ip route show
# 典型输出:# default via 192.168.1.1 dev eth0# 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100第一行是默认路由——所有不知道怎么走的数据包都发给 192.168.1.1(你的家庭路由器)。路由的详细机制见IP 地址与子网。
| 路径 | 距离 | 光纤延迟(理论) | 实际 RTT | 倍率 |
|---|---|---|---|---|
| 同城(~50 km) | 50 km | ~0.5 ms | 1-3 ms | 2-6x |
| 同国(~1000 km) | 1000 km | ~10 ms | 15-30 ms | 1.5-3x |
| 跨洲(~8000 km) | 8000 km | ~80 ms | 100-150 ms | 1.3-1.9x |
| 跨太平洋(~10000 km) | 10000 km | ~100 ms | 120-200 ms | 1.2-2x |
为什么实际延迟是理论值的 1.5-3 倍?因为数据包不是走直线——光纤沿着海底地形铺设,路由策略可能绕行,每跳路由器还有处理和排队延迟。理解了这些,你就知道”延迟不可能低于光速极限”这个硬约束。
6.2 带宽:管道的宽度
带宽和延迟是两个独立的维度——带宽是”管道有多宽”,延迟是”管道有多长”。高带宽不等于低延迟:
# 查看网络接口信息ifconfig eth0
# 典型输出:# eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500# inet 192.168.1.100 netmask 255.255.255.0 broadcast 192.168.1.255# inet6 fe80::1 prefixlen 64 scopeid 0x20<link># ether 00:1a:2b:3c:4d:5e txqueuelen 1000 (Ethernet)# RX packets 1234567 bytes 890123456 (890.1 MB)# TX packets 987654 bytes 567890123 (567.9 MB)| 连接类型 | 典型下行带宽 | 典型延迟 | 典型场景 |
|---|---|---|---|
| 拨号上网 | 56 Kbps | 100-200 ms | 1990 年代的互联网 |
| 家庭宽带 | 100-1000 Mbps | 5-20 ms | 大多数家庭用户 |
| 企业专线 | 1-10 Gbps | 1-5 ms | 数据中心互联 |
| 5G 移动网络 | 100-1000 Mbps | 10-30 ms | 移动设备 |
| 卫星互联网(Starlink) | 50-200 Mbps | 20-40 ms | 偏远地区 |
一个经典的类比:带宽是高速公路的车道数,延迟是你从起点到终点需要开多久。增加车道数(带宽)不能缩短行车时间(延迟),但能让更多车同时上路(吞吐量)。
6.3 丢包率与可靠性
互联网是”尽力而为”(Best-Effort)的网络——IP 协议不保证数据包一定到达。丢包的原因包括:网络拥塞(路由器缓冲区溢出)、链路错误(光纤损坏)、路由环路(TTL 耗尽)。
# 查看网络连接统计ss -s
# 典型输出:# Total: 234 (kernel 0, TCP: 156, UDP: 12, RAW: 0)# TCP: 156 (estab 89, closed 23, orphaned 0, timewait 12)# Transport Total IP IPv6# RAW 0 0 0# UDP 12 8 4# TCP 156 120 36# INET 168 128 40# FRAG 0 0 0# 查看网络接口的丢包统计netstat -i
# 典型输出:# Kernel Interface table# Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg# eth0 1500 1234567 0 12 0 987654 0 0 0 BMRU# lo 65536 56789 0 0 0 56789 0 0 0 LRU从 netstat -i 的输出中,RX-DRP(接收丢包)和 TX-DRP(发送丢包)列告诉你是否有丢包。上例中 eth0 接收了 12 个丢包——可能是缓冲区不足或中断处理不及时。
| 网络环境 | 典型丢包率 | 影响 |
|---|---|---|
| 局域网 | < 0.01% | 几乎无影响 |
| 家庭宽带 | 0.01%-0.1% | TCP 自动重传,用户无感知 |
| 移动网络 | 0.1%-1% | 视频通话可能卡顿 |
| 跨洲链路 | 0.01%-0.5% | TCP 吞吐量下降 |
| 拥塞链路 | 1%-5% | 明显卡顿,TCP 急剧降速 |
6.4 互联网规模
# 查看 DNS 解析配置cat /etc/resolv.conf
# 典型输出:# nameserver 8.8.8.8# nameserver 8.8.4.4# search localdomain| 指标 | 数值 | 说明 |
|---|---|---|
| 全球互联网用户 | ~55 亿 | 约占全球人口的 68% |
| 全球网站数量 | ~19 亿 | 包含大量不活跃站点 |
| 全球 AS 数量 | ~75,000 | 独立运营的网络 |
| 全球 IPv4 地址 | ~43 亿 | 已全部分配完毕 |
| 全球 IPv6 采用率 | ~40% | 各国差异巨大 |
| 跨太平洋光纤延迟 | ~70 ms | 单程,光速限制 |
| 典型网页加载时间 | ~2-3 秒 | 包含 DNS、TCP、TLS、HTTP |
| 全球日均 DNS 查询 | ~2 万亿 | 每秒约 2300 万次 |
| 海底光缆总长 | ~140 万公里 | 绕地球 35 圈 |
| 典型 MTU | 1500 字节 | 以太网最大传输单元 |
6.5 用 curl 观察完整的请求过程
# 使用 curl -v 观察一次完整的 HTTP 请求curl -v https://example.com
# 输出(简化):# * Trying 93.184.216.34:443...# * Connected to example.com (93.184.216.34) port 443# * ALPN: curl offers h2,http/1.1# * TLSv1.3 (OUT), TLS handshake, Client hello (xxx bytes)# * TLSv1.3 (IN), TLS handshake, Server hello (xxx bytes)# * TLSv1.3 (IN), TLS handshake, Certificate (xxx bytes)# * TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1 bytes)# * TLSv1.3 (OUT), TLS handshake, Finished (xxx bytes)# * TLSv1.3 (IN), TLS handshake, Finished (xxx bytes)# * SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384# > GET / HTTP/1.1# > Host: example.com# > User-Agent: curl/8.x.x# > Accept: */*# ># < HTTP/1.1 200 OK# < Content-Type: text/html# < Content-Length: 1256# <# <!doctype html>...从这个输出可以看到完整的连接过程:DNS 解析 → TCP 连接 → TLS 握手 → HTTP 请求/响应。每一步的详细机制都会在后续章节展开。
# 只测量连接各阶段耗时curl -w "DNS: %{time_namelookup}s\nTCP: %{time_connect}s\nTLS: %{time_appconnect}s\nTTFB: %{time_starttransfer}s\nTotal: %{time_total}s\n" -o /dev/null -s https://example.com
# 典型输出:# DNS: 0.023s# TCP: 0.045s# TLS: 0.089s# TTFB: 0.112s# Total: 0.125s这个输出清晰地展示了各阶段耗时:DNS 查询 23ms,TCP 连接 45ms,TLS 握手 89ms,首字节到达 112ms,总耗时 125ms。注意 TLS 握手占了总耗时的 70%——这就是为什么 TLS 1.3 致力于减少握手往返次数。
七、动手实践:感受互联网
7.1 观察你的网络接口
# 查看网络接口详细信息(新版工具)ip addr show
# 典型输出:# 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP# link/ether 00:1a:2b:3c:4d:5e brd ff:ff:ff:ff:ff:ff# inet 192.168.1.100/24 brd 192.168.1.255 scope global eth0# inet6 fe80::1/64 scope link从这个输出你能读到:MAC 地址(00:1a:2b:3c:4d:5e)、IPv4 地址(192.168.1.100)、MTU(1500 字节)、接口状态(UP)。这些概念在以太网与交换和IP 地址与子网中详细解释。
7.2 观察路由表
# 查看完整路由表ip route show
# 典型输出:# default via 192.168.1.1 dev eth0# 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100第一行是默认路由——所有不知道怎么走的数据包都发给 192.168.1.1(你的家庭路由器)。路由的详细机制见域内路由。
7.3 观察 ARP 表
# 查看 ARP 缓存(IP → MAC 映射)ip neigh show
# 典型输出:# 192.168.1.1 dev eth0 lladdr aa:bb:cc:dd:ee:ff REACHABLE# 192.168.1.5 dev eth0 lladdr 11:22:33:44:55:66 STALEARP 协议把 IP 地址映射到 MAC 地址——这是链路层和网络层之间的桥梁。详细的 ARP 机制见ARP 与首跳路由。
7.4 观察活跃连接
# 查看所有 TCP 连接ss -tnp
# 典型输出:# State Recv-Q Send-Q Local Address:Port Peer Address:Port Process# ESTAB 0 0 192.168.1.100:54321 93.184.216.34:443 users:(("chrome",pid=1234))# ESTAB 0 0 192.168.1.100:54322 140.82.121.6:443 users:(("chrome",pid=1234))# TIME-WAIT 0 0 192.168.1.100:54320 151.101.1.69:443从这个输出可以看到:你的浏览器与哪些服务器建立了 TCP 连接、连接处于什么状态(ESTAB/TIME-WAIT)、对应的进程是什么。TCP 状态机的详细分析见TCP 连接管理。
八、本章小结
| 主题 | 核心要点 | 关键词 |
|---|---|---|
| 互联网简史 | 从 ARPANET 的军事实验到 TCP/IP 的统一,从学术网络到全球基础设施 | ARPANET、TCP/IP、分组交换 |
| 沙漏模型 | IP 是窄腰——上面是多种应用协议,下面是多种链路技术,中间只有一个 IP | 窄腰、解耦、异构互联 |
| 分层架构 | 五层模型(物理→链路→网络→传输→应用),每层封装/解封装,关注点分离 | 封装、解封装、协议头部 |
| 端到端原则 | 智能在端点而非网络中间——这让互联网能不断演进而不需要升级核心设备 | 傻瓜网络、智能终端、灵活性 |
| 数据包旅程 | 浏览器→DNS→TCP→TLS→HTTP→交换机→路由器→ISP→IXP→服务器 | 全链路、逐跳转发 |
| 关键数字 | 光纤延迟≈5ms/1000km,跨太平洋≈70ms,典型网页≈2-3s,用户≈55亿 | 延迟、带宽、丢包率 |
带着这个全景视角,接下来深入协议栈的最底层——物理介质与编码,看看比特是如何在铜线、光纤和无线电波中传输的。
支持与分享
如果这篇文章对你有帮助,欢迎支持作者或分享给更多人
部分信息可能已经过时






