首先简单说明一下,就是UDT安全文件传输速度的确非常快。
UDT是基于UDP的数据传输(UDP based data transfer protocol),基于用户报文传输。主要支持互联网上海量数据传输的一种协议。相对于TCP在高带宽和长距离传输的效率来说,UDT的性能比TCP高,具体怎么个流程还要后面一一解析。
UDT在UDP基础上,封装SOCKET的各种属性,具体有点多,这一篇还不能一一列举。
大体构架IO处理模式是相对独立的发送线程和接收线程,分为两种处理方式一个是流形式,一个是包形式。
就我现在了解到的结构来说吧!主要是安全传输,如果是内网的话,那就好说啦,可以制作想飞鸽一个样的文件传输工具。如果是远端的话,就需要考虑先连通,就是打洞。
打洞相对来说,就是数据不是很多,最大也不会超过1500,当然这是一般来说。具体有别的需求的话就可以需要传输的数据比较大。就正常传输而言,一般不会超过1500,
如此,应用的话还是使用UDT中的报文传送方式比较好。一是数据考虑,二是容易解析数据,三容易控制。
如此就是可以获得两边的IP和port就可以直接连通。当然,根据统计说是90%的情况都能打通,主要说的是家庭类型,大型公司暂时就先不要考虑。
同学的公司差不多都打不通。看来保护性做的还是很好。
连通也有好几套方案,具体说简单的就是会合类型,直接设置属性,然后不通过bind和listen状态,直接开始连接,就是传说中三次握手行为。
当然,由于联合方式使用的是同一个SOCKET,但是是不同的SOCK_ID,UDT设计比较好的一个方面就是每一个SOCK_ID都有自己的sendbuffer和recvbuffer和核心模块CUDT。
如此,在连接服务器的状态下,还可以再新建其他类型。当然具体操作的话,就需要自己组合逻辑。
UDT现在使用的唯一感觉不爽的地方就是使用流协议形式,没有TCP用的方便,当然好像就是少了一个接收缓存,当然UDT一定是有接收缓存的的,我的是组包。
调用方式,每一个SOCK_ID都可以找到对应的CUDT核心模块,然后通过它才可以做所有的事情。
sendbuffer和recvbuffer 会根据你选用的SOCKET类型来选择里面不同的接口,比如是recvmsg还是recv还是recvfile。对应里面readmsg,readdata和readfile,具体名称没记全,好像就是这个意思。
这现在说的是整体思路,后面要根据功能一个一个模块来搞一搞。