计算机网络rdt2.1的问题咨询

题主初探计算机网络,在学习rdt2.1的时候 rdt2.1说解决了位出错的问题,增加了编号机制规避了重复(不按时到序、丢包、等其他问题暂不考虑)

产生了如下疑问:
假设有两台主机:主机A、主机B
如果主机A发送一个消息给主机B,主机B验证校验和发现这条消息有误,那么B主机发送NAK给主机A,但是如果在途中经过位错误,万一变为了合法的ACK被主机A接受(A主机验证校验和正确且是正确的ACK)那么A主机继续发送下一个分组,这样的话就导致死循环问题吗?(主机B收到下一个分组消息发现不是自己要求的序号分组,再次发送一个NAK,A主机(误认为上一个分组已经正确接受)接到NAK还发这个B主机永远无法确认的下一个分组)

望采纳!!点击该回答右侧的“采纳”按钮即可采纳!!
我觉得你描述的情况可能会导致死循环问题。


为了避免这种情况,我们通常在发送和接收消息时会使用计数器或序号来确保每条消息的唯一性和正确性。

举个例子吧:
在主机 A 和主机 B 之间的通信中,主机 A 可能会将每条消息的序号附加到消息本身中
,而主机 B 可能会将收到的消息序号与期望收到的序号进行比较,以确定是否应该接受消息。
如果收到的序号不是期望的序号,则主机 B 可能会发送 NAK 消息,要求主机 A 重新发送消息。

同时,主机 A 可能会在每次发送消息时将序号增加 1,
以便主机 B 可以通过序号来确定是否已经接收到了最新的消息。
这样,即使在途中出现位错误,主机 B 也可以通过序号来确定是否已经接收到了最新的消息,
从而避免死循环问题。

当然,还有其他方法可以避免死循环问题(我就不一一列举咯),比如使用重传计数器或添加超时时间等。不过,这些方法的具体实现可能会因环境和应用场景而异。

Rdt协议对比
借鉴下
https://blog.csdn.net/weixin_43973089/article/details/117232366

主机A在发送下一个分组之前应该先确认收到了正确的ACK或NAK。如果收到了正确的NAK,主机A就应该重新发送上一个分组,而不是发送下一个分组。这样就能避免死循环问题。

此外,rdt2.1还提供了编号机制来解决重复分组的问题。主机A在发送每一个分组时都会为它分配一个独特的编号,主机B在收到分组后会根据编号来确定它是否已经收到过这个分组。如果收到的分组的编号与之前收到的分组的编号重复,主机B就可以忽略这个分组,而不是重复回复ACK或NAK。这样也能避免死循环问题。

在通信中,很常见的情况是发生传输错误,然后重新发送数据。如果发生了位出错,会导致校验和出错,使得接收方发送NAK,要求重发数据。在RDT2.1中,增加了编号机制来规避重复的情况。编号机制就是在每一个数据分组中加入一个编号,用于指明这是一个哪个序号的数据分组。接收方在收到数据分组后,会检查编号,如果不是期望收到的序号,就会发送NAK,要求重发数据分组。这样即使位出错导致的校验和正确,接收方也可以正确地发送NAK,因为接收方知道这不是期望的数据分组。

这样就不会出现所说的死循环问题。如果发生了位出错,接收方会发送NAK,要求重发数据分组,发送方会重新发送数据分组。这个过程会一直重复,直到发送方发送的数据分组没有出错为止。
望采纳。