UD协议设计与实现.docx
- 文档编号:28257401
- 上传时间:2023-07-09
- 格式:DOCX
- 页数:8
- 大小:129.41KB
UD协议设计与实现.docx
《UD协议设计与实现.docx》由会员分享,可在线阅读,更多相关《UD协议设计与实现.docx(8页珍藏版)》请在冰豆网上搜索。
UD协议设计与实现
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)
{
初始化:
server_ip,server_Port;
构建一个UDP报文:
udp_buffer;注意计算校验和;
调用network_ip_send(udp_buffer,destination_ip,ip_size)发送;
}
发送方发送流程(调用位置:
MAIN)
Main()
{
sockid=socket(af,type,protocol)
打开文件;
While(;;)
{
从文件中读取数据buf;
sendto(sockid,buf,buflen,flags,destadd,addrlen)
直到把文件传输完毕;
}
}
接收方(服务器)network_udp_recv.cpp(*.h)
定义一个UDP协议数据单元首部数据结构;
定义变量:
Structdestination_address{
Destination_ip;
Destination_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)
bind(sockid,Servaddr,addrlen)
sockid,已获得的socket号。
Servaddr,本地socketaddr_in地址结构变量:
包括本地主机IP地址+端口号。
addrlen,表示以字节为单位本地socket地址结构的长度。
bind(sockid,Servaddr,addrlen)
{
初始化server_ip,server_port(注册端口号).
}
recvfrom(sockid,buf,buflen,flags,souradd_IP,addrlen)
{
接收UDP数据于buf;
利用souradd_IP初始化SOURCE_IP;
利用UDP首部中原PORT初始化SOURCE_PORT;
校验和验证,如果失败,直接丢弃;
检查目的端口号,如果目的端口所在的接收队列存在,将数据保存到接收文件即可。
返回值:
接收数据长度,按字节计算;
}
接收方接收流程(调用位置:
接收到IP分组,在对IP分组首部处理时,当协议字段=17时,调用下面函数)
socket(af,type,protocol)//仅调用一次
bind(sockid,Servaddr,addrlen)//仅调用一次
recvfrom(sockid,buf,buflen,flags,souradd_ip,addrlen)
THANKS!
!
!
致力为企业和个人提供合同协议,策划案计划书,学习课件等等
打造全网一站式需求
欢迎您的下载,资料仅供参考
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- UD 协议 设计 实现