如何量測UDP packet的相关参数
23 telnet 25 smtp21 ftpudp packet udp 数据包 懂几英文自百度

udp是什么意思
UDP 是User Datagram Protocol的简称, 中文名是用户数据包协议,是 OSI 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。它是IETF RFC 768是UDP的正式规范。
http://baike.baidu.com/view/30509.htm?fr=ala0_1_1
UDP百科名片 UDP 是User Datagram Protocol的简称, 中文名是用户数据包协议,是 OSI 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。它是IETF RFC 768是UDP的正式规范。目录[隐藏]UDP报头UDP协议的几个特性[编辑本段]UDP报头UDP报头由4个域组成,其中每个域各占用2个字节,具体如下:源端口号目标端口号数据报长度校验值UDP协议使用端口号为不同的应用保留其各自的数据传输通道。UDP和TCP协议正是采用这一机制实现对同一时刻内多项应用同时发送和接收数据的支持。数据发送一方(可以是客户端或服务器端)将UDP数据报通过源端口发送出去,而数据接收一方则通过目标端口接收数据。有的网络应用只能使用预先为其预留或注册的静态端口;而另外一些网络应用则可以使用未被注册的动态端口。因为UDP报头使用两个字节存放端口号,所以端口号的有效范围是从0到65535。一般来说,大于49151的端口号都代表动态端口。数据报的长度是指包括报头和数据部分在内的总字节数。因为报头的长度是固定的,所以该域主要被用来计算可变长度的数据部分(又称为数据负载)。数据报的最大长度根据操作环境的不同而各异。从理论上说,包含报头在内的数据报的最大长度为65535字节。不过,一些实际应用往往会限制数据报的大小,有时会降低到8192字节。UDP协议使用报头中的校验值来保证数据的安全。校验值首先在数据发送方通过特殊的算法计算得出,在传递到接收方之后,还需要再重新计算。如果某个数据报在传输过程中被第三方篡改或者由于线路噪音等原因受到损坏,发送和接收方的校验计算值将不会相符,由此UDP协议可以检测是否出错。这与TCP协议是不同的,后者要求必须具有校验值。许多链路层协议都提供错误检查,包括流行的以太网协议,也许想知道为什么UDP也要提供检查和。其原因是链路层以下的协议在源端和终端之间的某些通道可能不提供错误检测。虽然UDP提供有错误检测,但检测到错误时,UDP不做错误校正,只是简单地把损坏的消息段扔掉,或者给应用程序提供警告信息。[编辑本段]UDP协议的几个特性(1) UDP是一个无连接协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。(2) 由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等,因此一台服务机可同时向多个客户机传输相同的消息。(3) UDP信息包的标题很短,只有8个字节,相对于TCP的20个字节信息包的额外开销很小。(4) 吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、源端和终端主机性能的限制。(5)UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态表(这里面有许多参数)。(6)UDP是面向报文的。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给IP层。既不拆分,也不合并,而是保留这些报文的边界,因此,应用程序需要选择合适的报文大小。虽然UDP是一个不可靠的协议,但它是分发信息的一个理想协议。例如,在屏幕上报告股票市场、在屏幕上显示航空信息等等。UDP也用在路由信息协议RIP(Routing Information Protocol)中修改路由表。在这些应用场合下,如果有一个消息丢失,在几秒之后另一个新的消息就会替换它。UDP广泛用在多媒体应用中,例如,Progressive Networks公司开发的RealAudio软件,它是在因特网上把预先录制的或者现场音乐实时传送给客户机的一种软件,该软件使用的RealAudio audio-on-demand protocol协议就是运行在UDP之上的协议,大多数因特网电话软件产品也都运行在UDP之上。 UDP = uridine diphosphate,尿苷二磷酸,一种嘧啶核苷酸,由碱基、尿嘧啶与核糖组成,主要用途是RNA合成(转录)时的原料。 另外UDP也是DTP能量消耗后产物,功能类似ADP,但较ADP少见。参与微生物肽聚糖等的合成。

