笔记1:rdt2.0/rdt2.1和rdt2.2

来源:互联网 发布:英雄联盟登录网络错误 编辑:程序博客网 时间:2024/04/28 16:48

1)rdt2.0与 rdt2.1发送方的区别(对ACK和NAK的判断处理)

序号:每个相邻分组的序号都不一样。(eg:01010101)

Rdt2.1对ACK和NAK进行判断,如果接收方收到的是受损的分组,那么发送NAK给发送方,但是NAK受损。所以发送方确定不是ACK或者是NAK而进行一次重传,直到收到来自接收方的完整ACK。这一整个发送分组过程被序列号定义成0或者1,即接收方不用确定自己是否发送完整的ACK或者NAK,只需判断序号与上一次序号是否一致来确定自己是否是下一个分组

发送方如果没收到接收方完整的ACK,则不会跳到下个一个分组,而是会继续重传。

而接收方收到发送方的分组,则先判断序号(0或1)如果与上一个发送ACK或NAK的分组的序号一致,则表示是发送方重传。不一致,则表示是下一个分组。

 

2)rdt2.1接收方的FSM

 

在等待来自下层的0:

接收方确定事件rdt_rcv()&&notcorrupt()&&has_has_seq0(),发送ACK。结果发送方收到受损的ACK,即事件rdt_rcv()&&(corrupt()||isNAK()),我的理解是受损的notcorrupt()被发送方理解为corrupt(),所以发送方重传分组。

 

在等待来自下层的1:

接收方事件为has_seq0(),接收方重发ACK直到等待发送方跳到下一个分组改序号为1

 

3)rdt2.1与rdt2.2的区别

Rdt2.2是rdt2.1的精简版,去掉了对NAK的判断?

问题:在rdt2.2接收方中oncethru的作用是什么?

0 0
原创粉丝点击