⚠️ 自己写:去掉 TIME-WAIT

👁️ 3 人浏览 💬 0 人评论 ❤️ 添加收藏

本节的内存版 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": 状态})

最后那个 ACK(轨迹第 7 段)丢了,B 在 LAST-ACK 里会重发 FIN(事件 B:retrans)。补全 last_ack_lost(keep):keep 为 True 时 A 老老实实等在 TIME-WAIT;为 False 时 A 收到最后的 FIN 后立刻 A:timeout 进 CLOSED、再让 B 重发。交回「最后一段的名字,A 的状态」。两种各跑一遍:

提交你的答案
请登录后提交答案。
去登录
代码编辑器
Ctrl + Enter 运行
本次输入:
输出:

                        
👩‍🏫
AI
💬 题目评论

全部评论