跳到正文

实验:重试与去重状态机

55 分钟

实验:重试与去重状态机

从一个可观察现象开始

我们先不背名词。把场景摆在面前:实现确定性RPC模型并覆盖首次成功、响应丢失、持续失败和过期去重键。你看到的时延、地址、端口、报文长度或错误码只是入口,不是解释。先问报文从哪个应用产生、经过哪个socket、在哪一跳换链路首部、由哪张表作决定、返回证据在哪里。把客户端、交换机、路由器、递归解析器、服务端或攻击者分别画出来,不能用一句“网络自动处理”跳过真正动作。
(唯一段落锚点:计算机网络第12章第7节《实验:重试与去重状态机》。)

本节要建立的核心机制是:输入请求ID、发送结果和响应丢失事件,输出业务执行次数、客户端结果与总尝试。请把它改写成“旧状态 --收到或发送某报文/满足某条件--> 新状态”。若机制包含地址、序号、窗口、TTL、缓存或密钥,就在图上写出字段值;若包含队列和计时器,就写出入队、到期和清理事件。协议不是术语表,而是多个参与者对可接受消息和状态迁移的共同约定。(本段对象:实验:重试与去重状态机,位置12-7。)
(唯一段落锚点:计算机网络第12章第7节《实验:重试与去重状态机》。)

报文、状态机与责任边界

建立四栏表:参与者、持有状态、收到的字段、允许的动作。发送方负责按协议构造消息,接收方必须先验证版本、长度、状态和资源上限,再修改自身状态。中间设备只根据本层可见字段作决定,不能假定它理解全部应用语义。对于实验:重试与去重状态机,把输入请求ID、发送结果和响应丢失事件,输出业务执行次数、客户端结果与总尝试拆成至少四个带方向的事件,并为每个事件写成功输出和失败返回。
(唯一段落锚点:计算机网络第12章第7节《实验:重试与去重状态机》。)

最重要的边界提醒是:模拟器必须区分请求未到达、已执行响应丢失和响应已到达三种状态。把它变成一个反例:给出具体源/目的、字段值、时间顺序和错误实现的输出,再说明正确实现应丢弃、重试、告警、回滚还是保持旧状态。只有能构造反例,才说明你掌握了条件而非记住结论。(本段协议锚点:实验:重试与去重状态机,章12节7。)
(唯一段落锚点:计算机网络第12章第7节《实验:重试与去重状态机》。)

跟我逐步推一次

先固定拓扑、初态和采集点,再执行实验:实现确定性RPC模型并覆盖首次成功、响应丢失、持续失败和过期去重键。第一步写输入与单位;第二步列发出的第一条报文;第三步逐跳更新本层字段与表项;第四步在接收端验证并产生响应;第五步把响应沿反向路径走回来。每一步都记录时间、方向、五元组或链路地址、长度、关键标志和状态,而不是只截最后一张成功页面。
(唯一段落锚点:计算机网络第12章第7节《实验:重试与去重状态机》。)

这一节配一个量纲检查:若连续发送4个应用载荷,每个888 Byte,每个报文额外首部64 Byte,在不重传、不填充且一载荷对应一报文的简化模型中,线上字节为 4×(888+64)=3808 Byte,有效载荷率为 3552/3808。公式先声明模型;分片、重传、ACK、隧道和链路填充出现时必须重列报文,不能机械套用。(本段计算对象:实验:重试与去重状态机。)
(唯一段落锚点:计算机网络第12章第7节《实验:重试与去重状态机》。)

可运行实验与在线练习

课程中的代码题都从标准输入读取并输出稳定文本,不访问公网、不绑定固定端口、不要求管理员权限。解析题先验证长度再取字段;路由题固定最长前缀和同距规则;socket题只用socketpair或localhost随机端口;离散模拟题固定事件顺序。正常、边界、失败、回归至少四组内联测试,并在写入题库前用参考实现真实运行。
(唯一段落锚点:计算机网络第12章第7节《实验:重试与去重状态机》。)

你还要自己补第五组测试,优先选择空输入、零长度、最大合法值、截断报文、重复报文、乱序、超时或资源上限之一。若优化实现与参考模型不同,保存首个不同输入和逐步状态。只给伪代码、依赖人工点击或把预期输出写死,都不算可运行协议实验。(本段实验对象:实验:重试与去重状态机。)
(唯一段落锚点:计算机网络第12章第7节《实验:重试与去重状态机》。)

故障注入与跨层定位

现在主动破坏一件事:改错一位长度、让TTL归零、丢掉一次确认、让缓存过期、让窗口变零、让响应晚于超时或让证书主机名不符。先预测哪一层最先观察到什么,再运行模型。若实际与预测不同,回到首个偏差包,不要从最终错误倒猜。抓包、应用日志、路由表和服务指标各只看见系统的一部分,结论要标明采集点与证据缺口。
(唯一段落锚点:计算机网络第12章第7节《实验:重试与去重状态机》。)

