网络-UDP协议详解(代码、实战)

简介: 网络-UDP协议详解(代码、实战)

简介

UDP(User Datagram Protocol,用户数据报协议),一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,UDP在IP报文的协议号是17。常用的UDP端口号有:53(DNS)、69(TFTP)、161(SNMP),使用UDP协议包括:TFTP、SNMP、NFS、DNS、BOOTP、CoAP、DTLS。

特点

  • UDP是无连接的,减少开销和发送数据之前的时延
  • UDP使用最大努力交付,即不保证可靠交付
  • UDP是面向报文的,适合一次性传输少量数据的网络应用
  • UDP无拥塞控制,适合很多实时应用
  • 首部开销小,仅8个字节(TCP首部为20个字节)

报文格式

2020062310470442.png

报文位置

2020062310470442.png

报文格式

  • 源端口号:在需要对方回信时选用,不需要时可用全0
  • 目的端口号:这在终点交付报文时必须使用
  • 长度:UDP用户数据报的总长度(首部+数据),其最小值是8(仅有首部)。
  • 检验和:检测UDP用户数据报在传输中是否有错,有错就丢弃

如果接收方发现收到的报文中的目的端口号不正确(即不存在对应于该端口号的应用进程),就丢弃该报文,并由网际控制报文协议ICMP发送“端口不可达”差错报文给发送方。我们在ICMP的应用举例讨论 traceroute时,就是让发送的UDP用户数据报故意使用一个非法的UDP端口,结果ICMP就返回“端口不可达”差错报文因而达到了测试的目的。

UDP校验

伪首部

2020062310470442.png

UDP伪首部

  • 源IP地址:4个字节
  • 目的IP地址:4个字节
  • 0:1个字节,即0x00
  • 17:1个字节,即0x11,封装UDP报文的IP数据包首部协议字段是17
  • UDP长度:2个字节,UDP首部(8B)+数据部分长度,不包括伪首部伪首部仅在计算校验和的时候才出现,不向下传送也不向上递交。

发送端校验

  1. 填上伪首部
  2. 全0填充检验和字段
  3. 全0填充数据部分(UDP数据报要看成许多4B的字串接起来)
  4. 伪首部+首部+数据部分采用二进制反码求和
  5. 把和求反码,填入校验和字段
  6. 去掉伪首部,发送

image.png

发送端计算校验和

2020062310470442.png

进位及回加

按列计算:9(1001),余1,进100;7+0=1(111),余1进11;7+1=8(1000),余0进100;...后续读者动手计算吧,记得多出去的进位回加到低位,如果不习惯一起算,可以两个加一次。16位的话按列计算16次左右,如果有二三十个相加的话,按列相加比较快速,使用16进制相加也会更快一点。

接收端校验

1.填上伪首部

2.伪首部+首部+数据部分采用二进制反码求和(校验和部分不是全0了,而是0110100100010010)

3.结果全为1,则无差错,否则丢弃数据报/交给应用层附上出差错的警告。


计算过程和上面一样,只是校验和变了。


这样的检验和, 既检查了UDP用户数据报的源端口号和目的端口号以及UDP用户数据报的数据部分,又检查了IP数据报的源IP地址和目的地址。

实战

UDP泛洪攻击(UDP Flood Attack),攻击者发送伪造源地址和端口不可达的UDP数据报,当受害系统接收到一个 UDP 数据报的时候,它会确定目的端口正在等待中的应用程序。当它发现该端口中并不存在正在等待的应用程序,它就会产生一个目的地址无法连接的ICMP数据包发送给该伪造的源地址。如果发送的足够多的,就会消耗受害系统的资源,造成攻击。和TCP是SYN攻击差不多,也是(D)DoS攻击的一种。

自己实现UDP客户端和服务器端可以查看文章:python-网络编程之socket

参考

《TCP/IP详解I》

《计算机网络(谢希仁)第七版》

RFC 768


相关文章
|
1月前
|
负载均衡 网络协议 算法
|
1月前
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
105 6
|
17天前
|
存储 安全 网络安全
网络安全的盾与剑:漏洞防御与加密技术的实战应用
在数字化浪潮中,网络安全成为保护信息资产的重中之重。本文将深入探讨网络安全的两个关键领域——安全漏洞的防御策略和加密技术的应用,通过具体案例分析常见的安全威胁,并提供实用的防护措施。同时,我们将展示如何利用Python编程语言实现简单的加密算法,增强读者的安全意识和技术能力。文章旨在为非专业读者提供一扇了解网络安全复杂世界的窗口,以及为专业人士提供可立即投入使用的技术参考。
|
20天前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
54 7
|
24天前
|
安全 搜索推荐 网络安全
HTTPS协议是**一种通过计算机网络进行安全通信的传输协议
HTTPS协议是**一种通过计算机网络进行安全通信的传输协议
52 11
|
23天前
|
监控 网络协议 网络性能优化
网络通信的核心选择:TCP与UDP协议深度解析
在网络通信领域,TCP(传输控制协议)和UDP(用户数据报协议)是两种基础且截然不同的传输层协议。它们各自的特点和适用场景对于网络工程师和开发者来说至关重要。本文将深入探讨TCP和UDP的核心区别,并分析它们在实际应用中的选择依据。
51 3
|
1月前
|
网络协议 网络安全 网络虚拟化
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算。通过这些术语的详细解释,帮助读者更好地理解和应用网络技术,应对数字化时代的挑战和机遇。
84 3
|
1月前
|
网络虚拟化
生成树协议(STP)及其演进版本RSTP和MSTP,旨在解决网络中的环路问题,提高网络的可靠性和稳定性
生成树协议(STP)及其演进版本RSTP和MSTP,旨在解决网络中的环路问题,提高网络的可靠性和稳定性。本文介绍了这三种协议的原理、特点及区别,并提供了思科和华为设备的命令示例,帮助读者更好地理解和应用这些协议。
52 4
|
1月前
|
网络协议 安全 Go
Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
【10月更文挑战第28天】Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
51 13
|
1月前
|
存储 缓存 网络协议
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点,GET、POST的区别,Cookie与Session
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点、状态码、报文格式,GET、POST的区别,DNS的解析过程、数字证书、Cookie与Session,对称加密和非对称加密
下一篇
DataWorks