TCP和UDP的区别,如何实现可靠传输

TCP 协议如何保证可靠传输

  • 数据合理分片:应用数据被分割成 TCP 认为最适合发送的数据块。
  • 序列号:TCP 给发送的每一个分组进行编号,接收方对分组进行排序,把有序数据传送给应用层。
  • 校验和: TCP 将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP 将丢弃这个报文段和不确认收到此报文段。
  • ARQ协议: 停止等待ARQ和连续ARQ。
  • 确认和超时重传: 接收方收到报文就会确认,发送方发送一段时间后没有收到确认就重传。
  • 流量控制: TCP 连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP 使用的流量控制协议是可变大小的滑动窗口协议。 (TCP 利用滑动窗口实现流量控制
  • 拥塞控制: 当网络拥塞时,减少数据的发送。慢开始 、 拥塞避免 、快重传 和 快恢复。

注:
滑动窗口机制:基本原理就是在任意时刻,发送方都维持了一个连续的允许发送帧的发送窗口;同时,接收方也维持了一个连续的允许接收帧的接收窗口。发送方窗口内的序列号代表了那些已经被发送,但是还没有被确认的帧,或者是那些可以被发送的帧。决定滑动窗口大小的因素, 包括网络的带宽、可靠性以及需要传输的数据量。滑动窗口大小取接收窗口和拥塞窗口的最小值。

流量控制:是点对点通信量的控制,是个端到端的问题。流量控制所要做到的就是抑制发送端发送数据的速率,以便使接收端来得及接收。

拥塞:在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种情况就叫拥塞。

拥塞控制:为了防止过多的数据注入到网络中,这样就可以使网络中的路由器或链路不致过载。拥塞控制所要做的都有一个前提,就是网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程,涉及到所有的主机,所有的路由器,以及与降低网络传输性能有关的所有因素。
TCP的拥塞控制采用了四种算法,即 慢开始 、 拥塞避免 、快重传 和 快恢复。在网络层也可以使路由器采用适当的分组丢弃策略(如主动队列管理 AQM),以减少网络拥塞的发生。

UDP实现可靠传输

  • 添加发送和接收缓冲区
  • 确认机制
    添加seq/ack机制,每个包有递增的序号,接收方收到UDP之后回复个确认包,确保数据发送到对端。
  • 超时重传机制
    发送方在规定时间内收不到确认包就要重新发送。
  • 流量控制、拥塞控制
    当网络太差时候频繁丢包,防止越丢包越重传的恶性循环,要有个发送窗口的限制,发送窗口的大小根据网络传输情况调整,调整算法要有一定自适应性。

UDP它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。
传输层无法保证数据的可靠传输,只能通过应用层来实现了。实现的方式可以参照tcp可靠性传输的方式,只是实现不在传输层,实现转移到了应用层。
实现确认机制、重传机制、窗口确认机制。
如果你不利用linux协议栈以及上层socket机制,自己通过抓包和发包的方式去实现可靠性传输,那么必须实现如下功能:
发送:包的分片、包确认、包的重发
接收:包的调序、包的序号确认
目前有如下开源程序利用udp实现了可靠的数据传输。分别为RUDP、RTP、UDT。

TCP,UDP的区别和优缺点

UDPTCP
是否面向连接无连接面向连接
传输可靠性不可靠,不使用流量控制和拥塞控制可靠,使用流量控制和拥塞控制
传输形式面向报文面向字节流
通信方式支持一对一,一对多,多对一和多对多交互通信只能是一对一通信
首部开销8个字节最小20字节,最大60字节
适用场景要求通信速度高,适用于实时应用(IP电话、视频会议、直播等)要求通信数据可靠,适用于要求可靠传输的应用,例如文件传输、邮件传输和远程登录等

UDP:

  • 特征:是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息。
  • 优点:UDP速度快、操作简单、要求系统资源较少,由于通讯不需要连接,可以实现广播发送
  • 缺点:UDP传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号,发送端不知道数据是否会正确接收,也不重复发送,不可靠。

TCP:

  • 特征:是面向连接的通讯协议,通过三次握手建立连接,通讯完成时四次挥手
  • 优点:TCP在数据传递时,有确认、窗口、重传、阻塞等控制机制,能保证数据正确性,较为可靠。
  • 缺点:TCP相对于UDP速度慢一点,要求系统资源较多。

DNS同时使用TCP和UDP协议

DNS同时占用UDP和TCP端口53是公认的,这种单个应用协议同时使用两种传输协议的情况在TCP/IP栈也算是个另类。

DNS在进行区域传输的时候使用TCP协议,其它时候则使用UDP协议。

区域传输:
DNS的规范规定了2种类型的DNS服务器,一个叫主DNS服务器,一个叫辅助DNS服务器。在一个区中主DNS服务器从自己本机的数据文件中读取该区的DNS数据信息,而辅助DNS服务器则从区的主DNS服务器中读取该区的DNS数据信息。当一个辅助DNS服务器启动时,它需要与主DNS服务器通信,并加载数据信息,这就叫做区传送(zone transfer)。

为什么及使用TCP又使用UDP?
TCP和UDP传输字节的大小
UDP报文的最大长度为512字节,而TCP则允许报文长度超过512字节。当DNS查询超过512字节时,协议的TC标志出现删除标志,这时则使用TCP发送。通常传统的UDP报文一般不会大于512字节。

区域传送时使用TCP的解析:

  1. 辅域名服务器会定时(一般时3小时)向主域名服务器进行查询以便了解数据是否有变动。如有变动,则会执行一次区域传送,进行数据同步。区域传送将使用TCP而不是UDP,因为数据同步传送的数据量比一个请求和应答的数据量要多得多。
  2. TCP是一种可靠的连接,保证了数据的准确性。

域名解析时使用UDP协议:
客户端向DNS服务器查询域名,一般返回的内容都不超过512字节,用UDP传输即可。不用经过TCP三次握手,这样DNS服务器负载更低,响应更快。虽然从理论上说,客户端也可以指定向DNS服务器查询的时候使用TCP,但事实上,很多DNS服务器进行配置的时候,仅支持UDP查询包。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值