新CDP基于UDP的TCP协议实现汇编

新版CDP――基于UDP的TCP协议实现汇编摘要:CDP协议是一种基于UDP协议之上的TCP协议实现,该协议同时具有TCP协议的通用、高效,和UDP协议的高NAT穿透成功率,可用于很多P2P网络应用的构建。关键词:P2P;CDP;NAT穿透;基于UDP的TCP中图分类号:***文献标识码:*文章编号:*-*(*)*-*-*1引言随着互联网应用广泛推广,基于各种P2P网络技术的产品也越来越多的出现在我们的视野当中。从最早的Napster到现在的Bittorrent、eMule、skype等产品,P2P这种网络应用模式已经从各个方面深入人心。这些产品在网络实现技术上,都以各自的方法解决着同样面临的一个问题,如何让他们的软件产品在各异的网络拓扑结构中顺利的进行P2P通信。众所周知,在当今的网络拓扑结构中,普遍使用NAT设备来进行网络地址转换,那么如何让应用程序跨越这些NAT设备进行全双工通信,就成为非常重要的问题。实现跨越NAT通信有很多种办法:首先是通过服务器进行转发,这是比较粗暴的方法,在用户量较大时,转发服务器需要付出相当大的代价;其次,可以使用NAT穿透技术。而在NAT穿透中,UDP穿透的成功率比起TCP穿透要高出许多[1]。因此在UDP协议上构建一些大型的网络应用程序可能会成为很多人的需求。由于UDP协议本身存在通信不可靠的缺点,对于基于UDP进行可靠通信的需求就浮现出来了。目前在网络上有许多人正在做着这一工作UDT、RakNet、eNet等都是构建在UDP之上的网络可靠通信开发库,但这些库都是针对一些特殊应用进行设计的,不具备通用性。本文提出的CDP协议是在UDP基础之上实现的TCP协议。同时具备了TCP的通用、高效和UDP的高穿透成功率,并提供了简单易用的应用程序开发接口。2CDP设计目标CDP主要的目标就是在UDP层之上实现TCP的协议算法,使得应用程序能够在UDP层之上获得通用、可靠、高效的通信能力。CDP网络开发库所实现的算法,都来自久经考验的TCP协议算法,以下协议设计部分主要讲解CDP实现中与TCP标准不同的部分。3CDP协议设计CDP协议主要在以下几个方面与TCP有所不同:协议格式、连接建立(NATUDPPUNCH模式)、保活机制、MTU发现与MSS通告。其他部分,如报文传输、流量控制、超时重传、拥塞控制等,均参照TCP协议实现[2]。下面将对几个不同部分分别进行说明。3.1协议格式CDP的实现的算法虽然与TCP实现的算法是大致相同的,但CDP的协议格式只是从TCP协议格式获得参考,但并不完全与他相同,CDP协议格式如图1所示。图中各字段意义分别为:4位首部长度:表示用户数据在数据包中的起始位置。LIV:连接保活标志。ACK:确认序号有效。PSH:接收方应该尽快将这个报文段交给应用层。RST:重置连接。SYN:同步序号,用来发起一个连接。FIN:发端完成发送任务。16位窗口大小:接收端可接收数据的窗口大小。选项:只有一个选项字段,为最长报文大小,即MSS。CDP选项格式与TCP选项格式一致,kind=0时表示选项结束,kind=1时表示无操作,kind=2时表示最大报文段长度。如下图:图2CDP选项字段数据:用户通过CDP传输的数据。3.2连接建立(NATUDPPUNCH模式)一般情况下,CDP连接的建立过程与TCP相同。但当CDP工作在UDPNAT穿透(NATUDPPUNCH)模式下时,在三次握手之前,先要向对端NAT端口及预测端口以默认2ms的间隔发送默认为10个LIV报文,一来用于打开自已的NAT端口,二来是用于进入对端NAT端口。默认值可以由用户程序设置。这时的LIV报文中初始序号及确认序号都为0。当接收到对端LIV报文后,CDP立即停止LIV报文发送,发出SYN报文进行连接建立。这时有两种可能:一是对端直到接收到该SYN报文,都没有接收到LIV报文,或是刚接收到LIV报文,但没有来得及发送SYN报文,此时将会和一般模式下连接建立的过程一致,经历三次握手;二是对端在接收到该SYN报文之前,也已经发送SYN报文,此时双方都需要对SYN报文段进行确认。3.3半打开连接及连接保活半打开连接是指对端异常关闭,如网线拔掉、突然断电等情况导致一端关闭,而另一端却认为连接仍处于打开当中,这种情况称之为半打开连接。CDP中的一个TDPSOCKET描述符由本地IP、本地端口、远端IP、远端端口唯一确定。当远端客户端连接请求到来时,服务端将接收到一个新的CDPSOCKET...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

确认删除?