NETWORK · TCP/IP · FROM ZERO
网络基础
学习。
从「网络到底是什么」讲起,不预设任何前置知识。 术语第一次出现就解释,先讲为什么需要它,再讲它怎么工作。
- 章节
- 55
- 小节
- 637
- 代码与输出
- 301
- 表格
- 289
- 自测题
- 360
怎么读
顺序是自顶向下的:从你每天打交道的应用层(网页、域名、邮件)开始, 再往下走运输层、网络层、链路层,随后学习无线、移动性、安全与排错。 这样安排是先建立全局图景 —— 你先知道「自己在用什么东西」, 再去问「它是怎么被送过去的」。
完全没有基础就从模块零开始,它不假设你懂任何东西。 如果你已理解模块零的概念,可以从模块一(应用层)读起, 先认识进程、socket和服务需求,再学HTTP。运输与转发的实现细节会在后面展开。
模块零 · 全景与基础
对应原书第 1 章。不预设任何前置知识:先讲清网络是什么、为什么分层、数据被怎么一层层包起来,最后把时延、丢包、吞吐量这几个天天挂在嘴边的词做定量拆解。
网络到底是什么
01两台设备怎样把一份内容传给对方?先认识设备、链路和通信规则,再区分地址与收发方式;遇到术语就在这里解释。
为什么要分层
02「分层」是网络里被说得最多、也最含糊的词。这一章用一个你熟悉的场景说明为什么必须分层,以及分了层之后到底解决了什么问题、又付出了什么代价。
封装与解封装
03「封装」是网络里最核心的机制 —— 数据每往下走一层,就被套上一层「信封」。这一章用一个能亲手做的实验,量出信封到底有多厚,而不是只给你一个比喻。
段、包、帧、比特
04同一份数据,在传输层叫「段」、网络层叫「包」、链路层叫「帧」、物理层叫「比特」。搞不清这四个名字,看抓包结果时就会一片混乱。本章还要讲清两件相关的事:MTU 是什么、包太大了会怎样。
时延、丢包与吞吐量
05点网页要等很久、下载速度低、视频时断时续,可能是不同的问题。先把描述这些现象的概念分开,再学习如何计算和观察。
模块一 · 应用层
对应原书第 2 章。先讲清进程、客户端/服务器、socket与服务需求,再从网页对话进入HTTP、DNS等应用协议,最后练习套接字接口。
网络应用如何通信
06你点击一个网页,究竟是谁在和谁说话?先理解网络应用的参与者、入口和需求,再进入HTTP、DNS等具体协议。
HTTP:浏览器和服务器怎么对话
07上一章认识了客户端、服务器与网络服务。现在先假设浏览器已知道服务器地址,看看“请求首页”和“返回页面”这段对话怎样表达。这就是HTTP要规定的消息语义;传输细节在后续模块学习。
DNS 与 Fake-IP
08你会设 DNS,但不知道你设的 DNS 有没有真的被用上。
DHCP:设备怎么自动拿到 IP 地址
09一台使用自动配置的IPv4电脑接入网络后,地址、子网掩码以及可能需要的网关、DNS怎样获得?先认识DHCP与链路本地地址,后续《IP地址与子网划分》再系统展开地址和子网的关系。
HTTPS 与 TLS
10HTTP 的内容是明文的 —— 能观察或控制传输路径的人可能读取明文;仅同一Wi-Fi并不自动具备捕获所有流量的能力。HTTPS 在 HTTP 和 TCP 之间插了一层 TLS 来解决这件事。本章讲清 TLS 到底提供了什么保证,以及为什么它能防住中间人。
HTTP/2 与 HTTP/3
11HTTP/1.1可复用持久连接,但同连接响应排序和并发连接限制会影响多资源加载。HTTP/2 号称用"一条连接"解决,HTTP/3 更进一步换掉了传输层。本章用一个需要明确控制客户端配置的实验来证明多路复用,并且会诚实记录一次失败的实验。
代理与负载均衡
12你的流量不一定直达目的地 —— 中间可能有个"代理"替你去取。本章会实测本机的代理配置,并且会发现一件很值得注意的事:同一个系统里有三套代理配置,而且它们可以不同,分别作用于不同API和应用。
电子邮件与 SMTP
13一封邮件从发件人到收件人经过哪些服务?先区分提交、服务器之间转送和收件人访问,再看SMTP与邮件访问协议分别做什么。
P2P 与内容分发网
14一个文件如果要给一百万人下载,服务器怎么扛得住?答案有两条完全不同的路 —— 让用户互相传(P2P),或者把内容提前搬到离用户近的地方(CDN)。这一章讲清这两种思路,以及它们在什么场景下各自更合适。
套接字编程
15浏览器和服务器怎样使用操作系统提供的网络服务?这一章从一对收发文字的程序出发,区分应用接口、套接字对象和网络协议。
模块二 · 运输层
对应原书第 3 章。先不急着看 TCP,而是从"一条会丢包的通道"出发,一步步构造出一个可靠传输协议 —— 这样才明白 TCP 的每个机制为什么存在。
端口与 UDP
16IP 地址只能把数据送到设备,但设备上同时跑着几十个程序 —— 谁来决定这份数据该交给哪个程序?答案是端口。本章还会讲清 UDP 这个"不要连接"的传输层协议,以及一个惊人的实测数字:本机收到过 412 万个"没人要"的 UDP 数据报。
从零构造可靠传输协议
17如果数据会损坏、丢失或重复,怎样让接收方按顺序交付一次?先推导需要的机制,后面的章节再学习TCP具体怎样实现。
TCP 握手与挥手
18你知道「三次握手、四次挥手」,但说不出为什么是 3 和 4,也分不清 TIME_WAIT 和 CLOSE_WAIT 哪个是故障。
TCP 可靠传输
19IP 协议什么都不保证 —— 可能丢、可能乱序、可能重复。那么 TCP 凭什么说自己"可靠"?本章讲序号、确认、超时重传这三件事,并且用本机的真实统计算出你机器上的重传率。
滑动窗口与流量控制
20如果 TCP 每发一个段都要等对方确认,那么不管带宽多大,实际速度都会被"等待时间"锁死。本章讲 TCP 怎么用滑动窗口解决这个问题,以及"流量控制"到底在控制什么。
拥塞控制
21上一章的流量控制是"别压垮接收方"。但还有另一个问题:别压垮中间的网络。如果所有人都猛发,路由器队列会溢出、丢包加剧,最后所有人都变慢。本章讲 TCP 怎么在不能直接看到全路径容量,但可利用ECN等反馈的情况下,自己估算出该发多快。
公平性与传输层演化
22前面把 TCP 的机制一个个拆开了,但还有两个问题没回答:当很多条 TCP 连接挤在同一条链路上时会怎样(公平性),以及为什么给传输层加新功能这么难(演化)。后一个问题尤其现实 —— 本机就有好几处"标准早就定了、但实际用不上"的例子。
TCP 效率机制:Nagle、延迟确认与 Keepalive
23TCP 除了"可靠"和"别发太快",还面对三个"什么时候发"的选择:有数据就立刻发,还是攒一攒?收到数据立刻回确认,还是等一等?空闲的连接怎么知道对方还活着? 这三个问题各有机制,而且其中两个撞在一起会引发一个经典性能陷阱。
模块三 · 网络层:数据平面
对应原书第 4 章。只讲"每一个包到达路由器后当下怎么被转发":报文格式、地址、分片、NAT、IPv6,以及路由器内部到底在做什么。
IP 报文头与 TTL
24IP 头里那个 TTL 字段,初学者通常只记住"它是跳数"。但它其实是个更好用的东西 —— 它能让你反推出对端是什么系统、路上走了多少跳。本章结合历史ping记录说明这些判断需要哪些假设;TTL不能单独验证操作系统或真实地理位置。
IP 地址与子网划分
25你会看 IP 地址,但说不清后面那个 /24 或 255.255.255.0 到底在干什么。
NAT 与 PAT
26你家里的手机、电脑、电视、扫地机器人都有自己的 IP 地址,但运营商只给了你一个公网 IP。它们是怎么同时上网的?这就是 NAT。本章还会讲清一个常见的错误认知:NAT 不是安全机制。
IPv6
27IPv4 地址不够用这件事,最终的解决方案是 IPv6。但 IPv6 不只是"地址变长了"—— 它顺手改掉了一批延续几十年的设计(广播被取消、ARP 被替换、路由器不再分片)。本章会实测本机的 IPv6 现状。
路由器内部工作原理
28一个包进入路由器后,怎样找到出口、移到出口并等待发送?先理解设备中的几个环节,再讨论实现方法和排队。
SDN 与中间盒
29路由器、防火墙与NAT的一些动作怎样用同一抽象描述?控制规则怎样形成,中间功能又怎样影响观测?先讲分工,再比较架构。
模块四 · 网络层:控制平面
对应原书第 5 章。研究路径与转发信息怎样形成和更新:路由选择算法、OSPF、BGP、控制方式、ICMP与网络管理。更新可来自拓扑、策略或其他状态变化。
路由与最长前缀匹配
30你见过 route print 那一大坨输出,但看不出头绪。而你的机器上有两条默认路由,凭什么其中一条赢?
路由协议概览
31《网络层》模块讲了"路由表怎么查"(最长前缀匹配),但没讲"表里的内容是谁写进去的"。你的机器上只有 36 条路由,而互联网存在大量地址前缀 —— 那些路由是怎么来的?
ICMP:ping 与 tracert 的原理
32ping 和 tracert 是最常用的两个网络命令,但很多人不知道它们靠的是同一个协议 —— ICMP。本章会拆开它们的原理,并且给出一个反面案例:本机的 tracert 结果是坏的,而且坏得很有教育意义。
网络管理与 SNMP
33设备一多,"登进每一台看状态"就不现实了。网络管理要解决的就是这件事:怎么统一地采集状态、下发配置、接收告警。 教材里的答案是 SNMP —— 但本章会实测到一个有意思的情况:这台机器上根本没有 SNMP 代理,却有一套别的管理接口在起作用。
模块五 · 链路层和局域网
对应原书第 6 章。数据真正在网线里跑的那一层:差错怎么发现、多台设备怎么共享一条线路、帧长什么样、交换机和 ARP 怎么工作。最后用一个完整案例把所有层串起来。
以太网帧
34「帧」是数据在链路层的容器。这一章把以太网帧拆到字段级别,讲清每个字段是干什么的,以及一个初学者最容易卡住的问题 —— 为什么以太网帧有个最小长度。
MAC 地址
35MAC 地址是"设备身份",但它到底是哪来的、为什么有时会变、为什么一台机器上会有好几个?这一章把 48 位拆开看,并且用本机抓到的真实 MAC 逐条验证。
交换机
36交换机插上就能用,没人配置过它,它怎么知道该把数据从哪个口发出去?答案是它自己学了。本章讲清这个"自我学习"的机制,以及冲突域、广播域这两个常被混淆的概念。
ARP:把 IP 地址换成 MAC 地址
37你要发一个包给 192.168.31.1,可是帧头里只能填 MAC 地址。你手上只有 IP 地址 —— 这个"翻译"是谁做的?这就是 ARP。本章会在你自己的机器上,抓到 ARP 缓存的五种状态,包括一次失败解析和一次探测的瞬间。
VLAN:在一台交换机上划出多台
38上一章说交换机不隔离广播域。那如果一栋楼里 500 台设备接在一堆交换机上,一个 ARP 广播就要打扰 500 台设备,怎么办?VLAN 就是答案。
环路与 STP
39上一章讲到二层帧没有 TTL,连成环就会广播风暴。可现实中又需要冗余链路(一根线断了还能通)—— 要冗余就必然成环。这个矛盾怎么解?靠生成树协议(STP)。
差错检测与纠正
40一个比特被噪声翻转,接收方怎样发现?发现之后是丢弃、重传还是直接纠正?如果是攻击者修改数据,这些方法还够吗?
多路访问协议
41链路层有个和网络层完全不同的难题 —— 多台设备共享同一条线路时,谁能在什么时候发? 没有规则就是一团乱撞。这一章讲三类解决思路,并用模拟复现两个经典的效率上限。
一次 Web 请求的完整历程
42前面学习了应用、运输、网络与链路的主要机制,现在用一次网页请求串起它们。无线与安全的深入机制还在后续模块;本章先明确场景和已有配置,再看各层怎样协作。
模块六 · 无线网络和移动网络
对应原书第 7 章。无线为什么比有线麻烦、802.11 的 MAC 协议和帧格式、以及蜂窝网络怎么让你在移动中不断线。
模块七 · 网络安全
对应原书第 8 章。本站原有内容几乎没有覆盖这一块。从密码学原理讲到数字签名、端点鉴别、TLS 内部机制、IPsec 与 VPN、防火墙与入侵检测。
网络安全与密码学原理
46前面七个模块讲的都是"怎么把数据送到"。但从头到尾有一个前提没被检验过:送到的东西,别人能不能看、能不能改、对方到底是不是它声称的那个人? 这是网络安全要回答的三个问题,而且它们需要不同的工具。
报文完整性与数字签名
47接收方怎样知道内容是否被替换、消息是否来自可信持钥者?先区分普通散列、消息认证码和数字签名,再讨论实现与公钥信任。
端点鉴别与安全电子邮件
48上一章解决了"数据没被改"。但还有一个更基本的问题:你怎么知道对面真的是它声称的那个人? 这一章讲鉴别(authentication),以及把这些技术用起来的一个真实场景 —— 电子邮件。
TLS 深入
49前面学习的加密、消息认证、签名和证书,怎样在HTTPS连接中协同工作?本章先画清一次TLS 1.3握手,再区分普通握手、恢复和0-RTT。
IPsec 与虚拟专用网
50前面的 TLS 工作在应用层和传输层之间,它保护的是"一个应用的连接"。但如果要让整台机器的所有流量都安全地穿过一个不可信的网络呢?答案是在网络层做保护 —— 这就是 IPsec,也是 VPN 的技术基础。
防火墙与入侵检测系统
51前面讲的都是"怎么保护一次通信"。但如果要保护一台机器或一个网络呢?这一章讲两种基本的防护手段 —— 防火墙(决定"让不让过")和入侵检测(决定"有没有人在干坏事"),并且会实测本机的配置,其中有一个发现值得单独说。
模块八 · 抓包与排错
本站练习:把前面的协议与测量知识变成方法,理解捕获位置、查看真实字节、按层次排查问题。
附录 · 速查与术语
查得到就能用的硬数据,以及第一次出现就忘不掉的术语解释。