停止等待协议

“停止等待”就是发送方在发送完一个分组后停止发送,等待接收方的确认后再继续发送。

超时重传

发送方在等待一定时间后如果还没有收到接收方的确认,此时发送方将认定分组没有送达,从而重新发送分组。

TCP通过以下的方式实现超时重传:

  • 超时计时器:每发送完一个分组后,tcp都会设置一个超时计时器。超时计时器的超时时间往往要大于报文的平均往返时间。
  • 分组副本:发送分组后,tcp会保留分组的副本,只有收到分组的确认后才会清除
  • 分组编号:TCP会对每一个分组编号,确认分组和发送的分组编号对应。

连续ARQ协议

如果TCP每发送一个分组就要等待的话,势必会浪费大量的时间,使得网络利用率降低。所以TCP采用了连续ARQ的方式,也就是每次发送多个分组,然后使用累积确认的方式确认。

  • 累积确认:接收方只对按序到达的最后一个分组发送确认。

假如发送方一次性发送了[1,2,3,4,5]五个分组,接收方只接受到了[1,2,4,5]四个分组。按照按序最后一个的规则,接收方只会发送 2 号分组的确认。发送方将收不到后面三个分组的确认,所以会重传3,4,5。

累积确认使用了滑动窗口实现,它的优点是不需要对每个分组发送确认,从而减少了网络开销。缺点是不能向发送方真实反映收到分组的信息,比如上面例子里,发送方认为 3 号分组以后的都没有收到,但是接收方其实是收到了4,5号分组的。

以字节为单位的滑动窗口

发送方和接收方分别维护 发送窗口接收窗口 两个滑动窗口。

发送窗口维护了三个指针p1、p2、p3,它们划分了发送窗口的区域:

  • [p1, p2):等待确认区域,记录已发送但没收到确认的分组。
  • [p2, p3] :可用窗口,允许发送但是还未发送的分组。

既然是滑动窗口,那么它的左右边界应该是能够移动的,下面来分析发送窗口的左右边界的移动。

p2前移

p2指针指向的是第一个允许发送但还未发送的分组,所以p2的前移是发送方发送了新的分组。

p1前移

p1指针只有在收到确认后才会移动到被确认分组的下一个分组。

因为采用的累积确认的方式,接收方只会发送按序到达最后一个分组的确认,所以p1的前移可能不止一个分组。

比如向上图的情况,假如接收方收到了31,32,33三个分组,它只会发送按序到达最后分组的确认,也就是33号分组的确认。此时发送方的p1指针将会直接从31号位置移动到34号位置,也就是收到确认分组的下一个。

p3前移

p3的前移是收到接收方发送的确认报文窗口字段控制的。

窗口值表示从确认分组号开始到p3的分组数量。比如确认分组号为101,窗口值为200,那么p3就会移动到301的位置。

接收方通过窗口值来控制发送窗口的大小也叫做流量控制,这里不过多介绍。

TCP缓存

TCP既然能够保留未确认的分组以及按序发送确认,它肯定需要一个内存空间作为缓存,而不是直接用应用进程的内存。

如图所示,接收方和发送方各自维护了一个缓存,发送窗口和接收窗口都在这个缓存中。首先TCP缓存有以下特点:

  • 因为缓存空间和序号有限,TCP缓存是循环使用的,是一个环形的结构。
  • 滑动窗口只是缓存的一部分,已经确认的数据会被删除。

发送缓存和接收缓存结构相同但是作用不同。

发送缓存

  • 缓存应用程序让TCP发送的数据
  • 暂存已经发送但未收到确认的数据

接收缓存

  • 暂存未按序到达的数据
  • 缓存按序到达但没有被应用程序读取的数据

总结

  1. TCP可靠传输的原理是超时重传和连续ARQ
  2. 超时重传时间大于分组平均往返时间
  3. 连续ARQ采用了累积确认的方式发送确认
  4. TCP通过发送窗口和接收窗口实现可靠传输
  5. 发送窗口大小受到接收方的窗口值控制
  6. 滑动窗口是TCP缓存的一部分,TCP缓存是一个环形结构,还负责缓存应用程序数据

