补全:谁先关谁等
本节的内存版 TCP 状态机(判题机不联网;真机上 ss -tan 看到的 State 就是这些名字):
TABLE[(状态, 事件)] = (新状态, 要发出去的段) 事件:listen / connect / close / timeout / retrans 是本机动作,SYN / SYN-ACK / ACK / FIN / RST 是收到的段
talk(script, drop=()) script 形如 ["B:listen", "A:connect", "A:close", "B:close"];一台主机发出的段立刻送到对面(序号在 drop 里的丢掉,轨迹里标 x),对面的回信再送回来
交回 (轨迹 ["A>B SYN", "B>A SYN-ACK", ...], {"A": 状态, "B": 状态})补全 who_waits(script):跑一遍剧本,交回停在 TIME-WAIT 的那台主机名("A" 或 "B"),没有就交回 "-"。三个剧本:A 先关、B 先关、握手后谁都没关。
全部评论