网络-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


相关文章
|
2月前
|
数据采集 算法 数据挖掘
模块化控制协议(MCP)在网络中增强智能体执行效率的研究
随着Web3技术的迅速发展,去中心化应用和智能体在各种领域的应用逐渐增多。MCP(Modularized Control Protocol,模块化控制协议)作为一种增强智能体执行能力的关键技术,为Web3场景中的智能体提供了更强的灵活性和可扩展性。本文将探讨如何利用MCP技术提升智能体在Web3场景中的执行能力,并通过实例代码展示其实现路径。
150 22
|
2月前
|
网络协议 开发者
探讨UDP协议中connect函数的作用及影响
总结来看,虽然UDP是无连接的,`connect()` 函数的使用在UDP编程中是一种可选的技术,它可以带来编程上的便利和某些性能上的改进,同时它改变的是程序逻辑上的行为,而非UDP协议本身的无连接特性。在实际应用中,根据通信模式和需求的不同,开发者可以根据情况选择是否调用 `connect()` 函数。
100 8
|
4月前
|
安全 网络协议 Linux
Linux网络应用层协议展示:HTTP与HTTPS
此外,必须注意,从HTTP迁移到HTTPS是一项重要且必要的任务,因为这不仅关乎用户信息的安全,也有利于你的网站评级和粉丝的信心。在网络世界中,信息的安全就是一切,选择HTTPS,让您的网站更加安全,使您的用户满意,也使您感到满意。
116 18
|
4月前
|
监控 网络协议 视频直播
UDP协议(特点与应用场景)
UDP(用户数据报协议)是传输层的一种无连接协议,具有简单高效、低延迟的特点。其主要特点包括:无连接(无需握手)、不可靠传输(不保证数据完整性)、面向数据报(独立传输)。尽管UDP不如TCP可靠,但在实时通信(如语音通话、视频会议)、在线游戏、多媒体流媒体(如直播、点播)及网络监控等领域广泛应用,满足了对速度和实时性要求较高的需求。
487 19
|
5月前
|
网络协议
为何UDP协议不可靠?DNS为何选择UDP?
总的来说,UDP和TCP各有优势,选择哪种协议取决于应用的具体需求。UDP可能不如TCP可靠,但其简单、快速的特性使其在某些场景下成为更好的选择。而DNS就是这样的一个例子,它利用了UDP的优势,以实现快速、高效的名字解析服务。
244 14
|
5月前
|
网络协议 Java 开发工具
全平台开源即时通讯IM框架MobileIMSDK:7端+TCP/UDP/WebSocket协议,鸿蒙NEXT端已发布,5.7K Stars
全平台开源即时通讯IM框架MobileIMSDK:7端+TCP/UDP/WebSocket协议,鸿蒙NEXT端已发布,5.7K Stars
264 1
|
5月前
|
安全 网络安全 定位技术
网络通讯技术:HTTP POST协议用于发送本地压缩数据到服务器的方案。
总的来说,无论你是一名网络开发者,还是普通的IT工作人员,理解并掌握POST方法的运用是非常有价值的。它就像一艘快速,稳定,安全的大船,始终为我们在网络海洋中的冒险提供了可靠的支持。
139 22
|
5月前
|
网络协议 数据安全/隐私保护 网络架构
|
9月前
|
监控 网络协议 网络性能优化
不再困惑!一文搞懂TCP与UDP的所有区别
本文介绍网络基础中TCP与UDP的区别及其应用场景。TCP是面向连接、可靠传输的协议,适用于HTTP、FTP等需要保证数据完整性的场景;UDP是无连接、不可靠但速度快的协议,适合DNS、RIP等对实时性要求高的应用。文章通过对比两者在连接方式、可靠性、速度、流量控制和数据包大小等方面的差异,帮助读者理解其各自特点与适用场景。
|
9月前
|
存储 网络协议 安全
用于 syslog 收集的协议:TCP、UDP、RELP
系统日志是从Linux/Unix设备及网络设备生成的日志,可通过syslog服务器集中管理。日志传输支持UDP、TCP和RELP协议。UDP无连接且不可靠,不推荐使用;TCP可靠,常用于rsyslog和syslog-ng;RELP提供可靠传输和反向确认。集中管理日志有助于故障排除和安全审计,EventLog Analyzer等工具可自动收集、解析和分析日志。
506 2

热门文章

最新文章