一次 HTTPS 请求,整台机器发生了什么?
看左侧:客户端内核结构(TCB、队列、缓冲)
看中间:网络拓扑与报文飞行
看右侧:服务端内核镜像
TCP 控制块 (client)
CLOSED发送队列
Socket 缓冲区
网络拓扑
封装标尺
?%真实载荷占帧的比例,调整 MTU 或 TCP 选项立即更新
请求时序
TCP 控制块 (server)
CLOSED半/全连接队列
Socket 缓冲区 (server)
一个域名怎么变成一个 IP?
看递归树:从浏览器缓存到权威 DNS
看报文位域:12 字节 DNS 头逐位拆解
操作:清缓存、改 TTL、切协议,观察耗时变化
递归解析树
DNS 报文头(12 字节)
QNAME 编码
缓存统计
帧发给谁?MAC 从哪来?
看子网判断:位运算决定是直发还是经网关
看 ARP:广播 who-has → 单播 reply → 缓存
看以太网帧:14+MTU+4 字节,FCS 真 CRC32
同网段判断
ARP 过程
以太网帧结构
交换机 MAC 表
| MAC | 端口 | 时龄(s) |
|---|
包怎么一跳一跳走到对面?
看路由表:最长前缀匹配选出胜者
看逐跳转发:MAC 变但 IP 不变
看 NAT/分片/TTL/PMTUD:DF=1 + ICMP → 降 MSS
路由表 + 最长前缀匹配
| 目的网段 | 网关 | 接口 | 度量 |
|---|
NAT 连接跟踪表
| 内网 | 外网(映射) | 协议 | TTL |
|---|
IP 头部位域
分片动画
为什么是三次握手、四次挥手?
看梯形图:真实 seq/ack/flags + 滑动窗口三指针实时移动
看 TCP 报头位域 + cwnd 实时曲线:每个事件的拥塞响应
看状态机:11 态迁移 + 连接队列,SYN Flood → SYN Cookie
握手/挥手梯形图
发送序列窗口
TCP 报头字段
TCP 状态机
cwnd 实时
CUBIC连接队列
发多快?丢了怎么办?
看滑动窗口:SND.UNA/SND.NXT/SND.WND 三指针实时移动
看 cwnd 曲线:来自真实离散事件仿真,不是画出来的
看 RTO:SRTT/RTTVAR/RTO 每个 ACK 一次真实更新
滑动窗口
cwnd 曲线
CUBICRTO 面板
SACK 记分板
凭什么相信对面,密钥怎么来的?
看握手:1.2 (2-RTT) vs 1.3 (1-RTT) 同屏对照
看密钥树:HKDF 每一级真实 label
看证书链:叶 → 中间 CA → 根,逐级验签
握手梯形图
密钥推导树
证书链
HTTP 1.1 / 2 / 3 到底差在哪?
看三协议并排:队头阻塞肉眼可见
看 HPACK:第二个请求头只剩1字节
看缓存:304 从哪来
三协议对比
H2 帧
HPACK
静态表
动态表
缓存决策
数据包在内核里走了什么路?
看 RX 路径:NIC → skb → socket buffer
看 SKB 链:frag、clone、copy 的区别
看 zero-copy:sendfile/splice 少了哪些拷贝
RX 路径
Ring Buffer
SKB 链
epoll
Zero-copy
这个包里到底有什么?
看包列表:过滤任意字段
看十六进制:字节 ↔ 字段高亮对应
看解码条:逐层协议折叠展开