CDP——基于UDP的TCP协议实现

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:wwkuan
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:CDP协议是一种基于UDP协议之上的TCP协议实现,该协议同时具有TCP协议的通用、高效,和UDP协议的高NAT穿透成功率,可用于很多P2P网络应用的构建。
  关键词:P2P;CDP;NAT 穿透;基于UDP的TCP
  中图分类号:TP317文献标识码:A 文章编号:1009-3044(2007)03-10736-02
  
  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的高穿透成功率,并提供了简单易用的应用程序开发接口。
  
  2 CDP设计目标
  
  CDP主要的目标就是在UDP 层之上实现TCP 的协议算法,使得应用程序能够在UDP 层之上获得通用、可靠、高效的通信能力。CDP 网络开发库所实现的算法,都来自久经考验的TCP协议算法,以下协议设计部分主要讲解CDP实现中与TCP标准不同的部分。
  
  3 CDP协议设计
  
  CDP协议主要在以下几个方面与TCP有所不同:协议格式、连接建立(NAT UDP PUNCH模式)、保活机制、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 时表示最大报文段长度。如下图:
  图2 CDP选项字段
  数据:用户通过CDP 传输的数据。
  3.2 连接建立(NAT UDP PUNCH模式)
  一般情况下,CDP连接的建立过程与TCP相同。但当CDP工作在UDP NAT 穿透(NAT UDP PUNCH)模式下时,在三次握手之前,先要向对端NAT 端口及预测端口以默认2ms的间隔发送默认为10个LIV报文,一来用于打开自已的NAT 端口,二来是用于进入对端NAT端口。默认值可以由用户程序设置。这时的LIV 报文中初始序号及确认序号都为0。
  当接收到对端LIV 报文后,CDP立即停止LIV 报文发送,发出SYN 报文进行连接建立。这时有两种可能:一是对端直到接收到该SYN 报文,都没有接收到LIV 报文,或是刚接收到LIV报文,但没有来得及发送SYN 报文,此时将会和一般模式下连接建立的过程一致,经历三次握手;二是对端在接收到该SYN 报文之前,也已经发送SYN报文,此时双方都需要对SYN 报文段进行确认。
  3.3 半打开连接及连接保活
  半打开连接是指对端异常关闭,如网线拔掉、突然断电等情况导致一端关闭,而另一端却认为连接仍处于打开当中,这种情况称之为半打开连接。CDP中的一个TDP SOCKET描述符由本地IP、本地端口、远端IP、远端端口唯一确定。当远端客户端连接请求到来时,服务端将接收到一个新的CDP SOCKET描述符,当这一个描述符唯一确定信息已经存在时,对新的连接请求发送RST 报文段,通知其重置连接请求。对于旧的连接,由保活机制自动发现是否为半打开连接,如果是半打开连接,则自动关闭该连接。CDP的RST 报文与TCP 中的RST 报文是不一样的。
  连接建立之后,CDP 连接需要启动保活机制。TCP 连接在没有数据通信的情况下也能保持连接,但CDP 连接不行。CDP 连接在一定时间内如果没有数据交互的话,将主动发送保活LIV报文段。这个时间根据CDP 连接工作模块不同有所差异,在NAT UDP PUNCH 模式下,默认值为1 分钟(大多数的NAT中,UDP会话超时时间为2-5分钟左右);而在常规模块下这个时间段默认值为5分钟。默认值可以由用户程序设置,用户程序需要指明两种模式下的保活时间周期。
  3.4 路径MTU 发现及MSS 通告
  CDP连接建立过程中会通告初始MSS(Maximum Segment Size),这个值可以由用户程序进行设置。但这个初始值是静态的,当通信双方跨越多个网络时,使用设置的MSS可能导致传输的IP 报文分片的产生。为了避免分片,CDP在数据传输过程中进行动态的路径MTU(Maximum Transmission Unit)发现,并进行MSS 的更新及通告。
  CDP创建UDP SOCKET时,即将IP选项设置为不允许分片: Setsockopt(clientSock, IPPROTO_IP, IP_DONTFRAGMENT, (char*)&dwFlags, sizeof(dwFlag) )。
  在发送数据时先以当前MSS 大小进行发送,如果返回值为错误码WSAEMSGSIZE(10040),则表示为报文尺寸大于MTU,需要进行IP 分片传输。此时,缩减MSS大小再次发送,直至不再返回错误码WSAEMSGSIZE(10040)。当MSS 变更并能成功发送报文后,需要向对端通报新的MSS 值。每次MSS 缩小后,默认隔30 秒,CDP 将默认扩大MSS 大小,以检查是否路径MTU 是否增大了,之后隔30*2 秒、30*2*2 秒进行检测,如果三次都未发现MTU 增大则停止进行检测。网络中MTU 值的个数是有限的[3]。因此MSS 的扩大及缩减,可依据一些由近似值按序构成的表,依照此表索引进行MSS 值的扩大与缩减计算。
  CDP 中MSS 与MTU 之间关系的计算公式如下:MSS = MTU–20(IP首部)–8(UDP首部)–12(CDP首部)。
  
  4 CDP应用程序开发接口(CDP Socket API)
  
  使用CDP进行网络程序开发是非常容易的,它API与标准socket API是非常相似的,对应功能的函数名称都相同,只是CDP的所有API都处于名称空间CDP 之下。此程序库的实现也参考了BSD Socket的实现。CDP Socket API列表如下:
  
  5 结束语
  
  本文提出了一种基于UDP协议之上的TCP协议实现——CDP协议,并对现实的一些关键部分进行了讨论,最后给出了CDP协议的应用开发接口。CDP协议同时具备了TCP通用、高效的特点,有利用的UDP的NAT穿透特性,可广泛应用与构建各种P2P网络应用。
  参考文献:
  [1]B. Ford, P. Srisuresh, D. Kegel, Peer-to-Peer Communication across Network Address Translators [EB/OL], draft-ford-midcom-p2p,http://www.brynosaurus.com/pub/net/p2pnat, June 2004.
  [2]W.Richard Stevens, 范建华,译,TCP/IP详解——卷Ⅰ:协议[M],机械工业出版社,2000.4.1.
  [3]J. Mogul, S. Deering, "Path MTU Discovery"[S], RFC1191, November 1990.
  本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。
