运输层6——TCP可靠传输的实现
写在前面:本文章是针对《计算机网络第七版》的学习笔记
首先为了方便解释,先假定数据传输只在一个方向上进行。

- 假定A收到了B发来的确认报文段,其中窗口为20字节,确认号是31。如上图所示,A构造出了字节的发送窗口,窗口内是允许发送的序号。

假定A发送了31-41的数据,这时窗口位置未发生改变,但是窗口内前11个字节表示已经发送但是未收到确认,而后面9个字节表示允许发送但尚未发送。
从以上所述,要描述一个窗口需要3个指针:P1,P2,P3:
小于P1,发送结束且已经被确认;
大于P3,不允许发送;
P3-P1,窗口的大小;
P2-P1,已发送但未确认;
P3-P2,允许发送但未发送
B的接收窗口是20。在接收窗口外面,到30字节的数据已经接收到,并且交付给主机了,因此不必保留。31-50是允许接收的。B收到了32、33,但是没有收到31,数据没有按序到达。因为B只能对按序到达的最高序号给出确认,因此B发送的确认号依然是31.

现在假定B收到了31,并把31-33交付给给主机,接着把接收窗口向前移动3个字节,并且向A发送确认,同时窗口值仍然为20字节,但确认号34。未按序到达的37、38、40先暂存在接收窗口中。
A接收到B的确认后,把发送窗口向前滑动3个序号,指针p2不动。但是A的窗口增大了,可发送的序号42-53。

- A继续发送序号42-53的数据,指针P2向前移动和P3重合。发送窗口内的序号已经用完,但是还没有再收到确认。若A在规定时间内没有收到B的确认,A就重传这部分数据,如果收到的确认号在窗口内,则继续向前移动窗口并发送数据。
窗口和缓存的关系
发送方的应用程序把字节流写入TCP的发送缓存,接收方的应用进程从TCP的接收缓存中读取字节流。下图表示了发送应用程序以及接收应用程序中窗口与缓存的关系。


