网络知识总库

Book Notes · 11 / 14 · 中文入门

网络是怎样连接的
精读笔记

户根勤把一次普通的网页访问拆成一场六章的旅行:从你按下回车,到页面出现在屏幕上,数据经过了浏览器、协议栈、网卡、交换机、路由器、接入网、运营商骨干,最后抵达服务器再原路返回。本笔记以原创转述提炼每章的核心机制,并挂上站内可交互的演示与规范原文。

作者 户根勤难度 零基础友好建议用时 约一周笔记形式 逐章精读

全书骨架:一次请求的六段旅程

这本书只讲一件事——「在浏览器输入网址之后发生了什么」。六章按数据前进的顺序排列,每章负责旅程的一段:

① 浏览器生成消息→ ② 协议栈与网卡→ ③ 网线·集线器·交换机·路由器→ ④ 接入网与运营商→ ⑤ 服务器端的防火墙与缓存→ ⑥ Web 服务器与响应返回
FIG.0 — 全书结构即数据路径:每一章都是旅程的下一跳
一条主线

不按协议分层讲,而按数据的物理行程讲——分层知识被自然地穿在旅程上,这是它比教材好读的根本原因。

两个视角

每一段都同时回答「软件在做什么」(浏览器、协议栈、驱动)和「硬件在做什么」(网卡、网线、交换机、光纤)。

一个终点

读完你应能不查资料,口头完整回答面试经典题:「从输入 URL 到页面显示,中间发生了什么?」

01

浏览器生成消息 —— 旅程从 URL 开始

浏览器本身并不会收发网络数据,它只负责把你的意图翻译成一条 HTTP 消息,然后把「发送」这件事委托给操作系统。

URL 解析:浏览器读懂你要什么

浏览器先拆解 URL:协议(http: / https:)决定用什么规则对话,主机名决定找谁,路径决定要哪个文件。随后组装 HTTP 请求消息——一行请求行(方法 + URI + 版本)、若干头部字段、可选的消息体。方法里最常用的是取数据的 GET 与提交数据的 POST。

DNS 查询:把名字换成地址

发送消息前必须知道服务器的 IP 地址。浏览器调用 Socket 库中的解析器(resolver),由它生成 DNS 查询,发给操作系统里配置的 DNS 服务器。DNS 是一棵分层的树:根服务器知道顶级域在哪,顶级域知道权威服务器在哪,逐级接力直到拿到 A 记录。近处的 DNS 服务器会缓存结果,所以大多数查询根本走不到根。

浏览器→解析器 (Socket 库)→本地 DNS 服务器→根→.com→权威服务器 → IP 地址
FIG.1 — DNS 接力查询:缓存命中时前三跳就结束

委托协议栈:调用 Socket 库的四个动作

拿到 IP 后,浏览器对操作系统说「帮我把这条消息送过去」。这个委托通过 Socket 库的四个基本操作完成:创建套接字(socket)、连接(connect)、收发(write/read)、断开(close)。记住这四步,第二章协议栈的所有内容都是它们的展开。

易混淆:「浏览器发送了请求」是简化说法——浏览器只生成消息并调用 Socket 库;真正把字节送上网线的是操作系统协议栈和网卡。分清「委托方」和「执行方」,后面几章才不会乱。
02

协议栈与网卡 —— 把消息变成电信号

这是全书最厚也最重要的一章:操作系统内部的 TCP/IP 软件如何建立连接、拆分数据、保证可靠,最后由网卡把比特变成电信号。

协议栈的分工

应用程序浏览器、解析器——生成消息 TCP / UDP负责「可靠地送到」或「快速地送出」,以端口号区分应用 IP负责「送往哪台机器」,逐跳转发数据包 驱动 + 网卡负责把数字信息变成电/光信号发上线缆

三次握手与四次挥手

