TCP协议可靠性数据传输实现原理分析.docx

上传人:lao****ou 文档编号:406676 上传时间:2023-10-25 格式:DOCX 页数:10 大小:24KB
下载 相关 举报
TCP协议可靠性数据传输实现原理分析.docx_第1页
第1页 / 共10页
TCP协议可靠性数据传输实现原理分析.docx_第2页
第2页 / 共10页
TCP协议可靠性数据传输实现原理分析.docx_第3页
第3页 / 共10页
TCP协议可靠性数据传输实现原理分析.docx_第4页
第4页 / 共10页
TCP协议可靠性数据传输实现原理分析.docx_第5页
第5页 / 共10页
亲,该文档总共10页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《TCP协议可靠性数据传输实现原理分析.docx》由会员分享,可在线阅读,更多相关《TCP协议可靠性数据传输实现原理分析.docx(10页珍藏版)》请在第一文库网上搜索。

1、TCP合同是一种面向连接的,为不同主机进程间提供可靠数据传播的合同。TCP合同假定其所使用的网络栈下层合同仅口IP合同)是非可靠的,其自身提供机制保证数据时可靠性传播。在目前的网络栈合同族中,在需要提供可靠性数据传播时应用中,TCP合同是首选的,有时也是唯一的选择。TCP合同是在最早由Cerf和KQhn所提出的有关网络数据包传播合同的概念之上建立的。TCP合同被设计成符合分层合同构造,工作在ISO/OSI七层网络模型中的传播层中,使用网络层合同(如最常见的F合同)提供的服务。网络层合同尽最大努力传播上层提供的数据但并不保证数据传播的可靠性。可靠性保证必须由上层合同(如TCP合同)提供。网络层合

2、同重要完毕的工作有:1实现不同网络(主机)间的数据包路由传递。2在发送端(或中转站)提供数据包分片功能以使数据包大小满足PMTU(Path-MTU)o3在接受端提供数据包分片重组功能。4负责数据包优先级,安全性等问题。传播层合同(重要针对TCP合同而言)重要完毕的工作有(并非所有的传播层合同都需要提供这些功能如UDP合同就不提供可靠性数据传播):1提供多路复用。2实现数据基本传播功能。3建立通信通道。4提供流量控制。5提供数据可靠性传播保证。数据可靠性传播保证是其中最为重要的方面,也是TCP合同区别于其他合同的最重要特性。所谓提供数据可靠性传播不仅仅指将数据成功时由本地主机传送到远端主机,数据

3、可靠性传播涉及如下内容:1可以解决数据传播过程中被破坏问题。2可以解决反复数据接受问题。3可以发现数据丢失以及对此进行有效解决。4可以解决接受端数据乱序达到问题。1 .TCP合同可靠性数据传播实现基本原理TCP合同必须提供对所有这些问题的解决方案方可保证其所声称的数据可靠性传播。TCP合同规范和目前绝大多数TCP合同实现代码均采用数据重传和数据确认应答机制来完毕TCP合同的可靠性数据传播。数据超时重传和数据应答机制的基本前提是对每个传播的字节进行编号,即我们一般所说时序列号。数据超时重传是发送端在某个数据包发送出去,在一段固定期间后如果没有收到对该数据包时确认应答,贝IJ(假定该数据包在传播过

4、程中丢失)重新发送该数据包。而数据确认应答是指接受端在成功接受到一种有效数据包后,发送一种确认应答数据包给发送端主机,该确认应答数据包中所涉及时应答序列号即指已接受到的数据中最后一种字节时序列号加1,加1的目的在于指出此时接受端盼望接受的下一种数据包中第一种字节的序列号。数据超时重传和数据确认应答以及对每个传播的字节分派序列号是TCP合同提供可靠性数据传播的核心本质。D数据确认应答数据包中应答序列号的含义应答序列号并非其表面上所显示的意义,其事实上是指接受端但愿接受时下一种字节时序列号。因此接受端在成功接受到部分数据后,其发送的应答数据包中应答序列号被设立为这些数据中最后一种字节时序列号加一。

5、因此从其含义上来说,应答序列号称为祈求序列号有时更为合适。应答序列号在TCP首部中应答序列号字段中被设立。而TCP首部中序列号字段表达涉及该TCP首部的数据包中所涉及数据的第一种字节的序列号(令为N)O如果接受端成功接受该数据包,之前又无丢失数据包,则接受端发送的应答数据包中的应答序列号应当为:N+1ENo其中1EN为接受的数据包的数据长度。该应答序列号也是发送端将要发送时下一种数据包中第一种字节时序列号(由此亦可看出上文中将应答序列号称为祈求序列号的因素所在)。2)数据确认应答中的累积效应TCP合同中接受端对所接受数据的应答是累积的。累积的含义有二:1应答序列号是逐渐递增时,这与发送端数据编

