文档库 最新最全的文档下载
当前位置:文档库 › 一种基于UDP的可靠传输协议分析与研究

一种基于UDP的可靠传输协议分析与研究

一种基于UDP的可靠传输协议分析与研究

3

王海军, 刘彩霞, 程东年

(国家数字交换系统工程技术研究中心,河南郑州450002)

摘要: 提出了一种基于UDP协议的简单可靠传输协议SRUDP,分析了SRUDP协议

的基本原理,着重阐述了

SRUDP的内部机制,包括证实机制、重发机制以及序号强制对齐机制。最后研究了SRUDP协议中各种重要参

数的设置,为具有可靠性要求高的业务应用提供了参考依据。

关键词: SRUDP; 传输可靠性; 证实机制; 重发机制

中图法分类号: TP30217 文献标识码: A文章编号: 100123695 (2005) 1120181203

Analysis and Research of a Reliable Transmission Protocol Based on UDP WANG Hai2jun, L IU Cai2xia, CHENG Dong2nian

(N ational D igital Sw itching System Engineering & Technological R&D Center, Zhengzhou Henan 450002, China)

Abstract: This paper p resents a simp le reliable transport p rotocol: SRUDP, based on UDP1With its fundamental being ana2

lyzed ,we emphasize to introduce the inside mechanism of SRUDP, including packet confirming mechanism, retransmission

mechanism and sequence aligningmechanism1 In the end, we discuss how to set the important parameters in SRUDP, which

p resents a reference to the reliable service app lication1

Key words: Simp le Reliable UDP; Transmission Reliability; ConfirmingMechanism; RetransmissionMechanism

传输控制协议( TCP)是面向连接的协议,也就是说,在正

式收发数据前,必须和对方建立可靠的通信连接。用户数据包

协议(UDP)是与TCP相对应的、面向非连接的协议,它不与对

方建立连接,而直接就把数据包发送过去。由于UDP协议没

有连接的过程,所以它的通信效率高,也因此大大降低了它的

可靠性。UDP适用于对可靠性要求不高的应用环境。

随着网络传输业务的快速发展,在某些对可靠性和高效性

要求都较高的应用环境中,如移动计算环境, TCP和UDP不能

很好地满足应用需求,这就需要能够兼顾可靠性和高效性的传

输层协议。而RUDP (Reliable UDP)协议虽然能够保证通信传

输的可靠性,但是它有六个字节的协议头,协议头较长,可靠传

输的控制机制较为复杂。为此,提出了一种自定义的、为UDP

引入多种可靠传输机制的简化协议SRUDP ( Simp le Reliable

UDP) ,分析了SRUDP的协议头结构以及各种控制机制,并研

究了SRUDP中各种重要参数的设置,为具有可靠性要求高的

业务应用提供了参考依据。

1SRUDP的基本原理

SRUDP协议基于UDP之上,它有两个字节的协议头,为

一个字节的前向序号与一个字节的后向序号。前向序号表示

期望下一次对方发送的SRUDP包序号,后向序号表示带给对

方的证实序号。围绕这两个字节的协议头, SRUDP协议采用

了一套简单而有效的机制来实现通信双方的可靠传输。协议

头结构如图1所示。

SRUDP协议引入证实机制、重发机制以及序号强制对齐

机制来保证SRUDP信件的可靠传输。为引入证实机制,定义

了逻辑上的一个待证实队列。另外,为了实现重发,引入了一

个SRUDP发送缓冲区用于缓存还未得到证实的消息和由于待

证实队列已满时,缓存应用层所要发送的消息,如图2所示。

SRUDP协议具有几条基本原则: ①收到对方的证实序号

后,将该序号以前的位于待证实队列中的所有SRUDP序号一

起予以证实; ②已经被证实掉的SRUDP包将从SRUDP发送缓

冲区中去除; ③待证实队列已满时,只将所要发送的SRUDP包

缓存到SRUDP的发送缓冲区中,而不进行发送。

2SRUDP的机制分析

SRUDP有着多种相互配合的机制,如证实机制、重发机制

以及序号对齐机制等。这些机制组合起来,为SRUDP的可靠

传输奠定了基础。

211SRUDP的证实机制

因为通信双方存在着多种情况的通信,所以在考虑证实机

制的时候,为使尽快得到证实而提高SRUDP的效率,引入多种

第11期王海军等:一种基于UDP的可靠传输协议分析与研究·1 81 ·

? 1994-2009 China Academic Journal Electronic Publishing House. All rights reserved. https://www.wendangku.net/doc/4b7753144.html,

证实机制,即SRUDP包证实、定时插入证实、多包插入证实。

(1) SRUDP包证实。它指通信双方采用SRUDP协议相互

给对方发送需要可靠传输的消息时,传输过程中的每一个

SRUDP包(消息)自身都带有给对方的证实信息,在SRUDP包

头中后向序号就是带给对方的证实序号。SRUDP包证实机制

如图3 ( a)所示。

(2)定时插入证实。它指通信一方在收到另一方发送的

一个SRUDP消息时,就会检查是否启动了一个名为插入证实

定时器,如果没有启动,就会启动这个定时器;如果在这个定时

器超时,还没有其他证实机制起作用向对方发送证实信息,那

么就会专门插入一个证实信件向对方发送证实信息;同时该定

时器归0。定时插入证实机制如图3 ( b)所示。

可知,这种机制主要用于单向可靠通信(如图3 ( b)中,只

有A端给B端发送SRUDP消息)时发送端得到证实的需要。

(3)多包插入证实。它指通信双方在进行SRUDP通信

时,都用一个计数器记录各自收到的SRUDP消息数,如果在这

个计数器到达一个规定数值前,还没有其他证实机制起作用向

对方发送证实信息,那么就会专门插入一个证实信件向对方发

送证实信息;同时该计数器归0。多包插入证实机制如图3 ( c)

所示。

显然这种机制也用于单向可靠通信(如图3 ( c)中,只有A

端给B端发送SRUDP消息)时发送端得到证实的需要。

多包插入证实机制与定时插入证实机制是相互配合的。

如果没有多包插入证实机制,在插入证实定时器时长时间内,如果通信一方(如A端)有大量的SRUDP消息发送给对方(如B端) ,那么显然在定时器超时之前,A端由于待证实队列得不到B端的证实而无法发送大量的SRUDP消息(此时待证

实队列已填满) ,只有等到B端定时器超时之后才能得到B端的证实而将待证实队列证实掉,然后才能发送SRUDP包。这

