计网第五章(运输层)(六)(TCP可靠传输的实现)

2023-09-17 11:46:46

目录

一、基本概述

二、具体实现

1.前后沿:

2.利用指针描述发送窗口的状态

3.有差错情况


之前在数据链路层时已经讨论过可靠传输(计网第三章(数据链路层)(二)(可靠传输)),也在其中提到过可靠传输并不局限于数据链路层。

一、基本概述

TCP通过以字节为单位的滑动窗口来实现可靠传输。

可靠传输的概念在之前已经提到过,这里不再做赘述。

在本篇博客中,假设网络不存在拥塞问题,即发送方的窗口值只由接收方的接收窗口确定。

二、具体实现

1.前后沿:

如图,发送窗口的边界可以定为前沿和后沿。后沿的后面部分是已经发送并收到确认的数据,可以从发送缓存中删除掉。前沿前面的部分是当前不允许发送的数据的序号。窗口内的是当前可以发送的数据的序号。

后沿移动情况有两种可能: 

1.向前移动:收到了新的确认,就会向前移动。

2.不动:没有收到新的确认,就不会向前移动。

后沿不可能向后移动,因为不能撤销已收到的确认。

前沿的移动情况有三种:

1.不移动:(1)没有收到新的确认,并且对方通知的窗口值大小也没变。

                 (2)收到了新的确认,但是对方通知的窗口值恰巧缩小,所以没有移动。如图,假设接收方给发送方发回了11号确认,表示11号之前的数据全部收到。同时接收方将自己的窗口值改为2,那么发送窗口的前沿不会进行移动。也就是说,向前移动和向后回缩的尺寸恰好相等,就不会移动。

2.向前移动:一般都是不断向前移动,收到新确认后并且返回的接收窗口值不变或者增加都会向前移动。还是最开始的例子,收到11号确认后,接收窗口的值并没有改变,所以前沿移动到14号数据前。

3.向后移动:

向前移动的尺寸小于向后回缩的尺寸。 仍然用最开始的例子,假设收到11号确认后,接收方的窗口值变为了1,那么发送窗口的前沿反而从12变成了11。但是,这种情况很糟糕,比如在收到11号确认分组前,12号数据已经发送出去了,这时候又缩小窗口值不让发送,就会引发错误。所以并不支持这样做。

2.利用指针描述发送窗口的状态

如图:

实际p1指针就是窗口前沿的位置,p3指针就是窗口后沿的位置。

所以p3之后的部分仍然是已经给您发送并确认的数据的序号。

p1之前的部分是当前不允许发送的数据的序号。

p1-p3是发送窗口的尺寸。

p2-p3是已经发送但是还未收到确认的数据的字节数。

p1-p2是当前允许但还未发送的数据的字节数。

可以看到,实际上这种描述方法就是把发送窗口里的情况进行了更细致的分析。

3.有差错情况

如图:假设现在发送方向接收方发送了9到11号数据,但是9号数据在传输过程中丢失。接收方接收到后发现是未按序到达的数据,于是将10号和11号数据存入接收缓存中,并返回当前按序到达的最高序号的确认,确认号应该为9,表示9号之前的数据都已经正确接收。

在前面总结拥塞控制(计网第五章(运输层)(五)(TCP拥塞控制))时,提到了快重传算法,即发送方收到三个重复确认,就立即重传相应的报文段。在本例中,发送方只收到了一个重复确认,所以不会有所动作。

可能有些同学会问,为什么得三个重复确认?一个不行吗?

拿本例来说,实际上,接收方没有收到9号数据不一定就是9号数据丢失,也可能是停留在网络的某处,即数据未按序到达。如果在接收方返回确认之后,该数据又到达接收方,那么接收方就会将其放入接收缓存,现在接收方就可以将9、10、11号数据交付给上层。所以实际三个重复确认是为了确保该数据是真的丢失了。

 注意:TCP的接收方要求必须有累计确认和捎带确认的机制,这样可以减少传输的开销。

可能有些读者看完TCP的可靠传输后,感觉好像TCP可靠传输就是选择重传协议。但是注意TCP的可靠传输的接收方是有累积确认的,但是选择重传为了只重传出现误码的数据分组,不再使用累积确认。TCP协议的设计目标是实现高效、可靠的数据传输,而不仅仅是仅重传出现误码的数据段。

所以TCP的可靠传输是有选择重传的机制,但是不仅仅局限于该机制,所以TCP协议的可靠传输并不完全等同于选择重传协议。

更多推荐

建造者模式

