UDT协议学习笔记(一)UDT概述

本人近来就职于国内某著名互联网血汗工厂,从事分布式后台相关的工作,最近的项目主要是网络相关。我们有许多海外的proxy节点,为了加速海外proxy与国内某机房的通信速率及抢占更多的带宽,于是开始调研一些udp based的应用层协议,如udt,quic等等。目前还处于调研状态中,尚未投入使用,这里算是分享下一些学到的东西,欢迎大家一起讨论~

一,引入UDT的原因

互联网上的标准数据传输协议TCP在高带宽长距离网络上性能很差,且无法充分的利用带宽。其原因主要有一下几点:

1)现行的tcp拥塞窗口机制在高带宽长距离的环境下无法很好的工作,拥塞窗口太小,而且增加过于缓慢直接导致吞吐

率不高,无法充分利用带宽。

此外TCP的AIMD拥塞控制算法过激地降低拥塞窗口的大小,但是不能快速回复到高位充分利用带宽。

2)目前的tcp拥塞控制算法在BDP网络下具有较差的RTT公平性,rtt会影响拥塞窗口的增长,越不容易达的链接的拥塞

窗口增加得越慢,其发送速度越慢,因此会导致越远的链接发送速率越慢。

由此看来,随着网络带宽的不断增长,传统的TCP协议已经无法满足日益增长的海量传输的需求,于是一种新的能够在高BDP网络下有良好性能的网络协议的需求变变得十分强烈。

二,UDT概述

1,首先UDT是什么?

UDT是基于UDP的数据传输协议。UDT是开源软件,主要目的是针对“TCP在高带宽长距离网络上的传输性能差”的问题,尽可能全面支持BDP网络上的海量数据传输。UDT是建立与UDP之上的面向双向的应用层协议,引入了新的拥塞控制算法和数据可靠性控制机制。它不仅可以支持可靠的数据流传输(STREAM 类型TCP)和部分可靠的数据报(DGRAM类似网络上发广播消息)传输,也可以应用在点对点技术,防火墙穿透,多媒体数据传输等领域。

2,层次结构

这里值得注意的一点是UDT是基于UDP的一种应用层协议,这除了意味着他除了继承了UDP所能有的那些优点之外,

更意味着它是被大部分操作系统所兼容,这也为UDT的普及提供了可能。

图1

图1可以很好的表示UDT协议的分层架构。应用程序使用UDT Socket的API接口,如同使用系统的Socket一样。UDT提供了一个 拥塞控制类(CC)。CC包含了一个必要的用户自定义的回调函数集合,用以处理不同的控制 事件。应用程序可以自定制,派生拥塞控制类。
UDT位于UDP之上的应用层。应用程序通过UDT Socket交换数据。 内存拷贝为了减少处理时间,绕过了UDT。

图2

图2所表示的是UDT的软件结构。上面的实线表示数据流,虚线表示控制流。

UDT是双向的,所有实体具有相同结构。当数据需要被发送时,被发送的数据转发到Sender的缓冲区,然后被Sender发送给底层的UDP channel。而在连接的另一侧,Receiver从底层UDPchannel获取数据,转发给Receiver的缓冲区,将数据进行rerank,并查看是否有数据报丢失。此外Receiver也用来处理控制包。它会更新Receiver和Sender的LostList。并且触发相应的事件,如拥塞控制等等。UDT的功能有上面的模块进行封装,并通过提供API为应用程序服务。

3,UDT的特性

UDT的特性主要包括在以下几个方面:

1)基于UDP的应用层协议

2)面向连接的可靠协议

3)双工的协议

4)拥有新的拥塞控制算法,并具有可拓展的拥塞控制框架。

此外UDT协议在高BDP网络相对于TCP协议的优势,可以用下面几点来表示:

1)UDT是基于UDP协议,并且是定时器做的发送,不像tcp需要等待ack后才能开始下一轮发送
2)UDT的拥塞控制算法,能够实现在慢启动阶段快速增长抢占带宽,而在接近饱和时逐渐降低增长速度,使它趋于稳定。
3)UDT对包丢失的处理算法,和对噪声链路的容忍性,使得在网络波动比较大的环境中,它比传统的TCP协议更加的稳定。

体的协议细节和原理,将有下节开始与大家分享和讨论。

