ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

TCP协议的可靠传输

2019-10-29 22:58:24  阅读:223  来源: 互联网

标签:窗口 重传 报文 TCP 可靠 发送 传输 拥塞


一、TCP协议的可靠传输

TCP的可靠传输基于ARQ协议;

TCP的滑动窗口以字节为单位;

 

 

 

 

 

 

考虑一种情况:窗口中的数据全部都发送出去了,但是全都没有收到确认号,可用窗口为0,窗口是不能向前推进的。

 

 

 

 

一种特殊情况:窗口中所有数据都已经发送出去了,但确认号不是按顺序收到的

 

 

 

so:可靠传输的效率不是很高。

 

选择重传:选择重传需要指定需要重传的字节;每一个字节都有一个唯一的32位序号,选择重传需要指定的就是这个序号;这个指定的字节序号是存储在TCP选项里面的。

 

 

 

 

选择重传更多时候是对一段字节进行重传的。重传的数据是一个边界,重传的序号不是指字节,而是指一个范围

 

二、TCP协议的流量控制---TCP特有的功能

接收方希望发送方可以将数据发送的慢一些。

流量控制是指让发送方发送速率不要太快;流量控制是使用滑动窗口来实现的。

 

 

 

接收方通过窗口的大小调整来告诉发送方继续进行数据的发送。

 

 

 

 

考虑一种情况:接收方在告诉发送方可以接收数据的时候发生了报文丢失:发送方会一直等待,接收方认为发送方应该给自己发送报文,也会一直等待,两者都在等待,进入了死锁状态。

TCP的可靠传输是对数据的确认,对特殊消息(如窗口大小)是没有超时重传的机制的,所以会导致发送方接收方进入死锁状态。-----解决方法为 坚持定时器

 

 

 

 

坚持定时器:

(1)当发送方接收到窗口为0的消息,就会启动坚持定时器

(2)坚持定时器每隔一段时间发送一个窗口探测报文(询问到窗口是否变大)

 

三、TCP的拥塞控制

一条数据链路结果非常多的设备;数据联路中各个部分都有可能成为网路传输的瓶颈;

 

流量控制与拥塞控制:

(1)流量控制考虑点对点的通信量的控制,流量控制通过窗口进行通信量的限制

(2)拥塞控制考虑整个网络,是全局性的考虑。报文超时则认为是拥塞

 

拥塞控制的算法:

(1)慢启动算法:

  由小到大逐渐增加发送数据量;

  每收到一个报文确认,就加一;   1  2  4  8  16   -----   指数增长   --- 慢启动阈值  --  到达阈值之后就会进行下一个算法

(2)拥塞避免算法:

  维护一个拥塞窗口的变量

  只要网络部不拥塞,就试探着将拥塞窗口调大,每一次加一;1 2 4 8 16  17  18  19

 

四、TCP连接的建立

TCP标记位:重要的有3个

(1)ACK:acnowledgement----确认位,ACK=1,确认位才生效

(2)SYN:synchronization---同步位,SYN=1,表示连接请求报文

(3)FIN:finish---终止位,FIN=1,表示连接释放

 

 

 

 

 

 

为什么发送方要发出第三个确认报文呢?为什么TCP连接的建立要三次握手呢?

两次握手就可以建立起连接了,但是还是需要第三次。

(1)三次握手可以避免:已经失效的连接请求报文传送到对方,引起错误

 

 

 

 

 

 

 

 

 有了第三次握手,就不会对一开始延迟了的报文再进行第三次的处理。

 

四、TCP连接的释放----四次挥手

发送方:断开连接的第一个等待状态;断开连接的第二个等待状态;

 

 

 主动释放连接的这一方有一个等待计时的状态,只有在等待计时之后才会进入关闭状态。

 

 

 

 

 等待计时器:等待时间为2MSL,

  MSL(Max Segment Lifetime):最长报文段寿命,MSL建议设置为2分钟

 为什么需要等待2MSL?

  最后一个报文没有确认 ;

  计时器---确保发送方的ACK可以到达接收方;如果第四个报文没有被接收方接收到,2MSL时间内没有收到,则接收方会重发

  计时器---确保当前所有连接的所有报文都已经过期,如果最后一个报文都已经超过2MSL了,那么其他的报文也肯定超过了2MSL,都已经过期了。

标签:窗口,重传,报文,TCP,可靠,发送,传输,拥塞
来源: https://www.cnblogs.com/1220x/p/11762108.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有