显然降低了发送效率。而引入多包插入证实机制之后,B端在收到一定数量的SRUDP包之后就会给A端证实,这显然能够

大大提高这种情况下的SRUDP发送效率。也就是说,在这种

情况下,通常都是多包插入证实定时器起作用。

如果通信一方(如A端)只有很少量的SRUDP消息发送

给对方(如B端) ,如几秒钟只有一个SRUDP包,这种情况下

如果没有定时插入证实机制,那么B端要等到收到多包、计数器达到规定数值之后才给A端证实,这种证实时间间隔是无

法忍受的,所以这种情况下,定时插入证实机制起到快速给出证实的作用。

这三种证实机制中, SRUDP包证实机制优先级最高,而多

包插入证实机制和定时插入证实机制优先级稍低。一般情况下,通信双方采用SRUDP包证实机制,互相发送SRUDP包带

给对方证实信息。无论通过何种方式给对方证实,都将停止插入证实定时器和将接收包数计数器清0。

212SRUDP的重发机制

SRUDP的重发机制是为了保证可靠性,如果通信一方一

直得不到对方的证实消息,就需要将SRUDP待证实队列中的

消息全部重发。因为从理论上讲,通信对端可能会因为种种原因没有收到发送端发送的SRUDP包。引入了两种重发机制: (1)自动重发机制。该机制如图4 ( a)所示。通信双方各

维持一个自动重发定时器,通信一方在给对端发送SRUDP消

息时,检查自动重发定时器是否启动,如果没有启动,就会启动这个定时器。如果在规定时间内没有收到来自对端的任何证实信息,将这个定时器归0,并将SRUDP待证实队列中的所有SRUDP消息重发一遍,重发次数加1。如果在规定时间内依然没有收到对方的任何证实信息,则重将定时器归0、执行重发操作和将重发次数加1,如果重发次数到达指定次数,把第一个存放于SRUDP缓冲区的SRUDP包删除,置重发次数为0,

重发定时器为0。显然,此后,如果自动重发定时器又超时,将会再次进行重发,直到收到对方的一个证实,然后停止自动重发定时器,将重发次数清0。

(2)请求重发机制。该机制如图4 ( b)所示。通信双方都

记录着期望下一次对方发送的SRUDP包序号,如果接收方收

到的SRUDP消息的前向序号不是自己所期望的序号时,接收

方将会向发送方发送一条请求重发消息,请求从自己期望的序

号开始进行重发。发送方收到这个请求重发消息后,将立即进

行重发。该机制主要用于处理SRUDP消息包乱序的情况。

213序号强制对齐机制

序号强制对齐机制如图5所示。在SRUDP消息的通信过

程中,可能由于种种原因导致通信双方的SRUDP序号对不齐

·182·计算机应用研究2005年

? 1994-2009 China Academic Journal Electronic Publishing House. All rights reserved. https://www.wendangku.net/doc/4b7753144.html,__(这种情况发生的概率比较小) ,这时候就必须有一种机制,使

得双方能够迅速对齐序号,并开始正常的SRUDP通信。这就

是序号强制对齐机制引入的原因。可知,序号强制对齐机制是

与请求重发机制配合使用的。

214各种机制的调用

在SRUDP的机制中,有的机制需要应用层的调用,而有的

则是在网络任务中予以调用。定时插入证实机制与自动重发

机制的实现需要应用层周期性的扫描、检查插入证实定时器和

自动重发定时器。所以这两种机制离不开应用程序的调用。

应用层往往通过提供调用函数来实现对这两种机制的调用。

而多包插入证实机制,请求重发机制以及序号强制对齐机制都

是直接在网络任务中被调用。

3SRUDP中各种参数的设置

SRUDP协议内的各种机制之间,相互有着联系,并且各种

机制参数的设置,直接影响到SRUDP协议的效率。

(1)待证实队列长度的大小。首先确定SRUDP协议中待

证实队列长度的大小。因为待证实队列是用序号来标志的,而

前向序号和后向序号都是用来携带消息在待证实队列中的序

号,所以前向序号与后向序号的范围就是待证实队列的范围。

因为前向序号与后向序号都是用一个字节来表示,一个字节所

能表示的范围为0~255,所以,待证实队列的范围必须在这个

范围内。目前待证实队列大小的缺省值为128,即前向序号与

后向序号的范围为0~127。

(2)发送缓冲区的大小。发送缓冲区的作用是用于存储

已经发送,但尚未得到证实的SRUDP消息,另外还有缓存应用

层需要发送的SRUDP消息。所以发送缓冲区大小的设定也会

影响到SRUDP的效率。发送缓冲区大小的设置要求是大于

0,应用层可以根据需要自由设置发送缓冲区的大小,它的缺省

值为128。但如果短时间内SRUDP通信量比较大,需要增大

这个缓冲区;如果SRUDP通信量很小,并且不会有突发,这个

发送缓冲区可以大大减少,甚至为1。

(3)几种带有定时器机制的参数设定。在SRUDP的机制

中,定时插入证实机制、自动重发机制以及序号强制对齐机制

均设有定时器。各种定时器时长的设定是相互关联的。

自动重发定时器是发送SRUDP消息的一方在未收到对方

的证实消息时启动的。考虑这个自动重发定时器的时长应大

于插入证实定时器时长,即在发送方自动重发机制起作用前,

确保接收方发送两个以上的定时插入证实,这样可以有效防止

一个证实消息的丢失。自动重发定时器的时长缺省设置为

600ms,而插入证实定时器的时长缺省值为200ms。

而序号强制对齐机制中的请求重发定时器的时长则是为

了保证在这个时长范围内, 收到请求重发的一方重发的

SRUDP消息可以到达请求方。同时要在被请求方的自动重发

机制起作用前将序号对齐。目前这个定时器时长的缺省值为

100ms。

对于自动重发机制的重发次数,缺省设置为2,也就是说,

SRUDP消息将在网络环境最恶劣的情况下保证所有SRUDP

包发送三遍。

在一般的通信网络中,各个定时器时长以及重发次数处于

缺省状态时, SRUDP重发效率最高,平均重发次数最少。

(4)多包插入证实机制的包数设定。多包插入证实机制

的包数(计数器规定值)也是提高SRUDP效率的一个机制,由

