CS168 Cheat Sheet

Lec 1–14 · 知识点速查 ← 回刷题主站

⭐ 概念判断速查(Potpourri / True-False / 选择 高频八股)

Q1 每年是一堆独立概念小题(判断 / 多选 / narrow-waist 这类)。这些不靠推导、纯靠记准。下表:命题 → 对错 → 一句话理由。考前把整张表扫熟。
命题 / 问题答案为什么
架构 · 分层 · 交换
"narrow waist(细腰)" 协议是哪个?(WiFi/BGP/HTTP/TCP/IP)IP沙漏细腰 = IP 层;上网的所有人都必须说 IP。TCP/HTTP 在上、链路在下,都可替换,唯 IP 不可。
分层(layering)直接带来什么?(可多选:Reliability / Modularity / Transfer Speed / Abstraction / Addressing)Modularity + Abstraction分层给的是模块化 + 抽象。Reliability、Addressing 要在某一层内部实现,不是分层"自带"的;Transfer Speed 反而可能因 overhead 变慢。
End-to-End 原则:网络(路由器)必须实现可靠性才能保证可靠传输。FalseE2E:端主机足以保证可靠性;路由器可以帮忙但不是必须。可靠性正确性最终靠两端(TCP)。
Circuit switching 给应用一个保证带宽的简单抽象。True电路交换预留资源 → 可按需保证带宽。代价:利用率低、建立慢、突发流量浪费。
Packet switching 相比 circuit switching 的核心优势?统计复用Statistical multiplexing:无需预留、突发流量下高效、共享链路。代价:排队时延、无带宽保证。
IP 层提供可靠、有序、保证送达的服务。FalseIP 是 best-effort:不可靠、可能丢/乱序/重复,无连接。可靠性交给 TCP。
更高的带宽(bandwidth)会降低 propagation delay。Falsepropagation = 距离/光速,与带宽无关。带宽只影响 transmission delay(= size/带宽)。
性能 · 时延
把包变大,transmission delay 怎么变?变大transmission delay = 包大小 / 链路带宽,与包大小成正比。
store-and-forward 路由器在转发前必须收到整个包。True所以 N 跳时端到端要累加每跳一次 transmission delay(考试算时间线的关键)。
队列时延(queueing delay)是固定的。False随负载变化,拥塞时暴涨;是四类时延里唯一"看流量"的。
寻址 · 转发
一个 /n 前缀包含多少地址?2^(32−n)如 /24 → 256 个,/25 → 128 个,/32 → 1 个(单主机)。
Longest Prefix Match 的结果依赖转发表里表项的先后顺序。FalseLPM 只看"匹配到的最长前缀",与表项排列无关。
前缀越长越具体(优先级越高)。True/25 比 /24 更具体,命中时优先。default route = 0.0.0.0/0(最短,兜底)。
任意两个前缀都能聚合(aggregate)成一个。False只有相邻且对齐的两个 /n 才能合并成 /(n−1)(否则会引入不该有的地址)。
IP 头 · 分片 · Traceroute
TTL 的作用?到 0 时发生什么?防环每跳 −1;减到 0 → 丢弃 + 回送 ICMP Time Exceeded。traceroute 正是靠这个。
IP header checksum 每一跳都要重算。True因为 TTL 每跳都变;且 checksum 只保护 header,不保护数据。
分片后由沿途路由器重组。False只有目的主机重组。offset 以 8 字节为单位;MF=1 表示后面还有片。
IPv6 路由器可以对包分片。FalseIPv6 路由器不分片(由源端负责/PMTUD);IPv6 还去掉了 header checksum,固定 40B 头。
traceroute 每次探测都走完全相同的路径。False负载均衡/路由变化可能让不同探测走不同路;某跳不回则显示 *
域内路由 DV / LS / STP
Link-State 需要每个节点知道整个网络拓扑。TrueLS:flooding 全网链路信息 → 本地跑 Dijkstra。DV 只和邻居交换"到各目的地的距离"。
count-to-infinity 是 Link-State 的问题。FalseDistance-Vector 的问题(断链后距离缓慢爬升)。LS 有全局视图,不会。
poison reverse / split horizon 能消除所有路由环。False只能解决两节点环;三节点及以上的环仍可能 count-to-infinity。所以设 INFINITY 上限(Proj2=16)。
DV 比 LS 收敛快。FalseDV 收敛慢(逐跳传播);LS 收敛快但每次 flooding 开销大、要更多内存/算力。
STP 选谁当 root?最小 ID选 root bridge ID 最小者;各端口按 (root ID, 到 root 距离, 自身 ID) 比较,非树端口被 block 防环。
BGP · 域间
BGP 选路优先级顺序?C>Pe>Prcustomer > peer > provider(从赚钱角度:走 customer 收钱,peer 免费,provider 要付费)。
从 peer/provider 学到的路由,要不要告诉另一个 peer 或 provider?不告诉Export 规则:customer 学的 → 告诉所有人;peer/provider 学的 → 只告诉自己的 customer。核心记忆:只为能赚钱的流量做转发。
BGP 总是选 AS-path 最短的路径。False先看 policy / LocalPref(商业关系),再看 AS-path 长度。钱 > 路短。
BGP 靠什么防环?AS-pathpath-vector:通告里带完整 AS-path,看到自己 AS 在里面就丢弃。
合法(valley-free)路径长什么样?上坡·平·下坡customer→provider 上坡段 → 至多一条 peer 平边 → provider→customer 下坡段。先降后升是"山谷"= 非法。
TCP · 可靠传输
SYN 和 FIN 各占用序号吗?各占 1算 seq/ack 时别漏:SYN 占 1 个序号,FIN 也占 1 个。ISN 随机。
ACK 号的含义?下一期望字节ack = 已连续收到的最后字节 + 1 = "我下一个想要的字节"。cumulative ACK(累积确认)。
丢了中间一个段,后续乱序到达会推进 ACK 号吗?不推进累积 ACK 卡在空洞处,重复发同一个 ack(→ 触发 3 dup ACK 快重传)。
三次握手的第 3 个 ACK 能不能携带数据?可以捎带(piggyback)应用数据。
UDP 提供可靠、有序传输。FalseUDP 无连接、不可靠、不保证顺序,只加端口 + 校验;要可靠自己在应用层做。
拥塞控制
"Slow start" 是缓慢的线性增长。False名字骗人:slow start 是指数增长(每 RTT 翻倍 / 每个 ACK +1 MSS)。线性增长是后面的 congestion avoidance(AIMD,每 RTT +1)。
TCP 把什么当作拥塞信号?丢包丢包(timeout 或 3 个重复 ACK)= 网络拥塞的信号。
timeout 和 3-dup-ACK 处理一样吗?不一样timeout:ssthresh=cwnd/2,cwnd=1,回 slow start(严重)。3 dup ACK:ssthresh=cwnd/2,cwnd=cwnd/2,留在 CA(快恢复,轻)。
实际发送窗口取什么?min(cwnd,rwnd)拥塞窗口 cwnd(防网络)与接收窗口 rwnd(防接收方)取小。
AIMD 能让多条流收敛到公平。True加性增(公平抢) + 乘性减(按比例罚) → 收敛到公平线。但 RTT 小的流会抢到更多(RTT 不公平)。

