什么是可靠:不错,不乱,不丢。路由器缓存溢出,产生丢包
如何把不可靠的信道转换为可靠的信道,实现可靠数据的传输。
可靠数据传输协议:
1可靠数据传输对。。2网络top10问题3信道不可靠性决定了可靠数据传输协议(rdt)的复杂性
渐进的设计可靠的数据传输协议的发送方和接收方
只考虑单向的数据传输,但是控制信息是双向的流动。利用有限状态自动机刻画传输协议。
rdt1.0可靠信道上的可靠数据传输
1假设底层信道完全可靠 ,不会发生错误,不会丢弃分组。
2发送方与接收方的FSM(优先状态自动机)独立,只需要发出去,因为信道百分百可靠,会正确无误的送到接收方,所以不需要交互啥。
状态是等待上层的调用,当有调用的时候就会触发send事件,采取创建分组,make pkt,调用信道上的udt_send发出去。
接收方是等待下层的调用,收到之后会进行提取操作,
rdt2.0产生位错误的信道
这个信道中分组不会丢失,按顺序到达的,但会发生位错误。
接收方需要知道分组错没错,还要知道怎么恢复,需要告诉发送方错了,合作改错。
底层信道可能翻转分组中的位(bit)
如何知道?1可以利用校验和检测位错误
如何恢复?发送方不知道是否正确送达,所以需要引入新的消息
1确认机制(Acknowledgements ack):接收方显式地告诉发送方分组已经正确接收
2NAK:接收方显式地告诉发送方分组有错误
3发送方收到NAK后,重传分组。 好比打电话,对方没听见,再说一遍。
基于这种重传机制的rdt、协议称为ARQ(Automatic Report reQuest)协议
Rdt2.0多了三个东西,三个机制
1差错检测
2接收方反馈的控制消息:ACK/NAK
3重传机制
如何设计?FSM规约
发送方
停等协议,等待上层调用,发送制造一个packet(带个校验和)再等待ACK/NAK的状态。NAK就重发,继续发一遍,刚发的数据存缓存 。若收到ACK进行状态变迁。
接收方
等待下层调用的状态。手法哦一个packet,判断错没错。如果有错,反馈一个NAK,调用nak_send。如果没错,提取数据,发一个ACK。
无错误场景
发送方发一个带校验和的给接收方,进入下一个等待ACK/NAK状态。接收方走下方的event,执行提取数据,发送数据,发送ACK。发送方收到ACK,返回上一个状态。
有错误的场景
发送方发一个带校验和的给接收方,进入下一个等待ACK/NAK状态。接收方触发了上方的event,发送NAK。发送方收到packet,并判断是NAK,重传再次调用udt_send。若没错,接收方走下方的event。。。。
Rdt2.1和2.2
Rdt2.0有什么缺陷?如果什么是可靠:不错,不乱,不丢。路由器缓存溢出,产生丢包
如何把不可靠的信道转换为可靠的信道,实现可靠数据的传输。可靠数据传输协议:1可靠数据传输对。。2网络top10问题3信道不可靠性决定了可靠数据传输协议(rdt)的复杂性渐进的设计可靠的数据传输协议的发送方和接收方只考虑单向的数据传输,但是控制信息是双向的流动。利用有限状态自动机刻画传输协议。 ## rdt1.0可靠信道上的可靠数据传输1假设底层信道完全可靠 ,不会发生错误,不会丢弃分组。2发送方与接收方的FSM(优先状态自动机)独立,只需要发出去,因为信道百分百可靠,会正确无误的送到接收方,所以不需要交互啥。状态是等待上层的调用,当有调用的时候就会触发send事件,采取创建分组,make pkt,调用信道上的udt_send发出去。接收方是等待下层的调用,收到之后会进行提取操作,## rdt2.0产生位错误的信道这个信道中分组不会丢失,按顺序到达的,但会发生位错误。接收方需要知道分组错没错,还要知道怎么恢复,需要告诉发送方错了,合作改错。底层信道可能翻转分组中的位(bit) 如何知道?1可以利用校验和检测位错误如何恢复?发送方不知道是否正确送达,所以需要引入新的消息 1确认机制(Acknowledgements ack):接收方显式地告诉发送方分组已经正确接收 2NAK:接收方显式地告诉发送方分组有错误 3发送方收到NAK后,重传分组。 好比打电话,对方没听见,再说一遍。基于这种重传机制的rdt、协议称为ARQ(Automatic Report reQuest)协议Rdt2.0多了三个东西,三个机制 1差错检测 2接收方反馈的控制消息:ACK/NAK 3重传机制 如何设计?FSM规约发送方停等协议,等待上层调用,发送制造一个packet(带个校验和)再等待ACK/NAK的状态。NAK就重发,继续发一遍,刚发的数据存缓存 。若收到ACK进行状态变迁。接收方等待下层调用的状态。手法哦一个packet,判断错没错。如果有错,反馈一个NAK,调用nak_send。如果没错,提取数据,发一个ACK。无错误场景 发送方发一个带校验和的给接收方,进入下一个等待ACK/NAK状态。接收方走下方的event,执行提取数据,发送数据,发送ACK。发送方收到ACK,返回上一个状态。有错误的场景 发送方发一个带校验和的给接收方,进入下一个等待ACK/NAK状态。接收方触发了上方的event,发送NAK。发送方收到packet,并判断是NAK,重传再次调用udt_send。若没错,接收方走下方的event。。。。