于前面已经确定SRUDP的待证实队列长度缺省为128,所以

为加速对待证实队列的证实,这个包数应该小于待证实队列的

长度。当然,如果这个包数大于待证实队列长度也不会影响到

多包插入证实机制,但由于小于128的话可以保证在发送端的

待证实队列没有填满时,对方会给出插入证实从而使待证实队

列及时得到证实。目前该包数的缺省值为100ms。在一般的

网络环境中,计数器包数以及待证实队列大小取缺省值时,

SRUDP证实效率最高,平均证实时间最短。

4结束语

针对UDP协议传输可靠性不高的问题,本文提出了一种

基于UDP的简单可靠传输协议SRUDP,分析了SRUDP的基本

原理,并引入多种证实、重发机制保证了SRUDP传输的可靠

性。SRUDP拥有TCP的可靠性和UDP的高效性,适合大多数

需要兼顾可靠性和高效性的应用场合。由于SRUDP只有两个

字节的协议头,控制简单、简洁灵活、易于使用。研究SRUDP

中各种参数的设置能够有效提高SRUDP通信效率,为基于

SRUDP协议的业务应用提供了参考依据。而如何使那些受环

境变化影响较大的参数根据网络链路状况进行动态自适应调

整,将是下一步研究的重点。

参考文献:

[ 1 ] J Postel. UserDatagram Protocol[ EB /OL ]. http: / /www. faqs. org/ rf2

cs/ rfc768. html, RFC 768, 1980.

[ 2 ] Wilson Boulevard. Transmission Control Protocol[ EB /OL ]. http: / /

www. faqs. org/ rfcs/ rfc793. html, RFC 793, 1981.

[ 3 ] T Bova, T Krivoruchka. Reliable UDP Protocol [ EB /OL ]. http: /

/

www. javvin. com /p rotocol / reliable2udp. pdf, 1999.

[ 4 ] H Schulzrinne, S Casner, V Jacobson. RTP: A Transport Protocol for Real2time App lications [ EB /OL ]. http: / /www. faqs. org/ rfcs/

rfc3550. html, RFC 3550, 2003.

[ 5 ] Douglas E Comer. 用TCP / IP进行网际互连(第1卷) :原理协议与

结构(第4版) [M ]. 林瑶,蒋慧,杜蔚轩,等. 北京: 电子工业出

版社, 2001.

作者简介:

王海军(19792) ,男,硕士生,研究方向为计算机通信与网络协议;刘彩

霞(19742) ,女,讲师,研究方向为第三代移动通信; 程东年( 19572) ,

男,教授,主要研究方向为高性能网络及服务质量。

TCP和UDP协议简介

TCP和UDP协议简介 从专业的角度说,TCP的可靠保证,是它的三次握手机制,这一机制保证校验了数据,保证了他的可靠性。而UDP就没有了,所以不可靠。不过UDP的速度是TCP比不了的,而且UDP的反应速度更快,QQ就是用UDP协议传输的,HTTP是用TCP协议传输的,不用我说什么,自己体验一下就能发现区别了。再有就是UDP和TCP的目的端口不一样(这句话好象是多余的),而且两个协议不在同一层,TCP在三层,UDP不是在四层就是七层。TCP/IP协议介绍 TCP/IP的通讯协议 这部分简要介绍一下TCP/IP的内部结构,为讨论与互联网有关的安全问题打下基础。TCP/IP协议组之所以流行,部分原因是因为它可以用在各种各样的信道和底层协议(例如T1和X.25、以太网以及RS-232串行接口)之上。确切地说,TCP/IP协议是一组包括TCP 协议和IP协议,UDP(User Datagram Protocol)协议、ICMP(Internet Control Message Protocol)协议和其他一些协议的协议组。 TCP/IP整体构架概述 TCP/IP协议并不完全符合OSI的七层参考模型。传统的开放式系统互连参考模型,是一种通信协议的7层抽象的参考模型,其中每一层执行某一特定任务。该模型的目的是使各种硬件在相同的层次上相互通信。这7层是:物理层、数据链路层、网路层、传输层、话路层、表示层和应用层。而TCP/IP通讯协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。这4层分别为: 应用层:应用程序间沟通的层,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。 传输层:在此层中,它提供了节点间的数据传送服务,如传输控制协议(TCP)、用户数据报协议(UDP)等,TCP和UDP给数据包加入传输数据并把它传输到下一层中,这一层负责传送数据,并且确定数据已被送达并接收。 互连网络层:负责提供基本的数据封包传送功能,让每一块数据包都能够到达目的主机(但不检查是否被正确接收),如网际协议(IP)。 网络接口层:对实际的网络媒体的管理,定义如何使用实际网络(如Ethernet、Serial Line 等)来传送数据。 TCP/IP中的协议 以下简单介绍TCP/IP中的协议都具备什么样的功能,都是如何工作的: 1.IP 网际协议IP是TCP/IP的心脏,也是网络层中最重要的协议。 IP层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层---TCP或UDP层;相反,IP层也把从TCP或UDP层接收来的数据包传送到更低层。IP数据包是不可靠的,因为IP并没有做任何事情来确认数据包是按顺序发送的

TCP-UDP协议

第7章TCP/UDP协议 主要内容 1.TCP协议基本原理。 2.UCP协议基本原理。 https://www.wendangku.net/doc/4b7753144.html,sat实验。 能力要求 1.理解传输层在OSI体系结构中的地位和作用。 2.了解传输层如何保证通信服务的可靠性。 3.掌握TCP/UDP协议基本原理和报文数据结构。 因为世界上各种通信子网在性能上存在着很大差异,例如电话交换网、分组交换网、公用数据交换网,局域网等通信子网等,但网络的互联互通的特性决定了它们必须互连,而它们提供的吞吐量、传输速率、数据延迟通信费用各不相同,但对于会话层来说,却要求有一性能恒定的界面,传输层就承担了这一功能。传输层(Transport Layer)是OSI体系结构中重要、关键的一层,负责总体的数据传输和数据控制。传输层提供端到端的交换数据的机制。传输层对会话层等高三层提供可靠的传输服务,对网络层提供可靠的目的地站点信息。传输层协议主要包括TCP/UDP协议。它屏蔽了网络底层技术的差异,使会话层感受不到各种通信子网在技术标准和网络结构上的区别。此外传输层还要具备差错恢复,流量控制等功能。传输层面对的数据对象已不是网络地址和主机地址,而是端口。 传输层的最终目的是为会话提供可靠的、无误的数据传输。传输层的服务一般要经历传输连接建立阶段、数据传送阶段、传输连接释放阶段3个阶段才算完成一个完整的服务过程。在数据传输过程中,传输层要保证提供通信服务的可靠性,避免报文的出错、丢失、延迟时间紊乱、重复、乱序等差错。 7.1 传输层功能概述 传输层也称为运输层,是介于低3层通信子网系统和高3层之间的一层,是源端到目的端对数据传送进行控制从低到高的最后一层。 传输层功能的目的是为会话提供可靠、无误的数据传输服务。传输层的服务一般要经历传输连接建立阶段、数据传送阶段、传输连接释放阶段3个阶段才算完成一个完整的服务过程。为完成这一服务,传输层要具备以下基本功能: 199