📐 公式 · 规则 · 数字(计算题必备)

perf四类时延 + 端到端

transmission = 包大小 / 带宽
propagation = 距离 / 传播速度
  • 另两类:queueing(随拥塞)、processing(通常忽略)
  • N 跳 store-and-forward:端到端 = N×trans + N×prop(+ 排队);逐跳画时间线最稳
  • 流水线 n 个包:总时间 = 首包到达 + (n−1)×transmission
  • BDP = 带宽 × RTT = "管道里能装的 bit 数" → 决定窗口大小
单位:Mbps=10^6 bit/s;1 byte=8 bit;Mbps≠MBps。KB 是 2^10 还是 10^3 看题目说明。

addrCIDR · 掩码速查

/n掩码末字节#地址
/240256
/25128128
/2619264
/2722432
/2824016
/292488
/302524
  • 二进制位值:128 64 32 16 8 4 2 1
  • 判断 IP 是否属于 a.b.c.d/n:前 n 位与前缀一致
  • LPM:所有匹配前缀里选最长的那条,与顺序无关

ipIP 头 · 分片

  • 关键字段:TTL、Protocol(TCP=6, UDP=17, ICMP=1)、Total Length、Identification / Flags(DF,MF) / Fragment Offset、Header Checksum
  • 分片:仅当包 > MTU;offset 单位 = 8 字节;只有目的主机重组
  • 例:数据 1980B 过 MTU 1500 → 片1 数据1480B(offset 0,MF=1)、片2 数据500B(offset 185,MF=0)(185=1480/8)
  • checksum 只保护 header,每跳重算