UDT协议学习笔记(一)UDT概述相关推荐

  1. TCPIP协议学习笔记一(概述三)

    端口号 TCP 和UDP采用16bit的端口号来识别应用程序 大多数的UNIX系统的文件 /etc/services都包含了人们熟悉的端口号: root@ZTE:/home/code/pvrm# gr ...

  2. Servlet和HTTP请求协议-学习笔记02【Servlet_体系结构与urlpartten配置、HTTP请求协议】

    Java后端 学习路线 笔记汇总表[黑马程序员] Servlet和HTTP请求协议-学习笔记01[Servlet_快速入门-生命周期方法.Servlet_3.0注解配置.IDEA与tomcat相关配置 ...

  3. Servlet和HTTP请求协议-学习笔记01【Servlet_快速入门-生命周期方法、Servlet_3.0注解配置、IDEA与tomcat相关配置】

    Java后端 学习路线 笔记汇总表[黑马程序员] Servlet和HTTP请求协议-学习笔记01[Servlet_快速入门-生命周期方法.Servlet_3.0注解配置.IDEA与tomcat相关配置 ...

  4. Java学习笔记-Day42 HTML概述

    Java学习笔记-Day42 HTML概述 一.前端简介 二.HTML 语言 1.简介 2.HTML的编写规范 3.HTML标签的声明 4.HTML的调试 5.标记语言的特点 6.头标签head 7. ...

  5. Python网络编程——HTTP协议学习笔记

    HTTP协议学习笔记 HTTP协议概述 一.HTTP协议的介绍 HTTP协议的全称是(HyperText Transfer Protocol),翻译过来就是超文本传输协议. 超文本是超级文本的缩写,是 ...

  6. 华为HCIA-datacom 学习笔记14——WLAN概述

    华为HCIA-datacom 学习笔记14--WLAN概述 1.WLAN(无线局域网) 通过无线技术构造的无线局域网络.WLAN广义上是指以无线电波.激光.红外线等无线信号代替有线局域网中的部分或全部 ...

  7. RN学习笔记01:概述、特点与环境搭建

    RN学习笔记01:概述.特点与环境搭建 一.RN概述 React Native(简称RN)是Facebook于2015年4月开源的跨平台移动应用开发框架,是Facebook早先开源的JS框架 Reac ...

  8. IOS学习笔记03---C语言概述

    IOS学习笔记03---C语言概述 0 3.C语言1-C语言概述         qq交流群:创梦技术交流群:251572072                        创梦网络赚钱群:2483 ...

  9. POP3协议学习笔记

    今日得闲,于是将POP3的学习笔记也整理出来! 互联网上的TCP/IP,POP3/SMTP等资料多如牛毛,这里只是自己一点点心得,另外对于各位网络方面的大牛请安静的路过,我可不喜欢在关公面前耍大刀.. ...

最新文章

  1. Netty @Sharable的使用
  2. 树莓派4b设置RTC时钟模块DS3231
  3. Quick BI电子表格: 新手亦可表格自由
  4. 【转】如何读一篇论文
  5. 什么时候用DFS,什么时候用BFS?(DFS和BFS的特点和异同)
  6. std::thread的常用参数传递总结
  7. 记一次awvs14安装、破解之路~
  8. HEVC中四叉树划分详解
  9. 企业信息化建设的总体规划
  10. python十人抽奖小程序_利用python编写年会抽奖小程序
  11. html代码在线运行_在线运行html代码
  12. 关闭webstorm提示 empty tag doesn't work in some browsers
  13. lora_pkt_fwd.c代码解读
  14. Vue - $route matched 属性实现面包屑导航
  15. 003_创建simulink文件
  16. 机器学习实战(Machine Learning in Action)参考答案以及原始数据
  17. 云直播丁云鹏:最可怕的,是你低估生活的残酷
  18. NSWindow纯代码设置
  19. The Shapely GEOS version (3.9.1-CAPI-1.14.2) is incompatible with the GEOS version PyGEOS was compil
  20. Linux中修改或重置密码

热门文章

  1. 【深挖字符串操作】·万字总结,这些知识点你真的懂了吗?
  2. opencv双目测距(BM 与SGBM匹配)
  3. 课代表|支付500万美元,为什么连FBI都无法解开美国油管的勒索软件密码?
  4. 苹果或引爆NFC支付潮 关注国内概念板块
  5. 爬虫常见的加密解密算法
  6. 题解 CF981A 【Antipalindrome】
  7. 微信8.0.3测试版来了,TF直装安卓内测也来袭,附地址
  8. 这恐怕是学习Frida最详细的笔记了
  9. 深信服---之上网行为管理
  10. 微信点赞功能测试用例,面试答题