UDP协议设计与实现

udp协议设计与实现 一、网络协议栈结构 二、UDP协议功能 无连接传输: 不保证端到端数据传输的可靠性, 一定程度上保证了数据传输实时性, 适合多媒体数据传输. 三、UDP协议设计 1.UDP协议语法

用户数据报: UDP首部+数据,以字节为单位; 其中首部最小为8个字节,包含4个字段; 源端口号:2个字节,发送方应用层协议进程编号; 目的端口号:2个字节,接收方应用层协议进程编号; 长度:UDP首部+数据长度。 校验和:2个字节,伪首部+首部+数据 端口号理解 服务器端口号 周知端口号:数值一般为0~1023。 注册端口号:数值为1024~49151,为没有熟知端口号的应用服

务器程序使用;这个范围的端口号必须在IANA 登记,以防止重复使用。 客户端口号(或动态端口号):数值为49152~65535,留给客户应用程序暂时使用,由操作系统临时分配。 当服务器进程收到客户进程的报文时,就知道了客户进程所使用的动态端口号;通信结束后,客户端口号立即释放,可供其他客户程序以后使用。 四、UDP协议语义 五、UDP协议时序关系 发送方接收方

UDP报文 UDP报文 发送方或接收方可以随时发送UDP报文给对方。 接收到UDP报文后,检查校验和,如果错误直接丢弃,然后不做任何处理;再检查目的端口号,如果目的端口号对应的上层进程接收队列存在,则接收;否则调用ICMP协议发送端口不可达ICMP差错报告。 五、UDP协议实现 发送方:transport_udp_send.cpp (.h) 定义一个UDP协议数据单元数据结构 定义变量: Struct source_address { Source_ip; Source_port; } Source_port = ; server_port =; Source_address= ;

UDP协议代码

服务端 // server.cpp : 定义控制台应用程序的入口点。 #include "stdafx.h" #pragma comment(lib,"ws2_32.lib") #include #include #include #define MAX_BUF 65536 int _tmain(int argc, _TCHAR* argv[]) { WSAData wsaData; int err = WSAStartup(WINSOCK_VERSION,&wsaData); if(0!=err){return -1;} SOCKET sock; sock = socket(AF_INET, SOCK_DGRAM, 0); if(INV ALID_SOCKET==sock) {printf("socket() Failed: %d\n",WSAGetLastError()); WSACleanup();return -1;} sockaddr_in LocaAddr; LocaAddr.sin_family = AF_INET; LocaAddr.sin_port = htons(10000); LocaAddr.sin_addr.s_addr=htonl(INADDR_ANY); err = bind(sock, (sockaddr *)&LocaAddr, sizeof(LocaAddr)); if(SOCKET_ERROR==err) //出错处理 {printf("bind() Failed: %d\n",WSAGetLastError()); closesocket(sock);WSACleanup();return -1;} char rbuf[MAX_BUF]; memset(rbuf, 0, MAX_BUF); sockaddr_in RomoteAddr; int RemoteLen = sizeof(RomoteAddr); int rByte = recvfrom(sock, rbuf, MAX_BUF, 0, (sockaddr*) &RomoteAddr, &RemoteLen); if(SOCKET_ERROR==rByte) //出错处理 {printf("recvfrom() Failed: %d\n",WSAGetLastError()); closesocket(sock);WSACleanup();return -1;} printf("UDP recv[%d]DATA from %s: %s\n", rByte, inet_ntoa (RomoteAddr.sin_addr), rbuf); intsByte=sendto(sock, rbuf, strlen(rbuf), 0,(sockaddr *) &RomoteAddr, sizeof(RomoteAddr)); if(SOCKET_ERROR==sByte) //出错处理 {printf("sendto() Failed: %d\n",WSAGetLastError()); closesocket(sock);WSACleanup();return -1;}

udp协议号

竭诚为您提供优质文档/双击可除 udp协议号 篇一:udp通信协议简介 一、udp概述 1、udp是一种基本的通信协议,只在发送的报文中增加了端口寻址和可选的差错检测功能。 2、udp不是一种握手信息协议,不能确认接收到的数据或交换其他流量控制信息。 3、udp是一种非连接协议,计算机在使用udp发送报文之前,不要求远程已联网或指定的目的端口可用于通信。正因为如此,将udp称为不可靠协议,即如果只使用udp,则发送方不知道目的主机何时是否接收到报文。 4、定义udp的文档是RFc0768:userdatagramprotacal。在标准std0006中也获得通过。 5、使用udp发送报文的计算机将报文置于udp数据报中。udp数据报由报头及其后面包含报文的报文组成。 6、发送计算机将udp数据报置于ip数据报的数据字段中。在以太网中,ip数据报存放在以太网帧的数据字段中。接收到以太网帧后,目的计算机网络栈将udp数据报的数据

