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. 深入理解分布式缓存设计
  2. css加载会造成阻塞吗?
  3. JavScript中的循环
  4. 简单的5*5,五子棋小游戏
  5. springMvc解决json中文乱码
  6. linux下批量添加新用户
  7. 光栅尺与PLC的配合使用
  8. C#中的函数参数能不能有默认值的解决方法
  9. wdinow 下 使用 docker 安装  code-server (web 版 vscode)
  10. 智慧电商erp通用版管理系统+采购管理+仓库管理+订单管理+财务管理+系统管理+Axure高保真交互ERP通用版电商web端管理系统+全局说明+竞品分析+协同办公
  11. Could not create local repository at /home/yizhenn/.m、IDEA倒入maven项目无法导报问题
  12. 二、三层交换机与路由器
  13. [android开发IDE]adt-bundle-windows-x86的一个bug:无法解析.rs文件--------rs_core.rsh file not found...
  14. 飞桨领航团武汉长沙回顾|识别皮肤病,一秒记笔记,AI还有哪些惊喜?
  15. 第一模块 jdk与jre、==与equals、Math.round(-1.5)、 String、操作字符串的类、字符串反转、抽象类必须要有抽象方法吗、普通类和抽象类、BIO NIO AIO
  16. 科普系列:AUTOSAR与OSEK网络管理比较(下)
  17. 使用rpm包制作本地镜像仓库和使用httpd发布镜像服务实现内网使用yum命令
  18. 1068: 二进制数 Python
  19. WireShark导出H265/HEVC码流,使用h265_export.lua插件
  20. 养猫日记2022120

热门文章

  1. Siri语音测试用例设计点
  2. java udp心跳机制_心跳包机制整理汇总
  3. postgresql学习(一)
  4. 如何将微信公众号内容同步到头条自媒体?
  5. 将微信公众号内容同步到CSDN上的通知
  6. 2013互联网公司找工作--大牛总结(ZJU)
  7. 腾讯云如何判断服务器是否中毒以及如何预防中毒解决方法
  8. JAVA 蓝桥杯 算法提高 阮小二买彩票
  9. 【C语言练习4】根据公式计算π的值,π=4-4/3+4/5-4/7+4/9+... 打印出一个表格来显示,用公式中的1项、2项、3项...计算出来π的近似值
  10. neo4j-OGM 动态cypher java查询