VC实现最简单的UDP通信
http://hi.baidu.com/ypxmaomao/blog/item/1bd9ba95e3aa224cd0135ebf.html[文章信息] 作者:张晓明 杨建华 钱名海时间:2003-06-28出处:PCVC责任编辑:方舟 [文章导读] 在Windows 95环境下,基于TCP/IP协议,用Winsock完成了话音的一端—端传输摘要:在Windows 95环境下,基于TCP/IP协议,用Winsock完成了话音的端到端传输。采用双套接字技术,阐述了主要函数的使用要点,以及基于异步选择机制的应用方法。同时,给出了相应的实例程序。一、引言Windows 95作为微机的操作系统,已经完全融入了网络与通信功能,不仅可以建立纯Windows 95环境下的“对等网络”,而且支持多种协议,如TCP/IP、IPX/SPX、NETBUI等。在TCP/IP协议组中,TPC是一种面向连接的协义,为用户提供可靠的、全双工的字节流服务,具有确认、流控制、多路复用和同步等功能,适于数据传输。UDP协议则是无连接的,每个分组都携带完整的目的地址,各分组在系统中独立传送。它不能保证分组的先后顺序,不进行分组出错的恢复与重传,因此不保证传输的可靠性,但是,它提供高传输效率的数据报服务,适于实时的语音、图像传输、广播消息等网络传输。Winsock接口为进程间通信提供了一种新的手段,它不但能用于同一机器中的进程之间通信,而且支持网络通信功能。随着Windows 95的推出。Winsock已经被正式集成到了Windows系统中,同时包括了16位和32位的编程接口。而Winsock的开发工具也可以在Borland C++4.0、Visual C++2.0这些C编译器中找到,主要由一个名为winsock.h的头文件和动态连接库winsock.dll或wsodk32.dll组成,这两种动态连接库分别用于Win16和Win32的应用程序。本文针对话音的全双工传输要求,采用UDP协议实现了实时网络通信。使用VisualC++2.0编译环境,其动态连接库名为wsock32.dll。二、主要函数的使用要点通过建立双套接字,可以很方便地实现全双工网络通信。1.套接字建立函数:SOCKET socket(int family,int type,int protocol)对于UDP协议,写为:SOCKRET s;s=socket(AF_INET,SOCK_DGRAM,0);或s=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP)为了建立两个套接字,必须实现地址的重复绑定,即,当一个套接字已经绑定到某本地地址后,为了让另一个套接字重复使用该地址,必须为调用bind()函数绑定第二个套接字之前,通过函数setsockopt()为该套接字设置SO_REUSEADDR套接字选项。通过函数getsockopt()可获得套接字选项设置状态。需要注意的是,两个套接字所对应的端口号不能相同。 此外,还涉及到套接字缓冲区的设置问题,按规定,每个区的设置范围是:不小于512个字节,大大于8k字节,根据需要,文中选用了4k字节。2.套接字绑定函数int bind(SOCKET s,struct sockaddr_in*name,int namelen)s是刚才创建好的套接字,name指向描述通讯对象的结构体的指针,namelen是该结构体的长度。该结构体中的分量包括:IP地址(对应name.sin_addr.s_addr)、端口号(name.sin_port)、地址类型(name.sin_family,一般都赋成AF_INET,表示是internet地址)。(1)IP地址的填写方法:在全双工通信中,要把用户名对应的点分表示法地址转换成32位长整数格式的IP地址,使用inet_addr()函数。(2)端口号是用于表示同一台计算机不同的进程(应用程序),其分配方法有两种:1)进程可以让系统为套接字自动分配一端口号,只要在调用bind前将端口号指定为0即可。由系统自动分配的端口号位于1024~5000之间,而1~1023之间的任一TCP或UDP端口都是保留的,系统不允许任一进程使用保留端口,除非其有效用户ID是零(超级用户)。2)进程可为套接字指定一特定端口。这对于需要给套接字分配一众所端口的服务器是很有用的。指定范围为1024和65536之间。可任意指定。在本程序中,对两个套接字的端口号规定为2000和2001,前者对应发送套接字,后者对应接收套接字。端口号要从一个16位无符号数(u_short类型数)从主机字节顺序转换成网络字节顺序,使用htons()函数。根据以上两个函数,可以给出双套接字建立与绑定的程序片断。//设置有关的全局变量SOCKET sr,ss;HPSTR sockBufferS,sockBufferR;HANDLE hSendData,hReceiveData;DWROD dwDataSize=1024*4;struct sockaddr_in therel.there2;#DEFINE LOCAL_HOST_ADDR 200.200.200.201#DEFINE REMOTE_HOST-ADDR 200.200.200.202#DEFINE LOCAL_HOST_PORT 2000#DEFINE LOCAL_HOST_PORT 2001//套接字建立函数BOOL make_skt(HWND hwnd){struct sockaddr_in here,here1;ss=socket(AF_INET,SOCK_DGRAM,0);sr=socket(AF_INET,SOCK_DGRAM,0);if((ss==INVALID_SOCKET)||(sr==INVALID_SOCKET)){MessageBox(hwnd,“套接字建立失败!”,“”,MB_OK);return(FALSE);}here.sin_family=AF_INET;here.sin_addr.s_addr=inet_addr(LOCAL_HOST_ADDR);here.sin_port=htons(LICAL_HOST_PORT);//another socketherel.sin_family=AF_INET;herel.sin_addr.s_addr(LOCAL_HOST_ADDR);herel.sin_port=htons(LOCAL_HOST_PORT1);SocketBuffer();//套接字缓冲区的锁定设置setsockopt(ss,SOL_SOCKET,SO_SNDBUF,(char FAR*)sockBufferS,dwDataSize);if(bind(ss,(LPSOCKADDR)&here,sizeof(here))){MessageBox(hwnd,“发送套接字绑定失败!”,“”,MB_OK);return(FALSE);}setsockopt(sr SQL_SOCKET,SO_RCVBUF|SO_REUSEADDR,(char FAR*)sockBufferR,dwDataSize);if(bind(sr,(LPSOCKADDR)&here1,sizeof(here1))){MessageBox(hwnd,“接收套接字绑定失败!”,“”,MB_OK);return(FALSE);}return(TRUE);}//套接字缓冲区设置void sockBuffer(void){hSendData=GlobalAlloc(GMEM_MOVEABLE|GMEM_SHARE,dwDataSize);if(!hSendData){MessageBox(hwnd,“发送套接字缓冲区定位失败!”,NULL,MB_OK|MB_ICONEXCLAMATION);return;}if((sockBufferS=GlobalLock(hSendData)==NULL){MessageBox(hwnd,“发送套接字缓冲区锁定失败!”,NULL,MB_OK|MB_ICONEXCLAMATION);GlobalFree(hRecordData[0];return;}hReceiveData=globalAlloc(GMEM_MOVEABLE|GMEM_SHARE,dwDataSize);if(!hReceiveData){MessageBox(hwnd,"“接收套接字缓冲区定位败!”,NULLMB_OK|MB_ICONEXCLAMATION);return;}if((sockBufferT=Globallock(hReceiveData))=NULL)MessageBox(hwnd,"发送套接字缓冲区锁定失败!”,NULL,MB_OK|MB_ICONEXCLAMATION);GlobalFree(hRecordData[0]);return;}{3.数据发送与接收函数;int sendto(SOCKET s.char*buf,int len,int flags,struct sockaddr_in to,inttolen);int recvfrom(SOCKET s.char*buf,int len,int flags,struct sockaddr_infron,int*fromlen)其中,参数flags一般取0。recvfrom()函数实际上是读取sendto()函数发过来的一个数据包,当读到的数据字节少于规定接收的数目时,就把数据全部接收,并返回实际接收到的字节数;当读到的数据多于规定值时,在数据报文方式下,多余的数据将被丢弃。而在流方式下,剩余的数据由下recvfrom()读出。为了发送和接收数据,必须建立数据发送缓冲区和数据接收缓冲区。规定:IP层的一个数据报最大不超过64K(含数据报头)。当缓冲区设置得过多、过大时,常因内存不够而导致套接字建立失败。在减小缓冲区后,该错误消失。经过实验,文中选用了4K字节。此外,还应注意这两个函数中最后参数的写法,给sendto()的最后参数是一个整数值,而recvfrom()的则是指向一整数值的指针。4.套接字关闭函数:closesocket(SOCKET s)通讯结束时,应关闭指定的套接字,以释与之相关的资源。在关闭套接字时,应先对锁定的各种缓冲区加以释放。其程序片断为:void CloseSocket(void){GlobalUnlock(hSendData);GlobalFree(hSenddata);GlobalUnlock(hReceiveData);GlobalFree(hReceiveDava);if(WSAAysncSelect(ss,hwnd,0,0)=SOCKET_ERROR){MessageBos(hwnd,“发送套接字关闭失败!”,“”,MB_OK);return;}if(WSAAysncSelect(sr,hwnd,0,0)==SOCKET_ERROR){MessageBox(hwnd,“接收套接字关闭失败!”,“”,MB_OK);return;}WSACleanup();closesockent(ss);closesockent(sr);return;}三、Winsock的编程特点与异步选择机制1 阻塞及其处理方式在网络通讯中,由于网络拥挤或一次发送的数据量过大等原因,经常会发生交换的数据在短时间内不能传送完,收发数据的函数因此不能返回,这种现象叫做阻塞。Winsock对有可能阻塞的函数提供了两种处理方式:阻塞和非阻塞方式。在阻塞方式下,收发数据的函数在被调用后一直要到传送完毕或者出错才能返回。在阻塞期间,被阻的函数不会断调用系统函数GetMessage()来保持消息循环的正常进行。对于非阻塞方式,函数被调用后立即返回,当传送完成后由Winsock给程序发一个事先约定好的消息。在编程时,应尽量使用非阻塞方式。因为在阻塞方式下,用户可能会长时间的等待过程中试图关闭程序,因为消息循环还在起作用,所以程序的窗口可能被关闭,这样当函数从Winsock的动态连接库中返回时,主程序已经从内存中删除,这显然是极其危险的。2 异步选择函数WSAAsyncSelect()的使用Winsock通过WSAAsyncSelect()自动地设置套接字处于非阻塞方式。使用WindowsSockets实现Windows网络程序设计的关键就是它提供了对网络事件基于消息的异步存取,用于注册应用程序感兴趣的网络事件。它请求Windows Sockets DLL在检测到套接字上发生的网络事件时,向窗口发送一个消息。对UDP协议,这些网络事件主要为:FD_READ 期望在套接字收到数据(即读准备好)时接收通知;FD_WRITE 期望在套接字可发送数(即写准备好)时接收通知;FD_CLOSE 期望在套接字关闭时接电通知消息变量wParam指示发生网络事件的套接字,变量1Param的低字节描述发生的网络事件,高字包含错误码。如在窗口函数的消息循环中均加一个分支:int ok=sizeof(SOCKADDR);case wMsg;switch(1Param){case FD_READ://套接字上读数据if(recvfrom(sr.lpPlayData[j],dwDataSize,0,(struct sockaddr FAR*)&there1,(int FAR*)&ok)==SOCKET_ERROR0{MessageBox)hwnd,“数据接收失败!”,“”,MB_OK);return(FALSE);}case FD_WRITE://套接字上写数据}break;在程序的编制中,应根据需要灵活地将WSAAsyncSelect()函灵敏放在相应的消息循环之中,其它说明可参见文献[1]。此外,应该指出的是,以上程序片断中的消息框主要是为程序调试方便而设置的,而在正式产品中不再出现。同时,按照程序容错误设计,应建立一个专门的容错处理函数。程序中可能出现的各种错误都将由该函数进行处理,依据错误的危害程度不同,建立几种不同的处理措施。这样,才能保证双方通话的顺利和可靠。四、结论 本文是多媒体网络传输项目的重要内容之一,目前,结合硬件全双工语音卡等设备,已经成功地实现了话音的全双工的通信。有关整个多媒体传输系统设计的内容,将有另文叙述。

