TCP如何保证传输的可靠性

TCP采用哪些方式保证数据传输可靠?

答:

1、数据分块:将数据包划分为合适的大小,这样更能适应网络的限制,如果数据发生错误或丢失,只要重传有问题的部分即可,减少重传的数据量。方便进行流量和拥塞控制。

2、数据包有序号,可以根据序号对失序的数据包进行重新排序、并且可以去重,丢弃重复的数据包。

3、校验和,TCP会用头部信息和数据进行校验,来确保传输过程中有没有发生变化,如果认为被修改了会丢弃这个数据包。

4、超时重传机制,发送数据包后,会启动定时器等待接收方的确认信息,如果超过一定时间都没收到之后会进行重传。

5、流量控制。TCP连接的两方都有自己的缓冲区,接收方只允许发送方发送自己能承受的数据量,如果接收方处理不过来,会要求降低发送速度,避免丢包。

6、拥塞控制:网络拥塞时,减少数据的发送。

TCP如何实现流量控制?

答:

为什么要实现流量控制:为了控制发送方的发送速率,保证接收方能够及时接收。因为TCP通信的时候,双方发送和接收的速度不一定是相等的,如果发送方速度太快,接收方处理不过来,会将数据放在接收缓存区,但是如果缓存区满了,发送方仍然在发送,接收方只好丢失新的数据包。这样不仅会发生丢包还占用了网络,非常低效。

如何实现流量控制:通过滑动窗口实现流量控制,接收方返回ACK时包含一个窗口字段,表示当前接收方能接收的窗口大小,以次控制发送方的发送滑动窗口大小。

发送方的窗口分为四个部分:已发送已确认的数据、已发送还未确认部分、待发送部分(可用窗口)、不可发送部分。

而被控制的滑动窗口大小实际上包括已发送未却部分和待发送部分两个部分。

接收方的窗口分为三个部分:已接收已确认、等待接收、不可接收部分。

接收方滑动窗口和发送方滑动窗口大小不一定相同,这两个窗口根据各自缓冲区可用空间、处理速度和网络条件独立调整

TCP 的拥塞控制是怎么实现的?

答:进行拥塞控制,TCP首先要维护一个拥塞窗口的状态变量,发送方控制自己的发送滑动窗口为cwnd和接收端返回的窗口中的较小的一个。

主要通过以下几种方式实现拥塞控制:

1、慢启动:刚开始发送数据时,不会刚开始就把大量数据注入网络,这样很可能引发网络拥塞。而是由小增大的发送数据,cwnd的初始值是1,每经过一个往返的传输,就成倍增长cwnd的大小。

2、拥塞避免:设置了一个ssthresh变量,初始门限值,如果cwnd成倍增长达到ssthresh之后,每次只增加1。避免一次增加太多导致拥塞发生。

3、拥塞发生算法:如果发生了超时重传,说明网络已经开始拥塞了,这时会启动拥塞发生算法,即ssthresh=cwnd/2,且cwnd设为1重新开始慢启动。容易造成网络卡顿。

4、快速重传算法:当接收方收到三个一样的ACK时,认为发生了数据丢失,马上启动快速重传,TCP认为这种情况不严重,cwnd=cwnd/2,ssthresh=cwnd 。

5、快速恢复:一般和快速重传一起使用,快速重传后就进入快恢复阶段。此时ssthresh和cwnd已经被更新了。此时cwnd=ssthresh+3,重传丢失的数据包。如果再收到重复的ACK,cwnd加一,如果收到新的ACK,ssthresh恢复原来的,恢复原来的状态。

超时重传和快速重传的区别:超时重传是指发送方没在时间范围内收到ACK信息,认为数据丢失发送方重新发送。是根据时间确定的;快速重传是指发送方连续收到三个一样的ACK,判断有数据包丢失,马上重传。是根据接收方的反馈判断的。

流量控制和拥塞控制的区别:流量控制主要是根据接收方的处理速度和要求来控制发送方的滑动窗口,避免接收方缓存溢出。是端到端之间的决策处理。拥塞控制是全局的,包括路由器和交换机。主要是避免发送方的数据量溢出网络容

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值