部分传递给数据报报头指定的端口或进程。 7、udp的大多数功能不如tcp,所以udp的实现要简单些,更适合于特定的应用场合。如果需要,则可在使用udp 进行通信时自定义握手协议。例如:接收接口在接收到报文之后,将返回包含确认代码或其他请求信息的响应。如果发送方在合理的时间内没有接收到响应信息,就会重新发送报文。但是,如果应用程序需要的不仅仅是最基本的握手或流量控制,则应该考虑使用tcp而不是udp进行重构。 8、udp有一个tcp没有的功能,就是可将报文发送到多个目的主机,包括向局域网内所有的ip地址以广播方式发送,或者向指定的ip地址以组播方式发送。对于tcp而言,广播和组播都不现实,因为源主机必须与所有目的主机握手。 二、udp报头 udp报头由4个字段组成,后面紧接着是要传输的数据。 1、源端口号:源端口号标识发送报文的计算机端口或 进程。长度2字节,可选,如果接收进程不需要知道发送数据报的进程,则该字段可置为0。 2、目的端口号:目的端口号标识接收报文的目的主机 端口或进程。2字节。 3、数据报长度:指整个数据报的长度,以字节为单位,包括报头,最大值为65535。该字段为2字节。 4、udp检验和:是根据udp数据报和伪报头计算得到的

tcpip协议与udpip协议的区别

T C P/I P协议与U D P/I P协议的区别TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议, 也就是说,在收发数据前,必须和对方建立可靠的连接。 一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂,只简单的描述下这三次对话的简单过程: A ---> B //主机A向主机B发出连接请求数据包:“我想给你发数据,可以吗?”,这是第一次对话; A <--- B //主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工作) //的数据包:“可以,你什么时候发?”,这是第二次对话; A ---> B //主机A再发出一个数据包确认主机B的要求同步:“我现在就发,你接着吧!”,这是第三次对话。 三次“对话”的目的是使数据包的发送和接收同步,经过三次“对话”之后,主机A才向主机B 正式发送数据。 详细点说就是: TCP接通连接要进行3次握手过程 1 主机A通过向主机B 发送一个含有同步序列号的标志位的数据段给主机B ,向主机B 请求建立连接,通过这个数据段, 主机A告诉主机B 两件事:我想要和你通信;你可以用哪个序列号作为起始数据段来回应我. 2 主机B 收到主机A的请求后,用一个带有确认应答(ACK)和同步序列号(SYN)标志位的数据段响应主机A,也告诉主机A两件事:

我已经收到你的请求了,你可以传输数据了;你要用哪佧序列号作为起始数据段来回应我 3 主机A收到这个数据段后,再发送一个确认应答,确认已收到主机B 的数据段:"我已收到回复,我现在要开始传输实际数据了 这样3次握手就完成了,主机A和主机B 就可以传输数据了. 3次握手的特点 没有应用层的数据 SYN这个标志位只有在TCP建产连接时才会被置1 握手完成后SYN标志位被置0 TCP断开连接要进行4次 1 当主机A完成数据传输后,将控制位FIN置1,提出停止TCP连接的请求 2 主机B收到FIN后对其作出响应,确认这一方向上的TCP连接将关闭,将ACK置1 3 由B 端再提出反方向的关闭请求,将FIN置1 4 主机A对主机B的请求进行确认,将ACK置1,双方向的关闭结束. 由TCP的三次握手和四次断开可以看出,TCP使用面向连接的通信方式,大大提高了数据通信的可靠性,使发送数据端 和接收端在数据正式传输前就有了交互,为数据正式传输打下了可靠的基础 名词解释 ACK TCP报头的控制位之一,对数据进行确认.确认由目的端发出,用它来告诉发送端这个序列号之前的数据段

udp类型的协议

竭诚为您提供优质文档/双击可除 udp类型的协议 篇一:udp协议设计与实现 udp协议设计与实现 一、网络协议栈结构 二、udp协议功能 无连接传输:不保证端到端数据传输的可靠性,一定程度上保证了数据传输实时性,适合多媒体数据传输. 三、udp协议设计 1.udp协议语法 用户数据报:udp首部+数据,以字节为单位; 其中首部最小为8个字节,包含4个字段; 源端口号:2个字节,发送方应用层协议进程编号; 目的端口号:2个字节,接收方应用层协议进程编号; 长度:udp首部+数据长度。 校验和:2个字节,伪首部+首部+数据 端口号理解 服务器端口号 周知端口号:数值一般为0~1023。

注册端口号:数值为1024~49151,为没有熟知端口号的应用服 务器程序使用;这个范围的端口号必须在iana登记,以防止重复使用。 客户端口号(或动态端口号):数值为49152~65535,留给客户应用程序暂时使用,由操作系统临时分配。 当服务器进程收到客户进程的报文时,就知道了客户进程所使用的动态端口号;通信结束后,客户端口号立即释放,可供其他客户程序以后使用。 四、udp协议语义 五、udp协议时序关系 发送方接收方 udp报文 udp报文 发送方或接收方可以随时发送udp报文给对方。 接收到udp报文后,检查校验和,如果错误直接丢弃,然后不做任何处理;再检查目的端口号,如果目的端口号对应的上层进程接收队列存在,则接收;否则调用icmp协议发送端口不可达icmp差错报告。 五、udp协议实现 发送方:transport_udp_send.cpp(.h) 定义一个udp协议数据单元数据结构

UDP协议及分析

UDP协议及分析 一、UDP协议 UDP 是User Datagram Protocol的简称,中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联)参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768是UDP的正式规范。UDP在IP报文的协议号是17。 UDP协议的全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。在OSI模型中,在第四层——传输层,处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。UDP用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天UDP仍然不失为一项非常实用和可行的网络传输层协议。 与所熟知的TCP(传输控制协议)协议一样,UDP协议直接位于IP(网际协议)协议的顶层。根据OSI(开放系统互连)参考模型,

UDP和TCP都属于传输层协议。UDP协议的主要作用是将网络数据流量压缩成数据包的形式。一个典型的数据包就是一个二进制数据的传输单位。每一个数据包的前8个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。 二、UDP协议的主要特点 (1) UDP是无连接的,即发送数据之前不需要建立连接。 (2) UDP 使用尽最大努力交付,即不保证可靠交付,同时也不使用拥塞控制。 (3) UDP 是面向报文的。UDP 没有拥塞控制,很适合多媒体通信的要求。 (4) UDP 支持一对一、一对多、多对一和多对多的交互通信。(5) UDP 的首部开销小,只有 8 个字节。 三、UDP协议的使用 在选择使用协议的时候,选择UDP必须要谨慎。在网络质量令人十分不满意的环境下,UDP协议数据包丢失会比较严重。但是由于UDP的特性:它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。比

UDP协议及分析

