tcp特性:可靠传输

可靠传输 (安全,有序)

通过很多特殊机制实现可靠传输

  • 第一个 面向连接,先确保双方有收发数据的能力
  • 第二个 确认应答,接收方要回复每一个包
  • 第三个 超时重传,确认回复超时
  • 第四个 包序管理,协议中序号字段的作用,保证数据有序交付

数据有问题,用校验和字段检查数据是否正确,保证数据正确

滑动窗口机制

在这里插入图片描述

保证可靠的方式(两种方式要使用序号)

确认应答机制服

发送方发送数据后需要接收方确认

  • 回复确认数据包工作,是tcp自己在网络协议栈中完成的,不需要程序员介入;程序员只调用recv函数从缓冲区中拿数据

超时重传机制

发送方发送数据就会开启一个重传计数器,当计数器的时间超过重传时间就会重传报文

  • 超时重传时间RTO:
  • 报文往返时间RTT:由上次和上上次的报文往返时间计算
    RTT=RTT(prev0.9)+RTT(pprev0.1)
  • RTO=2*RTT

在这里插入图片描述
这两个机制可以保证tcp数据是可靠到达对端,但是:

  1. tcp发送方在发送下一个数据前会等待上一条数据的确认应答,整体发送效率低;如果上一条数据处理时间长,那么就会影响下一条数据发送
  2. 数据是从发送方的发送传冲区发送至,接收方的接收缓冲区,如果接收缓冲区中没有空间许多数据包会丢失,导致发送方一直重传;

保证传输效率

滑动窗口机制

提高发送方发送速率和接收方接收能力

滑动窗口机制允许tcp一次性将多个分组发送,暂时不需要确认应答,对端收到后挨个确认;每个分组大小不会超过MSS,当发送方接收到最早的确认应答后,窗口向后滑动包括下一个可以发送的分组

在这里插入图片描述

tcp流量控制

作用:防止数据发送过多而丢包,采用滑动窗口机制
关键点:协议字段中的窗口大小
在16位窗口大小字段中,告诉发送方,自己的接收缓冲区剩余空间,这是流量控制的最基本思想,但是没有体现出滑动窗口机制

滑动窗口还进行了数据包的排序

滑动窗口机制实现:

  • 收发数据双方维护了窗口,发送方维护发送窗口,接收方维护接收窗口
  • 握手时,两边会分享自己的窗口大小,
    MSS,应用层数据最大是(三次握手时,在选项处携带自己的MSS大小,取两边较小的MSS)
    MTU,网络层数据最大是1500字节
    在这里插入图片描述
  • 传输时数据在缓冲区,

滑动窗口:发送方一次性发送到网络中的分组集合,分组的个数就是窗口的大小
发送方窗口大小是动态变化的,取决于接收方窗口的大小

  • 接收方回复ACK数据包,该数据包的协议字段中存在16位窗口大小;
  • ACK数据包到达发送方后,发送方解析ACK数据包,得到接收方的窗口大小,来调节自己的每次发送的字节数;

接收缓冲区限制了接收方16位窗口大小

  • 接收方数据存储在接收缓冲区;
  • 缓冲区不是无线大;
  • 当应用层不调用recv函数从接收缓冲区中获取数据,缓冲区容量就逐渐减小;

如果对双方发送数据量不进行控制,

  • 接收方可能会丢失一些数据,这些数据没有经接收方回复确认;
  • 发送方会启动超时重传机制;
  • 如此往复,网络中就有大量的重传数据包占用带宽资源
  • 导致整个网络转发能力下降

0号窗口:在接收方发送ACK数据包回复时,会标明当前窗口接收能力,若为0则表示不能接收数据;

  • 发送接收到0号窗口,就将其滑动窗口调整至0,暂时不发送数据;
    有两种触发方式,发送方可继续发送数据
  • 方式1:发送方主动给接收方发送窗口探测包,探测接收方缓冲区的大小;
    窗口探测包大小固定为1字节;
  • 方式2:接收方主动给发送方发送窗口更新通知

滑动窗口丢包:
a.丢失某个分组ACK

  • 视情况重传;
  • 当滑动窗口某个分组ACK丢失后,可以通过收到的高序列号,来确认丢失的ACK分组数据是否到达对端,从而不需要重传;

