新版UDP协议使用与分析研究汇编摘要:UDP协议是一种简洁、高效被广泛使用的协议。首先介绍了一种Windows环境下采用UDP协议的网络通信程序的设计方法,然后采用所设计的程序进行了通信试验。通过Sniffer软件捕获通信过程中的报文,对捕获的报文进行了详细分析,验证了网络模型及所介绍的网络通信程序,总结了UDP协议的优缺点。关键词:用户数据报协议;通信;报文分析;Sniffer中图分类号:TP312文献标识码:A文章编号:1009-3044(202x)13-3319-02UseUDPProtocolandAnalysisLIUPeng1,LIUYan2(puterScienceandInformationEngineeringCollege,GuangxiNormalUniversity,Guilin541004,China;2.AffiliatedHospitalofGuilinMedicalUniversity,TheOfficeofTeachingManagement,Guilin541001,China)Abstract:UDPprotocolisacompact,highlyefficientprotocolhasbeenwidelyused.ThemethodofhowtodesigncommunicationprogramwithUDPprotocolinwindowsoperatingsystemwasintroduced.Thentestcommunicationwiththeintroducedprogram.ThecapturedpacketsbySnifferincommunicationexperimentalwereanalyzedindetailtoverifythenetworkmodelandthenetworkcommunicationprogram,summeduptheadvantagesanddisadvantagesofUDPprotocol.Keywords:UDP;communication;packetanalysis;snifferUDP是UserDatagramProtocol的简称,是TCP/IP体系结构中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。UDP协议是IP协议与上层协议的接口,用端口号分别为运行在同一设备上的多个应用程序提供服务。它定义在IETFRFC768中[1]。UDP是分发信息的理想协议,适用于追求效率且不需要额外可靠机制的情形,如音、视频流媒体分发、高层协议或应用程序提供错误和流控制功能时的快速数据分发。UDP服务于很多知名应用,如网络文件系统(NFS)、简单网络管理协议(SNMP)、域名系统(DNS)以及简单文件传输系统(TFTP)、动态主机配置协议(DHCP)、路由信息协议(RIP)等。1UDP协议使用在Windows下使用UDP不需要实现RFC768中定义的UDP细节,封闭的Windows操作系统为用户实现了协议,以动态链接库及API的形式提供给用户程序调用。这种方式方便了程序设计,但也阻止了用户对网络协议的更深理解。为了更加深入研究UDP有必要对传输报文流进行分析;为了更好的分析,需要实现一个使用UDP的通信程序。在windows下选用VC6.0编译器。服务器端代码如下:WSADATAwsaData;interr;wVersionRequested=MAKEWORD(1,1);err=WSAStartup(wVersionRequested,if(err!=0){return;/*处理找不到WinSockDLL.*/}/*确认WinSockDLL支持的版本*/if(LOBYTE(wsaData.wVersion)!=1||HIBYTE(wsaData.wVersion)!=1){WSACleanup();return;}/*[3]以上代码为MSDN提供的设计windows下网络程序的标准方法*/SOCKETsockSrv=socket(AF_INET,SOCK_DGRAM,0);/*AF_INET因特网地址族UDP,TCP,等.SOCK_DGRAM基于upd的套接字。*/SOCKADDR_INaddrSrv;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*)/*绑定主机从6666端口接受数据*/if(err!=0){return;/*处理帮定异常*/}SOCKADDR_INaddrClient;intlen=sizeof(sockaddr);charrecvBuff[200];//接收缓存charsendBuff[200];//发送缓存chartempBuff[200];//暂时缓存while(1){recvfrom(sockSrv,recvBuff,200,0,(SOCKADDR*)//接收数据if('E'==recvBuff[0]){sendto(sockSrv,"E",strlen("E"),0,(SOCKADDR*)//发送数据printf("Communicationsend\n");break;}sprintf(tempBuff,"RecieveFromIP%s:%s",inet_ntoa(addrClient.sin_addr),recvBuff);//格式化printf("%s\n",tempBuff);printf("PleaseinputdatasendtoIP%s:\n",inet_ntoa(addrClient.sin_addr));gets(sendBuff);sendto(sockSrv,sendBuff,strlen(sendBuff)+1,0,(SOCKADDR*)}closesocket(sockSrv);WSACleanup();}客户端程序头文件及socket初始化和服务器端一样,不同的是socket函数的使用。//头文件和服务器端一样voidmain(){…//初始化和服务器端一样/*以上代码为MSDN提供的设计windo...