U D P协议及分析一、UDP协议 UDP 是User Datagram Protocol的简称,中文名是用户数据报协议,是OSI (Open System Interconnection,开放式系统互联)参考模型中一种无连接的协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768是UDP的正式规范。UDP在IP报文的协议号是17。 UDP协议的全称是用户数据报协议,在中它与协议一样用于处理数据包,是一种无连接的协议。在模型中,在第四层——,处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。UDP用来支持那些需要在之间传输数据的网络应用。包括系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。UDP 协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天UDP仍然不失为一项非常实用和可行的网络传输层协议。 与所熟知的TCP()协议一样,UDP协议直接位于IP(网际协议)协议的顶层。根据OSI()参考模型,UDP和TCP都属于传输层协议。UDP协议的主要作用是将流量压缩成数据包的形式。一个典型的数据包就是一个二进制数据的传输单位。每一个数据包的前8个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。 二、UDP协议的主要特点 (1) UDP是无连接的,即发送数据之前不需要建立连接。 (2) UDP 使用尽最大努力交付,即不保证可靠交付,同时也不使用拥塞控制。

(3) UDP 是面向报文的。UDP 没有拥塞控制,很适合多媒体通信的要求。 (4) UDP 支持一对一、一对多、多对一和多对多的交互通信。 (5) UDP 的首部开销小,只有 8 个字节。 三、UDP协议的使用 在选择使用协议的时候,选择UDP必须要谨慎。在质量令人十分不满意的环境下,UDP协议数据包丢失会比较严重。但是由于UDP的特性:它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。比如我们聊天用的ICQ和就是使用的UDP协议。 四、UDP协议的报头 (1)面向报文的 UDP 发送方 UDP 对应用程序交下来的报文,在添加首部后就向下交付 IP 层。UDP 对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。 应用层交给 UDP 多长的报文,UDP 就照样发送,即一次发送一个报文。 接收方 UDP 对 IP 层交上来的 UDP 用户数据报,在去除首部后就原封不动地交付上层的应用进程,一次交付一个完整的报文。 应用程序必须选择合适大小的报文。 (2)UDP报文的组成 UDP报头由4个域组成,其中每个域各占用2个字节,具体如下:UDP源、目标端口号、长度、校验值

UDP数据包协议

UDP 是User Datagram Protocol的简称,中文名是用户数据包协议,是 OSI 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。它是IETF RFC 768是UDP的正式规范。 目录

数据包。在OSI模型中,在第四层——传输层,处于IP协议的上一层。UDP 有不提供数据报分组、组装和不能对数据包的排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。 UDP用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天,UDP仍然不失为一项非常实用和可行的网络传输层协议。 与所熟知的TCP(传输控制协议)协议一样,UDP协议直接位于IP(网际协议)协议的顶层。根据OSI(开放系统互连)参考模型,UDP和TCP都属于传输层协议。 UDP协议的主要作用是将网络数据流量压缩成数据报的形式。一个典型的数据报就是一个二进制数据的传输单位。每一个数据报的前8个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。 编辑本段使用UDP 在选择使用协议的时候,选择UDP必须要谨慎。在网络质量令人不十分满意的环境下,UDP协议数据包丢失会比较严重。但是由于UDP的特性:它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。比如我们聊天用的ICQ和QQ就是使用的UDP协议。 编辑本段UDP报头 UDP报头由4个域组成,其中每个域各占用2个字节,具体如下: UDP 源端口号 目标端口号 数据报长度 校验值 UDP协议使用端口号为不同的应用保留其各自的数据传输通道。UDP和TCP协议正是采用这一机制实现对同一时刻内多项应用同时发送和接收数据的支持。数据发送一方(可以是客户端或服务器端)将UDP数据报通过源端口发送出去,而数据接收一方则通过目标端口接收数据。有的网络应用只能使用预先为其预留或注册的静态端口;而另外一些网络应用则可以使用未被注册的动态端口。因为UDP报头使用两个字节存放端口号,所以端口号的有效范围是从0到65535。一般来说,大于49151的端口号都代表动态端口。

UDP协议及格式

U D P协议及格式2009-07-30 15:12:05|??分类:RTL8019AS |??标签:|字号大中小?订阅 UDP协议简介 UDP协议是英文UserDatagramProtocol的缩写,即用户数据报协议,主要用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP 协议。UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天,UDP仍然不失为一项非常实用和可行的网络传输层协议。 与我们所熟知的TCP(传输控制协议)协议一样,UDP协议直接位于IP(网际协议)协议的顶层。根据OSI(开放系统互连)参考模型,UDP和TCP都属于传输层协议。 UDP协议的主要作用是将网络数据流量压缩成数据报的形式。一个典型的数据报就是一个二进制数据的传输单位。每一个数据报的前8个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。 UDP报头 UDP报头由4个域组成,其中每个域各占用2个字节,具体如下: 源端口号 目标端口号 数据报长度 校验值 UDP协议使用端口号为不同的应用保留其各自的数据传输通道。UDP和TCP协议正是采用这一机制实现对同一时刻内多项应用同时发送和接收数据的支持。数据发送一方(可以是客户端或服务器端)将UDP 数据报通过源端口发送出去,而数据接收一方则通过目标端口接收数据。有的网络应用只能使用预先为其预留或注册的静态端口;而另外一些网络应用则可以使用未被注册的动态端口。因为UDP报头使用两个字节存放端口号,所以端口号的有效范围是从0到65535。一般来说,大于49151的端口号都代表动态端口。 数据报的长度是指包括报头和数据部分在内的总的字节数。因为报头的长度是固定的,所以该域主要被用来计算可变长度的数据部分(又称为数据负载)。数据报的最大长度根据操作环境的不同而各异。从理论上说,包含报头在内的数据报的最大长度为65535字节。不过,一些实际应用往往会限制数据报的大小, 有时会降低到8192字节。 UDP协议使用报头中的校验值来保证数据的安全。校验值首先在数据发送方通过特殊的算法计算得出,在传递到接收方之后,还需要再重新计算。如果某个数据报在传输过程中被第三方篡改或者由于线路噪音等原因受到损坏,发送和接收方的校验计算值将不会相符,由此UDP协议可以检测是否出错。这与TCP协 议是不同的,后者要求必须具有校验值。 UDP和TCP协议的主要区别是两者在如何实现信息的可靠传递方面不同。TCP协议中包含了专门的传递保证机制,当数据接收方收到发送方传来的信息时,会自动向发送方发出确认消息;发送方只有在接收到该确认消息之后才继续传送其它信息,否则将一直等待直到收到确认信息为止。

