UDTServer启动之后,基于UDT协议的UDP数据可靠传输才成为可能,因而接下来分析与UDTServer有关的几个主要API的实现,来了解下UDTServer是如何listening在特定UDP端口上的。主要有UDT::bind(),UDT::listen()和UDT::accept()等几个函数。bind过程通常UDTSe
本次共找到 13 条 udt 相关的文章
UDT协议实现分析——bind、listen与accept
UDT协议实现分析总结
UDT的整体结构UDTSocket是UDT中的核心,同时它也是一座桥梁,它将UDT的使用者应用程序与内部实现部分对于数据结构的管理、网络数据的传输连接起来。应用程序通过它将数据放进发送缓冲待发送,或者借由它来获取从网络接收数据。而与网络进行交互的部分,则从它那里拿到要发送的数据进行发送,或者在收到packet时将packetdi
UDT源码剖析(一)之总览
介绍随着网络带宽延时产品的增加,常用的TCP协议开始变得低效。这是因为它的AIMD算法彻底的减少了拥塞窗口,但不能快速的恢复可用带宽。理论上的流量分析表明TCP在BDP增高的情况下比较容易受到包损失攻击。另外,继承自TCP拥塞控制的不公平的RTT也成为在分布式数据密集程序中的严重问题。拥有不同RTT的并发TCP流将不公平地分享带宽。尽管在小的BDP网
UDT协议实现分析——数据的接收
看了UDT中数据发送的部分之后,我们转换一个角度,来看一下接收端发生的故事。如我们前面在UDT协议实现分析——连接的建立(http://my.oschina.net/wolfcs/blog/505253)一文中看到的那样,CUDT在connect()的后半场,会通过调用CRcvQueue::removeConnector()把它自己从它的CCha
UDT协议实现分析——连接的建立
UDTServer在执行UDT::listen()之后,就可以接受其它节点的连接请求了。这里我们研究一下UDT连接建立的过程。连接的发起来看连接的发起方。如前面我们看到的那样,UDTClient创建一个Socket,可以将该Socket绑定到某个端口,也可以不绑定,然后就可以调用UDT::connect()将这个Socket连接到UD
UDT协议实现分析——UDT初始化和销毁
UDT协议是一个用于在高速Internet上传输大量数据的基于UDP的可靠传输协议。我们可以将UDT协议的实现看作一个比较复杂的状态机。更准确的说,是一个主状态机,外加多个子状态机。主状态机是指协议实现中全局唯一、全局共享的状态与数据结构,主要对应于CUDTUnited类。子状态机则是对于一次UDT连接或一个Listening的UDTServer的抽象
UDT协议实现分析——发送窗口大小及发送速率的调整
UDT主要通过在数据收发的过程中进行精细的控制来实现对于网络带宽更加有效的利用,并使网络中数据传输的速率尽可能快。如我们前面在分析数据发送的控制(http://my.oschina.net/wolfcs/blog/508259)中看到的,对于正常的顺序packet发送,发送控制主要在于两个方面,一是发送窗口的大小,也就是某个时刻已经发送但未得到相
UDT协议实现分析——数据的发送
连接建立起来之后,我们就可以通过UDTSocket进行数据的收发了。先来看用来发送数据的几个函数。UDT提供了如下的几个函数用于不同目的下的数据发送:UDT_APIintsend(UDTSOCKETu,constcharbuf,intlen,intflags);UDT_APIintsendmsg(U
UDT协议实现分析——UDT数据收发的可靠性保障
不管是数据的发送还是数据的接收,大体的流程我们基本上是都理了一下,还分析了数据收发过程中用的数据结构,接下来就看一些UDT中数据收发更精细的一些控制。UDT数据收发的可靠性保障来看一下UDT中数据收发的可靠性保障。接收包丢失列表CRcvLossList先来看一下CRcvLos
UDT协议实现分析——close过程
最后再来看一下close的过程(src/api.cpp):intCUDTUnited::close(constUDTSOCKETu){CUDTSocketslocate(u);if(NULLs)throwCUDTException(5,4,0);
UDT协议实现分析——UDT Socket的创建
UDTAPI的用法在分析连接的建立过程之前,先来看一下UDTAPI的用法。在UDT网络中,通常要有一个UDTServer监听在某台机器的某个UDP端口上,等待客户端的连接;有一个或多个客户端连接UDTServer;UDTServer接收到来自客户端的连接请求后,创建另外一个单独的UDTSocket用于与该客户端进行通
UDT协议实现分析——数据发送控制
在前文(http://my.oschina.net/wolfcs/blog/506021)中,我们有看到,数据发送的过程,大体是发送者CUDT将要发送的数据放进它的CSndBufferm\_pSndBuffer,并将它自己添加进它的CSndQueuem\_pSndQueue的CSndUListm\_pSndUList的堆里,后面CSndQueue