竭诚为您提供优质文档/双击可除
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协议数据单元数据结构
定义变量:
structsource_address
{
source_ip;
source_port;
}
source_port=;
server_port=;
source_address=;
server_address=;
aF=;
pRotocol=;
type=0oR1;0:表示tcp=sock_stReam;1:表示
udp=sock_dgRam;
socket_id=;
sockid=socket(af,type,protocol)
af(addressFamily)—网络地址类型,一般为aF_inet=1,表示在internet中使用;
type—传输层通信协议类型,sock_stReam表示面向连
接的字节流通信方式,sock_dgRam表示无连接的数据报通信
方式;
protocol—网络通信协议指定为ippRoto_ip=0x0800;
返回值sockid是一个整数,即socket号,用一个计数器产生;sockid=socket(af,type,protocol){
初始化变量:
aF,type,pRotocol,souRce_ip,souRce_poRt;其中,
souRce_ip从配置文件中读取,可直接赋值;
souRce_poRt通过一个计数器随机产生,范围为:
49152~65535;返回值:当前进程号;
注意:souRce_poRt在一个终端具有唯一性。
}
sendto(sockid,buf,buflen,flags,destadd,addrlen)篇二: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模块必须能够决定源和目标的网络地址,而且必须能够从包头中得知所使用的协议。一个可能的接口方式是返回整个
数据报,包括接收操作返回的包头。这样的接口还应该