TCP是如何保证可靠性?

保证数据传输的可靠性:

  1. 数据能完全到达对方,尽量不丢失数据
  2. 到达的数据要有序 //超时重传 + 应答确认机制 滑动窗口 拥塞控制
  3. 保证数据不出错

0. 校验和

发送的数据包的二进制相加然后取反,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP将丢弃这个报文段和不确认收到此报文段。

1. 应答确认机制

: 在TCP中,TCP将每个字节的数据都进行了编号,即为序列号,发送方在发送给接受方若干个字节数据,而接收方向发送方会发送一个确认应答(ACK 报文段,每一个ACK都带有对应的确认序列号),表示接收方想要接收的下一个报文段第一个字节的序列号.

2.超时重传

: TCP每发送一个报文段,就对这个报文段设置一次计时器,只要计时器设置的重传时间到但还没有收到确认
,就要重传这一报文.

3.滑动窗口 :
  • TCP采用大小可变的滑动窗口给应用程序提供流量服务,用以消除接收缓存溢出的可能性.
  • TCP 通过让接收访保留一个接收窗口来提供流量控制
  • 发送窗口建立时由双方商定,在通信过程中,接收方根据自己的资源情况,随时动态调整发送方发送窗口上限值.

接收窗口 :
在这里插入图片描述
“接收窗口”大小取决于应用(比如说tomcat:8080端口的监听进程)、系统、硬件的限制。图中,接收窗口是31~50,大小为20。

在接收窗口中,黑色的表示已收到的数据,白色的表示未收到的数据。

当收到窗口左边的数据,如27,则丢弃,因为这部分已经交付给主机;

当收到窗口左边的数据,如52,则丢弃,因为还没轮到它;

当收到已收到的窗口中的数据,如32,丢弃;

当收到未收到的窗口中的数据,如35,缓存在窗口中。
  
发送窗口 :
在这里插入图片描述
发送窗口的大小swnd=min(rwnd,cwnd)。rwnd是接收窗口,cwnd用于拥塞控制,暂时可以理解为swnd= rwnd =20。

图中分为四个区段,其中P1到P3是发送窗口。

4. 流量控制

接收访处理不过来的时候,就把窗口缩小,并把窗口值告诉对方

5. 拥塞控制

在这里插入图片描述
慢起动 :初始化阶段期间,TCP以很慢的速率开始发送,但是以指数的速度快速增加其发送速率.
拥塞避免 : 为了防止拥塞窗口的增长引起网络拥塞,还需要一个状态变量,
即慢启动门限ssthresh(slow start threshold)
 当Cwnd<ssthresh时,处于慢启动阶段;
 当Cwnd>ssthresh时,进入拥塞避免阶段(使用拥塞避
免算法);
 当Cwnd=ssthresh时,既可以使用慢启动算法,也可以
使用拥塞避免算法。
当拥塞窗口大于慢启动门限时,拥塞窗口
按照线性增加

快速重传与快速恢复 :
在这里插入图片描述
快速重传算法
: 发送方只要一连收到三个重复的ACK即可判定有分组丢失了,就应立即重传丢失的报文段,而不必继续等待为丢失的那个报文所设置重传计时器的超时.
快恢复:cwnd不是从1重新开始。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值