连接(connect)阶段就是 TCP 三次握手:客户端发 SYN,服务器回 SYN+ACK,客户端再回 ACK——双方各自确认「我能发、你能收」。断开(close)则通常要四个报文,因为两个方向的数据流要分别关闭。书里强调:「连接」不是一条真实电路,只是通信双方各自记住了对方的状态(序号、窗口等控制信息)。

SYN→SYN + ACK→ACK · 连接建立‖FIN→ACK→FIN→ACK · 连接关闭
FIG.2 — 三次握手建立 · 四次挥手断开

可靠传输的三件套:序号、确认、重传

TCP 把数据切成 MSS 大小的段,每段带序号;接收方用 ACK 号告诉对方「这之前的我都收到了」;发送方超时未收到确认就重传。窗口机制允许不等确认连续发送多个段,把「一问一答」变成流水线——这正是滑动窗口的由来。

IP 打包与网卡发送

TCP 段交给 IP 后加上 IP 头(源/目的地址)与 MAC 头(下一跳的物理地址,靠 ARP 查询获得),成为完整的包。网卡驱动把包交给网卡,网卡加上报头、起始帧分界符和 FCS 校验,把数字比特转换成电信号发上网线。

易混淆:IP 地址是「终点地址」,全程不变;MAC 地址是「下一跳地址」,每过一个路由器就换一次。书中的比喻:IP 是收件人地址,MAC 是下一段快递的中转站编号。
03

线缆与网络设备 —— 信号的第一段路

离开网卡的电信号沿着双绞线前进,穿过集线器、交换机,最后由路由器决定去向。三种设备代表三种完全不同的转发逻辑。

三种设备、三种智商

集线器工作在物理层:不看任何地址,把信号广播给所有端口(书中用它讲清「共享介质」时代的碰撞问题) 交换机工作在链路层:学习 MAC 地址表,只把帧转发到目标所在端口 路由器工作在网络层:查路由表按 IP 前缀转发,每一跳重写 MAC 头

书里给出一个精确的对比:交换机「转发帧的原样」,路由器则是「先完整接收包、卸掉 MAC 头,查表决定下一跳后再装上新 MAC 头发出」——所以路由器是一次「重新发货」,而不是「顺手转发」。

信号劣化与全双工

双绞线的绞合是为了抑制电磁噪声(两根线上的干扰相互抵消);信号跑得越远衰减越厉害,所以以太网有长度限制。交换机端口成对收发线路分离,可以同时收发(全双工),碰撞从此成为历史概念。

易混淆:路由器隔离广播域,交换机不隔离——ARP 请求这类广播帧会淹没整个交换网络,但过不了路由器。这一条在排障与面试里出现频率极高。
04

接入网与运营商 —— 穿越互联网内部

家里的路由器之后是普通人看不见的世界:接入网把你连到运营商,运营商之间用 BGP 交换路由,你的包在骨干网上被接力传递。

接入网:最后一公里

书成书时的主角是 ADSL(电话线上叠加高频信号)与 FTTH(光纤到户,光信号在光纤内全反射前进)。技术演进到今天光纤已是主流,但结构不变:用户线路 → 局端设备 → 运营商网络。宽带认证由 BAS/PPPoE 完成——先验证你是合法用户,再给你分配 IP。

运营商的内部:POP、NOC 与 IX

运营商的接入点(POP)汇聚用户流量,核心节点(NOC)之间高速互联。不同运营商在 IX(互联网交换中心)交换流量,或者直接对等互联。路由信息靠 BGP 传播:每家运营商向邻居宣告「到我的用户网络怎么走」,全球路由表由此拼成。

家庭路由器→接入网 (FTTH)→BAS / 认证→POP→NOC 骨干→IX / 对等互联 → 目标运营商
FIG.4 — 从家门口到互联网骨干的层层汇聚
时代注记:ADSL/PPPoE 的细节今天读来有年代感,跳读即可——但「接入 → 汇聚 → 骨干 → 互联」的层次结构与 BGP 的角色至今未变,这才是本章要带走的东西。
05

