NETWORK · TCP/IP · FROM ZERO

网络基础
学习。

从「网络到底是什么」讲起,不预设任何前置知识。 术语第一次出现就解释,先讲为什么需要它,再讲它怎么工作。

模块
10
章节
55
自测题
360
章节
55
小节
637
代码与输出
301
表格
289
自测题
360

怎么读

顺序是自顶向下的:从你每天打交道的应用层(网页、域名、邮件)开始, 再往下走运输层、网络层、链路层,随后学习无线、移动性、安全与排错。 这样安排是先建立全局图景 —— 你先知道「自己在用什么东西」, 再去问「它是怎么被送过去的」。

完全没有基础就从模块零开始,它不假设你懂任何东西。 如果你已理解模块零的概念,可以从模块一(应用层)读起, 先认识进程、socket和服务需求,再学HTTP。运输与转发的实现细节会在后面展开。

依据教材、规范与官方实现资料,注明范围模型示例与计算,保留假设条件观察历史命令与输出,说明采样和复核限制判断有证据支撑,但未直接验证

模块零 · 全景与基础

对应原书第 1 章。不预设任何前置知识:先讲清网络是什么、为什么分层、数据被怎么一层层包起来,最后把时延、丢包、吞吐量这几个天天挂在嘴边的词做定量拆解。

模块一 · 应用层

对应原书第 2 章。先讲清进程、客户端/服务器、socket与服务需求,再从网页对话进入HTTP、DNS等应用协议,最后练习套接字接口。

网络应用如何通信

06

你点击一个网页,究竟是谁在和谁说话?先理解网络应用的参与者、入口和需求,再进入HTTP、DNS等具体协议。

入门25 分钟7 节5 道自测题

HTTP:浏览器和服务器怎么对话

07

上一章认识了客户端、服务器与网络服务。现在先假设浏览器已知道服务器地址,看看“请求首页”和“返回页面”这段对话怎样表达。这就是HTTP要规定的消息语义;传输细节在后续模块学习。

基础45 分钟14 节7 道自测题

DNS 与 Fake-IP

08

你会设 DNS,但不知道你设的 DNS 有没有真的被用上。

基础35 分钟13 节4 道自测题

DHCP:设备怎么自动拿到 IP 地址

09

一台使用自动配置的IPv4电脑接入网络后,地址、子网掩码以及可能需要的网关、DNS怎样获得?先认识DHCP与链路本地地址,后续《IP地址与子网划分》再系统展开地址和子网的关系。

基础35 分钟12 节8 道自测题

HTTPS 与 TLS

10

HTTP 的内容是明文的 —— 能观察或控制传输路径的人可能读取明文;仅同一Wi-Fi并不自动具备捕获所有流量的能力。HTTPS 在 HTTP 和 TCP 之间插了一层 TLS 来解决这件事。本章讲清 TLS 到底提供了什么保证,以及为什么它能防住中间人。

进阶50 分钟14 节7 道自测题

HTTP/2 与 HTTP/3

11

HTTP/1.1可复用持久连接,但同连接响应排序和并发连接限制会影响多资源加载。HTTP/2 号称用"一条连接"解决,HTTP/3 更进一步换掉了传输层。本章用一个需要明确控制客户端配置的实验来证明多路复用,并且会诚实记录一次失败的实验。

进阶35 分钟13 节7 道自测题

代理与负载均衡

12

你的流量不一定直达目的地 —— 中间可能有个"代理"替你去取。本章会实测本机的代理配置,并且会发现一件很值得注意的事:同一个系统里有三套代理配置,而且它们可以不同,分别作用于不同API和应用。

进阶40 分钟12 节7 道自测题

电子邮件与 SMTP

13

一封邮件从发件人到收件人经过哪些服务?先区分提交、服务器之间转送和收件人访问,再看SMTP与邮件访问协议分别做什么。

基础35 分钟12 节6 道自测题

P2P 与内容分发网

14

一个文件如果要给一百万人下载,服务器怎么扛得住?答案有两条完全不同的路 —— 让用户互相传(P2P),或者把内容提前搬到离用户近的地方(CDN)。这一章讲清这两种思路,以及它们在什么场景下各自更合适。

进阶40 分钟11 节7 道自测题

套接字编程

15

浏览器和服务器怎样使用操作系统提供的网络服务?这一章从一对收发文字的程序出发,区分应用接口、套接字对象和网络协议。

进阶45 分钟9 节7 道自测题

模块二 · 运输层

对应原书第 3 章。先不急着看 TCP,而是从"一条会丢包的通道"出发,一步步构造出一个可靠传输协议 —— 这样才明白 TCP 的每个机制为什么存在。

端口与 UDP

16

IP 地址只能把数据送到设备,但设备上同时跑着几十个程序 —— 谁来决定这份数据该交给哪个程序?答案是端口。本章还会讲清 UDP 这个"不要连接"的传输层协议,以及一个惊人的实测数字:本机收到过 412 万个"没人要"的 UDP 数据报。

