问题描述
我们将:
- 渐增式地开发可靠数据传输协议( rdt )的发送方和接 收方
- 只考虑单向数据传输 但控制信息是双向流动的!
- 双向的数据传输问题实际上是2个单向数据传输问题的综合
-
RDT1.0:在可靠信道上的可靠传输
下层的信道是完全可靠的
下层信道可能会出错:将分组中的比特翻转
- 用校验和来检测比特差错 问题:怎样从差错中恢复:
- 确认(ACK):接收方显式地告诉发送方分组已被正确接收
- 否定确认( NAK): 接收方显式地告诉发送方分组发生了差错
- 发送方收到NAK后,发送方重传分组
rdt2.0中的新机制:采用差错控制编码进行差错检测
发送方不知道接收方发 生了什么事情!
- 发送方如何做?
- 重传?可能重复
- 不重传?可能死锁(或出 错)
- 需要引入新的机制
- 序号
- 处理重复:
- 发送方在每个分组中加 入序号
- 如果ACK/NAK出错,发 送方重传当前分组
- 接收方丢弃(不发给上 层)重复分组
停等协议:发送方发送一个分组, 然后等待接收方的应答
防止超时死锁 设置超时重传机制,一般设置比正常往返多一点的时间
rdt3.0的性能
- rdt3.0可以工作,但链路容量比较大的情况下,性能很差
- 链路容量比较大,一次发一个PDU 的不能够充分利用链路的传输能力
- 例:1 Gbps的链路,15 ms端-端传播延时,分组大小为1kB: Ttransmit = 8kb/pkt 109 b/sec = 8
- U sender:利用率 – 忙于发送的时间比例
- 每30ms发送1KB的分组 270kbps=33.75kB/s 的吞吐量(在1 Gbps 链路上)
- 瓶颈在于:网络协议限制了物理资源的利用!
- U sender= .008 30.008 = 0.00027 microsec L / R RTT + L / R = L (分组长度,比特) R (传输速率,bps) =
通用:滑动窗口(slide window)协议
- 发送缓冲区
- 形式:内存中的一个区域,落入缓冲区的分组可以发送
- 功能:用于存放已发送,但是没有得到确认的分组
- 必要性:需要重发时可用 发送缓冲区的大小:一次最多可以发送多少个未经确认的分组
- 停止等待协议=1
- 流水线协议>1,合理的值,不能很大,链路利用率不能够超100%
- 发送缓冲区中的分组
- 未发送的:落入发送缓冲区的分组,可以连续发送出去;
已经发送出去的、等待对方确认的分组:发送缓冲区的分组只有得到确认 才能删除
正常情况下的2个窗口互动
发送窗口
- 有新的分组落入发送缓冲区范围,发送->前沿滑动
- 来了老的低序号分组的确认->后沿向前滑动->新的分组可 以落入发送缓冲区的范围
- 接收窗口
- 收到分组,落入到接收窗口范围内,接收
- 是低序号 ,发送确认给对方
- 发送端上面来了分组->发送窗口滑动->接收窗口滑
GBN协议和SR协议的异同
- 相同之处
- 发送窗口>1
- 一次能够可发送多个 未经确认的分组
- 不同之处
- GBN :接收窗口尺寸=1
- 接收端:只能顺序接收
- 发送端:从表现来看,一旦一个 分组没有发成功,如:0,1,2,3,4 ; 假如1未成功,234都发送出去 了,要返回1再发送;GB1
- SR: 接收窗口尺寸>1
- 接收端:可以乱序接收
- 发送端:发送0,1,2,3,4,一旦1 未成功,2,3,4,已发送,无需重 发,选择性发送1
- GBN :接收窗口尺寸=1