其他文献
摘要:数据仓库系统是在学校各部门系统的基础上发展而来的,其内部存储的数据来自于事务处理的各个系统和外部数据源。因为学校的业务系统是在不同时期、不同背景、面对不同应用、不同开发人员等各种客观前提下建立的,其数据结构、存储平台、系统平台均存在很大的异构性,所以学校各种源数据缺少统一的标准,数据难以转化为有用的信息,原始数据的不一致导致决策时可信度的降低。本论文着重介绍了在数据仓库中利用数据转换服务(D
期刊
摘要:本文深入的分析了SIM卡中的COS系统的体系结构,从安全操作系统的角度剖析了COS中的安全体系。  关键词:COS;安全体系  中图分类号:TP316文献标识码:A文章编号:1009-3044(2007)03-10708-01    1 引言    SIM卡是Subscriber Identity Module的缩写,即用户识别模块,用来标识一个特定移动用户的网络连接。SIM卡的主要功能是来
期刊
摘要:本文系统地介绍了GAP技术的工作原理、功能及安全优势,分析了校园网安全存在的问题,并对存在的问题提出了基于GAP技术的解决方案。  关键词:GAP技术;校园网;网络安全  中图分类号:TP393文献标识码:A文章编号:1009-3044(2007)03-10713-02    1 引言    GAP技术源于英文的“Air GAP技术",它是一种通过专用硬件和相关软件使两个或者两个以上的网络在
期刊
摘要:ADSL(Asymmetric Digital subscriber Line)现在越来越成为家庭用户接入Internet的首选,本文通过对ADSL的简要介绍,以及对网卡特征和ADSL调制解调器的研究,重点解决了多台电脑共用一个账号单独上网或同时上网的难题。  关键词:ADSL;网卡MAC;IP地址  中图分类号:TP393文献标识码:A文章编号:1009-3044(2007)03-1068
期刊
摘要:在移动Ad Hoc研究中,QoS研究重要方面,虽然在传统网络中多路径的路由协议研究已相当成熟,但是大多数Ad Hoc路由协议都是基于单路由的,而且并不能很好的支持QoS约束。本文对现有DSR的协议的基础上,加入多径使其满足一定的延时约束,提出了一种移路径QoS路由协议,并给出了正确性验证及复杂性分析,并在NS2平台下对该改进后的协议进行了仿真实验和分析。仿真结果表明,该路由协议减少了路由重建
期刊
摘要:介绍上位机与下位机的串行通信的实现。下位机利用ARM技术,上位机用VC来编写串行通信程序。详细介绍了ARM自带的UART的工作原理及与计算机串行口的连接方法。利用WIN32 API函数在VC下实现了串行通信程序.并给出了部分代码实例。  关键词:ARM;串行通信   中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)03-10705-01    1 引言    目前
期刊
摘要:无线ATM网络作为宽带多媒体通信的一种解决方案,近年来得到了广泛的研究。基于高速率、高可靠性的光纤信道的ATM网络扩展到无线环境面临着许多问题。本文介绍了无线ATM网络体系结构、协议栈、应用特点和关键技术,并重点讨论了无线ATM网络的MAC层协议。  关键词:无线ATM;媒体访问控制;时分多址   中图分类号:TP393文献标识码:A文章编号:1009-3044(2007)03-10691-
期刊
摘要:J2ME(面向资源受限设备)与J2EE(面向企业用户)技术的结合为移动电子商务提供了很好的解决方案。讨论了如何利用J2ME,Servlet和MIDlet等进行移动终端应用程序开发,并结合传统网站,实现了基于J2ME的移动商务模型。通过实验验证了建立移动商务网站的可行性。  关键词:J2ME;J2EE;移动电子商务;MIDlet;Servlet  中图分类号:TP311文献标识码:A文章编号:
期刊
摘要:通过对我国高职院校学生成绩卡的信息分析,根据数据库结构化理论,提出了基于成绩卡的数据表的设计方案。并阐明了基于ASP的高校学生成绩卡打印输出的模块化设计思想。  关键词:成绩卡;ASP;模块;方案  中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)03-10742-02    1 ASP简介     ASP即Microsoft Active Server Page
期刊
摘要:本文首先应用最小二乘误差补偿算法来校正磁强计的航向角,这样可以提高系统的定姿精度;然后再利用校正后的姿态角信息来应用到GPS快速定姿中,将校正后的姿态角信息应用到多分辨率算法中,能够大大提高系统的快速性和姿态角的精度。  关键词:电子磁强计;GPS;姿态确定  中图分类号:P228 文献标志码:A 文章编号:1009-3044(2007)03-10740-02    1 引言    电子磁强
期刊