全书骨架:一次请求的六段旅程
这本书只讲一件事——「在浏览器输入网址之后发生了什么」。六章按数据前进的顺序排列,每章负责旅程的一段:
不按协议分层讲,而按数据的物理行程讲——分层知识被自然地穿在旅程上,这是它比教材好读的根本原因。
每一段都同时回答「软件在做什么」(浏览器、协议栈、驱动)和「硬件在做什么」(网卡、网线、交换机、光纤)。
读完你应能不查资料,口头完整回答面试经典题:「从输入 URL 到页面显示,中间发生了什么?」
浏览器生成消息 —— 旅程从 URL 开始
浏览器本身并不会收发网络数据,它只负责把你的意图翻译成一条 HTTP 消息,然后把「发送」这件事委托给操作系统。
URL 解析:浏览器读懂你要什么
浏览器先拆解 URL:协议(http: / https:)决定用什么规则对话,主机名决定找谁,路径决定要哪个文件。随后组装 HTTP 请求消息——一行请求行(方法 + URI + 版本)、若干头部字段、可选的消息体。方法里最常用的是取数据的 GET 与提交数据的 POST。
DNS 查询:把名字换成地址
发送消息前必须知道服务器的 IP 地址。浏览器调用 Socket 库中的解析器(resolver),由它生成 DNS 查询,发给操作系统里配置的 DNS 服务器。DNS 是一棵分层的树:根服务器知道顶级域在哪,顶级域知道权威服务器在哪,逐级接力直到拿到 A 记录。近处的 DNS 服务器会缓存结果,所以大多数查询根本走不到根。
委托协议栈:调用 Socket 库的四个动作
拿到 IP 后,浏览器对操作系统说「帮我把这条消息送过去」。这个委托通过 Socket 库的四个基本操作完成:创建套接字(socket)、连接(connect)、收发(write/read)、断开(close)。记住这四步,第二章协议栈的所有内容都是它们的展开。
协议栈与网卡 —— 把消息变成电信号
这是全书最厚也最重要的一章:操作系统内部的 TCP/IP 软件如何建立连接、拆分数据、保证可靠,最后由网卡把比特变成电信号。
协议栈的分工
三次握手与四次挥手
连接(connect)阶段就是 TCP 三次握手:客户端发 SYN,服务器回 SYN+ACK,客户端再回 ACK——双方各自确认「我能发、你能收」。断开(close)则通常要四个报文,因为两个方向的数据流要分别关闭。书里强调:「连接」不是一条真实电路,只是通信双方各自记住了对方的状态(序号、窗口等控制信息)。
可靠传输的三件套:序号、确认、重传
TCP 把数据切成 MSS 大小的段,每段带序号;接收方用 ACK 号告诉对方「这之前的我都收到了」;发送方超时未收到确认就重传。窗口机制允许不等确认连续发送多个段,把「一问一答」变成流水线——这正是滑动窗口的由来。
IP 打包与网卡发送
TCP 段交给 IP 后加上 IP 头(源/目的地址)与 MAC 头(下一跳的物理地址,靠 ARP 查询获得),成为完整的包。网卡驱动把包交给网卡,网卡加上报头、起始帧分界符和 FCS 校验,把数字比特转换成电信号发上网线。
线缆与网络设备 —— 信号的第一段路
离开网卡的电信号沿着双绞线前进,穿过集线器、交换机,最后由路由器决定去向。三种设备代表三种完全不同的转发逻辑。
三种设备、三种智商
书里给出一个精确的对比:交换机「转发帧的原样」,路由器则是「先完整接收包、卸掉 MAC 头,查表决定下一跳后再装上新 MAC 头发出」——所以路由器是一次「重新发货」,而不是「顺手转发」。
信号劣化与全双工
双绞线的绞合是为了抑制电磁噪声(两根线上的干扰相互抵消);信号跑得越远衰减越厉害,所以以太网有长度限制。交换机端口成对收发线路分离,可以同时收发(全双工),碰撞从此成为历史概念。
接入网与运营商 —— 穿越互联网内部
家里的路由器之后是普通人看不见的世界:接入网把你连到运营商,运营商之间用 BGP 交换路由,你的包在骨干网上被接力传递。
接入网:最后一公里
书成书时的主角是 ADSL(电话线上叠加高频信号)与 FTTH(光纤到户,光信号在光纤内全反射前进)。技术演进到今天光纤已是主流,但结构不变:用户线路 → 局端设备 → 运营商网络。宽带认证由 BAS/PPPoE 完成——先验证你是合法用户,再给你分配 IP。
运营商的内部:POP、NOC 与 IX
运营商的接入点(POP)汇聚用户流量,核心节点(NOC)之间高速互联。不同运营商在 IX(互联网交换中心)交换流量,或者直接对等互联。路由信息靠 BGP 传播:每家运营商向邻居宣告「到我的用户网络怎么走」,全球路由表由此拼成。
服务器端的局域网 —— 抵达前的层层关卡
包到达服务器所在的网络后并不会直达 Web 进程:防火墙先检查,负载均衡器再分流,缓存与 CDN 甚至可能让请求根本到不了源站。
防火墙:按规则放行
包过滤防火墙检查每个包的地址与端口,按规则放行或丢弃——比如只允许目的端口 80/443 的入站包。书中提醒:防火墙挡不住「内容合法但意图恶意」的流量,它只是第一道闸门。
负载均衡与缓存
单台服务器扛不住时有两条路:用负载均衡器把请求分给多台 Web 服务器;或用缓存服务器把不变的内容记下来直接回答。把缓存服务器搬到离用户近的地方、由专业公司统一运营,就是 CDN——内容分发网络的本质是「提前把货铺到你家附近的仓库」。
抵达服务器,响应返回 —— 旅程的终点与折返
最后一章把前五章倒着放一遍:服务器协议栈收包、重组、交给 Web 服务器程序,生成响应后原路返回,浏览器解析渲染,旅程结束。
服务器侧的接收过程
服务器网卡收到信号还原成包,协议栈校验 FCS、剥离各层头部、按序号重组 TCP 数据流,通过端口号找到监听中的 Web 服务器进程。Web 服务器解析请求 URI,读取文件或执行程序(CGI/应用逻辑),组装 HTTP 响应。
响应返回与页面渲染
响应沿着完全相同的机制回程——只是方向相反。浏览器收到 HTML 后开始解析,遇到图片、样式表等资源再发起新的请求(每个资源都是一次独立的小旅程),最终把页面绘制到屏幕上。