基础35 分钟12 节7 道自测题

从零构造可靠传输协议

17

如果数据会损坏、丢失或重复,怎样让接收方按顺序交付一次?先推导需要的机制,后面的章节再学习TCP具体怎样实现。

进阶50 分钟11 节7 道自测题

TCP 握手与挥手

18

你知道「三次握手、四次挥手」,但说不出为什么是 3 和 4,也分不清 TIME_WAIT 和 CLOSE_WAIT 哪个是故障。

基础50 分钟12 节5 道自测题

TCP 可靠传输

19

IP 协议什么都不保证 —— 可能丢、可能乱序、可能重复。那么 TCP 凭什么说自己"可靠"?本章讲序号、确认、超时重传这三件事,并且用本机的真实统计算出你机器上的重传率。

进阶45 分钟13 节7 道自测题

滑动窗口与流量控制

20

如果 TCP 每发一个段都要等对方确认,那么不管带宽多大,实际速度都会被"等待时间"锁死。本章讲 TCP 怎么用滑动窗口解决这个问题,以及"流量控制"到底在控制什么。

进阶40 分钟11 节6 道自测题

拥塞控制

21

上一章的流量控制是"别压垮接收方"。但还有另一个问题:别压垮中间的网络。如果所有人都猛发,路由器队列会溢出、丢包加剧,最后所有人都变慢。本章讲 TCP 怎么在不能直接看到全路径容量,但可利用ECN等反馈的情况下,自己估算出该发多快。

进阶45 分钟10 节7 道自测题

公平性与传输层演化

22

前面把 TCP 的机制一个个拆开了,但还有两个问题没回答:当很多条 TCP 连接挤在同一条链路上时会怎样(公平性),以及为什么给传输层加新功能这么难(演化)。后一个问题尤其现实 —— 本机就有好几处"标准早就定了、但实际用不上"的例子。

高级30 分钟12 节7 道自测题

TCP 效率机制:Nagle、延迟确认与 Keepalive

23

TCP 除了"可靠"和"别发太快",还面对三个"什么时候发"的选择:有数据就立刻发,还是攒一攒?收到数据立刻回确认,还是等一等?空闲的连接怎么知道对方还活着? 这三个问题各有机制,而且其中两个撞在一起会引发一个经典性能陷阱。

高级35 分钟12 节7 道自测题

模块三 · 网络层:数据平面

对应原书第 4 章。只讲"每一个包到达路由器后当下怎么被转发":报文格式、地址、分片、NAT、IPv6,以及路由器内部到底在做什么。

IP 报文头与 TTL

24

IP 头里那个 TTL 字段,初学者通常只记住"它是跳数"。但它其实是个更好用的东西 —— 它能让你反推出对端是什么系统、路上走了多少跳。本章结合历史ping记录说明这些判断需要哪些假设;TTL不能单独验证操作系统或真实地理位置。

基础35 分钟9 节6 道自测题

IP 地址与子网划分

25

你会看 IP 地址,但说不清后面那个 /24 或 255.255.255.0 到底在干什么。

基础40 分钟9 节4 道自测题

NAT 与 PAT

26

你家里的手机、电脑、电视、扫地机器人都有自己的 IP 地址,但运营商只给了你一个公网 IP。它们是怎么同时上网的?这就是 NAT。本章还会讲清一个常见的错误认知:NAT 不是安全机制。

进阶40 分钟12 节7 道自测题

IPv6

27

IPv4 地址不够用这件事,最终的解决方案是 IPv6。但 IPv6 不只是"地址变长了"—— 它顺手改掉了一批延续几十年的设计(广播被取消、ARP 被替换、路由器不再分片)。本章会实测本机的 IPv6 现状。

进阶45 分钟13 节7 道自测题

路由器内部工作原理

28

一个包进入路由器后,怎样找到出口、移到出口并等待发送?先理解设备中的几个环节,再讨论实现方法和排队。

进阶40 分钟10 节7 道自测题

SDN 与中间盒

29

路由器、防火墙与NAT的一些动作怎样用同一抽象描述?控制规则怎样形成,中间功能又怎样影响观测?先讲分工,再比较架构。

高级40 分钟8 节7 道自测题

模块四 · 网络层:控制平面

对应原书第 5 章。研究路径与转发信息怎样形成和更新:路由选择算法、OSPF、BGP、控制方式、ICMP与网络管理。更新可来自拓扑、策略或其他状态变化。

模块五 · 链路层和局域网

对应原书第 6 章。数据真正在网线里跑的那一层:差错怎么发现、多台设备怎么共享一条线路、帧长什么样、交换机和 ARP 怎么工作。最后用一个完整案例把所有层串起来。

以太网帧

34

「帧」是数据在链路层的容器。这一章把以太网帧拆到字段级别,讲清每个字段是干什么的,以及一个初学者最容易卡住的问题 —— 为什么以太网帧有个最小长度。

