TCP和UDP TCP如何保证可靠数据传输的-TCP和UDP的区别

TCP和UDP

网络层解决了计算机到计算机之间的通信问题,传输层协议通过加入端口号,来实现每台机器上的不同进程之间的通信。

面试题

  • tcp为什么可靠传输
  • tcp和udp的区别
  • 拥塞算法

TCP的可靠数据传输

TCP 的可靠数据传输服务确保数据在传输中是完整且按序的

需要解决的问题

  • 乱序 序号seq字段
  • 丢包
    • 确认号ack+超时/重传
    • 减少丢包
      • 拥塞控制 解决网络延时突然增加,触发大量的数据重传,导致网络负担加重问题
      • 流量控制-利用滑动窗口 当接收方来不及处理发送方数据时,提示发送方降低发送的速率,防止包丢失

序号 和 确认号

TCP协议面向字节流,为每个字节都编上序号。在发送时多个字节组成报文段发送。
序号seq字段 指的是一个报文段第一个子节的序号
确认号ack字段 指的是希望收到的下一个报文段的第一个字节的序号
在这里插入图片描述

TCP提供全双工通信:

  • 发送缓存: 准备发送的数据&已经发送但没有收到确认的数据
  • 接受缓存:按序到达但没有被应用程序读取的数据 & 没有按需到达的数据

TCP默认使用累计确认
只会返回应该按序接受的报文段下一个报文的第一个序号
在这里插入图片描述
累计确认可以让我们同时对多个接受的报文进行一次确认
在这里插入图片描述

重传

超时+重传
发送方发送一个未被确认的数据包后就启动一个计时器,如果在指定时间内没有收到ACK, 发送方可以重传该报文

存在问题:等待时间太长

冗余确认(冗余ACK) 提前知道数据丢失-快速重传

每当比期望序号大的失序报文段到达时,发送一个冗余ACK,指明下一个期待字节的序号。

TCP发送方一次性可以发送多个报文段,接收方使用累计确认
在这里插入图片描述

TCP流量控制

流量控制:让发送方慢点,要让接收方来得及接受
TCP利用滑动窗口机制实现流量控制

控制方:接收方
被控制方:发送方

原理
在通信过程中,接收方根据自己接受缓存的大小,通过设置确认报文段的窗口字段来将rwnd(接受窗口)通知给发送方,发送方的发送窗口取接受窗口rwnd和拥塞窗口cwnd的最小值

  • 接受窗口:接收方根据接受缓存设置的指,并告知给发送方,反映接收方容量
  • 拥塞窗口:发送方根据自己估算的网络拥塞程度而设置的窗口值,反映网络当前的容量

TCP拥塞控制

拥塞控制的目的:防止过多的数据注入到网络中,全局性。

四种算法

  • 慢开始+拥塞避免
  • 快重传 + 快恢复
慢开始 + 拥塞避免

假定
1.数据单方向传送,而另一个方向只传送确认
2.接收方总是有足够大的缓存空间,发送窗口 = Min(接收窗口rwnd,拥塞窗口cwnd),所以发送窗口的大小取决于拥塞程度

一个传输轮次:发送一批报文段并收到他们的确认时间 = 一个往返时延RTT
在这里插入图片描述

  1. 先试探网络情况,拥塞窗口/发送窗口指数增加。
  2. 到了初始的阈值后,发现网络有点堵,为了避免拥塞,拥塞窗口/发送窗口加法增加。
  3. 出现丢包现象,发现网络堵塞,新阈值 = 当前的拥塞窗口值/2,然后将当前的拥塞窗口值改为初始值1,重复步骤1、2
快重传 + 快恢复

假定
1.数据单方向传送,而另一个方向只传送确认
2.接收方总是有足够大的缓存空间,发送窗口 = Min(接收窗口rwnd,拥塞窗口cwnd),所以发送窗口的大小取决于拥塞程度

在这里插入图片描述
快重传:收到3个重复的确认执行快重传算法
快恢复:在步骤3,将当前窗口值改成新阈值,然后直接加法增大

UDP如何改进实现可靠传输

这个问题是我在面经上看见的,很少考,感觉能说上几句就行了

UDP本身是无法确保数据的可靠传输的,所以不能在传输层进行改进。
实现的方式可以参考HTTP3的QUIC(快速UDP互联网连接)协议,该协议在 UDP 的基础之上增加了一层来保证数据可靠性传输,它提供了数据包重传拥塞控制以及其他一些 TCP 中存在的特性。

UDP和TCP的区别

区别TCPUDP
首部开销20B8B
传输TCP协议面向字节流,为每个字节都编上序号
在发送时多个字节组成报文段发送。
面向报文,不对报文拆分,加入UDP首部直接传输
连接面向连接无连接
是否可靠传输是,提供流量控制和拥塞控制否,不使用流量控制和拥塞控制
速度
通信双方单播传输可以单播,多播,广播
使用场景适合于要求可靠传输的应用,比如文件传输适用于实时应用,比如IP电话、视频会议等

UDP与TCP的首部格式
UDP的首部格式
在这里插入图片描述
TCP的首部格式
在这里插入图片描述

紧急位URG:URG=1,标明此报文段中有紧急数据,是高优先级的数据,应该尽快传送,不用在缓存里排队,配合紧急指针字段使用。
确认位ACK:ACK=1时确认号有效,在连接建立后所有的传输的报文段都必须把ACK置为1
同步位SYN:SYN=1时,表明是一个连接请求/请求接受报文
终止位FIN:FIN=1时表明此报文段发送方数据已发送完,要求释放连接。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值