【计算机网络】TCP可靠性传输

一、TCP可靠性传输实现

1、校验和

  • 在发送数据时,为了计算数据包的校验和,应该按如下步骤:
    (1)把校验和字段置位0;
    (2)把需要校验的数据看成16位的整数,前面的进位不能丢弃,补在后面,依次进行二进制反码求和;
    (3)把得到的结果存入校验和字段中。
  • 在接受数据时,计算数据报的校验和相对简单,依次进行二进制反码求和,包括校验和字段;
    (1)把首部看成16位的整数,依次进行二进制反码求和,包括检验和字段。
    (2)检查计算出的校验和的结果是否等于零(反码应为16个1)。
    (3)如果等于0,说明被整除,检验和正确,否则就是错误的,协议栈就要抛弃这个数据包。

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

2、序列号

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

序列号的作用:

  • 保证可靠性(当接收到的数据总少了某个序号的数据时,能马上知道);
  • 保证数据的按序到达;
  • 提高效率,可实现多次发送,一次确认;
  • 取出重复数据
  • 数据传输过程中的确认应答处理、重发控制以及重复控制等功能都可以通过序列号来实现

3、确认应答机制(ACK)

  TCP通过确认应答机制实现可靠的数据传输,在TCP的首部中有一个标志位——ACK,此标志位表示确认号是否有效。接收方对于按序到达的数据会进行确认,当标志位ACK=1时确定首部的确认字段有效。

4、超时重传机制

  • 第一种情况:数据包丢失,当数据发出后在一定的时间内未收到接受方的确认,发送方就会进行重传(特定时间间隔内)。

  • 第二种情况:确认包丢失,当接收方收到重复数据(通过序列号进行识别)的时候将其丢弃,重新发送ACK。

5、连接管理控制

  • 三次握手和四次挥手

6、流量控制

接收端处理数据的速度是有限的,如果双方发送数据的速度过快,导致接收端的缓冲区满,而发送方继续发送,就会导致丢包,继而引起丢包重传等一系列连锁反应。因此TCP支持根据接收端的处理能力,来决定发送端的发送速度,这个机制就叫流量控制。

  在TCP报文段首部中有一个16位窗口长度,当接收端接收到发送方的数据后,在应答报文ACK中就将自身缓冲区的剩余大小,放入16位窗口长度,当接收端接受到发送方的数据后,在应答报文ACK中就将自身缓冲区的剩余大小,放入16窗口大小中。这个大小随数据传输情况而变,窗口越大,网络吞吐量越高,而一旦接受方发现自身的缓冲区快满了,就将窗口设置为更小的值通知发送方。如果缓冲区满,就将窗口设置为0,发送方收到后将不再发送数据,但是需要定期发送一个窗口探测数据段,使接收端把窗口大小告诉发送端。

7、拥塞控制

如果出现拥塞,分组将会出现丢失,此时发送方会继续重传,从而导致网络堵塞程度更高。因此当出现拥塞时,应当控制发送方的速率。这一点和流量控制很像,但是出发点不同,流量控制是为了让接受方能来得及接受,而拥塞控制是为了降低整个网络的拥塞程度。

拥塞控制方法分为:慢开始、拥塞避免、快重传和快恢复。

1、发送方维护一个叫做拥塞窗口cwnd的状态变量,其值取决于网络的拥塞程度,并且动态变化。

  • 拥塞窗口cwnd的维护原则:只要网络没有出现拥塞,拥塞窗口就再增大一些;但是要网络出现拥塞,拥塞窗口就减少一些。
  • 判断出现网路拥塞的依据:没有按时收到应当到达的确认报文(发生超时重传)。

2、方法方将拥塞窗口作为发送窗口,即swnd=cwnd。
3、维护一个慢开始门限ssthresh状态变量

  • 当cwnd=ssthresh时,使用慢开始算法;
  • 当cwnd>ssthresh时,停止使用慢开始算法而改用拥塞避免算法。

传输过程:

RRT:一个传输轮所经历的时间就是往返时间RRT,一个传输轮次就是发送方给接受方发送数据报文段,接收方给发送方发回相应的确认报文段的过程。

  • 在TCP双方建立逻链连接关系时,拥塞窗口cwnd的值被设置为1,还需设置慢开始门限sstresh,然后执行慢开始算法,发送发每收到一个对新报文段的确认时,拥塞窗口的值就增大(指数增长)。
  • 当拥塞窗口增长到慢开始门限值时,使用拥塞避免算法,拥塞窗口线性增长(每次+1)
  • 发生超时重传时,说明可能发生了网络拥塞,将慢开始门限的值更新为发生拥塞是拥塞窗口的一半;将拥塞窗口值变为1,并重新开始执行慢开始算法。

在这里插入图片描述

(1)慢开始:从1开始指数增长到限定大小的过程。

一开始cwnd=1,而发送窗口等于拥塞窗口,因此发送方只能发送一个数据报文段,接受方收到该数据报文段后,给发送方回复一个确认报文段,发送方收到该确认报文后,将拥塞窗口的值变为2。发送方此时可以连续发送两个数据报文段,接收方收到该数据报文段后,给发送方一次发回2个确认报文段,发送方收到这两个确认报文段后,将拥塞窗口的值变为4,发送方此时可以连续发送4个报文段…

当拥塞窗口cwnd的值等于慢开始门限值时,采用拥塞避免算法。

(2)拥塞避免:超过限定大小之后线性增长的过程,以及发现丢包(发生了拥塞)后将拥塞窗口改为1,并把限定大小减半的过程。

每个传输轮次,拥塞窗口cwnd只能线性加1,并非指完全能够避免拥塞,而是只在拥塞避免阶段将拥塞窗口控制为按线性规律增长,使网络比较不容易出现拥塞。当发生超时重传时,ssthresh=cwnd/2,cwnd=1。重新开始慢开始算法。

慢开始和拥塞避免算法是1988年提出的TCP拥塞控制算法(TCP Tahoe版本),但有时个别报文段会在网络中丢失,但实际上网络并未发生拥塞。这就导致发送发超时重传,并误认为网络发生了拥塞。发送方错误启动慢开始算法,从而降低传输效率。

(3)快重传:发送方只要一连接收到三个重复确认就应该立即重传对方尚未的接受的报文段,而不必等重传计时器超时后发送。由3个重复应答判断有包丢失,重新发送丢包的信息。

在这里插入图片描述

(4)快恢复:发送方一旦受到3个重复确认,就知道现在只是丢失了个别的报文段,于是不启动慢开始算法,而执行快恢复算法:

  • 发送方将慢开始门限ssthresh和拥塞窗口cwnd值调整为当前窗口的一半,开始执行拥塞避免算法。
  • 也有的快恢复实现是把快恢复开始时的拥塞窗口调整为当前窗口的一半,即等于新的ssthresh+3。因为收到3个重复确认,就表明有3个数据报文段已经离开了网络,所以可以增大拥塞窗口。
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值