UDP协议概述

UDP 一、 UDP协议的简介 UDP协议用户数据包协议,是一种无连接的传输层协议,提供简单不可靠的信息传送服务。在网络中它与TCP协议一样用于处理UDP数据包。UDP不提供数据包分组、组装、不能对数据包进行排序,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。UDP 用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP 协议。 二、UDP协议报头 UDP报头由4个域组成,其中每个域各占用2个字节: UDP源端口号 目标端口号 数据报长度 校验值 数据发送一方(可以是客户端或服务器端)将UDP数据报通过源端口发送出去,而数据接收一方则通过目标端口接收数据。 数据报的长度是指包括报头和数据部分在内的总字节数。从理论上说,包含报头在内的数据报的最大长度为65535字节。不过,一些实际应用往往会限制数据报的大小,有时会降低到8192字节。 UDP协议使用报头中的校验值来保证数据的安全。校验值首先在

数据发送方通过特殊的算法计算得出,在传递到接收方之后,还需要再重新计算。如果某个数据报在传输过程中被第三方篡改或者由于线路噪音等原因受到损坏,发送和接收方的校验计算值将不会相符,由此UDP协议可以检测是否出错。这与TCP协议是不同的,后者要求必须具有校验值。 虽然UDP提供有错误检测,但检测到错误时,UDP不做错误校正,只是简单地把损坏的消息段扔掉,或者给应用程序提供警告信息。 三、用户数据报头格式 域:源端口是可选域,当其有意义时,它指的是发送进程的端口,这也就假定了在没有其它信息的情况下,返回信息应该向什么地方发送。如果不使用它,则在此域中填0。目的端口在有特定的目的网络地址时有意义。长度指的是此用户数据报长度的八进制表示。(这表明最小的数据报长度是8。)校验码有16位,是对IP头,UDP头和数据中信息包头的数位取反之和再取反得到的。 报头从概念上说是在UDP头信息之前的,它包括有源地址,目的地地址,所使用的协议和UDP长度。这些信息使信息不能被错误地接收。这个校验过程与TCP中使用的过程一致。 用户接口:用户接口应该允许创建新的接收端口,在接收端口的接收操作有:应该返回一个八进制数说明源端口和源地址,允许数据报传送,指定数据,源和目标端口和目的地地址。 IP层接口:UDP模块必须能够决定源和目标的网络地址,而且必须能够从包头中得知所使用的协议。一个可能的接口方式是返回整个

UDP通信协议简介

一、UDP概述 1、UDP是一种基本的通信协议,只在发送的报文中增加了端口寻址和可选的差错检测功能。 2、UDP不是一种握手信息协议,不能确认接收到的数据或交换其他流量控制信息。 3、UDP是一种非连接协议,计算机在使用UDP发送报文之前,不要求远程已联网或指定的目的端口可用于通信。正因为如此,将UDP称为不可靠协议,即如果只使用 UDP,则发送方不知道目的主机何时是否接收到报文。 4、定义UDP的文档是RFC0768:User Datagram Protacal。在标准STD0006中也获得通过。 5、使用UDP发送报文的计算机将报文置于UDP数据报中。UDP数据报由报头及其后面包含报文的报文组成。 6、发送计算机将UDP数据报置于IP数据报的数据字段中。在以太网中,IP数据报存放在以太网帧的数据字段中。接收到以太网帧后,目的计算机网络栈将UDP数据报的数据部分传递给数据报报头指定的端口或进程。 7、UDP的大多数功能不如TCP,所以UDP的实现要简单些,更适合于特定的应用场合。如果需要,则可在使用UDP进行通信时自定义握手协议。例如:接收接口在接收到报文之后,将返回包含确认代码或其他请求信息的响应。如果发送方在合理的时间内没有接收到响应信息,就会重新发送报文。但是,如果应用程序需要的不仅仅是最基本的握手或流量控制,则应该考虑使用TCP而不是UDP进行重构。 8、UDP有一个TCP没有的功能,就是可将报文发送到多个目的主机,包括向局域网内所有的IP地址以广播方式发送,或者向指定的IP地址以组播方式发送。对于TCP而言,广播和组播都不现实,因为源主机必须与所有目的主机握手。 二、UDP报头 UDP报头由4个字段组成,后面紧接着是要传输的数据。 1、源端口号:源端口号标识发送报文的计算机端口或进程。长度2字节,可选,如果接收进程不需要知道发送数据报的进程,则该字段可置为0。 2、目的端口号:目的端口号标识接收报文的目的主机端口或进程。2字节。 3、数据报长度:指整个数据报的长度,以字节为单位,包括报头,最大值为65535。该字段为2字节。 4、UDP检验和:是根据UDP数据报和伪报头计算得到的差错检测值,可选,该字段伪为2个字节。伪报头包含源和目的IP地址,以及来自IP数据报报头的协议值。IP数据报在网络中传送时包含UDP数据报。伪报头并不会在网络中传送,校验和中所包含的伪报头内容可以避免目的端错误地接收错误路由的数据报。校验和值的计算方法和IP报头检验和的计算方法类似。 仅在局域网内部传输报文不需要UDP校验和,因为以太网帧的校验和已经提供了差错控制。而对于那些需要通过不同的、也许未知网络传输的报文而言,校验和可以让目的主机能检测到错误数据。 三、UDP数据 1、一个UDP数据报最大可达到65535个字节,且报头为8字节,因此一个数据报最多可以携带65527个字节的数据。 2、实际上,源计算机常将数据报限制在较短的长度内。使用较短的数据报的一个原因是,过大的数据报可能不适合目的主机的接收缓冲器大小;或者因为接收数据的应用程序可能需要特定长度的报文。 3、较短数据报也许更高效。当大的数据报经过不同能力的网络时,网络协议可能会将数据报拆分为报片,要求目的主机将这些报片重组。所有数据都会到达目的主机,但一般来说,在源主机处拆分数据,然后在目的主机处重组,会比依赖IP进行这项工作更高效。 4、IP标准要求主机能接收最大长度为576字节的数据报。没有可选项的IP报头长度为20字节,UDP 报头为8字节,因此一个最大长度为548字节且没有IP选项的UDP数据报不经过拆分便可到达目的主机。

UDP协议

