udp协议范文第1篇
关键词:用户数据报协议;通信;报文分析;Sniffer
中图分类号:TP312 文献标识码:A 文章编号:1009-3044(2010)13-3319-02
Use UDP Protocol and Analysis
LIU Peng1, LIU Yan2
(puter Science and Information Engineering College, Guangxi Normal University, Guilin 541004, China; 2.Affiliated Hospital of Guilin Medical University,The Office of Teaching Management, Guilin 541001, China)
Abstract: UDP protocol is a compact, highly efficient protocol has been widely used. The method of how to design communication program with UDP protocol in windows operating system was introduced. Then test communication with the introduced program. The captured packets by Sniffer in communication experimental were analyzed in detail to verify the network model and the network communication program, summed up the advantages and disadvantages of UDP protocol.
Key words: UDP; communication; packet analysis; sniffer
UDP是User Datagram Protocol的简称,是TCP/IP体系结构中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。UDP 协议是 IP 协议与上层协议的接口,用端口号分别为运行在同一设备上的多个应用程序提供服务。它定义在IETF RFC 768中[1]。
UDP是分发信息的理想协议,适用于追求效率且不需要额外可靠机制的情形,如音、视频流媒体分发、高层协议或应用程序提供错误和流控制功能时的快速数据分发。 UDP服务于很多知名应用,如网络文件系统(NFS)、简单网络管理协议(SNMP)、域名系统(DNS)以及简单文件传输系统(TFTP)、动态主机配置协议(DHCP)、路由信息协议(RIP)等。
1 UDP协议使用
在Windows下使用UDP不需要实现RFC 768中定义的UDP细节,封闭的Windows操作系统为用户实现了协议,以动态链接库及API的形式提供给用户程序调用。这种方式方便了程序设计,但也阻止了用户对网络协议的更深理解。为了更加深入研究UDP有必要对传输报文流进行分析;为了更好的分析,需要实现一个使用UDP的通信程序。
在windows下选用VC6.0编译器。服务器端代码如下:
#include //基本输入输出库
#include //网络API函数库
#pragma comment (lib,"WS2_32.lib")/*将WS2_32.lib加入链接,不用再为这个链接文件设置链接选项了*/
void main()
{ WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
return; /* 处理找不到 WinSock DLL.*/}
/* 确认 WinSock DLL 支持的版本 */
if ( LOBYTE( wsaData.wVersion ) != 1 ||HIBYTE( wsaData.wVersion ) != 1 ) {
WSACleanup( ); return;
}/* [3]以上代码为MSDN提供的设计windows下网络程序的标准方法*/
SOCKET sockSrv=socket(AF_INET,SOCK_DGRAM,0);/*AF_INET因特网地址族UDP, TCP, 等.SOCK_DGRAM 基于upd的套接字。*/
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);/*htonl主机字节序变为网络字节序*/
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6666);
err=bind(sockSrv,(SOCKADDR *)&addrSrv,sizeof(SOCKADDR)); /*绑定主机从6666端口接受数据*/
if ( err != 0 ) {
return; /* 处理帮定异常*/
} SOCKADDR_IN addrClient;
int len=sizeof(sockaddr);
char recvBuff[200];//接收缓存
char sendBuff[200];//发送缓存
char tempBuff[200];//暂时缓存
while (1){
recvfrom(sockSrv,recvBuff,200,0,(SOCKADDR*)&addrClient,&len); //接收数据
if('E'==recvBuff[0])
{sendto(sockSrv,"E",strlen("E"),0,(SOCKADDR*)&addrClient,len); //发送数据
printf("Communications end/n");
break;
}sprintf(tempBuff,"Recieve From IP %s :%s ",inet_ntoa(addrClient.sin_addr),recvBuff); //格式化
printf("%s/n",tempBuff);
printf("Please input data send to IP %s :/n ",inet_ntoa(addrClient.sin_addr));
gets(sendBuff);
sendto(sockSrv,sendBuff,strlen(sendBuff)+1,0,(SOCKADDR*)&addrClient,len);
}closesocket(sockSrv);
WSACleanup();
}客户端程序头文件及socket初始化和服务器端一样,不同的是socket函数的使用。
//头文件和服务器端一样
void main()
{…
//初始化和服务器端一样
/* 以上代码为MSDN提供的设计windows下网络程序的标准方法,*/
SOCKET sockCleit=socket(AF_INET,SOCK_DGRAM,0);//SOCK_DGRAM 基于upd的套接字
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=inet_addr("192.168.1.103");/*设置目标地址,根据服务器端情况*/
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6666);//与服务器端一致
char recvBuff[200];//接收缓存
char sendBuff[200];//发送缓存
char tempBuff[200];//暂时缓存
int len=sizeof(SOCKADDR);
while (1)
{printf("Please input data send to IP %s :/n",inet_ntoa(addrSrv.sin_addr));
gets(sendBuff);
sendto(sockCleit,sendBuff,strlen(sendBuff)+1,0,(SOCKADDR*)&addrSrv,len);//发送
recvfrom(sockCleit,recvBuff,200,0,(SOCKADDR*)&addrSrv,&len);//接收
if('E'==recvBuff[0])
{sendto(sockCleit,"q",strlen("q"),0,(SOCKADDR*)&addrSrv,len);
printf("Communications end/n");
break;
}sprintf(tempBuff,"Recieve From IP %s :%s ",inet_ntoa(addrSrv.sin_addr),recvBuff);
printf("%s/n",tempBuff);
}closesocket(sockCleit);
WSACleanup();
}
以上代码可使用VC6.0、VS2005、 VS2008等软件编译器。服务器端的网络地址为192.168.1.102。客户端不限,只要和服务间路由可达即可,本例中使用192.168.1.100。如不想更改服务器端IP地址,只要按照程序注释,根据实际情况更改客户程序的addrSrv.sin_addr.S_un.S_addr变量即可。
2 报文捕获与分析
图1为客户端IP192.168.1.100向服务器端IP192.168.1.103发出数据“test”后,由服务器端的sniffer捕获的报文。
UDP报文为灰色开始的0c 96 1a 0a 00 0d 6d 3e 74 65 73 74 00共13字节。UDP前45开始到67为标准IP报文头共20个字节,报文开头的00到08 00(IP报文头前)14个字节为DLC(Data Link Control)报文头。UDP报文中,0c 96源端口号,两字节,客户端用于接收信息的端口号,不需要回复可用全零。1a 0a 目的端口号,两字节,服务器端的接收端口号。00 0d 数据包长度,两字节,本示例为13。6d 3e 校验和,两字节。74 65 73 74 00 数据包的内容,74 65 73 74 为“test”的ASCII编码,00通过源程序可以发现,为了接收端处理方便多发的一个空字节。
图2为服务器端103接收到“test”后,向客户端发送“received test”数据,由服务器端的sniffer软件捕获的报文。
UDP报文为灰色开始1a 0a 0c96 00 16 b6 78 72 65 63 65 69 76 65 64 20 74 65 73 74 00共22字节。1a 0a源端口号,0b 96目的端口号,与前一报文正好相反。00 16 数据包长度22字节。B6 78 校验和,72 65 63 65 69 76 65 64 20 74 65 73 74 00 是数据报的内容,同样多发了一个空字节。
由协议分析可知,UDP位于IP报文的数据域中,由源端口、目的端口、长度、校验和、和数据域组成,采用明文传递应用数据。如果传递重要信息一定要在应用层加密,否则很容易被窃取。UDP在发送数据时附带自身的端口号,接收时不需要确认,所以可以方便的进行一对一、一对多和多对多的交互通信,这种方式方便但存在缺陷,如果被攻击者知道服务的端口号,控制多台主机向服务器发送大量垃圾信息,可使服务器瘫痪。这是此类协议的共有的弱点。
3 结束语
传输层的UDP协议由于其简洁、高效性而被广泛使用,是一种重要的协议。该文介绍的UDP协议使用方法具有通用性,可作为开发、学习此类软件参考。UDP协议由于没有安全控制,采用UDP协议的系统在提供服务时最好放在防火墙内,由系统对它提供安全保证。
参考文献:
[1] 谢希仁.计算机网络[M].5版.北京:电子工业出版社,2007:108-184.
[2] Stanley B Lippman. JoséeLajoi C++Primer[M].潘爱民,张丽,译.北京:电力出版社,2005.
[4] Behrouz.A.Forouzan Sophia Chung Fegan.Data Communicatins and Networking[M].吴时霖,等,译.北京:机械工业出版社,2007.7,445-472.
udp协议范文第2篇
关键词: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 = MTUC20(IP首部)C8(UDP首部)C12(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,/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.
udp协议范文第3篇
关键词:UDP协议;广播;多播;Delphi5.0
中图分类号:TP311.1 文献标识码:A文章编号:1007-9599 (2011) 05-0000-01
Implementation of Broadcast and Multicast under the UDP Protocol
Zhang Wei12,Zhang Huanjun1,Cheng Xiao2
(1.Shenyang Ligong University,Shenyang110168,China;
2.Sicong Co.,Ltd.,Xian710043,China)
Abstract:UDP is a very practical and feasible network transmission layer protocols,now widely used in many fields in the future,and will play a greater role.This paper expounds the development environment Delphi5.0 next Broadcast and multicast a software design method.
Keywords:UDP protocol;Broadcast;Multicast;Delphi5.0
在TCP/IP协议族中,有两个互不相同的传输协议:TCP(传输控制协议)和UDP(用户数据报协议)。TCP为两台主机提供高可靠性的数据通讯,UDP为应用层提供了一种非常简单的服务,它只是把称作数据报的分组从一台主机发送到另一台主机,但并不保证该数据报能到达另一端。与TCP相比UDP的优势就在于它排除了信息可靠传递机制,将安全和排序等功能移交给上层应用来完成,极大降低了执行时间,保证了运行速度。单播、广播、组播则表示的是数据在网络中“播放”的形式,是指有一个人能听到还是让特定的人群听得到,还是让所有的人都听的到的区别。一台主机要向网上的所有其他主机发送帧,这就是广播;多播处于单播和广播之间,向属于多播组的多个主机发送帧。
一、广播与多播的实现
下面我们就详细介绍一下Delphi5.0开发环境下广播和多播的实现。软件开发步骤如下:
(一)网络初始化
1.首先初始化WinSock动态连接库,创建Socket套接字,用下面语句绑定发送方Addr:
Addr.sin_family:=AF_INET;
Addr.sin_addr.S_addr:=INADDR_ANY;//本机接收地址设为任意地址
Addr.sin_port:=htons(UDPPORT); //设定本机UDP端口号
函数htons将端口号由主机字节顺序转换为网络字节顺序,然后将套接字绑定到一个本地地址和端口上(bind),设置为异步选择,设定接收端SockAddrIn:
FSockAddrIn.SIn_Family:=AF_INET;
FSockAddrIn.SIn_Port:=htons(UDPPORT);//接收端端口设置
2.广播接口设置。广播方式有两种,一种是limited broadcast,广播地址是255.255.255.255;一种是directed broadcast。limited broadcast初始化时代码如下: SetSockopt(FSocket,SOL_SOCKET,SO_BROADCAST,@broadcast,sizeof(broadcast));
directed broadcast不需要SetSockopt(),以标准的C类网为例,直接发送x.x.x.255就可以了。这种广播只有同一逻辑子网中的机器才能收到,也就是说对方地址应该是x.x.x.y,如果不是,即使在同一物理子网中也是收不到的。当然,这和子网掩码有关。limited broadcast广播的好处是只要在同一子网中的主机,就可以收到这种广播,而不必非要在统一逻辑子网中。例如,如果你的地址是x.x.x.1,那么这种广播,地址是x.y.z.a的主机也能收到。
3.多播接口设置。mreq.imr_multiaddr.S_addr:=inet_addr(pchar(MY_GROUP));//设定多播地址mreq.imr_interface.S_addr:=htonl(INADDR_ANY);//设定本机接收端口。
(二)网络数据的读取
flen:=sizeof(FSockAddrIn);//获取字节长度
FSockAddrIn.SIn_Port := htons(UDPPORT);//设定本机接收端口
Event:=WSAGetSelectEvent(Message.LParam);//接收到数据后触发消息事件
if Event=FD_READ then
begin
len:=recvfrom(FSocket,buffer,sizeof(buffer),0,FSockAddrIn,flen);
value:=copy(buffer,1,len);//网络数据接收,buffer是缓冲区。
(三)网络数据的发送。
首先定义一个string变量和一个integer变量,然后设置远端主机地址:
FSockAddrIn.SIn_Addr.S_addr:=inet_addr(pchar(Edit1.text));
value:=Content;
len:=sendto(FSocket,value[1],Length(value),0,FSockAddrIn, sizeof(FSockAddrIn)); //网络数据发送
if(WSAGetLastError() WSAEWOULDBLOCK)and(WSAGetLastError() 0)then //网络数据发送异常判断
showmessage(inttostr(WSAGetLastError()));
(四)关闭网络接口
CloseSocket(FSocket);//关闭Socket
二、结束语
经测试,该软件能成功实现UDP协议下的广播和多播。测试结果如图1、图2所示。
图1 UDP广播测试结果图2UDP多播测试结果
参考文献:
[1]袁振武.谢任东.谈Delphi编程中UDP协议的应用[J].科技广场,2008,05
udp协议范文第4篇
关键词:UDP;RUDP;可靠性
中图分类号:TP393文献标识码:A文章编号:1009-3044(2010)16-4379-02
Reliable Improvement Agreement Based on UDP Agreement
YIN Ran-ran
(School of Computer & Information, Hefei University of Technology, Hefei 230009, China)
Abstract: This article will propose and realizes the embedded equipment's authentic data transmission and one kind of new many through the comparative analysis transmission level transport protocols UDP unreliability and the TCP low efficiency in the UDP agreement's foundation transmits the RUDP agreement wireless. The RUDP agreement software module provides based on the news reliable communication function, the correspondence is faces the connection, the first floor uses UDP to take the load bearing agreement.
Key words: UDP; RUDP; reliability
1 TCP协议和UDP协议
1.1 TCP协议
传输控制协议即TCP,尽管它和UDP都使用相同的网络层协议(IP),但它向应用层提供了与UDP完全不同的服务,它提供一种面向连接的、可靠的字节流服务。面向连接意味着两个使用TCP的应用在彼此交换数据之前必须先建立一个TCP连接,数据传输完成后,再经过4次握手终止双方的连接。在数据传输的过程中,TCP还通过对数据的确认、流量控制等手段提高通信的可靠性。
1.2 UDP协议
UDP(User Datagram Protocol),即用户数据报协议。在TCP/IP网络通信中, UDP协议是一种面向无连接的服务。它发送数据以独立的数据包形式,不保证各数据包的发送顺序,也不进行正确性检查,因此,可能出现数据的重发、丢失、失序等现象[2]。使用UDP协议的常见服务有DNS、QQ等。
UDP协议直接向接收方发送数据而不关心对方计算机的状态,因此,它是一种相对不可靠的通信协议。正因为UDP协议不考虑网络数据传输过程中的很多问题,所以能节省了大量的网络状态确认和数据确认的系统资源消耗,从而提高UDP协议的传输速度和网络的利用效率。可是,如果既能充分利用UDP协议的这些优势,又能保证UDP通信的可靠性,网络通信系统的性能将会得到更大程度地提高。
2 RUDP 协议的提出
2.1 嵌入式设备可靠通信面临的问题
面向连接方式的服务功能明显很强大,它能够发挥面向连接的传输所具备的特性,例如流量控制,差错处理以及顺序交付等等,但是面向无连接的服务更适合于某些情况,在网络层上使用IP协议就是一个面向无连接的服务而且这个面向无连接的服务显得更加健壮,因为Internet本身就是一个不稳定的环境,面向连接的服务反而不能很好的运行于其上。
如果使用TCP连接协议实现嵌入式设备之间的数据传输可能带来许多的问题,嵌入式设备之间建立TCP连接并发送数据后,或者接收端向正在请求连接的设备发出SYN+ACK应答报文后,都可能无法接收到终端的ACK报文,在这种情况下发送端一般会重试并等待一段时间后终止这个连接。大量重传数据会进一步加剧网络的拥塞情况,严重时可以使网络及服务器系统崩溃,同时也会对数据传输的实时性产生影响。同时目前嵌入式设备又存在多点分散、数据量小、实时性要求高等特点[3]。本文将在UDP协议的基础上提出并实现嵌入式设备的可靠数据传输。
2.2 嵌入式可靠传输模型的体系结构
RUDP协议软件模块底层采用UDP作为承载协议,提供基于消息的可靠通信功能。根据计算机网络层次体系的概念,RUDP协议的层次模型就是在原UDP/IP协议的传输层和应用层之间加入了RUDP层和标志层。RUDP协议的层次结构如表1所示。
RUDP层的功能是保证数据的可靠传送。由于嵌入式设备通过网络进行消息的收发是处于一个公共网络的环境之中,可能会有大量无用的数据向嵌入式设备进行发送,大量的数据解析会极大地增加嵌入式设备的负担。为了避免这个问题,我们增加了一个标志层,标志层可以让嵌入式设备迅速的判断所接收的数据包是否为有效数据包,如果标志层数据不可识别,则迅速将包丢弃。在可靠传输层进行可靠传输设计和实现,在这一层,我们增加一系列可靠传输机制以保证嵌入式设备之间数据的可靠传输。这样就形成了一个原UDP协议所在传输层和应用层之间加入了一层为保证可靠数据传送而实现的RUDP软件模块和标志层的六层体系结构。从而,在UDP协议的基础上实现一种基于消息的面向连接的,适合嵌入式设备的可靠数据传递机制。
2.3 嵌入式可靠传输模型的基本功能
嵌入式可靠传输模型RUDP主要功能有:
1) 基于消息的收发功能:RUDP的传输层利用基于消息的传输协议,所以不必考虑发送端可以接收多少数据,只需知道能否接收数据即可。
2) 校验和:RUDP的校验和算法采用UDP的校验功能保证数据包的正确和顺序到达。UDP校验和字段是对整个UDP报文头和UDP所带的数据的校验和。
3) 丢弃重复包和保存失序包的功能:每当收到数据包后,便对数据包进行确认。保存未确认的数据包,丢弃已经确认了的重复包。由于UDP传送过程中,收到的数据包的顺序可能会和发送的顺序有一定的区别,所以保存失序包能够有效的减少重发的次数,也就是能相应的减少网络的数据流量。
4) 超时重发功能:RUDP中借鉴TCP中的超时重发机制来保证数据包的可靠传递;同时TCP中的确认延迟功能也得到借鉴,这样可以显著降低网络的流量,提高嵌入式系统的通信效率。
5) 服务器和客户端保活功能:探测收发两端的连接是否正常时嵌入式可靠传输模型中必须要实现的一个功能。如果连接已经出错,若干数据包仍然发送,当超时定时器到时后就会进行数据的重发。如果没有判断收发两端的连接是否正常,则会导致数据无法正常而又高效的发送。
2.4 RUDP协议工作过程
RUDP协议的工作过程是:首先,建立连接。发送方和接收方通过三次握手的方式建立连接(三次握手过程如图1所示)。第三次握手时,发送方发给接收方的数据帧中除了包含对接收方的确认信息之外,还包含将要发送的数据帧总数。接收方收到确认帧后,开始与发送方建立连接。与此同时将根据收到的帧总数设置接收窗口大小并将所有帧序号放入缓存。双方连接建立好后保证了数据发送和接收的同步性。
接着,发送方开始发送数据帧,接收方收到数据帧并进行处理。能够正确接收到的帧序号将会从序号缓存中删除。发送方发送完数据帧后发送“发送完”标志给接收方。接收方收到此标志后,开始扫描帧序号缓存。如果数据帧全部接收到,接收方向发送方发送一“接收完”标志,发送方收到后断开连接。如果序号缓存中有序号则说明有帧丢失,这时接收方将向发送方发出一个带有丢失帧序号的确认帧。发送方收到此确认帧后将重新发送丢失帧。如此重复,直到接收方完全正确接收到数据帧。其工作过程如图2所示。
3 总结
通过分析比较传输层协议TCP和UDP,能够看到它们各自的特点,并分析出它们各自的优势和缺点。结合嵌入式设备数据传输的特点同时针对UDP在可靠性方面的不足进行了改进,简单介绍了RUDP协议的原理和工作过程。通过分析可以看出采用RUDP的效率在嵌入式设备数据传输中要优于UDP协议,这样就可以实现一种更适合于嵌入式设备的可靠数据传递机制。
参考文献:
[1] Wright G R,Stevens W R. TCP/ IP 详解卷2:实现[M].陆雪莹,蒋慧,译.北京:机械工业出版社,1999.
[2] Comer D E. 用TCP/IP进行网络互联[M].张娟,王海,译.卷2.北京:电子工业出版社,1998.
udp协议范文第5篇
引 言
超文本传输协议(HTTP)是目前通过Internet进行信息交换最主要的方式。HTTP协议是建立在请求/响应(request/response)模型上的。首先由客户建立一条与服务器的TCP链接,并发送一个请求到服务器,请求中包含请求方法、URI、协议版本以及相关的MIME(Multipurpose Internet Mail Extensions)样式的消息。服务器响应一个状态行,包含消息的协议版本、一个成功和失败码以及相关的MIME式样的消息(包含服务器的信息、资源实体的信息和可能的资源内容)。图1给出了HTTP协议实现的一个简单模型。HTTP/1.0[3]为每一次HTTP的请求/响应建立一条新的TCP链接,因此一个包含HTML内容和图片的页面将需要建立多次的短期的TCP链接。一次TCP链接的建立将需要3次握手。另外,为了获得适当的传输速度,则需要TCP花费额外的回路链接时间(RTT)。每一次链接的建立需要这种经常性的开销,而其并不带有实际有用的数据,只是保证链接的可靠性,因此HTTP/1.1[4]提出了可持续链接的实现方法。HTTP/1.1将只建立一次TCP的链接而重复地使用它传输一系列的请求/响应消息,因此减少了链接建立的次数和经常性的链接开销。
可持续链接减少了每次TCP链接建立的时间,但是一个空闲的TCP链接将需要一个Socket和相应的存储缓冲区。一个Socket缓冲区的最小长度必须大于一个TCP包的最大长度,即64 KB,而且很多实现方法在链接建立时将预分配一些缓冲区。可用的Socket的数量是有限的,很多基于BSD的操作系统对于能够同时打开的链接数都有一个缺省的最大值。
无线掌上设备PDA的应用(如浏览器)[5]特点表现在:① 因为页面是针对掌上设备制作的,一般在1 K~2 K字节,比较小;② 目前无线通信网络的带宽很窄,GSM的数据信道带宽只有9.6 K。当前Web页面的访问大多通过HTTP协议,并使用TCP作为下层的传输控制协议。但不幸的是,TCP并不适合短会话的应用情况,不同于现在采用的使用单一TCP传输协议进行数据传输的方式。本文提出了采用动态选择传输层协议(TCP、UDP)的方法来改善取回页面的延迟、网络拥塞以及服务器的负荷。
这种混合TCP-UDP的方法结合两个方面的优点:首先,对于需要比较少数据传输的情况,它将使用UDP作为传输层的协议,从而避免了TCP链接的多次握手开销;另外,对于需要较多数据传输的情况,它将使用可靠的带有重排序和拥塞控制的TCP协议作为传输层的协议。混合TCP-UDP的实现方法只需要对应用层的改动,而操作系统的核心代码不用任何更改。仅采用UDP协议的缺点在于,需要在应用层建立一套类似于TCP复杂的控制协议,从而进行重排序和拥塞控制来保证传输的可靠性。
1 背 景
HTTP是一个请求/响应协议,客户端的应用程序通过提供一个URL可以从服务器上得到所需的数据。HTTP可以用来访问各种不同类型的资源,其中包括文本、图形、影音、可执行文件、数据库查询结果等等。
图2给出了在客户端发起HTTP GET请求后,在客户端和服务器之间进行数据包交换的示意。图中只有两个数据包是有用的(即携带了数据):一个是HTTP GET请求,另一个是HTTP的响应。其它的都是TCP用来进行握手操作的数据包。为了减轻Web服务器的负荷,经常采用重定向机制。这样从服务器发来的重定向响应报文是很短的数据包。使用TCP作为传输协议需要至少7个数据包,而使用UDP则只需要2个数据包就足够了。
2 设 计
我们使用混合传输层[6]的方法即对于少量数据传输的链接采用UDP,而对于大量数据传输的链接采用TCP作为传输层协议。这样对于短链接而言就避免了TCP经常性的握手开销,而对于长链接则仍可获得TCP的优点,如超时重传、拥塞控制、错误恢复机制等。这种方法中,客户端首先尝试使用UDP作为传输层的协议,如果对于所请求的URL UDP并不适合,则再次使用TCP链接。这种方法提供了以下保证:
如果初始的UDP数据包丢失,将采用TCP重新链接而不会受到影响。
如果所链接的服务器没有使用混合传输层的实现机制,客户端将使用TCP重新进行链接。
图3给出了混合TCP、UDP的实现算法。一个采用混合算法的HTTP客户端首先使用UDP作为传输层的协议发出HTTP GET请求,同时启动超时定时器。
当服务器处理客户端发来的请求时,它可以从以下两点做出选择:
① 如果响应的数据足够小(比如,可放到一个数据包中),服务器将使用UDP发回响应。像比较小的网页或HTTP REDIRECT响应就属于这一类。
② 如果响应的数据很大,无法放进一个UDP数据包中,服务器则要求客户端使用TCP重试。这可以通过添加一个HTTP的头部字段来解决如 TCPRETR。
在客户端,将会出现以下三种情况:
客户端从服务器接收到响应。如果响应中包含了所需的HTTP响应,客户端将对数据进行处理。如果服务器要求客户端重试,客户端将使用TCP作为传输层重试。
如果服务器没有处理通过UDP传输的HTTP包,客户端就会收到ICMP错误消息(目的地址无法到达/协议无法到达)。此时客户端将会使用TCP重试。
如果定时器超时,客户端应使用TCP重试。
图4给出了在定时器超时情况下,客户端和服务器之间数据包的交换。这种超时机制提供了可靠性,以及与未使用混合TCP-UDP方法的服务器的兼容性。
图5示意了服务器要求客户端使用TCP重发请求时,客户端和服务器之间的数据包交换。
3 结 语
混合TCP-UDP方法改善了参与HTTP传输的三个方面:客户端、服务器和网络。
对于客户端而言,可以避免由于TCP而引入的三向握手的时间,从而减少了浏览的延迟时间。
对于服务器而言,由于所需的TCP的链接数量减少,从而降低了由于建立、维护、撤销TCP链接所带来的服务器的负荷。
udp协议范文第6篇
关键词:通信网络;基于样本块的方法;UDP协议;Mean-Shift方法
中图分类号:TP311文献标识码:A文章编号:1009-3044(2010)21-5714-02
通信网络为计算机信息的获取、传输、处理、利用和共享提供一个安全可靠的环境和传输通道,但现实中通信网络并非是绝对安全的,传输数据过程中数据包的丢失、泄密和篡改时有发生,且日趋严重。
目前在通信网络中比较常用的两个通信协议是TCP协议和UDP协议。TCP是一种面向连接的协议,采用“三次握手”方式来确保数据的准确接收,其工作机制是首先是建立连接;其次发送端发送数据,接收端接收数据;再次接收端向发送端发送反馈信息,如果发送数据被成功接收,则断开连接,否则必须重传发送失败的数据。而UDP协议是一种无连接的协议,不提供可靠的信息发送机制,因此在数据传输过程当中更容易出现数据包的丢失现象。
TCP协议虽说提供安全的数据传输,但是传输效率不高,因此不适合于实时性较高的应用。UDP协议虽说不提供安全的数据传输,但是其传输效率很高,能实现实时传输,但是容易出现丢失数据包的问题。在实际当中很多实时性很高的珍贵数据是不容有失的,那么如何解决这一问题呢?
在2003年Shantanu D.Rane等提出无线电传输中丢失数据复原的问题,他们结合现有的图像修复技术和纹理合成技术对传输过程中丢失的数据进行填充。在传输过程中,图像被划分为 的块,计算其离散余弦变换,然后量化并进行哈弗曼编码,最后传输图像数据[1]。该文献中对丢失数据填充过程如下:对丢失的块分类,根据周围的块判断丢失块是纹理块还是结构块,如果是纹理块使用纹理合成算法,否则使用结构修复算法。分析发现该方法对于块的分类不够准确,而且丢失数据的填充比较耗时。
本文针对上述缺陷直接使用基于样本块的方法[3]填充UDP协议丢包数据。在目前所有的图像修复方法中,基于样本块的修复方法是非常有效用的一种,它不仅能够填充图像纹理部分,而且能够修复图像简单的结构,对结构的修复主要是受修复的优先权和样本块的大小控制,适合的修复顺序和样本块大小是有利于图像结构的保持。因此本文直接使用基于样本块的方法对丢失的图像数据进行填充,这样不仅能够提高填充的效率,而且能够减轻数据包的丢失造成严重损失。
1 基于样本块的丢失图像数据填充
UDP协议的数据传输过程与无线电数据的传输是相似的,其优点是传输过程中的部分数据丢失不会引起整个图像数据的混乱,这就为数据的恢复提供了一定的可能,否则数据的恢复是非常困难的。在很多文献中提到UDP协议的丢包率与具体网络环境有关,没有一个准确的数值,但是一般来说其平均丢包率总会小于无线电数据的丢包率3.6%[2]。
基于样本块的方法一种非常有效的丢失图像数据的填充方法,它不仅能填充大块的纹理破损,而且能够修复较小的结构破损。UDP协议的丢包率一般来说很小,这也就为图像的结构部分的复原提供了重要的保障。基于样本块的图像修复过程如下:
1) 确定丢失数据包的位置,因为图像数据是经过编码后传输的,因此即使丢包也不会使得整个图像数据混乱,自然其丢失数据的位置容易确定;
2) 寻找破损区域的边缘;
3) 按照优先权计算方法确定当前优先权最高的像素点,优先权P(p)一般为信任度因子C(p)与数据因子D(p)的积。信任度因子和数据因子的计算如式(1)和式(2):
(1)
(2)
信任度因子确保了当前待修复块上有更多的已知像素点来确保找到的最佳匹配块的准确性,而数据因子表示破损区域边界在优先权最高像素点处的法线与该点处等照线的夹角,夹角越大则结构越强,否则结构越弱,结构越强的自然越先修复,这样有利于图像边缘的保持;
4) 根据相似度的度量机制,寻找最佳匹配块;
5) 将最佳匹配块中的数据拷贝到当前待修复块中,注意只拷贝当前块中破损像素点对应的数据;
6) 更新破损区域;
7) 判断破损像素点的个数是否为0,如果为0,则转8),否则返回到2);
8) 修复结束。
基于样本块的修复方法虽说有很好的修复效果,但是也必须注意其修复过程中存在的问题。首先误差的累积问题,这必然导致错误的填充结果。其次是最佳匹配块的选择问题,如何在多个候选最佳匹配块中选出真正最佳的匹配块。
文献[4]提出一种新的方法来解决这误差累积的问题,首先使用Mean-Shift方法[5]对图像进行了粗划分,对最佳匹配块的选择区域作了限制,具体的最佳匹配块的选择原则如下:
1) 如果待修复块属于粗划分Ti,则最佳匹配块仅在Ti中选择;
2) 如果待修复块处于多个划分Ti∪Ti+1∪...∪Ti+k的边缘,则最佳匹配块在Ti∪Ti+1∪...∪Ti+k中选择。
上述方法相当于给匹配块的选择加了一些约束,使选择范围缩小。这样不仅缩短了寻找匹配块的时间,也避免了误差的累积。
另外一个问题就是最佳匹配块唯一的问题。假设目前找到的匹配块为ψp1, ψp2,…ψpk,那么如何在这之中选择一个真正的最佳匹配块。文献[6]提到了一种选取最佳匹配块的方法,认为与当前待修复块的空间距离越近,其相关程度越高。因此,通过计算待修复块的核与匹配块的核之间的空间距离来最终选定哪个块是真正的最佳匹配块。丢失数据的填充流程图如图1所示。
2 实验结果
本文用VC++实现了该算法,通过大量的实验说明了本文算法的有效性。由于传输图像很容易获得,因此本文采用峰值信噪比的方法对恢复结果进行客观评价。峰值信噪比PSNR的计算如下式:
(3)
PSNR值越大,恢复的效果越好,越接近原图;PSNR值越小,恢复效果越差,与原图差异越大。恢复结果如图2、图3、图4所示。
4 结论
本文分析了通信网络中UDP协议的传输机制,发现UDP协议在传输数据时容易发生数据丢包问题,由此使用基于样本块的方法解决恢复丢失数据包的问题。尽管文献[1]的作者提出了无线传输中图像数据的恢复方法,但是该方法比较复杂,而且存在诸多的不稳定性,诸如块的分类等。本文结合基于样本块修复的优点对丢失数据进行恢复,并通过实验进行了验证,确实取得了令人满意的效果。这样不仅很大程度上提高了UDP协议图像数据传输的安全性,也提高了UDP协议的传输效率。
参考文献:
[1] Shantanu D.Rane,Guilloermo Sapiro and Marcelo Bertalmio. Structure and Texture Filling-in of Missing Image Blocks in Wireless Transmission and Compression Applications[J].IEEE TRANSACTIONS ON IMAGE PROCESSING,VOL.12,NO.3,MARCH 2003,pp.296-303.
[2] E.Chang. An image coding and reconstruction scheme for mobile computing.In proc.5th IDMS,Oslo,Norway,Sept.1998,pp.137-148.
[3] A.Criminisi,P.Perez and K.Toyama. Region Filling and Object Removal by Exemplar-Based Image Inpainting[J].IEEE TRANSACTIONS ON IMAGE PROCESSING,VOL.13,NO.9,SEP 2004.
[4] Feng Tang,Yiting Ying,Jin Wang,and Qunsheng Peng.A Novel Texture Synthesis Based Algorithm for Object Removal in Photographs. MJ Maher (Ed.): ASIAN 2004, LNCS 3321, pp. 248C258, 2004.
[5] Comaniciu D, Meer P.: Mean Shift: A Robust Approach toward Feature Space Analysis[J],IEEE Trans. Pattern Analysis Machine Intell,Vol.24, No.5,603-619,2002.
[6] 卢小宝,王维兰.基于样本块的唐卡图像修复算法的改进[J].计算机应用.2010,30(4):943-946,2010.
udp协议范文第7篇
关键词:UDP协议;Socket;网络通信
中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)34-1867-02
Socket Network Programs Based on UDP Protocol
ZHOU Li-juan
(College of Science, Hunan University of Technology, Zhuzhou 412008, China)
Abstract: Windows Socket is a network programming interface,and applications can correspond to eachother in different domains without worrying about the different protocols by using it.This paper introduces the mechanism and principle of Socket network programs based on UDP protocol,and proposes a method of network with Java socket.
key words: UDP protocol;socket; network communication
Socket适用于网络环境中的进程间通信,它已成为当前许多操作系统的网络API,也是网络操作系统中必不可少的基础功能。随着Linux操作系统和Internet的不断发展,Linux网络环境下尤其是基于UDP的socket通信技术仍广为注目。文章介绍了socket的编程原理,并通过一个Java编写的客户/服务器程序,描述了网络中基于UDP的不同主机上的两个进程之间的socket通信机制。
1 Socket通信机制
Socket(套接字)机制是一种API,是网络应用程序的编程接口。Socket是通过标准文件描述符和其它程序通讯的一个方法。每一个套接字都用一个半相关描述:{协议,本地地址、本地端口}来表示;一个完整的套接字则用一个相关描述:{协议,本地地址、本地端口、远程地址、远程端口},每一个套接字都有一个本地的由操作系统分配的唯一的套接字号。
根据传输数据类型的不同,Socket主要分为三类:1) 流式Socket(SOCK_STREAM),在这种方式下,两个通讯的应用程序之间要先建立一种虚拟的连接,提供可靠的、面向连接的通信流,它使用TCP协议,从而保证了数据传输的正确性和顺序的。2) 数据报Socket(SOCK_DGRAM),它使用数据报协议UDP,定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且不保证可靠、无差错。3) 原始Socket,原始套接字允许对底层协议如IP或ICMP直接访问,它功能强大但使用较为不便,主要用于一些协议的开发。
2 UDP协议的工作原理
UDP协议是一个面向无连接的协议,其连接的建立不必像TCP那样需要服务器端侦听,也不需要有客户机请求连接,属于一种“强制”性的网络连接。UDP提供一对一或一对多的、无连接的数据报服务。该服务对消息中传输的数据提供不可靠的、最大努力的传送,这意味着它不保证数据的到达,也不保证所传送的数据报的顺序是否正确,UDP不重新传输丢失的数据。其主要工作是:将应用程序传输过来的数据分块交给网络层,确认接受到分组信息。
尽管UDP无法像TCP一样提供可靠的数据传输,但UDP并不比TCP缺乏优越性。UDP在传输效率方面比TCP要高一些,而且许多应用程序并不需要保证严格的传输可靠性,比如视频会议系统等,需要实时的交互,但并不要求音频视频的绝对正确。
使用UDP协议传输数据时,首先设置客户计算机的Local Port(本地端口)属性,而作为服务器的计算机只需要设置Remoter Host(远程主机)属性为客户计算机的IP地址或域名即可,并将其Remote Port属性设置为客户计算机上的Local Port属性。使用UDP端口号时,端口提供了用于发送消息的位置,每个端口由一个唯一的编号来标识。当应用程序向另一台计算机发送数据时,UDP生成一个数据头,包括源端口,这些端口提供送达信息所需要的地址。UDP协议还为数据和数据头计算出求和检验的值,在目标计算机中,数据包被传递至UDP协议程序并送到目的地端口。
3 UDP套接字的通信过程
中提供了两个类DatagramSocket和DatagramPacket用来支持数据报通信。DatagramSoc ket用来在程序之间建立传送数据报的通信连接,是数据报通信中的Socket。在数据报实现C/S通信程序时,无论在客户端还是服务器端,都要首先建立一个DatagramSocket对象,用来表示数据报通信的端点,应用程序通过Socket接收或发送数据报。
DatagramPacket则用来表示一个数据报,它是传输数据的载体,封装了数据、数据长度、数据报地址等信息。
采用UDP套接字方式实现C/S的通信程序由客户端和服务器端两部分组成。服务器进程依次按以下步骤进行:1) 调用Socket()创建一个数据报套接字;2) 调用bind()把服务器地址绑定在该套接字上;3) 调用recvform()等待客户进程发来的请求,服务器此时处于无限循环状态;4) 服务进程接收到客户进程所发来的数据报后,进行处理,调用sendto()将处理结果返回给客户进程,返回状态3),继续监听;5)服务进程调用close()撤消套接字,终止服务。
客户进程则按以下步骤进行:1) 调用Socket()创建一个数据流套接字;2) 调用sendto()向服务器进程发送数据报;3) 调用recvfrom()等待服务器进程返回该处理结果;4) 客户进程调用close()撤消套接字。
4 数据报通信实例
程序由服务器端和客户端两部分组成,服务器端主机中有一个名为“udp_socket.txt”文件,文件中保存了一段英文。服务器端接收一个客户端的请求,就从文件中读取若干个英文字符发送给客户端。当文件中所有内容发送给完毕,服务器端程序将退出。客户端首先构造一个数据报发送给服务器端,然后等待接受服务器端响应,当接收到服务器端的数据报后,显示数据并结束通信。
1) 服务器端程序
public class Server_Th
{ boolean m_q=true;
public void serverWork() throea IOException
{DatagramSocket ds=new DatagramSocket(2000)
//创建端口号为2000的数据报套接字
BufferedReader in=new BufferedReader(new FileReader (“udp_socket.txt”));
while(m_q)
{ byte buf[ ]=new byte[256];//创建缓冲区
DatagramPacket packet=new DatagramPacket (buf, buflength); //创建接收数据报对象
ds.receive(packet);//接收数据报
String dString=null;
if((dString=in.reaLine())==null)
{in.close();
m_q=false;
dString=”Good Morning!”;}
buf=dString.getBytes();//将数据存储到buf中
inetAddress address=packet.getAddress();
//得到客户端IP地址
int prot=packet.getPort();//得到客户端的端口
packet=new DatagramPacket (buf,buf.length, address. port );
//构造要发送数据报
ds.send(packet);//发送数据报
}
ds.close();//关闭
}
public void main(String args[])
{ Server_Th server=new Server_Th();
try
{server.serverWork();}
Catch(IOException e){}
}}
2) 客户端程序
public class Client_Th
{public void main(String args[ ]) throws IOException
{ DatagramSocket socket=new DatagramSocket( );
//创建套接字对象
byte buf[ ]=new byte[256];
InetAdress address=InetAddress.getByName(“20.14.30.9”);
//服务器IP地址
DatagramPacket packet=new DatagramPacket(buf,buf. Length,address,2000);//创建要发送的数据报对象
socket.send(packet);//接收数据报
packet=new DatagramPacket(buf,buf.length);
//创建要接收的数据报对象
socket.receive(packet);//接收数据报
String received=new String(packet.getData());
System.out.println(“The string form the server: ”+recerived);
//取得数据报中的数据并显示
Socket.close();//关闭socket
}}
编写程序时客户端和服务器端的DatagramSocket必须用一个端口,因为客户端向服务器端请求时,服务器需要知道从哪个端口监听请求。当数据进行传输时,服务器从接收到的数据报中得到客户端的接收数据的端口,然后将数据报发送到这个端口,客户端则监听这个端口而得到服务器端发送过来的数据报并显示其内容。运行时要先运行服务器端程序,再运行客户端程序。
5 小结
Socket在网络编程方面发挥着很大的作用。UDP是可靠性无法得到保障的协议,但对于质量要求不是很高的网络应用程序,UDP是一个很好的选择。
参考文献:
[1] 张桂珠.Java面向对象程序设计[M].北京:邮电出版社,2006.
[2] 周坤,傅德胜.基于Windows Socket的网络数据传输及其安全[J].计算机工程与设计,2007,28(22):5381-5386.
[3] 赵文清.浅析用Socket的Java语言网络通讯机制和程序设计[J].信息技术,2002(7):66-67.
udp协议范文第8篇
关键词:UDP 协议 FPGA
中图分类号:TP393 文献标识码:A 文章编号:1007-9416(2016)05-0000-00
传输控制协议/网际协议(Transmission Control Protocol/ Internet Protocol,TCP/IP)协议簇是Internet 和全球各地网络互联的引擎。本文针对网际层IP协议下的一项功能的实现,主要是针对从UDP协议下的数据包处理的过程。UDP是一个简单的面向数据报的运输层协议:进程的每个输出操作都正好产生一个UDP数据报,并组装成一份待发送的IP数据报。
1数据报处理方案
1.1端口设计
端口应该由外部端口和内部端口组成。外部端口是控制硬件(以FPGA为例),主要包括时钟输入信号和复位输入信号。内部端口为运输层与网络层相互联系为原则设计的,不仅需要数据输入输出,也需要这两个模块间的相互控制。具体内部端口主要包括数据输入输出信号及对应的数据同步信号,两个准备信号,两个IP地址输入信号和输入同步信号的结束信号。信号描述如下:
时钟信号(clk)、复位信号(res)、UDP准备信号(udprd)、输入数据信号(isd):、输入数据同步信号(iss)、输入数据结束信号(ise)、源IP地址(sipa):、目的IP地址(dipa)、IP准备信号(iprd)、输出数据信号(osd)、输出数据同步信号(oss)。
具体端口设置如图1:
1.2 功能模块
1.2.1 建立连接模块
运输层和网络层之间有很多协议,不同协议对应不同数据包,如何选择合适通路选择特定数据包,这就要求有特定的连接过程完成特定的数据传输。
为了建立UDP协议数据和IP数据之间的相互通信,在方案中,选择增添一个建立连接模块,目的是完成两个功能。首先是完成UDP协议下的数据在特定通道内向网络层的传输,其次是产生控制信号,控制下一模块工作状态。在此过程中,主要涉及到两个信号,其一是udprd信号,是建立连接第一步,这个信号旨在反映UDP数据报已经准备好发送;其二是iprd信号,建立连接第二步,本信号是为了给运输层的UDP协议的反馈信号,如果接到收此信号,UDP数据报就开始发送了。本信号还有一个功能:当网络层对数据处理时,此信号会自动变低电平,将不会接收UDP数据报,直到在网络层的数据处理完毕。
1.2.2 数据接收存储模块
在此模块下,可分为数据接收部分和数据的存储部分。
首先介绍一下数据的接收部分,当大量的数据报准备进入网络层时,有些数据是没有意义的,所以要准确有效的接收来自UDP协议下的数据报,需要在这一部分完成此功能。在端口的设置,增加了同步接收信号和终止信号,当同步信号有效,数据为有效数据,当终止信号有效,则一个完整的UDP数据包就发送完成了。
当大量的UDP数据包进入到IP协议下准备处理,而处理速度是远远小于接收的速度,会导致数据的滞留,甚至数据会丢失。为了解决该问题,增加了一个数据存储模块,把数据存储下来,弥补了处理速度和接收速度的不匹配。
此模块还额外的完成了一个功能:计数功能。在加I P数据头需要每一包UDP数据包字节的长度信息进行存储。
1.2.3 IP数据包头处理及发送模块
每一份的IP数据包都是有IP数据包头和对应的UDP数据包组合成的。需要将其对应封装。
当IP数据包头处理完成了,紧接任务就是将其发送出去。在发送完IP数据包头紧跟要发送其对应的UDP数据包,这就是一个完整的IP数据包。如果输出同步信号有效,这些处理好的数据将发送到数据链路层供其使用。
2方案综述
(1)运输层和网络层之间建立连接,保证数据准确无误差的传输到网络层,产生控制信号,控制数据的接收;产生反馈信号,保证运输层的UDP数据包适时的传送过来。(2)读取UDP数据包并准确的计数,将已读的数据存入缓存中,产生信号,控制IP头处理模块的启动,然后将必要数据传递到IP头处理模块。(3)处理数据,将对应的一包UDP数据产生相应的IP数据包头,形成一个IP数据包。然后将包头发送,产生输出的同步信号,之后产生信号读取缓存中的数据,通过输出端口将其发送出去。
这就是一个UDP数据包的处理过程,不断反复以上步骤,UDP数据段就转变成了IP数据段。
本方案增加了同步数据的输出信号,这就可以自由的控制输入输出数据,不会导致数据的意外丢失。而这些信号还可以支持数据间断输入,给运输层数据传输很大的灵活性;还增加了udp和iprd信号,它们完成这两个层连接,给数据传输提供良好的初始条件。
参考文献
[1]TCP-IP详解(中文).pdf.
[2]张帆.《基于FPGA的IP协议处理器》.湖南大学硕士论文.
udp协议范文第9篇
关键词:可靠UDP;确认重传;滑动窗口
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2015)09-0071-03
Abstract:In data transmission network, compared with the other protocol, UDP protocol has certain advantages in speed, but there is also the transmission reliability is poor and the problem of lack of congestion control mechanism in this paper, on the basis of the UDP protocol, by adding a simple three-way handshake, confirm the retransmission mechanism, the sliding window mechanism, designed a reliable transport protocol based on UDP, make it between the reliability and efficiency to achieve a good unity and compromise, and implementation of the agreement of the main module has made a detailed description and the actual test.
Key words: reliable UDP; confirm the retransmission; the sliding window
由于传统的数据传输协议所针对的业务不同,在数据传输的速度和可靠性之间不能达到很好的平衡。车险理赔系统中采用的是移动理赔的思想,手持终端机通过移动通信网络和后台中心系统进行数据交互。目前国内的通信事业并不是很发达,信号覆盖率并不全面,移动通信网络的带宽和传输质量会受到地域的影响,为确保理赔现场与后台系统间数据的及时可靠传输,需要基于移动通信的网络环境设计高效可靠的数据传输功能。本章在UDP传输协议基础上,通过应用层封装和可靠性设计的方法,采用数据包的确认重传、流量控制等机制,设计并实现基于UDP协议的可靠数据传输功能。
1 TCP与UDP的对比
TCP和UDP都属于传输层协议,负责承担数据传输的任务[1]。两者之间的主要区别有:
(1) TCP和UDP是传输层的两个协议,它们最大的区别是是否面向连接。TCP,在客户端和服务器端进行通信之前,首先要交换传输层控制信息,为双方的通信做好准备。UDP是一个非连接的协议,传输数据之前双方不建立连接,当传送数据时,简单的抓取来自应用程序的数据,并尽可能快的把数据传送到网络上。
(2) UDP协议的数据传输不需要维护收发状态和连接状态等,与TCP相比,网络有效利用率得到很大的提高。
(3) TCP协议提供数据确认重传、拥塞控制等可靠性保证,UDP协议不提供可靠性保证,也不提供流量控制。
TCP协议由于需要确认的状态和对数据包的操作过多,数据传输的速度不高且网络延迟较大,所以虽然协议可靠但并不适合面向移动通信的数据传输;而UDP协议由于不用建立连接,没有超时重发等可靠机制,网络延迟小且数据传输速度很快。本文设计的理赔系统面向移动通信网络实现理赔现场与后台系统间的数据传输,网络环境不如光纤接入网络稳定可靠,对数据的高效可靠传输有着很高的要求。因此,本章选用UDP协议,并在其基础上,设计了连接确认、数据确认等可靠机制,满足了系统对于高效可靠传输功能的需求。
2基于UDP 改进的可靠传输协议实现
2.1 主要功能模块及任务结构
综合文献【2】的可靠机制描述,可靠UDP数据传输协议的模块结构如图1所示。
从模块结构上看,本模块主要由以下几个任务实现模块功能:
? 通信处理模块
1) 发送方发起数据传输请求,三次握手成功后,发送方进入数据包封装模块。
2) 超时定时器的启动和关闭。
3) 当数据传输结束时,接收方向发送方主动发起传输结束的请求。
? 数据包封装/解析模块
1) 发送方将要发送的的数据按照协商大小分块,排序。
2) 发送方将分块的数据协商的数据报文结构封装成要发送的消息包。
3) 接收方读取数据包后根据协商的数据报文结构拆分数据包,根据数据包的类型读取信息。
? 消息发送/接收模块
1) 发送方判断发送队列和消息队列是否为空后,将要发送的数据包处理后发送。
2) 接收方从接收队列中读取数据包。
? 数据重组模块
1) 由于网络问题,发送方按序发送的数据包不一定会按序到达,所以接收方在经过数据包解析模块读取数据后,根据该消息的字节序号判断是否为乱序的分组。
2) 若是顺序的分组,将分组与以前收到的消息按序排列;若是要求重传的分组,将该分组放入到所应在的位置中。
3) 如果满足重发条件,则向发送方发送重发包请求。
2.2 核心事件处理流程
2.2.1 通信处理进程
通信处理模块中的通信处理进程主要负责三次握手的发起和确认的请求,数据传输结束后结束连接等任务。具体流程见图2。首先,通信的接收方发起握手的请求,即建立一个虚连接,双方必须确保该连接成功建立后才可以进行下一步数据传输的操作。然后,在接收方一端启动定时器,接收方的数据处理进程接收发送方发送的数据,同时接收方根据定时计时器发送反馈消息;或判断接收到的报文数,当达到数据包累积计数器设定的数值时,向发送方发送反馈消息。
2.2.2 发送方发送报文
数据报文的发送,主要是发送方向接收方发送数据报文和消息报文,流程如图3所示,具体的算法为:
if(发送队列非空)
{
从队列中取出消息;
if (消息类型为数据包)
发送数据包;
else 发送确认包;
}
else if (消息队列非空)
{
打包要发送的数据并将数据放入发送队列中;
套接口处当前序号加1;
}
3 实验结果与分析
3.1 开发环境
系统的编程实现是在Windows XP上进行的,使用的编程工具为Visual C++6.0。
3.2 系统测试
3.2.1 测试环境
本测试是是在无线通信网络下进行的,配置了两台计算机用作数据间收发的测试,操作系统为Windows XP。华为E261 3G上网卡两张,用于连接无线网络,测试拓扑结构如图4所示。
3.2.2 测试内容
本测试采用传输不同大小文件的方式来对数据速度进行测试,每次传输重复测试三次,然后取平均值作为参考数据,测试结果见表1和表2。其中,表1是在最大连接速率7.2Mbps环境下的测试结果,表2是在连接速率为2.2Mbps环境下的测试结果。
由表1可见,在移动通信的网络连接环境为7.2Mbps时,当传输1MB的数据时,TCP协议测试耗时9.75s,平均传输速度约为105KB/s;可靠UDP耗时8.25s,平均传输速度约为124KB/s。当传输数据为32MB时,TCP耗时295.89s,平均传输速度约为120KB/s;可靠UDP耗时197.05s平均传输速度约为168KB/s。
由表2可见,在移动通信的网络连接环境为2.2Mbps时,由于连接环境较差,测试文件并不大,当传输0..36s,平均传输速度约为21KB/s;可靠UDP耗时190.81s,平均传输速度约为43KB/s。
由此可得出:
(1) 可靠UDP传输协议的优势随着传输数据量的增大而越来越明显。
(2) 可靠UDP传输协议的优势随着网络环境的变差而越来越明显。
参考文献:
[1] Douglas er. 用TCP/IP进行网际互联――原理、协议与结构(第五版)[M]. 林瑶, 张娟, 王海,等译. 北京:电子工业出版社,2009.
[2] 王珏, 何秋燕, 王露凯.基于UDP 改进的可靠传输协议设计[J].电子世界,2014(22).
[3] 王继刚, 顾国昌, 徐立峰,等.可靠UDP数据传输协议的研究与设计[J].计算机工程与应用,2006(15):113-116.
[4] 靳海力.一种增强型可靠UDP的设计及应用[D].合肥:中国科学技术大学,2009.
本文链接:http://www.vanbs.com/v-141-2653.htmludp协议范文10篇
相关文章:
运动会入场仪式的口号10-26
唯美的名言名句摘抄12-14
经典幸福唯美说说感言09-28
简单的感伤句子07-22
上半年工作计划12-25
环境设计实习报告08-17
幼儿园游戏活动公开课总结08-16
运营工作计划07-20
师范专业求职信11-22
个人交通事故委托书08-16
商业计划书07-16
大学生培训学习心得11-18
2024年暑期幼师培训心得体会09-18
七夕抒情作文:紫薇花开12-17
梁上君子的哲理故事12-05
随笔―中秋-07-23
悼亡诗原文翻译及赏析08-02