TLP报文在链路上传输的可靠性,是由ACK/NAK机制来保证的。事实上很多其他协议也有类似的机制。ACK就是acknowledge,ACK DLLP表示TLP接收完成,NAK就是Negative acknowledge,意思就是拒绝接收这个TLP。
 

         如上图所示,每一个从A发到B的TLP报文,发出后,都会先备份缓存在A的重发缓冲区(Replay Buffer)里面。B的接收器会检测TLP是否正确。如果是正确的,B会返回ACK确认接收成功,此时A回删除重发缓冲区的对应备份。如果TLP由错误,B会返回NAK。收到NAK的A设备会从重发缓冲区重新发送对应的TLP。(注意:并不是每一个TLP都必须返回ACK/NAK,协议规定可以几个TLP之后用一个ACK/NAK来返回。) 
         ACK/NAK是在两个设备间发送的,当然,通过Switch的情况下,无论是Requester还是Completer,跟Switch交互的报文,同样也是分别有对应的ACK/NAK的。如下图。

假设链路一切OK,Requester首先发送request报文,Switch接收并回复给Requester ACK。Switch继续转发这个Request到Completer,Completer接收并回复给Switch ACK。Completion完成报文返回的路径上,同样如此,不再累述。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注