1 UDP协议的简介 UDP协议是User Datagram Protocol的简称,中文名是用户数据包协议,是OSI 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。在网络中它与TCP协议一样用于处理 UDP数据包。在OSI模型中,在第四层——传输层,处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。UDP用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天,UDP仍然不失为一项非常实用和可行的网络传输层协议。 与所熟知的TCP(传输控制协议)协议一样,UDP协议直接位于IP(网际协议)协议的顶层。根据OSI(开放系统互连)参考模型,UDP和TCP都属于传输层协议。UDP协议的主要作用是将网络数据流量压缩成数据包的形式。一个典型的数据包就是一个二进制数据的传输单位。每一个数据包的前8个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。 2.传输层协议UDP 2.1UDP协议报头 UDP报头由4个域组成,其中每个域各占用2个字节,具体如下:

UDP 源端口号 目标端口号 数据报长度 校验值 UDP 协议使用端口号为不同的应用保留其各自的数据传输通道。UDP 和TCP 协议正是采用这一机制实现对同一时刻内多项应用同时发送和接收数据的支持。数据发送一方(可以是客户端或服务器端)将UDP 数据报通过源端口发送出去,而数据接收一方则通过目标端口接收数据。有的网络应用只能使用预先为其预留或注册的静态端口;而另外一些网络应用则可以使用未被注册的动态端口。因为UDP 报头使用两个字节存放端口号,所以端口号的有效范围是从0到65535。一般来说,大于49151的端口号都代表动态端口。 数据报的长度是指包括报头和数据部分在内的总字节数。因为报头的长度是固定的,所以该域主要被用来计算可变长度的数据部分(又称为数据负载)。数据报的最大长度根据操作环境的不同而各异。从理论上说,包含报头在内的数据报的最大长度为65535字节。不过,一些实际应用往往会限制数据报的大小,有时会降低到8192字节。 UDP 协议使用报头中的校验值来保证数据的安全。校验值首先在数据发送方通过特殊的算法计算得出,在传递到接收方之后,还需要再重新计算。如果某个数据报在传输过程中被第三方篡改或者由于线路噪音等原因受到损坏,发送和接收方的校验计算值将不会相符,由此UDP 协议可以检测是否出错。这与TCP 协议是不同的,后者要求必须具有校验值。 许多链路层协议都提供错误检查,包括流行的以太网协议,也许想知道为什么UDP 也要提供检查和。其原因是链路层以下的协议在源端和终端之间的某些通道可能不提供错误检测。虽然UDP 提供有错误检测,但检测到错误时,UDP 不做

性能测试脚本Socket_UDP协议

一.UDP和Socket通信步骤 1.UDP Server程序 1、编写UDP Server程序的步骤 (1)使用socket()来建立一个UDP socket,第二个参数为SOCK_DGRAM。 (2)初始化sockaddr_in结构的变量,并赋值。sockaddr_in结构定义: struct sockaddr_in { uint8_t sin_len; sa_family_t sin_family; in_port_t sin_port; struct in_addr sin_addr; char sin_zero[8]; }; 这里使用“08”作为服务程序的端口,使用“INADDR_ANY”作为绑定的IP地址即任何主机上的地址。 (3)使用bind()把上面的socket和定义的IP地址和端口绑定。这里检查bind()是否执行成功,如果有错误就退出。这样可以防止服务程序重复运行的问题。(4)进入无限循环程序,使用recvfrom()进入等待状态,直到接收到客户程序发送的数据,就处理收到的数据,并向客户程序发送反馈。这里是直接把收到的数据发回给客户程序。 2、udpserv.c程序内容: #include #include #include #include #include #include #define MAXLINE 80 #define SERV_PORT 8888 void do_echo(int sockfd, struct sockaddr *pcliaddr, socklen_t clilen) { int n; socklen_t len; char mesg[MAXLINE];

udp协议简介

udp协议简介 1.UDP简要介绍 UDP是传输层协议,和TCP协议处于一个分层中,但是与TCP协议不同,UDP协议并不提供超时重传,出错重传等功能,也就是说其是不可靠的协议。 2.UDP协议头 UDP端口号 由于很多软件需要用到UDP协议,所以UDP协议必须通过某个标志用以区分不同的程序所需要的数据包。端口号的功能就在于此,例如某一个UDP程序A在系统中注册了3000端口,那么,以后从外面传进来的目的端口号为3000的UDP 包都会交给该程序。端口号理论上可以有2^16这么多。因为它的长度是16个bit UDP检验和 这是一个可选的选项,并不是所有的系统都对UDP数据包加以检验和数据(相对TCP协议的必须来说),但是RFC中标准要求,发送端应该计算检验和。 UDP检验和覆盖UDP协议头和数据,这和IP的检验和是不同的,IP协议的检验和只是覆盖IP数据头,并不覆盖所有的数据。UDP和TCP都包含一个伪首部,这是为了计算检验和而摄制的。伪首部甚至还包含IP地址这样的IP协议里面都有的信息,目的是让UDP两次检查数据是否已经正确到达目的地。如果发送端没有打开检验和选项,而接收端计算检验和有差错,那么UDP数据将会被悄悄的丢掉(不保证送达),而不产生任何差错报文。 UDP长度 UDP可以很长很长,可以有65535字节那么长。但是一般网络在传送的时候,一次一般传送不了那么长的协议(涉及到MTU 的问题),就只好对数据分片,当然,这些是对UDP等上级协议透明的,UDP不需要关心IP协议层对数据如何分片,下一个章节将会稍微讨论一些分片的策略。 IP分片 IP在从上层接到数据以后,要根据IP地址来判断从那个接口发送数据(通过选路),并进行MTU的查询,如果数据大小超过MTU就进行数据分片。数据的分片是对上层和下层透明,而数据也只是到达目的地还会被重新组装,不过不用担心,IP层提供了足够的信息进行数据的再组装。 在IP头里面,16bit识别号唯一记录了一个IP包的ID,具有同一个ID的IP片将会被重新组装;而13位片偏移则记录了某IP片相对整个包的位置;而这两个表示中间的3bit标志则标示着该分片后面是否还有新的分片。这三个标示就组成了IP分片的所有信息,接受方就可以利用这些信息对IP数据进行重新组织(就算是后面的分片比前面的分片先到,这些信息也是足够了)。 因为分片技术在网络上被经常的使用,所以伪造IP分片包进行流氓攻击的软件和人也就层出不穷。

相关文档