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