User Datagram Protocol (UDP)
UDP是最简单的传输协议。多个程序(服务)可以在主机上侦听,因此操作系统需要知道将流量发送到哪个程序。 在传输协议中,每个程序都与源和目标处的端口相关联,该端口显示为程序的套接字。UDP 在 IP 内携带有效负载数据,附加功能最少。UDP的特点包括消息不被确认,接收也不保证,使其成为理想的选择,尤其是在丢失一些数据包比重新传输它们更可取的应用中(例如视频和音频)。
基于 UDP 的协议示例包括:DNS(域名系统,使用UDP实现简单和快速的实现),DHCP(动态主机配置协议,同样基于UDP的简单和快速特性),HTTP/3(使用基于UDP的QUIC协议),以及µTP(比特洪流使用的协议,同样基于UDP)。这些例子说明了UDP的广泛应用和在特定场景下的优势。
- 域名系统(DNS,端口 53)使用 UDP 来实现简单快速的实现,但当 DNS 请求不适合 UDP 数据报时,也会使用 TCP。
- 动态主机配置协议(DHCP、端口 67、68)也设计得简单而快速,因此使用 UDP。
- 超文本传输协议 HTTP/3(端口 443)使用 QUIC 进行传输,该协议在 UDP 上运行。 QUIC 有自己的可靠性和拥塞管理,因此使用 UDP 来避免与 TCP 解决问题。
- µTP(BitTorrent,多个端口)使用 UDP 及其自己的基于延迟的拥塞管理,以免中断 TCP 流量。
UDP 欺骗与 IP 欺骗一样简单,例如以下两种类型的攻击:
- 在本地网络上:UDP 欺骗/劫持
- 在远程目标上:盲目 UDP 欺骗
攻击者可以嗅探网络上的流量以查看请求。攻击者与服务器"竞赛",在服务器之前向受害者发送 UDP 回复。任何后续数据报都需要发生同样的情况。或者,攻击者可以强制服务器离线(通过 DoS 攻击)。
端口扫描的概念
枚举监听服务的过程称为端口扫描。这是一种确定哪些应用程序处于活动状态的过程。对于UDP端口扫描,扫描者发送一个空的UDP数据报到每个可能的端口。如果端口没有服务监听,服务器会发送一个ICMP端口不可达错误消息。
UDP 端口扫描执行如下:
- 扫描者向每个可能的端口发送一个空(无负载)UDP 数据报。
- 如果没有服务正在侦听该端口,则服务器会发送 ICMP 端口不可达错误消息。
- 某些操作系统限制可发送的 ICMP 错误消息的速率,从而使这些攻击变慢(每 20 秒 80 条消息≃ 扫描所有端口一小时)。
- 根据端口号可以对正在运行的应用程序进行有根据的猜测,或者可以进一步处理响应。
端口扫描可以与 IP 扫描相结合,以查找哪些 IP 地址和端口是开放的。
扫描是扫描多个主机以查找单个端口的做法(例如,查看网络上的哪些主机正在运行 Web 服务器)。两者可以结合起来搜索一系列 IP 地址上的一系列端口,但每个数据包只能识别一个端口。portscans 的合法性和道德是一个复杂的话题。一些互联网用户将端口扫描视为敌对行为,并向发送者的互联网提供商投诉。端口扫描还可能导致设计不良的系统拒绝服务,特别是工业控制。
对于端口"活跃"的含义有多种有效的定义。
- 探测可能不返回IP 层响应、错误响应,或者可能有传输层响应(例如TCP)
- 如果有传输层响应,则可能是错误,可能包含应用程序数据(可能有效或无效)