竞态和重试问题必须列时间线:请求是否到达、业务是否执行、响应是否发出、客户端是否收到。尤其在超时后,客户端常常不知道远端处于“未执行”还是“已执行但响应丢失”。解决要落到请求ID、幂等、去重、状态查询或补偿,不能用“再发一次一般没事”蒙混过去。(本段故障边界:实验:重试与去重状态机。)
(唯一段落锚点:计算机网络第12章第7节《实验:重试与去重状态机》。)

与前后知识连接

向前追一层:本节依赖的地址、封装、表项、计时器或信任根从哪里来?向后追一层:本节输出如何影响下一跳转发、传输可靠性、应用时延、安全身份或分布式一致性?请画至少三条有方向的因果箭头,每条箭头写字段、单位或状态条件。这样,实验:重试与去重状态机就会成为整张网络图中的一段因果链,而不是孤立考点。
(唯一段落锚点:计算机网络第12章第7节《实验:重试与去重状态机》。)

遇到“网页慢”这类跨层现象时,至少保留DNS、连接、TLS、首字节、传输重传、排队和服务端依赖几个假设。下一次观测要让不同假设产生不同预测,例如是否已有DNS响应、SYN是否被确认、TLS告警在哪一侧、首个应用字节何时出现。系统化排除比随手重启更能迁移到新故障。(本段连接对象:实验:重试与去重状态机。)
(唯一段落锚点:计算机网络第12章第7节《实验:重试与去重状态机》。)

练习方法与错题闭环

本节下方至少绑定单选、多选和计算题,部分课时另有真实代码题。单选先圈参与者与适用条件;多选逐项构造反例;计算题先统一bit/Byte、秒/毫秒和前缀单位;代码题必须通过全部测试并解释每个失败分支。章节卷、期中、期末和抓包/socket专项使用独立题池,不能靠记随课答案通过。
(唯一段落锚点:计算机网络第12章第7节《实验:重试与去重状态机》。)

错题不要只记正确字母。用“对象混淆、字段误读、状态跳步、单位错误、采集点错误、超时歧义、安全边界遗漏”分类,写出原错误发生的第一步。一周后更换地址、长度和事件顺序重做;能够在新数字和新拓扑下恢复机制,才算真正学会。(本段练习对象:实验:重试与去重状态机。)
(唯一段落锚点:计算机网络第12章第7节《实验:重试与去重状态机》。)

下课前闭卷自检

一,画出实验:重试与去重状态机的参与者和报文方向。二,写出至少四个合法状态迁移及触发字段。三,复述“输入请求ID、发送结果和响应丢失事件,输出业务执行次数、客户端结果与总尝试”并指出适用条件。四,为“实现确定性RPC模型并覆盖首次成功、响应丢失、持续失败和过期去重键”写第五组失败测试。五,用具体输入解释“模拟器必须区分请求未到达、已执行响应丢失和响应已到达三种状态”。六,把本节连接到上一层和下一层。七,给出一个抓包或日志字段,让同伴能验证你的结论。
(唯一段落锚点:计算机网络第12章第7节《实验:重试与去重状态机》。)

如果答案里仍出现“网络自己完成”“TCP保证一切可靠”或“加密就安全”,回到报文时间线补出真正动作。合格标准不是见过概念,而是能读字段、推状态、算中间量、运行实验、解释失败并说明证据边界。(本段自检对象:实验:重试与去重状态机。)

Practice

本课练习

6

先独立作答再提交;编程题会在隔离沙箱中真实编译、运行并对拍。

1单选:实验:重试与去重状态机 3

针对“实现确定性RPC模型并覆盖首次成功、响应丢失、持续失败和过期去重键”,哪项操作形成可复核的协议证据链?

登录 后答题可以领小红花
2多选:实验:重试与去重状态机 3

验收实验:重试与去重状态机时,哪些材料不可缺少?

多选题:必须选全正确项,漏选或多选均不得分。

登录 后答题可以领小红花
3计算:实验:重试与去重状态机 3

围绕实验:重试与去重状态机机制建立协议预算:连续发送4个应用载荷,每个648Byte;按本节报文结构,每个载荷增加52Byte首部。题设忽略重传、链路填充并规定一载荷对应一报文。请计算线上总字节。

登录 后答题可以领小红花
4U12独立题05:实验:重试与去重状态机 4

诊断实验:重试与去重状态机时,哪项动作能形成可复核证据?

登录 后答题可以领小红花
5FINAL独立题12:实验:重试与去重状态机 4

完成实验:重试与去重状态机协议分析设计题:提交拓扑与初态、报文状态机或公式、实验步骤、故障/攻击反例及恢复。

【公开评分量表】拓扑初态2分;机制推演3分;实验3分;边界2分。只列术语不得分。

登录 后答题可以领小红花
6SOCKET独立题07:实验:重试与去重状态机 4

围绕实验:重试与去重状态机的简化模型:5个载荷各536Byte,每个首部52Byte,无重传与填充。线上总字节是多少?

登录 后答题可以领小红花