1、概述在软件开发过程中有时需要创建一个复杂的对象,这个复杂对象通常由多个子部件按一定的步骤组合而成。例如,计算机是由CPU、主板、内存、硬盘、显卡、机箱、显示器、键盘、鼠标等部件组装而成的,采购员不可能自己去组装计算机,而是将计算机的配置要求告诉计算机销售公司,计算机销售公司安排技术人员去组装计算机,然后再交给要买计

微服务是个坏主意吗?

曾几何时,我记得我的手指疯狂地敲打键盘,与庞大而杂乱的代码库搏斗。那是巨石的时代,代码就像古老的城堡一样,由一块块石头砌成一个令人印象深刻的庞然大物。几年过去了,时代变了。开发人员口中的流行语变成了“微服务”。微服务革命——承诺成为我们的救世主。我们被告知,通过将庞然大物分割成更小、自包含的独立服务,我们将获得无与伦比

Dynatrace获评《2023 Gartner® 应用性能监控(APM)和可观测性魔力象限™》“领导者”,前瞻性与执行力均表现卓越

中国上海,2023年9月12日——统一的可观测性和安全解决方案公司Dynatrace(纽交所代码:DT)日前宣布在《2023Gartner应用性能监控(ApplicationPerformanceMonitoring,APM)和可观测性魔力象限》报告中获评“领导者”。Gartner对19家厂商进行了评测,Dynatra

数据采集:数据挖掘的基础

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️🐴作者:秋无之地🐴简介:CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作,主要擅长领域有:爬虫、后端、大数据开发、数据分析等。🐴欢迎小伙伴们点赞👍🏻、收藏⭐️、留言💬、关注🤝,关注必回关上一篇文章已经跟大家介绍过

简单讲讲在一台机器上用docker部署hadoop HDFS

为什么写这篇文章?老东西叫我用vmvare部署hadoop,我觉得这简直蠢毙了,让我们用docker和docker-compose来快速的过一遍如何使用docker-compose来部署简单的hadoop集群范例写在前面,一定要看我!!!还有注意!Hadoop中的主机名不能带-或者_注意了!一定注意存储空间大小,确保机

【C++】map与set的封装

文章目录前言正文1.类型的泛化2.仿函数3.迭代器3.1正向迭代器3.1.1++3.1.2--3.1.3*3.1.4->3.1.5!=完整版代码4.[](map)框架1.红黑树2.set3.map总结前言在学习了红黑树之后,我们便可以尝试初步的在红黑树的基础上封装出map与set,好了,话不多说,进入今天的学习吧!所需

AVL 树

文章目录一、AVL树的概念二、AVL树的实现1.AVL树的存储结构2.AVL树的插入一、AVL树的概念在二叉搜索树中,当我们连续插入有序的数据时,二叉搜索树可能会呈现单枝树的情况,此时二叉搜索树的查找效率为O(N)俄罗斯的两位数学家G.M.Adelson-Velsky和E.M.Landis发明了AVL树可以解决上述问题

【计算机毕业设计】基于SpringBoot+Vue贵州旅游系统的设计与实现

博主主页:一季春秋博主简介:专注Java技术领域和毕业设计项目实战、Java、微信小程序、安卓等技术开发,远程调试部署、代码讲解、文档指导、ppt制作等技术指导。主要内容:毕业设计(Java项目、小程序等)、简历模板、学习资料、面试题库、技术咨询。🍅文末获取联系🍅精彩专栏推荐订阅👇🏻👇🏻不然下次找不到哟Sp

0/17 SAP Master Data Governance(SAP 主数据治理)

SAPMasterDataGovernanceTheComprehensiveGuidetoSAPMDG(SAP主数据治理-SAPMDG综合指南)HowThisBookIsOrganized这本书是如何组织的Chapter1Thischapterstartswithanintroductionintothevariou

C++ 太卷,转 Java?

最近看到知乎、牛客等论坛上关于C++很多帖子,比如:2023年大量劝入C++2023年还建议走C++方向吗?看了一圈,基本上都是说C++这个领域唯一共同点就是都使用C++语言,其它几乎没有相关性。的确是这样,比如量化交易、自动驾驶,客户端,图形学,存储数据库开发,后台开发,嵌入式等等基本上都有各自的领域知识。那么为什么

计算机视觉与深度学习-卷积神经网络-纹理表示&卷积神经网络-卷积神经网络-[北邮鲁鹏]

这里写目录标题参考文章全连接神经网络全连接神经网络的瓶颈全连接神经网络应用场景卷积神经网络卷积层(CONV)卷积核卷积操作卷积层设计卷积步长(stride)边界填充特征响应图组尺寸计算激活层池化层(POOL)池化操作定义池化操作作用池化层超参数常见池化操作全连接层(FC)样本增强翻转随机缩放&抠图色彩抖动参考文章计算机

热文推荐