基础35 分钟10 节6 道自测题

MAC 地址

35

MAC 地址是"设备身份",但它到底是哪来的、为什么有时会变、为什么一台机器上会有好几个?这一章把 48 位拆开看,并且用本机抓到的真实 MAC 逐条验证。

基础30 分钟12 节6 道自测题

交换机

36

交换机插上就能用,没人配置过它,它怎么知道该把数据从哪个口发出去?答案是它自己学了。本章讲清这个"自我学习"的机制,以及冲突域、广播域这两个常被混淆的概念。

基础40 分钟12 节6 道自测题

ARP:把 IP 地址换成 MAC 地址

37

你要发一个包给 192.168.31.1,可是帧头里只能填 MAC 地址。你手上只有 IP 地址 —— 这个"翻译"是谁做的?这就是 ARP。本章会在你自己的机器上,抓到 ARP 缓存的五种状态,包括一次失败解析和一次探测的瞬间。

基础40 分钟14 节7 道自测题

VLAN:在一台交换机上划出多台

38

上一章说交换机不隔离广播域。那如果一栋楼里 500 台设备接在一堆交换机上,一个 ARP 广播就要打扰 500 台设备,怎么办?VLAN 就是答案。

进阶35 分钟10 节6 道自测题

环路与 STP

39

上一章讲到二层帧没有 TTL,连成环就会广播风暴。可现实中又需要冗余链路(一根线断了还能通)—— 要冗余就必然成环。这个矛盾怎么解?靠生成树协议(STP)。

进阶30 分钟10 节6 道自测题

差错检测与纠正

40

一个比特被噪声翻转,接收方怎样发现?发现之后是丢弃、重传还是直接纠正?如果是攻击者修改数据,这些方法还够吗?

基础35 分钟9 节7 道自测题

多路访问协议

41

链路层有个和网络层完全不同的难题 —— 多台设备共享同一条线路时,谁能在什么时候发? 没有规则就是一团乱撞。这一章讲三类解决思路,并用模拟复现两个经典的效率上限。

进阶40 分钟14 节7 道自测题

一次 Web 请求的完整历程

42

前面学习了应用、运输、网络与链路的主要机制,现在用一次网页请求串起它们。无线与安全的深入机制还在后续模块;本章先明确场景和已有配置,再看各层怎样协作。

进阶45 分钟18 节7 道自测题

模块六 · 无线网络和移动网络

对应原书第 7 章。无线为什么比有线麻烦、802.11 的 MAC 协议和帧格式、以及蜂窝网络怎么让你在移动中不断线。

模块七 · 网络安全

对应原书第 8 章。本站原有内容几乎没有覆盖这一块。从密码学原理讲到数字签名、端点鉴别、TLS 内部机制、IPsec 与 VPN、防火墙与入侵检测。

网络安全与密码学原理

46

前面七个模块讲的都是"怎么把数据送到"。但从头到尾有一个前提没被检验过:送到的东西,别人能不能看、能不能改、对方到底是不是它声称的那个人? 这是网络安全要回答的三个问题,而且它们需要不同的工具。

进阶45 分钟13 节7 道自测题

报文完整性与数字签名

47

接收方怎样知道内容是否被替换、消息是否来自可信持钥者?先区分普通散列、消息认证码和数字签名,再讨论实现与公钥信任。

进阶40 分钟9 节7 道自测题

端点鉴别与安全电子邮件

48

上一章解决了"数据没被改"。但还有一个更基本的问题:你怎么知道对面真的是它声称的那个人? 这一章讲鉴别(authentication),以及把这些技术用起来的一个真实场景 —— 电子邮件。

进阶35 分钟10 节7 道自测题

TLS 深入

49

前面学习的加密、消息认证、签名和证书,怎样在HTTPS连接中协同工作?本章先画清一次TLS 1.3握手,再区分普通握手、恢复和0-RTT。

进阶40 分钟9 节7 道自测题

IPsec 与虚拟专用网

50

前面的 TLS 工作在应用层和传输层之间,它保护的是"一个应用的连接"。但如果要让整台机器的所有流量都安全地穿过一个不可信的网络呢?答案是在网络层做保护 —— 这就是 IPsec,也是 VPN 的技术基础。

高级40 分钟11 节7 道自测题

防火墙与入侵检测系统

51

前面讲的都是"怎么保护一次通信"。但如果要保护一台机器或一个网络呢?这一章讲两种基本的防护手段 —— 防火墙(决定"让不让过")和入侵检测(决定"有没有人在干坏事"),并且会实测本机的配置,其中有一个发现值得单独说。

进阶35 分钟10 节7 道自测题

模块八 · 抓包与排错

本站练习:把前面的协议与测量知识变成方法,理解捕获位置、查看真实字节、按层次排查问题。

附录 · 速查与术语

查得到就能用的硬数据,以及第一次出现就忘不掉的术语解释。