由于传输层所依赖的网络层是不可靠的,通过逐渐考虑实际情况不断引入新技术来实现可靠数据传输。

完全可信的信道

有比特差错的信道

新的协议功能:

1.    差错检测:检验和

2.    接收方反馈:序号,ACK分组

3.    重传

会产生丢包的信道

超时重传:冗余数据分组

流水线可靠数据传输

1.     增加序号范围

2.     发送方和接收方都需要缓存分组

3.     差错恢复:选择重传/回退N步

回退N步(GBN):

发送方:

  • 发送发维护如图所示的结构,窗口长度的含义即为已发送未确认的最大分组数
  • 上层调用:如果窗口未满,则产生分组并发送;如果窗口已满则不发送
  • 收到ACK:将base置为确认号+1,即向前移动窗口,为最早的已发送未确认分组启动定时器
  • 超时:定时器只为最早的已发送未确认的分组定时。超时后重发所有已发送未确认的分组,并重启定时器


接收方:

  • 维护期望序号,收到则发送ACK,否则丢弃并按最近的按序接受的分组发送ACK

选择重传(SR):

发送方:

  • 维护如图的序号空间
  • 上层调用:如果窗口未满,则产生分组并发送;如果窗口已满则不发送
  • 收到ACK:如果确认号是base,则将base前移到最小的已发送未确认分组处,并发送新的落在窗口内的序号;如果确认号落在窗口内,则将该分组标记为已确认
  • 超时:每个分组有自己的定时器,超时时重发该分组

接收方:

  • 维护如图的序号空间
  • 接收的序号在[rcv_base,rcv_base+N-1]:发送ACK。如果没有接收过则缓存。如果是base,则将从base开始已缓存的序号连续的分组交付给上层,移动base
  • 接收的序号在[rcv_base-N,rcv_base-1]:发送对应的ACK,表示已经确认过。9里之所以是rcv_base-N是因为这是发送方可能的最小的期待确认号
  • 其他:忽略

TCP学习前的准备——可靠数据传输协议的更多相关文章

  1. 哈工大 计算机网络 实验二 可靠数据传输协议(停等协议与GBN协议)

    计算机网络实验代码与文件可见github:计算机网络实验整理 实验名称 可靠数据传输协议(停等协议与GBN协议) 实验目的: 本次实验的主要目的. 理解可靠数据传输的基本原理:掌握停等协议的工作原理: ...

  2. 无连接运输的UDP、可靠数据传输原理、面向连接运输的TCP

    由[RFC 768]定义的UDP只是做了运输协议能够做的最少工作.除了复用/分解功能极少量的差错检测外,它几乎没有对IP增加别的东西.如果应用程序开发人员选择UDP而不是TCP,则该应用程序差不多就是 ...

  3. TCP可靠数据传输

    TCP可靠数据传输   在TCP在IP不可靠的尽力而为的服务之上,创建了一条可靠数据传输服务(reliable data transfer service).TCP提供的可靠数据传输的方法涉及到可靠数 ...

  4. TCP为什么是个可靠的协议

    一直以来,我们都被告知TCP是可靠的.但为什么是可靠的,很多人都会说“三次握手.四次挥手”.然后我们就进入一个误区:TCP可靠是因为它在建立链路时进行了“多次”地确认.然后又有人问,“多次确认就可靠了 ...

  5. 【T09】要认识到TCP是一个可靠的,但不是绝对可靠的协议

    1.稍微想一下就知道,TCP不是绝对可靠的协议,比如:网络断开,主机崩溃,无论TCP如何努力,都无法将数据传给对方. 2.考虑应用程序A向应用程序B发送数据的TCP流程,数据流从应用程序A通过他所在主 ...

  6. 高效开发之SASS篇 灵异留白事件——图片下方无故留白 你会用::before、::after吗 link 与 @import之对比 学习前端前必知的——HTTP协议详解 深入了解——CSS3新增属性 菜鸟进阶——grunt $(#form :input)与$(#form input)的区别

    高效开发之SASS篇   作为通往前端大神之路的普通的一只学鸟,最近接触了一样稍微高逼格一点的神器,特与大家分享~ 他是谁? 作为前端开发人员,你肯定对css很熟悉,但是你知道css可以自定义吗?大家 ...

  7. TCP/IP详解学习笔记(3)IP协议ARP协议和RARP协议

    把这三个协议放到一起学习是因为这三个协议处于同一层,ARP协议用来找到目标主机的Ethernet网卡Mac地址,IP则承载要发送的消息.数据链路层可以从ARP得到数据的传送信息,而从IP得到要传输的数 ...

  8. TCP学习总结(一)

    在学习的过程中,相信大家都有过“学了就忘“这种经历,又特别是TCP/IP知识点密集的通信协议,所以在此总结一下自己学到的皮毛,希望对自己对大家也有所帮助. 这篇博客主要讲运输层TCP和UDP的东西,I ...

  9. TCP学习笔记

    TCP/IP 协议分层模型 TCP/IP 协议族按层次分别分为以下 4 层:应用层.传输层.网络层和数据链路层.层次化之后,每个层级只需要考虑自己的任务就可以了,不再需要弄清其他层级的功能了. TCP ...

随机推荐

  1. Kali linux 2016.2 的 plyload模块之meterpreter plyload详解

    不多说,直接上干货! 前期博客 Kali linux 2016.2(Rolling)中的payloads模块详解 当利用成功后尝试运行一个进程,它将在系统进程列表里显示,即使在木马中尝试执行系统命令, ...

  2. 大神js总结

    http://www.cnblogs.com/tylerdonet/p/5543813.html http://www.codesec.net/list/8/

  3. category和关联对象

    如上所见,我们知道在category里面是无法为category添加实例变量的.但是我们很多时候需要在category中添加和对象关联的值,这个时候可以求助关联对象来实现. MyClass+Categ ...

  4. BZOJ 4199: [Noi2015]品酒大会 后缀自动机_逆序更新

    一道裸题,可以考虑自底向上去更新方案数与最大值. 没啥难的 细节........ Code: #include <cstdio> #include <algorithm> #i ...

  5. 双系统 windows引导项添加

    [root@MiWiFi-R2D-srv ~]# vi /etc/grub.d/40_custom #!/bin/sh exec tail -n +3 $0# This file provides a ...

  6. 怎么给Unity写一个原生的插件

    本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/50266889 作者:car ...

  7. 【转】 C# DEBUG 调试信息打印及输出详解

    [转] C# DEBUG 调试信息打印及输出详解 1.debug只在[debug模式下才执行](运行按钮后面的下拉框可选) 2.debug提供了许多调试指令,如断言          System.D ...

  8. php持续集成环境笔记

    记录下php集成环境中若干个工具的安装步骤和过程: 安装pear wget http://pear.php.net/go-pear.phar $ php go-pear.phar 使用:pear in ...

  9. 关于functioncharts饼状图篇

    关于functioncharts饼状图(仅限饼状图) TODO: 1.饼状图没有数据情况下,显示:no data to display 2,解决的方法:自己定义处理.显示图像或其他内容

  10. mysql-管理事务

    一.介绍 mysql支持几种基本的数据库引擎,其中MYSQL的两种最基本的引擎MyISAM和InnoDB,其中只有InnoDB支持事务管理. 事务处理:可以用来维护数据库的完整性,他保证成批的MySQ ...