网络协议分析-UDP
本文最后更新于:几秒前
UDP:
UDP位于传输层,与IP一样提供不可靠的,无连接的数据交付服务。
引入传输层的必要性:
在TCP/IP模型中,传输层位于IP层和应用层之间。源主机的应用层进程与目的主机的应用层通信时,要使用传输层的服务。因此传输层在应用层和IP层之间起着承上启下的作用。
传输层需要满足的条件:
1. 传输层要提供比IP层质量更高的服务。
2. 传输层要提供识别应用层进程的机制。
3. 传输层要针对不同尺寸的应用层数据进行适当的处理。(这里主要是说TCP协议,UDP协议没有对数据尺寸进行调整的能力。)
UDP的特点:
○ 提供不可靠,无连接的数据交付服务。
○ 没有使用确认机制,所以不能保证报文全部到达。
○ 不对传入的报文进行排序处理。
○ 不提供反馈信息来控制机器之间报文传输速率。
UDP首部报文格式:
源端口和目的端口:包含了16bit的UDP端口号,用以在各个等待接收报文的应用程序之间,对数据报进行多路分解操作。其中源端口字段可选,若选用,则指定了应答报文发往的端口,不选用,该字段应为0。
报文长度:指明以字节为单位的UDP首部和UDP数据的长度,最小值为8,即UDP首部报文长度。
UDP校验和:是可选的,如果为0,则代表不进行校验。
UDP最大的用户数据长度:IP数据报最大64kB,需要除去20字节的IP首部,8字节的UDP首部,所以UDP数据区用户内容最长为65535-20-8=65507字节
UDP校验和计算方法:
UDP校验和校验的区域包含UDP首部和数据区。从五元组来看,正确的目的地应该包含正确的端口和主机地址,所以UDP校验也要对地址进行校验。但是UDP首部不包含主机地址,所以UDP添加了一个12字节的伪首部。
这个伪首部逻辑上是UDP首部的一部分,但实际上并不传送。
伪首部结构:
源IP地址和目的IP地址:记录的是发送UDP报文时使用的源IP地址和目的IP地址。
协议:指明了使用的协议类型,UDP是17
UDP长度:指明了UDP数据报的长度,不包含伪首部。
对于校验和字段的使用,UDP给出了两种方案,一种是使用,另一种自然是不使用了。当使用校验和时,如果接收方检验校验和字段时发现错误,则整个数据报就会被丢弃,这未免太苛刻了,所以在2004年7月,TETF推出了UDP-lite标准。
UDP-Lite:
它将数据划分为敏感区域和非敏感区域,其中敏感区域为校验和计算的输入区域,当这个区域发生差错时,则整个数据包会被丢弃。非敏感区域发生差错时,报文不会被丢弃。
其数据报结构只是将UDP 报文中16bit的UDP长度修改为了校验和覆盖字段。
校验和覆盖字段是指从UDP数据报首部第一个字节开始计算校验和的字节数,取值为0 或者大于等于8的整数,取值为0 表示UDP数据报全部参与校验和计算,因为UDP首部必须参与校验和计算,所以起始值必须为8。任何1-7的数值都会别认为非法,数据报会被丢弃。
UDP的一些安全问题:
由于UDP是无连接的,使用简便,这便给攻击者提供了便利。
§ 一种是UDP泛洪攻击,原理是利用伪造IP地址向某个特定的目的主机端口发送大量的UDP报文。目标主机收到报文后,会将其交付给相应端口进程处理,如果该端口没有处于监听状态,目标主机就会向UDP数据报源地址回应一个ICMP报文,指明“目的端口不可达”,这是一种流量型拒绝服务攻击。
§ 另一种是基于UDP反射的分布式拒绝服务攻击。攻击者并不直接对目标主机发起攻击,而是利用互联网中的一些开放的服务器。攻击者向这些服务器发送基于UDP的请求报文,并将该报文的源地址修改为目标主机,之后数倍于请求报文的回复报文会发送给目标主机,从而对目标主机造成DDoS攻击。
欢迎指出文章中的错误,谢谢