服务器端的局域网 —— 抵达前的层层关卡

包到达服务器所在的网络后并不会直达 Web 进程:防火墙先检查,负载均衡器再分流,缓存与 CDN 甚至可能让请求根本到不了源站。

防火墙:按规则放行

包过滤防火墙检查每个包的地址与端口,按规则放行或丢弃——比如只允许目的端口 80/443 的入站包。书中提醒:防火墙挡不住「内容合法但意图恶意」的流量,它只是第一道闸门。

负载均衡与缓存

单台服务器扛不住时有两条路:用负载均衡器把请求分给多台 Web 服务器;或用缓存服务器把不变的内容记下来直接回答。把缓存服务器搬到离用户近的地方、由专业公司统一运营,就是 CDN——内容分发网络的本质是「提前把货铺到你家附近的仓库」。

互联网→防火墙→负载均衡器→Web 服务器 ×N‖CDN 边缘缓存(可能提前应答)
FIG.5 — 服务器端的入口链路:每一层都可能改变包的去向
06

抵达服务器,响应返回 —— 旅程的终点与折返

最后一章把前五章倒着放一遍:服务器协议栈收包、重组、交给 Web 服务器程序,生成响应后原路返回,浏览器解析渲染,旅程结束。

服务器侧的接收过程

服务器网卡收到信号还原成包,协议栈校验 FCS、剥离各层头部、按序号重组 TCP 数据流,通过端口号找到监听中的 Web 服务器进程。Web 服务器解析请求 URI,读取文件或执行程序(CGI/应用逻辑),组装 HTTP 响应。

响应返回与页面渲染

响应沿着完全相同的机制回程——只是方向相反。浏览器收到 HTML 后开始解析,遇到图片、样式表等资源再发起新的请求(每个资源都是一次独立的小旅程),最终把页面绘制到屏幕上。

全书收束:合上书自问——「输入 URL 到页面显示」你能连续讲几分钟?能讲到 DNS、握手、封装、路由、防火墙、渲染各环节,本书使命即告完成;卡壳的环节回到对应章节与站内演示补课。

读后自测 · 6 题

1. 浏览器自己会收发网络数据吗?它到底做了什么?
不会。浏览器只解析 URL、生成 HTTP 消息,然后通过 Socket 库(socket → connect → write/read → close)把收发工作委托给操作系统协议栈;真正把比特发上网线的是网卡。
2. 一次 DNS 查询在什么情况下不需要到达根服务器?
本地 DNS 服务器(或操作系统、浏览器)缓存了该域名的记录时,直接返回缓存结果。实际上绝大多数查询都被各级缓存拦截,根服务器只服务缓存未命中的少数查询。
3. 数据包穿过一个路由器时,IP 地址和 MAC 地址各发生什么变化?
源/目的 IP 地址保持不变(它标识通信两端);MAC 头整个被重写——源 MAC 变成路由器出口网卡,目的 MAC 变成下一跳设备(由 ARP 查得)。IP 是终点,MAC 是下一跳。
4. 交换机和路由器的转发逻辑有什么本质区别?
交换机查 MAC 地址表、原样转发帧,不修改内容;路由器完整接收包、剥掉旧 MAC 头、查路由表选下一跳、再封上新 MAC 头发出。同时路由器隔离广播域,交换机不隔离。
5. TCP「连接」是一条真实存在的电路吗?
不是。连接只是通信双方各自在内存里记录的对方状态(序号、确认号、窗口大小等控制信息)。三次握手的实质是双方交换初始序号并确认彼此收发能力。
6. CDN 解决什么问题?它和普通缓存服务器的关系是?
CDN 把缓存服务器大规模部署到离用户近的边缘节点并统一运营,让静态内容就近应答,同时降低源站压力与骨干网流量。本质上就是「专业化、分布式运营的缓存服务器集群」。