需要指出的是:
缓存空间和序号空间是有限的,并且都是循环使用。
实际的缓存和窗口非常大。
发送缓存:
发送应用程序传送给发送方TCP准备发送的数据;
TCP已发送,但尚未确认的数据。
接收缓存:
按序到达,但未被接收程序读取的数据;
未按序到达的数据。
此外,还需要注意:
虽然A的发送窗口值是根据B的接收窗口值设定的,但是同一时刻,发送窗口大小和接收窗口大小并不总是相等的;
对于不按序到达的数据如何处理,TCP并无明确规定;
TCP要求接收方必须有累积确认的能力,这样可以减少传输开销。
最后,TCP是全双工通信,每一方都有发送窗口和接收窗口。
2. 超时重传时间的选择
如果超时重传时间设置的太短,就会引起很多段报文的不必要重传,是网络负荷增大。但若把超时重传时间设置得过长,又使网络的空闲时间增大,降低了传输效率。
TCP采用一种自适应算法,它记录一个报文段发出的时间,以及收到相应的确认的时间。这里有两个概念:
报文段的往返时间:RTT
加权平均往返时间:RTTs,又称平滑的往返时间
其中:
新的RTTs = (1-a)*旧的RTTs + a*新的RTT
a的推荐值为0.125。
显然,超时计时器设置的超时重传时间RTO应该略大于RTTs。RTO可以根据下式计算:
RTO = RTTs + 4 * RTTD
RTTD是RTT的偏差的加权平均值,它与RTTs和新的RTT样本之差有关。当第一次测量时,RTTD取为测量到的RTT值的一半,往后计算中:
新的RTTD = (1-b)* 旧的RTTD + b * |RTTs - 新的RTT样本|
b的推荐值为0.25。
运输层6——TCP可靠传输的实现的更多相关文章
- 运输层4——TCP可靠运输的工作原理
目录 1. 停止等待协议 写在前面:本文章是针对<计算机网络第七版>的学习笔记 运输层1--运输层协议概述 运输层2--用户数据报协议UDP 运输层3--传输控制协议TCP概述 运输层4- ...
- TCP可靠传输的实现
TCP可靠传输的实现 1.概述 为方便描述可靠传输原理,假定数据传输只在一个方向上进行,即A发送数据,B给出确认 2.以字节为单位的滑动窗口 TCP的滑动窗口是以字节为单位的.为了 ...
- 计算机网络(9)-----TCP可靠传输的实现
TCP可靠传输的实现 以字节为单位的滑动窗口 滑动窗口的滑动是以字节为单位的,发送方A和接收方B在TCP三次握手的前两次握手时协商好了发送窗口和接受窗口的大小,发送方A根据B发送来的确认连接报文中标明 ...
- TCP可靠传输及流量控制实现原理
一.为什么TCP是可靠传输? 1. 停止等待协议 通过确认与超时重传机制实现可靠传输 在发送完一个分组后,必须暂时保留已发送的分组的副本. 分组和确认分组都必须进行编号. 超时计时器的重传时间应当比数 ...
- 计算机网络概述 传输层 TCP可靠传输的实现
TCP可靠传输的实现 TCP的可靠性表现在:它向应用层提供的数据是 无差错的.有序的.无丢失的,简单的说就是:TCP最终递交给应用层的数据和发送者发送的数据是一模一样的. TCP采用了流量控制.拥塞控 ...
- TCP可靠传输的工作原理
TCP可靠传输的工作原理 一.停止等待协议 1.1.简介 在发送完一个分组后,必须暂时保留已发送的分组的副本. 分组和确认分组都必须进行编号. 超时计时器的重传时间应当比数据在分组传输的平均往返时间更 ...
- TCP 可靠传输与流量控制的实现
TCP 可靠传输与流量控制的实现 一.TCP可靠传输的实现 现在所讲的可靠传输是根据之前所说的可靠传输原理的实现,是现实中应用的技术. 1.1.以字节为单位的滑动窗口 如图A端一份文件分为了多个字节, ...
- TCP可靠传输
1. TCP 可靠性如何保证? 信道可靠:用三次握手.四次挥手保证连接正确: 数据正确:分区编号.校验和.超时重传: 传输控制:流量控制.拥塞控制 2. 重传机制 TCP可靠传输方式是序列号与确认应答 ...
- TCP可靠传输原理
停止等待协议 "停止等待"就是发送方在发送完一个分组后停止发送,等待接收方的确认后再继续发送. 超时重传 发送方在等待一定时间后如果还没有收到接收方的确认,此时发送方将认定分组没有 ...
随机推荐
- ELK之Kibana的可视化监控报警插件sentinl的配置
参考:https://www.bbsmax.com/A/gGdXbgXmJ4/ https://www.deathearth.com/333.html https://www.cnblogs.com ...
- 小程序开发框架----WXSS
规定了屏幕宽度为750个RPX,从而可以通过屏幕宽度来进行自适应
- 【MPEG】DVB / ATSC / ISDB区别
硬件的区别: 欧洲“DVB标准”和美国“ATSC数字电视标准”的主要区别如下: (1)方形像素:在ATSC标准中采纳了“方形像素”(Square Picture Eelements),因为它们更加适合 ...
- 探索安卓热修复框架AndFix的奥秘
虽然阿里的AndFix框架已经出来很长时间了,但是还不了解它的同学依然挺多,接下来就跟着我一起来到AndFix的世界里一起看看,如何达到不用重新安装app就可以修复bug. 1.什么是AndFix? ...
- 一文带你全面了解RxJava
工作需要,刚好在学习 RxJava网络请求框架,网上搜了一些 关于RxJava 的教程,但都并不是很好理解,所幸最后找到了几篇有助于初学者了解 RxJava 的文章,于是结合自己的理解,重新整理成一篇 ...
- 学习记录:《C++设计模式——李建忠主讲》7.“领域规则”模式
领域规则模式:在特定领域中,某些变化虽然频繁,但可以抽象为某种规则.这时候,结合特定的领域,将问题抽象为语法规则,从而给出该领域下的一般性解决方案. 典型模式:解释器模式(Interpreter). ...
- Python 机器学习库 NumPy 教程
0 Numpy简单介绍 Numpy是Python的一个科学计算的库,提供了矩阵运算的功能,其一般与Scipy.matplotlib一起使用.其实,list已经提供了类似于矩阵的表示形式,不过numpy ...
- 【算法】js实现最短时间走完不同速度的路程
题目: 现在有一条公路,起点是0公里,终点是100公里.这条公路被划分为N段,每一段有不同的限速.现在他们从A公里处开始,到B公里处结束.请帮他们计算在不超过限速的情况下,最少需要多少时间完成这段路程 ...
- Python05之常用操作符
主要有三类:算数运算符,比较运算符,逻辑运算符 一.算数运算符: 加(+)减(-)乘(*)除(/)幂运算(**)地板除(//)取余数(%) 注:/和//的区别: 数据1 / 数据2 = 数据3 ( ...
- python 之 数据库(内置函数、流程控制、索引)
10.17 内置函数 强调:mysql内置的函数只能在sql语句中使用 #数学函数 round(x,y) #返回参数x的四舍五入的有y位小数的值 rand() #返回0到1内的随机值,可以通过提供一个 ...