ipICMP · Traceroute

  • ICMP 类型:Echo(ping)、Time Exceeded(TTL=0)、Destination Unreachable
  • traceroute:发 TTL=1,2,3… 的探测包,收各跳回的 Time Exceeded 得到路径
  • * = 该跳未回(防火墙/限速/丢失)

routingDV 更新规则

d(x,y) = min over 邻居 v { c(x,v) + d(v,y) }
  • 只和邻居交换"到各目的地的距离向量"
  • 来自当前下一跳的更坏消息也要接受(它最权威)
  • count-to-infinity:断链后互相学过期路由,距离每轮慢慢+;修复:split horizon / poison reverse(只解 2 节点环)+ INFINITY 上限(=16)
  • 逐轮列表格手算:每轮每个节点用邻居最新向量更新自己

routingLS vs DV

Link-StateDist-Vector
知道全网拓扑仅邻居距离
算法DijkstraBellman-Ford
收敛
环问题count-to-∞
开销flooding 大只发邻居

bgpGao-Rexford(必背)

选路偏好:customer > peer > provider
Export:customer 学的 → 告诉所有人;peer/provider 学的 → 只告诉 customer
  • 一句话:只为能赚钱/免费的流量做转发
  • 选路完整顺序:LocalPref(policy) > AS-path 短 > …(policy 永远压过路短)
  • valley-free:上坡(cust→prov)* + ≤1 peer 平边 + 下坡(prov→cust)*
  • path-vector 带 AS-path 防环;$ 从 customer 流向 provider

tcpseq / ack 规则

  • seq = 本段首字节编号;ack = 期望的下一字节
  • SYN、FIN 各占 1 个序号
  • 握手:C→S SYN(seq=x) → S→C SYN-ACK(seq=y, ack=x+1) → C→S ACK(seq=x+1, ack=y+1)
  • 累积 ACK:丢包时 ack 卡住不前进 → 重复 ack → 3 dup 触发快重传
  • 挥手:FIN/ACK 各一,TIME_WAIT 等 2·MSL 防旧包;RST 立即中止

cccwnd 状态转移(Reno)

事件ssthreshcwnd之后
Slow Start×2 / RTT到 ssthresh 转 CA
Cong. Avoid+1 / RTT线性
Timeoutcwnd/21回 Slow Start
3 dup ACKcwnd/2cwnd/2留在 CA
  • 实际窗口 = min(cwnd, rwnd)
  • slow start 每收 1 个 ACK:cwnd += 1 MSS(→ 每 RTT 翻倍)
  • 吞吐 ≈ (MSS/RTT)·(1/√p),p=丢包率
逐 RTT 手算:一行一个 RTT,写清 cwnd、是否达 ssthresh、丢包类型,别把 timeout 当成减半。

arch分层职责(自底向上)

  • L1 物理:bit 上线
  • L2 链路:本地跳、MAC、Ethernet、交换机、STP
  • L3 网络:IP 寻址 + 端到端转发(细腰
  • L4 传输:TCP/UDP、端口、可靠性/拥塞
  • L7 应用:DNS/HTTP…
  • encapsulation:每层往下加自己的 header 包裹上层数据
⚠️ 合规提醒:CS168 允许带两张双面手写 cheat sheet(手写平板笔记打印也可以)。这个网页版是给你复习/记忆/整理用的——真正带进考场的那两张必须是手写的。可以照着这里的结构,把最记不住的(尤其上面那张八股表 + BGP export 规则 + cwnd 转移 + seq/ack)抄成你自己的手写小抄。