6、号是递增的相吻合。2 不可进行跨越式数据应答。所谓不可进行跨越式数据应答,可以以数据包乱序达到为例进行阐明。如果由于发送端所选择传播途径的不同,较后发送的序列号较大的数据包先达到接受端,而先发送时序列号较小的数据包由于线路问题(或路由器故障)被临时延迟在网络中,此时接受端不可对这些序列号较大的数据进行应答。如果接受端需要发送一种应答数据包,则应答序列号仍然应当设立成对序列号较小的数据包的祈求(注意应答序列号指的是接受端但愿接受时下一种字节时序列号,故在数据传播过程中将应答数据包称为数据祈求数据包更为合适)O举例来说,如果接受端目前的应答序列号为2O1,表达接受端正在等待发送端发送从201开始编

7、号的数据,之后发送端持续发送了两个数据包,第一种数据包中数据序列号范畴为201-3O0,第二个数据包中数据序列号范畴为301-400。如果由于选择了不同的传播途径导致第二个数据包最先达到接受端,而第一种数据包在网络中延迟了一段时间,则接受端不可对第二个数据包进行应答,即不可发送应答序列号为401的确认应答数据包,而是不断发送应答序列号为201的应答数据包直到该序列号的数据达到。我们一般所说的迅速重传机制即发送端在持续接受到3个相似序列号的应答数据包后需要立即重传应答序列号所示的数据。由于此时表达极有也许浮现了数据包丢失的状况,如上例中第一种数据包如果丢失在网络中并且发送端重传的相似数据包由于选

8、择相似的线路也未能达到接受端,则接受端将不断发送应答序列号为201的应答数据包而不会将应答序列号设立为401。注意此时接受端已接受到序列号从301-400的数据。3)重传应答机制与序列号结合:1可以解决数据在传播过程中被破坏的问题。一方面通过对所接受数据包的校验,确认该数据包中数据与否存在错误。如果有,则简朴丢弃或者发送一种应答数据包重新对这些数据进行祈求。发送端在等待一段时间后,则会重新发送这些数据。本质上,数据传播错误的解决是通过数据重传机制完毕时。2可以解决接受反复数据问题。一方面运用序列号可以发现数据反复问题。由于每个传播的数据均被赋予一种唯一的序列号,如果达到的两份数据具有重叠的序列

9、号(如由发送端数据包重传导致),则表达浮现数据反复问题,此时只须丢弃其中一份保存另一份即可。多种数据包中数据重叠的状况解决方式类似。本质上,数据反复问题时解决是通过检查序列号完毕的。3可以发现数据丢失以及进行有效解决。一方面必须阐明,此处数据包丢失的概念是指在一段合理时间内,应当达到的数据包没有达到,而非我们平常所理解的永远不达到。因此数据包丢失与数据包乱序达到有时在判断上和软件解决上很难辨别。数据丢失的判断是猜想性的,我们无法拟定一种数据包一定丢失在传播过程中,大多是被延迟在网络中,即实质的问题只是数据包乱序达到。将两者辨别开来的一种重要根据是在合理的时间内,由这个也许丢失的数据包所导致时序

10、列号“空洞”与否可以被弥补上。也许时数据丢失一种显然的成果是在接受端接受的数据浮现序列号不持续现象。如接受端只接受到序列号从1到IOO的数据包,之后又接受到序列号从200到300的数据包,并且在一段合理的时间内(由此基本排除乱序问题),序列号从101到199的数据始终未达到,则表达涉及序列号从101至W99的数据包在传播过程中很也许丢失(或者有极不正常的延迟)。对数据包与否丢失判断的此外一种干扰因素是发送端的重传机制,如果一种序列号较前的数据包在网络中丢失,导致序列号较后的数据包提前达到接受端,也会临时导致序列号不持续,但由于发送端在没有接受到确认应答时,会重新发送序列号较前的那个数据包,如果

11、此后接受端接受到一种重传的数据包,则仅仅只会在接受端导致数据包乱序达到的表象。无论实质如何,如果软件实现判断出数据包丢失,则接受端将通过不断发送对这些丢失的数据的祈求数据包(也即应答数据包,见前文中对数据应答数据包和数据应答累积效应的阐明)来迫使发送端重新发送这些数据。一般发送端自身会自发的重传这些未得到对方确认的数据,但由于重传机制采用指数退避算法,每次重传的间隔时间均会加倍,因此通过发送方积极重传机制恢复的时间较长,而接受端通过不断发送对这些丢失数据的祈求,发送端在接受到三个这样的祈求数据包后(三个祈求数据包中具有同一种祈求序列号-也即前文中所说的应答序列号),会立即触发对这些数据的重新发

