ude—基于udp的全双工可靠传输协议
ude是一款基于udp的可靠传输协议,专门用于在数据传输方面对实时性要求较高的应用领域。
tcp协议虽然能保证数据的可靠传输,但它有以下几个缺点:1.tcp的数据确认机制会导致发送方重复发送一些已经被对方接收的数据,降低了带宽的有效利用率;2.tcp协议的超时重传机制严格遵守rtt公平性,即到了rtt时间才会重传丢失的数据,当rtt较大时,就会导致数据的实时性降低,这对于一些对实时性要求较高的应用(比如流媒体应用)是不能忍受的,并且这一特点会导致带宽得不到充分利用;3.在p2p传输领域,由于tcp的NAT穿透成功率极低,用tcp做p2p数据传输几乎不可行。
udp协议虽然不能保证数据传输的可靠性,但它在数据的实时性、带宽的利用率等方面有着tcp望尘莫及的优势。
ude协议,正是融合了tcp和udp各自的优点,ude协议在udp的基础之上,实现了tcp的握手连接、数据校验、超时重传等机制,并且在某些方面比tcp做的更好:1.ude协议的数据确认机制比tcp更科学,不会重复发送已经被对方接收的数据;2.ude的超时重传机制不遵循rtt公平性(可以设置rtt的上限值),这就保证了当网络延时较高时,ude也可以用于传输对实时性要求较高的数据,降低了带宽的有效利用率换取实时性,另外它不等ack的到来就重传数据(原理为第n帧没收到ack、而第n+1、n+2帧已收到ack,则认为第n帧已经丢失);3.ude协议计算两端之间的带宽,用这个带宽值和rtt值计算每次发送的数据量,可以最大化的利用带宽;4.当网络发送拥塞,ude计算出新的带宽值,它会控制带宽值的下降幅度,以保证自身的抗网络抖动能力和带宽竞争力;5.ude协议内部实现了心跳机制来检测死链接,程序员不需要在设计时考虑死链接这样的问题。
ude协议,极其适合在cs方式/p2p方式下做实时性数据的可靠传输。可以在公网搭建tcp server来转发NAT穿透信令,在穿透之后,使用ude协议来做可靠传输。
对rudp技术感兴趣的朋友可以加群:172297772
http://blog.csdn.net/xieyu2885/article/details/78296282
ude—基于udp的全双工可靠传输协议的更多相关文章
- python笔记8 socket(TCP) subprocess模块 粘包现象 struct模块 基于UDP的套接字协议
socket 基于tcp协议socket 服务端 import socket phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 买 ...
- UDP如何实现可靠传输
概述 UDP不属于连接协议,具有资源消耗少,处理速度快的优点,所以通常音频,视频和普通数据在传送时,使用UDP较多,因为即使丢失少量的包,也不会对接受结果产生较大的影响. 传输层无法保证数据的可靠传输 ...
- TCP/IP协议网络编程以及UDP和TCP之传输协议
1.什么是TCP/IP协议? 网络编程协议有很多,目前应用最广泛的是TCP/IP协议(Transmission Control Protocal/Internet Protoal 传输控制协议/英特网 ...
- 如何用 UDP 实现可靠传输?
作者:小林coding 计算机八股文刷题网站:https://xiaolincoding.com 大家好,我是小林. 我记得之前在群里看到,有位读者字节一面的时候被问到:「如何基于 UDP 协议实现可 ...
- Tftp文件传输服务器(基于UDP协议)
一个简单的UDP服务端与客户端 服务端: from socket import * #创建套接字 udp_server = socket(AF_INET,SOCK_DGRAM) msg_server ...
- UDP可靠传输那些事
有空来论坛走走,发现讨论udp可靠传输又热了起来,有人认为udp高效率,有人认为udp丢包重传机制容易控制,还有朋友搞极限测试,当然也有人推销自己的东西,这里写一点我个人的看法. udp可靠传输其实非 ...
- RTSP RTSP(Real Time Streaming Protocol),RFC2326,实时流传输协议,是TCP/IP协议体系中的一个应用层协议
RTSP 编辑 RTSP(Real Time Streaming Protocol),RFC2326,实时流传输协议,是TCP/IP协议体系中的一个应用层协议,由哥伦比亚大学.网景和RealNetwo ...
- TCP可靠传输详解
TCP提供了可靠的传输服务,这是通过下列方式提供的: 分块发送:应用数据被分割成TCP认为最适合发送的数据块.由TCP传递给IP的信息单位称为报文段或段(segment) 定时确认重传:当TCP发出一 ...
- TCP可靠传输的工作原理
TCP可靠传输的工作原理 一.停止等待协议 1.1.简介 在发送完一个分组后,必须暂时保留已发送的分组的副本. 分组和确认分组都必须进行编号. 超时计时器的重传时间应当比数据在分组传输的平均往返时间更 ...
随机推荐
- js cookie介绍和实例(用于自动登录,记住用户名等)
js cookie介绍和实例(用于自动登录,记住用户名等) 一.总结 1.cookie在客户端:因为js是最初是用来在客户端和服务器端进行通信使用的,所以客户端比如js可以操作cookie正常 2.c ...
- 微信端 h5 视频 video 自动播放
document.addEventListener("WeixinJSBridgeReady",function(){ document.getElementById(" ...
- HDU 1407 测试你是否和LTC水平一样高 枚举、二分、hash
http://acm.hdu.edu.cn/showproblem.php?pid=1407 计算方程x^2+y^2+z^2= num的一个正整数解.num为不大于10000的正整数 思路: 方法一. ...
- 7、linux之定时器
(1) 一个timer_list 结构体的实例对应一个定时器,其定义如下: struct timer_list { struct list_head entry, /*定时器列表*/ unsigned ...
- 25、驱动调试之打印到proc虚拟文件
1.dmesg指令是通过读/proc/kmsg来获取打印信息,也可以通过cat /proc/kmsg打印: 说明:kmsg是环形缓存区,只能读一次 2.内核中fs/proc目录下有相关文件,比如pro ...
- 【p092】分数线划定
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 世博会志愿者的选拔工作正在A市如火如荼地进行.为了选拔最合适的人才,A市对所有报名的选手进行了笔试,笔 ...
- 使用C#版本的gdal库打开hdf文件
作者:朱金灿 来源:http://blog.csdn.net/clever101 最近应同事的请求帮忙研究下使用C#版的gdal库读取hdf文件,今天算是有一点成果,特地做一些记录. 首先是编译C#版 ...
- Java8获取参数名及Idea/Eclipse/Maven配置
在Java8之前,代码编译为class文件后,方法参数的类型固定,但是方法名称会丢失,方法名称会变成arg0.arg1.....而现在,在Java8开始可以在class文件中保留参数名,这就给反射带来 ...
- [CSS] Specify grid columns, rows, and areas at once with the grid-template shorthand
We can specify grid columns, rows, and areas in one property using the grid-template shorthand. .con ...
- [Grid Layout] Place grid items on a grid using grid-column and grid-row
It’s possible to position a grid item anywhere on a grid track. To do this, let’s specify some grid- ...