TCP如何保证可靠性传输

校验和

    在数据传输的过程中,将发送的数据段都当做一个16位的整数。将这些整数加起来。并且前面的进位不能丢弃,补在后面继续相加,最后取反,得到校验和。

    发送方:在发送数据之前计算检验和,并进行校验和的填充。

    接收方:收到数据后,对数据以同样的方式进行计算,求出校验和,与发送方的进行比对。

    注意:如果接收方比对校验和与发送方不一致,那么数据一定传输有误。但是如果接收方比对校验和与发送方一致,数据不一定传输成功

序列号

    序列号:TCP传输时将每个字节的数据都进行了编号,这就是序列号。

 

确认应答

    TCP传输的过程中,每次接收方收到数据后,都会对传输方进行ACK确认应答。也就是发送ACK报文。

     这个ACK报文当中带有对应的确认序列号,告诉发送方,接收到了多少数据,下一次的数据从哪个序列号开始发。

超时重传

    发送方在发送完数据后等待一个时间,时间到达没有接收到ACK报文,那么对刚才发送的数据进行重新发送.

    这个等待时间是动态计算的,一般500ms为一个单位进行控制

    重发一次后,仍未响应,那么等待2*500ms的时间后,再次重传。等待4*500ms的时间继续重传。以一个指数的形式增长。累计到一定的重传次数,TCP就认为网络或者对端出现异常,强制关闭连接。

 

连接管理

    连接管理就是三次握手与四次挥手的过程

 

流量控制

    如果发送端的发送速度太快,导致接收端的结束缓冲区很快的填充满了。此时如果发送端仍旧发送数据,那么接下来发送的数据都会丢包,继而导致丢包的一系列连锁反应.

    TCP根据接收端对数据的处理能力,决定发送端的发送速度,这个机制就是流量控制。

 

滑动窗口

    实际上是接收端接收数据的缓冲区的还剩余多少

    接收端会在确认应答发送ACK报文时,将自己的即时窗口大小填入,并跟随ACK报文一起发送过去。而发送方根据ACK报文里的窗口大小的值的改变进而改变自己的发送速度。如果接收到窗口大小为0,那       么发送方将停止发送数据。并定期的向接收端发送窗口探测数据段,让接收端把窗口大小反馈发送端 

 

拥塞控制

    为了解决数据拥堵的问题,

    TCP引入了慢启动的机制,在开始发送数据时,先发送少量的数据探路。探清当前的网络状态如何,再决定多大的速度进行传输。这时候就引入一个叫做拥塞窗口的概念

        1.TCP连接初始化,将拥塞窗口cwind设置为1个报文段,即cwind=1;

     2. 执行慢开始算法,cwind按指数规律增长(最大报文段MSS值的倍数),直到cwind == ssthresh时,开始执行拥塞避免算法,cwind按线性规律增长

       3. 当网络发生拥塞,把ssthresh值更新为拥塞前ssthresh值的一半,cwind重新设置为1,再按照 [2] 执行。

延迟应答

    如果接收数据的主机⽴刻返回ACK应答, 这时候返回的窗⼝可能⽐较⼩

    可以在稍微等一会儿再进行应答(规定等待时间之内),因为处理端口对缓存区的处理速度可能很快, 10ms之内就把刚收到的数据从缓冲区消费掉了;

    这样的延迟应答返回的窗口可能会更大

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值