12、送,这称为迅速恢复或者迅速重传机制。本质上,对于数据丢失问题时解决是通过数据重传机制完毕的。在此过程中序列号和数据确认应答起着核心的作用。4可以解决接受端数据乱序达到问题。如果通信双方存在多条传播途径,则有也许浮现数据乱序问题,即序列号较大的数据先于序列号较小的数据达到,而发送端的确是按序列号由小到大时顺序发送时。数据乱序的本质是数据都成功达到了,但达到的顺序不尽如人意。对这个问题的解决相对比较简朴,只需对这些数据进行重新排序即可。本质上,对数据乱序问题的解决是通过排序数据序列号完毕的。2 .TCP合同可靠性数据传播软件实现基本原理由上文可见,序列号,数据超时重传和数据确认应答机制保证了TCP

13、合同可靠性传播的规定。由于需要对所发送的数据进行编号,又需要对接受的数据进行应答,因此使用TCP合同的通信双方必须通过某种机制理解对方的初始序列号。只有在确切懂得对方的初始序列号时状况下,才干从一开始对所接受数据的合法性进行判断。此外还需要在本地维护一种对方应答的序列号,以随时跟随对方的数据祈求。在最后通信通道关闭时,可以确知本地发送时数与否已被对方完全接受;此外这个对方应答序列号在控制本地数据通量方面也发挥着重要时作用:用本地发送序列号减去对方应答序列号则可以立即得知目前发送出去的数据有多少没有得到对方的应答。综上所述,可靠性传播规定通信双方维护如下序列号:SND.NXT本地将要发送时下一种

14、序列号。该变量相应TCP首部中序列号字段。表达该数据包中所涉及数据的第一种字节时序列号。每次发送一种数据包,该变量都需要进行更新:SND.NXT=SND.NXT+本次发送的数据包中涉及的数据长度SND.ACKED对方对本地所发送数据到目前为止进行了应答时序列号,换句话说,SND.ACKED+1表达本地已发送出去但尚未得到对方应答的数据集中相应的第一种(最小时)序列号。RCV.NXT本地但愿接受时下一种序列号。该序列号被称为应答序列号,也可称为祈求序列号,在本地发送时应答报文中,TCP首部中应答序列号字段即设立为该变量时值,表达本地但愿从对方接受的下一种字节时序列号。图1(上图)显示了TCP首部

15、格式。序列号字段相应前文中SND.NXT变量,应答序列号字段相应前文中RCV.NXT变量。ACK标志位设立为1表达这是一种应答数据包。事实上对于TCP合同而言,在成功建立连接后,此后发送时所有数据包的ACK标志位均被设立为1,即在传送正常数据的同步传送应答,如此解决可以减少网络中传播的数据包数量。3 .TCP合同建立连接的必要性图ITCP首部格式中SYN标志位仅使用在建立TCP连接时过程中,TCP建立连接的过程被称为“三路握手“连接,即一般通信双方共需要传播三个数据包方能成功建立一种TCP连接。我们一般将建立连接作为使用TCP合同理所固然的前导过程,但很少去质疑这样一种建立连接过程的必要性。事

16、实上,在上文中已经做出部分解释,使用TCP合同必须一方面建立一种连接是保证TCP合同可靠性数据传播时基本前提(固然由于TCP合同是一种有状态合同,必须通过某种机制进行通信双方状态上的同步,而建立连接就是这样一种机制)。至于为什么需要三个数据包,因素是建立连接过程中信息的互换必须至少使用三个数据包,从下文的分析来看,建立连接最多需要使用四个数据包。需要再次提到的是:SYN标志位只是用在建立连接的三个(或者四个)数据包中,一旦连接建立完毕后,之后发送的所有数据包不可设立SYN标志位。单从保证数据可靠性传播角度而言,TCP合同需要在正式数据传播之前一方面进行某些信息的互换,这个信息即是双方的初始序列号(此外的某些信息涉及最大报文长度通报等)。诚如前文所述,序列号时使用对于TCP合同而言至关重要,在正式数据传播之前,双方必须得到对方的初始字节数据的编号,这样才有也许对其所接受

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 应用文档 > 汇报材料

copyright@ 2008-2022 001doc.com网站版权所有   

经营许可证编号:宁ICP备2022001085号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有,必要时第一文库网拥有上传用户文档的转载和下载权。第一文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知第一文库网,我们立即给予删除!



客服