UDP吞吐量是指什么?
1、UDP吞吐量:UDP吞吐量也能够表示基本的网络性能。但一般情况下,特别是在10G网络中,UDP吞吐量要比TCP吞吐量稍低,这是因为UDP协议栈并没有像TCP协议栈那样得到很好的优化。并且TCP和UDP数据包产生机制也有所不同,应用程序产生UDP数据包是以kB为单位,而网卡转发TCP数据是以MB为单位进行的。该测试项采用udp_throughput.scr的测试脚本。2、
吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、源端和终端主机性能的限制。
(5)UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态表(这里面有许多参数)。
(6)UDP是面向报文的。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给IP层。既不拆分,也不合并,而是保留这些报文的边界,因此,应用程序需要选择合适的报文大小。
虽然UDP是一个不可靠的协议,但它是分发信息的一个理想协议。例如,在屏幕上报告股票市场、在屏幕上显示航空信息等等。UDP也用在路由信息协议RIP(Routing Information Protocol)中修改路由表。在这些应用场合下,如果有一个消息丢失,在几秒之后另一个新的消息就会替换它。

TCP与UDP协议有什么不同
TCP与UDP协议有什么不同现在Internet上流行的协议是TCP/IP协议,该协议中对低于1024的端口都有确切的定义,他们对应着Internet上一些常见的服务。下面我为大家分享一些TCP与UDP协议有什么不同,欢迎大家参考!一、TCP协议简介TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂,只简单的描述下这三次对话的简单过程:主机A向主机B发出连接请求数据包:“我想给你发数据,可以吗?”,这是第一次对话;主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工作)的数据包:“可以,你什么时候发?”,这是第二次对话;主机A再发出一个数据包确认主机B的要求同步:“我现在就发,你接着吧!”,这是第三次对话。三次“对话”的目的是使数据包的发送和接收同步,经过三次“对话”之后,主机A才向主机B正式发送数据。TCP的三次握手过程如下:1. 主机A通过向主机B发送一个含有同步序列号的标志位的数据段给主机B ,向主机B请求建立连接,通过这个数据段,主机A告诉主机B 两件事:我想要和你通信;你可以用哪个序列号作为起始数据段来回应我。2. 主机B收到主机A的请求后,用一个带有确认应答(ACK)和同步序列号(SYN)标志位的数据段响应主机A,也告诉主机A两件事:我已经收到你的请求了,你可以传输数据了;你要用哪佧序列号作为起始数据段来回应我。3. 主机A收到这个数据段后,再发送一个确认应答,确认已收到主机B 的数据段:“我已收到回复,我现在要开始传输实际数据了。这样3次握手就完成了,主机A和主机B就可以传输数据了。TCP建立连接要进行3次握手,而断开连接要进行4次。1. 当主机A完成数据传输后,将控制位FIN置1,提出停止TCP连接的请求;2. 主机B收到FIN后对其作出响应,确认这一方向上的TCP连接将关闭,将ACK置1;3. 由B端再提出反方向的关闭请求,将FIN置1;4. 主机A对主机B的请求进行确认,将ACK置1,双方向的关闭结束。由TCP的三次握手和四次断开可以看出,TCP使用面向连接的通信方式,大大提高了数据通信的可靠性,使发送数据端和接收端在数据正式传输前就有了交互,为数据正式传输打下了可靠的基础。二、UDP协议简介UDP(User Data Protocol)——用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。UDP协议具有如下几个特点:(1)UDP是一个非连接的协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。(2)由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等,因此一台服务机可同时向多个客户机传输相同的消息。(3)UDP信息包的标题很短,只有8个字节,相对于TCP的20个字节信息包的额外开销很小。(4)吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、源端和终端主机性能的限制。(5)UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的`链接状态表(这里面有许多参数)。(6)UDP是面向报文的。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给IP层。既不拆分,也不合并,而是保留这些报文的边界,因此,应用程序需要选择合适的报文大小。我们经常使用“ping”命令来测试两台主机之间TCP/IP通信是否正常,其实“ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。三、TCP与UDP区别总结1. TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接;2. TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,也不保证可靠交付;3. TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的;4. UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等);5. 每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信;6. TCP首部开销20字节;UDP的首部开销小,只有8个字节;7. TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道。四、应用场合UDP适用于不需要TCP可靠机制的情形,比如,当高层协议或应用程序提供错误和流控制功能的时候,UDP是传输层协议,服务于很多知名应用层协议,包括网络文件系统(NFS)、简单网络管理协议(SNMP)、域名系统(DNS)以及简单文件传输系统(TFTP)。比如,日常生活中,常见使用UDP协议的应用如下: QQ语音、QQ视频、TFTP ……。TCP是一种面向连接的、可靠的、基于字节流的运输层通信协议,通常由IETF的RFC793说明。在简化的计算机网络OSI模型中,它完成运输层所指定的功能。一些要求比较高的服务一般使用这个协议,如FTP、Telnet、SMTP、HTTP、POP3等。 ;

本文由 在线网速测试 整理编辑,转载请注明出处。