传输层-3、流水机制和滑动窗口协议
来源:互联网 发布:电脑怎么修改淘宝评价 编辑:程序博客网 时间:2024/06/05 08:02
参考哈工大公开课。
动机与原理
在上面的一篇文章中介绍了保证数据传输的原理与停等方式。但是停等方式的效率极低,为了对其效率进行改进,我们可以采用流水方式对其效率进行改进,就是连续发多个数据包,接收方接收到数据包按照特定的规则进行ACK回复,从而完成数据传输。
图一:流水机制示例
采用了流水方式之后,就允许数据在发送方收到ACK之前连续发送多个分组,这样就需要更大的存储空间缓存分组了。对于这种机制的实现是采用窗口协议:
窗口:1、规定使用序列号的范围,窗口尺寸为N就意味着最多有N各等待确认的消息。
滑动窗口:随着协议的运行,窗口在序列号空间内向前滑动。支持滑动窗口的协议有两种:GBN和SR。
图二:窗口示例
GBN协议:
这个协议的核心思想就是发送方按流水方式发,接收方按照顺序接收,只回复自己带有最大分组号的ACK。发送方按流水方式发后,接收方只按序接收;
举个例子:窗口最多发送4个分组,发送方发送了0,1,2,3号分组,发送完后开始计时,传输过程中2号分组丢失;接收方接收到0号,1号分组,分别发送ACK(0),ACK(1),当接收道3号分组时,不是接受方要接收的2号分组,所有丢弃3号分组并向发送方发送ACK(1);
发送方接收到ACK(0)、ACK(1)后滑动窗口,将0号,1号分组设为已发送分组,并发送4号,5号分组;由于没有接收到ACK(2),时间timeout之后,发送方会重新从2号分组开始发送。
图三:GBN协议示例
GBN协议有一个问题,就接收方只能按序接收,这样就会造成一些没按序到达的分组的浪费,为了解决这一个问题,提出了SR协议。
SR协议:
SR协议其实就是停等协议的流水版,就是把没有按序到达的的分组也缓存下来,并且对发送方发送每一个分组都设置一个计时器,如果超时没有接收到对应的ACK就重新发送,如果在超时之前接收到对应发ACK就标记成发送成功,如果接收是窗口的边缘且是接近发送成功的那边,那么就移动窗口;对于接收方,接受到什么分组,都发送带有该分组的分组号的ACK,同时如果接收方没有该分组就接收保存该分组,否则就直接将该分组丢弃;在发送放,接收到一个ACK,就表明该分组已经被接收方正确接收了,以后就不需要再次发送该分组了。
图四:SR协议窗口示例
图五:SR过程示例
- 传输层-3、流水机制和滑动窗口协议
- socket TCP协议 传输层中的滑动窗口协议
- (运输层)TCP可靠传输之滑动窗口协议
- 传输层与数据链路层滑动窗口协议的异同
- TCP协议滑动窗口机制
- 动态的滑动窗口网络传输协议
- 网络层协议和传输层协议
- 运输层—滑动窗口协议
- (运输层)TCP协议、滑动窗口机制、TCP连接建立(三次握手)
- 协议分析之滑动窗口机制
- 流水线机制与滑动窗口协议
- TCP传输的可靠性及滑动窗口协议
- TCP-可靠传输的实现-滑动窗口协议
- 3.4.1 流量控制、可靠传输与滑动窗口机制
- 流量控制、可靠传输与滑动窗口机制
- 传输层协议TCP和UDP
- TCP 传输 滑动窗口
- 五.传输层和应用层的协议和作用
- Hadoop-使用MRUnit来写单元测试
- list的简单剖析
- [免下载]Sublime Text 3 (Build 3143) 最新注册码,亲测可用!
- GraphX增加BFS测试用例
- Fiddler实现手机抓包
- 传输层-3、流水机制和滑动窗口协议
- js 适配器模式
- mybatis在xml文件中处理大于号小于号的方法
- jenkins-git下载代码超时
- Git命令大全思维导图
- Matlab 折线图转化成柱状图
- 并发编程复习(二):volatile关键字使用
- 使用Android Studio的lint清除无用的资源文件
- CoreBlueTooth 蓝牙开发相关总结