TCP保证可靠的数据传输的方式

TCP的功能是交付数据,所以TCP的可靠就是保证每次数据按序、按时、不丢数据,顺利的交付给对端。

可靠不等于安全,TCP尽最大可能的保证数据可靠性,但是没有任何措施保证数据的安全性。所谓安全就是你的数据不会被别人看到或者窃取到,TCP上的数据是明文传输的。

TCP如何保证可靠性

TCP是一种可靠传输协议,到底如何保证可靠性呢?TCP协议里面有如下几种机制去保证: 

一、字节编号机制 
编号机制很好理解,就是给TCP的数据段里面的数据部分 ,每个字节都进行编号。

为什么需要编号?

好说,就是为了更清楚的接收和发送。TCP数据是按序的,接收完之后按序组装好,才会交付给上层。

日常生活中也经常遇到这样的情况,你去银行还不得在门口取个号,先取号的先办理,既保证处理事情不乱,也不用大家站着长长的队,叫到号就是你。

二、数据段的确认机制
也就是我们常常听到的确认应答机制,一问一答,保证问的问题,对方一定接收到,如果确实没有接收到就会重复去问。

TCP确认应答就是每一个数据段发送都会收到接收端返回的一个确认号,收到的确认号表示该号前面的数据全部接收。

1、TCP可以一次连续发送多个数据段
TCP可以连续发送多个数据段,具体发送数据段的多少取决于对方返回的窗口大小。只要满足窗口大小可容纳,Negale 算法处于关闭状态就可以连续发送多个数据段。

2、仅对连续接受的数据段进行确认
假设你发送了数据段序号为101、201、301、401、501、601,接收端接收到了101、201、501,此时接收端只会返回201的确认,不会返回501确认,因为301和401还没接收到。当收到301和401之后才会返回501的确认(在不超时的情况下)。

3、不连续序号的数据先缓存下来
如上面的例子,接收端收到101、201、501,此时501不能被确认,因为有不连续的数据,但是501的会被缓存在本地,后面收到301、401立即返回501的确认。

 三、TCP的超时重传机制
以上都是预防和减少出错,超时重传机制是保证TCP在传输过程中数据丢失了一个回复措施。因此超时重传机制是保证可靠性很重要的机制。 

每发送一个TCP数据段都会启动一个超时重传计时器(Retransmission Timer,RTT)。如果在计时器时间内没有收到确认应答号,会启动重传,重新发送该数据段。

这里面还有个点,TCP每发送一个数据段不是立刻把该数据段从缓冲区删除的,收到确认应答以后才会从发送队列丢掉。

超时重传原理看起来比较简单,重传的步骤也比较简单,其实也就是如此简单。有一个难的点是,超时重传计时器的时间是一个很复杂的问题。

表面看起来很简单,不就是一次数据发送到出去到接收端收到消息的时间*2么?事情并没有那么简单

一次往返中间经过的网络路段是不固定的,网络拥塞程度不确定的。

就像你平时开车,导航不可能只给你一条路线,每次给出的路线也会不同,因为道路的拥堵程度不同。

TCP保证可靠性,因此TCP要求不论处在何种网络环境下都要提供高性能通信,并且无论网络拥堵情况发生何种变化,都必须保持这一特性。

TCP目前采用一种自适应的算法计算RTT值。

给定一个初始的RTT值,初始RTT值是6s,后面每次收到确认应答会进行一次计算,计算本次往返的时间和RTT波动,也就是RTT偏差。最终把RTT+RTT偏差得到新的RTT值。

新的RTT = (1-α) + α

RFC 6298推荐的α值为1/8,即0.125。

数据也不会被无限、反复地重发。达到一定重发次数之后,如果仍没有任何确认应答返回,就会判断为网络或对端主机发生了异常,强制关闭连接。并且通知应用通信异常强行终止

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值