TCP可靠传输原理的更多相关文章

  1. 网络学习笔记(二):TCP可靠传输原理

      TCP数据段作为IP数据报的数据部分来传输的,IP层提供尽最大努力服务,却不保证数据可靠传输.TCP想要提供可靠传输,需要采取一定的措施来让不可靠的传输信道提供可靠传输服务.比如:出现差错时,让发 ...

  2. TCP可靠传输的工作原理

    TCP可靠传输的工作原理 一.停止等待协议 1.1.简介 在发送完一个分组后,必须暂时保留已发送的分组的副本. 分组和确认分组都必须进行编号. 超时计时器的重传时间应当比数据在分组传输的平均往返时间更 ...

  3. TCP可靠传输及流量控制实现原理

    一.为什么TCP是可靠传输? 1. 停止等待协议 通过确认与超时重传机制实现可靠传输 在发送完一个分组后,必须暂时保留已发送的分组的副本. 分组和确认分组都必须进行编号. 超时计时器的重传时间应当比数 ...

  4. TCP/IP详解学习笔记(14)-- TCP可靠传输的实现

    1.概述      为方便描述可靠传输原理,假定数据传输只在一个方向上进行,即A发送数据,B给出确认 2.以字节为单位的滑动窗口      TCP的滑动窗口是以字节为单位的.为了便于说明,字节编号取得 ...

  5. TCP可靠传输的实现

    TCP可靠传输的实现 1.概述      为方便描述可靠传输原理,假定数据传输只在一个方向上进行,即A发送数据,B给出确认 2.以字节为单位的滑动窗口      TCP的滑动窗口是以字节为单位的.为了 ...

  6. 计算机网络概述 传输层 TCP可靠传输的实现

    TCP可靠传输的实现 TCP的可靠性表现在:它向应用层提供的数据是 无差错的.有序的.无丢失的,简单的说就是:TCP最终递交给应用层的数据和发送者发送的数据是一模一样的. TCP采用了流量控制.拥塞控 ...

  7. 运输层6——TCP可靠传输的实现

    目录 1. 以字节为单位的滑动窗口 2. 超时重传时间的选择 写在前面:本文章是针对<计算机网络第七版>的学习笔记 运输层1--运输层协议概述 运输层2--用户数据报协议UDP 运输层3- ...

  8. TCP 可靠传输与流量控制的实现

    TCP 可靠传输与流量控制的实现 一.TCP可靠传输的实现 现在所讲的可靠传输是根据之前所说的可靠传输原理的实现,是现实中应用的技术. 1.1.以字节为单位的滑动窗口 如图A端一份文件分为了多个字节, ...

  9. TCP可靠传输

    1. TCP 可靠性如何保证? 信道可靠:用三次握手.四次挥手保证连接正确: 数据正确:分区编号.校验和.超时重传: 传输控制:流量控制.拥塞控制 2. 重传机制 TCP可靠传输方式是序列号与确认应答 ...

随机推荐

  1. Linux[Manjaro] 小新15笔记本AMD ryzen锐龙4800U,在安装系统后出现的随即死机冻屏问题

    Linux[Manjaro] 小新15AMD ryzen锐龙4800U,在安装系统后出现的随即死机冻屏问题解决办法 年初尝试将manjaro安装在我的笔记本上就存在这个问题,也一度将我劝退.系统安装在 ...

  2. mongoose基础使用

    mongoose与mongodb 首先,要明确mongoose和mongodb是什么? mongodb是一种文档数据库:而mongoose是一种能在node环境中优雅地操作mongodb的对象模型工具 ...

  3. Scrapy入门到放弃04:下载器中间件,让爬虫更完美

    前言 MiddleWare,顾名思义,中间件.主要处理请求(例如添加代理IP.添加请求头等)和处理响应 本篇文章主要讲述下载器中间件的概念,以及如何使用中间件和自定义中间件. MiddleWare分类 ...

  4. IDEA创建Mapper.xml文件识别不成功的问题

    在IDEA的maven项目中,创建一个EmpMapper.xml的文件识别不成功,图标显示为文本文档类型,在写代码时也不会弹出提示 解决方法: 在文件->设置->编辑器->文件类型中 ...

  5. CTF_论剑场_Web25

    点击xiazai后面发现404,没办法打开,抓包也没发现啥,用御剑扫描了下发现还有新的页面 点击会跳转到flag.php这个文件,这里应该才是真正的提交页面 另外前面提示了一个ziidan.txt在s ...

  6. RHCSA_DAY12

    Linux软件包的分类 inghu 源码包 二进制包(RPM包) 源码包特点 源码包缺点:安装过程麻烦,需要用户手动编译,需要手动解决软件包的依赖关系 源码包优点:软件源代码开放,允许用户二次开发,安 ...

  7. C++ 打印乘法口诀

    1 //嵌套循环 乘法口诀 2 #include <iostream> 3 using namespace std; 4 int main() 5 { 6 int i ,j; 7 for ...

  8. 又一开源项目爆火于GitHub,Android高级插件化强化实战

    一.插件化起源 插件化技术最初源于免安装运行 Apk的想法,这个免安装的 Apk 就可以理解为插件,而支持插件的 app 我们一般叫 宿主. 想必大家都知道,在 Android 系统中,应用是以 Ap ...

  9. Spring Cloud Alibaba - Gateway

    Gateway Gateway简介 底层使用Netty框架,性能大于Zuul 配置gateway模块,一般使用yaml格式: server: port: 80 #spring boot actuato ...

  10. DVWA靶场之CSRF(跨站请求伪造)通关

    Low: 服务器就看了password_new与password_conf是否相同,没有其他的验证 重新构造一个html页面,(自己假装自己是受害者,ip是靶场ip非本地ip) 1 <img s ...