知识卡片

ACK/NAK保正确传输

普通读书笔记卡 · 1145.d

内容

PCIe链路层给每个TLP编号并算LCRC,发送方存入Replay Buffer,收到确认才清除。接收方校验通过发ACK带上连续收到的最大序号,发送方据此清空缓存;校验失败或序号跳跃即丢包,发NAK标出最后正确序号,发送方把之后TLP全部重发;因超时重发的重复包,接收方丢弃并照常回ACK。发散:序号+确认+超时重传是链路层版TCP滑动窗口,搬到了总线上,与[[TLP是事务包]]共同构成可靠传输。

参考来源

- 位置:《深入浅出SSD:固态存储核心技术、原理与实战》第5章《PCIe介绍》(源文件:_epub-src/OEBPS/text00101.html,5.8 数据链路层·ACK/NAK协议) - 结论依据:原文描述发送端为每个TLP加序列号和LCRC并暂存于Replay Buffer,接收端校验后发送ACK/NAK决定清除还是重发,并给出正常接收、丢包、重复包三种场景的完整推演。 - 原始内容:数据链路层通过ACK/NAK协议来保证每个TLP的正确传输……在该TLP被接收端正确收到之前,它会一直保持在一个叫Replay Buffer的接口里面……如果TLP接收方检测到TLP有错误,则会生成和发送NAK DLLP,TLP发送方接收到NAK后……会重新发送Replay Buffer相关的TLP给对方。