网络传输层协议-UDP协议

用户数据协议(User Datagram Protocol,UDP)是一种不可靠的、无连接的数据报服务。源主机在传送数据前不需要和目标主机建立连接。数据附加了源端口号和目标端口号等UDP报头字段后,直接发往目的主机。这时,每个数据报的可靠性依靠上层协议来保证。在传送数据较少且较小的情况下,UDP比TCP更加高效。

1、UDP报文

图片[1]-网络传输层协议-UDP协议-不念博客
UDP报文

源端口字段:该字段长度为16位。作用与TCP数据段中的端口号字段相同,用来标识源端的应用进程。在需要对方回信时用,不需要时可用全0;

目标端口字段:该字段长度为16位。作用与TCP数据段中的端口号字段相同,用来标识目标端的应用进程。在目标交付报文时必须用到;

长度字段:该字段长为16位。标明UDP头部和UDP数据的总长度字节;

校验和字段:该字段长为16 。用来对UDP头部和UDP数据进行校验,有错就丢弃。与TCP不同的是,对UDP来说,此字段是可选项,而TCP数据段中的校验和字段是必须有的一项。

2、UDP校验

虽然UDP协议没有提供任何差错控制机制,但UDP通过使用校验和来确保UDP报文被传送到正确的目的端。

UDP校验和计算有一个与众不同的特点:校验和除覆盖UDP报文外,还覆盖一个附加头部,称为伪头部(Pseudo Header)。伪头部有来自IP报文的4个字段(协议、源IP地址、目的IP地址、UDP长度)和填充字段,伪头部格式如下所示:

图片[2]-网络传输层协议-UDP协议-不念博客
UDP校验

其中填充字段为全0,其目的是使伪头部的长度为32位的整数倍;协议字段就是IP报头格式中的协议字段,为17(在IP报文格式的协议字段中17表示UDP协议);UDP长度字段表示UDP报文长度。

UDP计算校验和加上伪头部的目的就是为了验证UDP报文是否在两个端点之间正确传输。因为UDP报文包含源端口和目的端口,而伪头部包含源IP地址和目的IP地址。假如UDP报文在通过因特网传输时,有人恶意篡改了源IP地址(IP源地址欺骗),则这种情况可以通过UDP的校验和查询出来。

需要注意的是,UDP计算校验和的伪头部信息中部分内容来源于IP报头信息,也就是说,UDP在计算校验和是,UDP必须从IP层获取相关信息,否则无法形成伪头部,也就计算不出UDP的校验和。这一过程实际上违背了网络体系中的分层原则,但这种违背是出于实际的需求而不得不做的折中。事实上,UDP(包括TCP)与IP 的联系是非常紧密的,而且它们一般都在操作系统内核实现,因此无论是UDP还是TCP要获取IP的相关信息都是非常容易和方便的。

3、UDP端口

协议端口号是标识目标主机进程的方法。TCP/IP使用16位的端口号来标识端口,所以端口的取值范围为[0,65535]。端口可以分为系统端口、等级端口、客户端使用端口。

3.1 系统端口

系统短开口的取值范围是[0,1023],常见的如下表所示:

协议号名称功能
20FTP-DATAFTP数据传输
21FTPFTP控制
22SSHSSH登录
23TELNET远程登录
25SNMP简单邮件传输协议
53DNS域名解析
67DHCPDHCP服务器开启,用来监听和接收客户请求消息
68DHCP客户端开启,用来接收DHCP服务器的消息回复
69TFTP简单FTP
80HTTP超文本传输
110POP3邮局协议
143IMAP交互式邮件存取协议
161SNMP简单网管协议
162SNMP(Trap)SNMP Trap报文

3.2 登记端口

登记端口是为没有熟知端口号的应用程序所用的,端口范围为[1024,49151]。这些端口必须在IANA(互联网数字分配机构)上登记以避免重复。

3.3 客户端使用端口

客户端使用端口仅在客户进程运行时动态使用,使用完毕后,进程会释放端口。该端口范围为[49152,65535]。

© 版权声明
THE END