b.丢失某个分组数据

  • 必须要重传;
  • 丢失分组后的数据是不能被recv函数从缓冲区内读取的;

按照滑动窗口发送数据时,还要考虑网络的转发能力是否满足一次性转发窗口大小的数据;

拥塞控制机制

提高网络转发能力(用于提高tcp的发送速率)

影响网络转发能力的因素:(数据是在共享网络中传输的)

  1. 网路链路中,路由器、交换机的转发能力有上限;
  2. 网路链路中的传输介质是有传输上限的;

所以,tcp在发送数据时,为了不因网络原因频繁重传,则tcp在发送数据时,需要考虑网络转发能力;

  • 网络拥塞机制本质是控制发送方发送数据的量,
  • 最终发送的数据量是 = min(发送方滑动窗口大小,拥塞控制机制中拥塞窗口大小)

拥塞控制机制:

慢启动:

  • tcp通信双方在建立连接后,先发送少量数据(拥塞窗口的数据)探测网络转发能力(根据tcp数据往返时间决定),根据网络转发能力逐渐调整拥塞窗口大小;
  • 拥塞窗口的大小为1个MSS;
  • 当拥塞窗口小于慢开始门限时,随着传输轮次增加,大小呈指数增长
    当拥塞窗口大小超过慢开始门限,则切换至拥塞避免算法;
    拥塞避免算法:随着传输轮次增加,拥塞窗口大小呈线性增长(一次增加一个分组);

往网络中传输的数据量依次加大,但是网络转发能力有限,就会导致tcp数据丢包,则发送方就认为网络拥塞立即下调拥塞窗口大小,即降低发送数据量;


快恢复:

  • 一旦发现网络拥塞则计算新慢开始门限,从新的慢开始门限执行拥塞避免算法
  • 新慢开始门限 =(拥塞发送时)拥塞窗口大小/2

在这里插入图片描述

快重传:

  • 当发送方发送的网络数据丢包后,发送方还未触发超时重传机制时;

  • 由接收方快速确认丢失报文起始序号,告知发送方该报文丢失,则发送方不需要等待超时之后才重传;

  • 解释:在这里插入图片描述

  • 1001~2000数据在传输时丢失;

  • 接收方虽然还在接收后续报文,但是在回复时仍是希望接收1001–2000的数据;

  • 此时发送方收到3个同样的确认应答时,直接重发丢失的报文;

  • 重发到对端后,对端因为收到2001–3000、3001–4000,再次收到1001的重传数据包时,就会回复下一个序号7001–8000数据包


如果没有快重传机制

  • 发送方会在没有收到确认应答,在超时后也会重传;
  • 但是要保证双方发送效率,如果发送方迟迟收不到确认应答,其滑动窗口不能向后滑动,就阻塞了发送效率;
  • 拥塞控制机制是探测网络的拥塞程度,根据网络转发能力,来调整发送方的发送数据量;
  • 滑动窗口机制取决于对方的接收能力,来控制发送方的发送数据量;
  • 这两者共同作用,决定了最终的发送量

其它机制

延时发送机制(NAGLE算法):

  • 如果发送方有少量数据需要发送;
  • 但是该算法认为少量数据就进行网络通信,就等待一会;
  • 等待数据量变大后,统一进行发送;
  • 但是工业场景是禁止延时发送的;

捎带应答机制:

  • 运用于双方都想给对方发送数据的场景,快速进行交互,就将ACK放在PSH数据包中携带给对方

延时应答机制:

  • 接收方接收到数据,为了给发送方通告更大的窗口,等待一段时间;
  • 如果在这段时间内,应用层将数据从接收缓冲区中接收后,接收方在回复确认时,就可以给发送方通过更大的窗口

心跳机制:判断空闲连接的双方是否是正常状态

  • 连接空闲时就会启动保活计时器用来记录保活时间
  • 超过两小时任一方就发送保活探测包
  • 如果没有收到则每隔75秒发送一次,共十次
  • → 10次都没应答则连接不正常,发送方主动断开
    → 有应答则正常,重新启动计时器
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值