java 可靠udp传输_Java面试-UDP如何实现可靠传输

概述

UDP不属于连接协议,具有资源消耗少,处理速度快的优点,所以通常音频,视频和普通数据在传送时,使用UDP较多,因为即使丢失少量的包,也不会对接受结果产生较大的影响。

传输层无法保证数据的可靠传输,只能通过应用层来实现了。实现的方式可以参照tcp可靠性传输的方式,只是实现不在传输层,实现转移到了应用层。

最简单的方式是在应用层模仿传输层TCP的可靠性传输。下面不考虑拥塞处理,可靠UDP的简单设计。

1、添加seq/ack机制,确保数据发送到对端

2、添加发送和接收缓冲区,主要是用户超时重传。

3、添加超时重传机制。

详细说明:

发送端发送数据时,生成一个随机seq=x,然后每一片按照数据大小分配seq。

数据到达接收端后接收端放入缓存,并发送一个ack=x的包,表示对方已经收到了数据。

发送端收到了ack包后,删除缓冲区对应的数据。

时间到后,发送端定时任务检查是否需要重传数据。

开源程序:

目前有如下开源程序利用udp实现了可靠的数据传输。分别为RUDP、RTP、UDT。

1、RUDP(Reliable User Datagram Protocol)

RUDP 提供一组数据服务质量增强机制,如拥塞控制的改进、重发机制及淡化服务器算法等,从而在包丢失和网络拥塞的情况下, RTP 客户机(实时位置)面前呈现的就是一个高质量的 RTP 流。在不干扰协议的实时特性的同时,可靠 UDP 的拥塞控制机制允许 TCP 方式下的流控制行为。

2、RTP(Real T

你可能感兴趣的:(java,可靠udp传输)