网络传输层协议UDP协议

2023年 7月 30日 53.5k 0

用户数据协议(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],常见的如下表所示:

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

3.2 登记端口

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

3.3 客户端使用端口

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

相关文章

如何在 Linux 中使用 logname 命令?
为什么有 HTTPS?HTTPS 如何实现安全通信?
HTTPS的TSL握手流程是什么
华为无线网络射频调优及WLAN跨VLAN的三层漫游示例
502错误是什么、应该怎么排查?
HTTP3为什么抛弃了经典的TCP,而选择QUIC

发布评论