[网络协议篇] UDP协议

文章目录

  • 1. 简介
  • 2. 特点
  • 3. UDP数据报结构
  • 4. 基于UDP的应用层协议
  • 5. UDP安全性问题
  • 6. 使用udp传输数据的系统就一定不可靠吗?
  • 7. 基于UDP的主机探活 python实现

1. 简介

User Datagram Protocol,用户数据报协议,基于IP协议提供面向无连接的网络通信服务。特点:简单不可靠面向数据报。 UDP协议位于ISO网络模型的传输层

2. 特点

特点解释:

  • 无连接: 两台主机在使用UDP进行数据传输时,不需要建立连接,只需要知道对方端的IP和端口号即可把数据发送过去。
  • 不可靠:UDP协议没有确认重传机制,如果因为网络故障导致报文无法发到对方,或者对方接收到了报文,但是传输过程中乱序了,对方检验失败后把乱序的包丢了,UDP协议层也不给应用层任何错误反馈信息。
  • 面向数据报:以数据报文为单位一个个发出去,然后一个个接收的,导致上面的应用层无法灵活控制数据的读写次数和数量。

3. UDP数据报结构

image.png

  • 源端口号: 发送方的端口,用于唯一确认发送方主机的一个进程。 大小范围1-65535
  • 目的端口: 接收方的端口,用于唯一确认接收方主机的一个进程。大小范围1-65535
  • UDP长度:一个UDP报文所能传输的最大长度是64K,包含UDP首部。
  • UDP校验和: 为了确保数据包在传送过程中,数据检测数据是否被篡改和丢失的一种手段。通过二进制补码求和进行校验,校验和的内容包括:
    • 伪首部(IP数据包的一部分):源IP地址(32位),目的IP地址(32位),保留字段(8位, 0), 协议号(8位, 指定为17,代表udp)UDP长度(16) UDP数据报的总长度,包括头部和数据
    • UDP首部:源端口号、目的端口号、长度字段、校验和字段(初始值为0)
    • UDP数据: 实际传输的应用层数据。

端口和应用程序的关系: 1. 主机运行的一个进程可以绑定多个端口号。2.一个主机的某一个端口只能被一个进程所绑定。 可以推导出一个主机上的端口可以唯一确认主机上的一个进程,

4. 基于UDP的应用层协议

  • DNS协议: 域名解析协议, 域名 => IP.
  • DHCP协议:动态主机配置协议, 为设备动态分配IP地址、网关、DNS服务器等网络参数。
  • NTP协议: 用于同步网络中的设备时钟。
  • SNMP协议: 用于网络设置的监控和管理,如路由器、交换机等。
  • RIP协议: 路由信息协议,是一种距离向量路由协议,用于在网络设备间交换路由信息。

上述协议的几个明显的特点:

  • 传输数据一般都比较小。
  • 对速度要求较高,延迟时间低
  • 不需要或者无法进行连接.(例如dhcp初次启动时,设备根本就没有ip地址)
  • 由于网络问题丢失数据也不会非常严重,重新发起请求即可。

如果实际开发需求中,如果你的需求任务满足上述几种要求时,可以考虑使用udp去实现。

5. UDP安全性问题

  • 易受攻击性问题(微造身份):udp本身是无连接的,数据包在发送之前不需要建立连接,攻击者可以轻易伪造源地址发送UDP数据,进行IP欺骗攻击。
  • 反射攻击和放大攻击:
    • udp反射攻击: 攻击者伪造受害者的 IP 地址,向网络上的其他服务器发送大量UDP 请求。由于很多服务器会自动回复请求,这些回复数据将被发送到受害者的地址,从而导致大量流量集中到受害者一侧,形成 DDoS 攻击。
    • udp放大攻击:基于udp的应用层协议(DNS,NTP)返回的响应包含较大的数据包。攻击者利用伪造的 IP 地址发送小请求,目标服务器返回的大量数据包会直接被发送给受害者,放大了攻击效果。
  • udp未加密传输: 数据以明文形式传输,容易被窃听。中间人可以劫持udp流量,监听内容,进行功能流量重放等攻击手段。
  • 利用防火墙漏洞传输有害信息: UDP 是无连接的协议,某些情况下可以绕过防火墙的状态检测。攻击者可以通过精心设计的数据包,穿透防火墙,访问内部的网络资源。

6. 使用udp传输数据的系统就一定不可靠吗?

先说结论: 虽然udp本身不提供可靠性保证,但在实际应用中,通过应用层协议的设计,可以使得基于UDP的通信具备可靠性

常见例子:

  • DNS: 通过使用超时重传机制来保证查询的可靠性。
  • TFTP: 通过应用层的确认和重传机制来保证文件传输的可靠性。
  • RTP(用于传输音视频的协议): 通过结合RTCP提供的一些保障机制,例如 序列号和时间戳、丢包检测、RTCP反馈。来实现可靠传输。

7. 基于UDP的主机探活 python实现

实现原理:当向目标发送一个UDP数据包之后,目标是不会发回任何UDP数据包的。不过如果目标主机处于活跃状态,但是目标端口是关闭状态时,会返回一个ICMP数据包,这个包的含义是unreachable.如果目标主机处于不活跃状态,这时接收不到任务响应数据。

挑选目标主机的目标端口也是一个比较重要的步骤。一般思路是设置不太可能被开放端口,例如65535这种不常用的端口。我下面这个脚本通过随机数去生成一个目标端口,不一定适用所有情况,可以根据要扫描网段或机器的环境设置目标端口。

from scapy.layers.inet import *
from optparse import OptionParser
import nmap
import sys
"""
发送udp数据包
"""def main():usage = "Usage: %prog -i <ip adress>"parse = OptionParser(usage=usage)# 获取网段地址parse.add_option("-i", "--ip", type="string", dest="IP", help="specify the IP address")options, args = parse.parse_args()# checkif options.IP is None:parse.print_help()sys.exit(1)if "-" in options.IP:start = int(options.IP.split("-")[0].split(".")[3])end = int(options.IP.split("-")[1])ipPrefix = ".".join(options.IP.split(".")[:3])for i in range(start, end + 1):Scan(ipPrefix + "." + str(i))else:Scan(options.IP)def sent_udp_message(address):ip = IP()udp = UDP()r = (ip / udp)r[IP].dst = addressr[UDP].dport = random.randint(1024, 65535)a = sr1(r)a.display()"""
通过UDP探测包探测主机存活
"""
def Scan(ip):dport = random.randint(1, 65535)try:packet = IP(dst=ip) / UDP(dport=dport)response = sr1(packet, timeout=10, verbose=0)if response:if int(response[IP].proto) == 1:print(ip + " is up")else:print(ip + " is down")else:print(ip + " is down")except Exception as e:print(e)"""借助nmap实现udp探测
"""
def NmapScan(targetIp):nm = nmap.PortScanner()try:result = nm.scan(hosts=targetIp, arguments="-PU")state = result["scan"][targetIp]["status"]["state"]print("[{}] is [{}]".format(targetIp, state))except Exception as e:print(e)if __name__ == "__main__":main()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/456488.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

毕业设计—基于 Inception-ResNet模型的皮肤癌分类系统实现

1.摘要 皮肤癌是人类最常见的恶性肿瘤&#xff0c;主要通过视觉诊断进行初步临床筛查。但是由于皮肤病变外观的细微变化性&#xff0c;使用图像自动分类皮肤病变是一项具有挑战性的任务。本文为了提高深度学习算法在皮肤病检测上的准确率&#xff0c;本文提出了基于Inception和…

VoLTE 微案例:VoLTE 注册失败,I-CSCF 返回 403,HSS(UAR) 返回 5001

目录 1. 问题描述 2. 故障注册流程与正常流程对照 3. 结论 博主wx:yuanlai45_csdn 博主qq:2777137742 想要 深入学习 5GC IMS 等通信知识(加入 51学通信),或者想要 cpp 方向修改简历,模拟面试,学习指导都可以添加博主低价指导哈。 1. 问题描述

Geranium天竺葵:位置修改、守护进程管理器、清理器、屏幕时间删除器和 TrollStore 监督器

LocSim&#xff0c;TrollStore 的守护进程经理、清洁工和主管 关于 LocSim、守护进程管理器、清理器、屏幕时间删除器和 TrollStore 监督器 安装 安装Geranium需要满足以下要求&#xff1a;使用TrollStore 1.3或更高版本&#xff0c;并在iOS 15或更高版本的设备上运行。您可以从…

LearnOpenGL之3D模型加载

前序 AndroidLearnOpenGL是本博主自己实现的LearnOpenGL练习集合&#xff1a; Github地址&#xff1a;https://github.com/wangyongyao1989/AndroidLearnOpenGL 系列文章&#xff1a; 1、LearnOpenGL之入门基础 2、LearnOpenGL之3D显示 3、LearnOpenGL之摄像机 4、LearnOpenGL…

#数据结构(二)--栈和队列

栈和队列 一栈 1.栈的顺序存储结构 特点&#xff1a;先进后出 栈是一种只能在一端进行插入或删除操作的线性表。 表中允许插入删除操作的一端为栈顶&#xff08;top&#xff09;&#xff0c;表的另一端为栈底&#xff08;bottom&#xff09;&#xff0c; 1 结构体的定义 …

深度学习:SGD的缺点

首先看下述函数&#xff1a; 最小值为x0&#xff0c;y0处 先了解下它的梯度特征。了理解其梯度特征&#xff0c;我们需要计算其梯度向量。 梯度向量 ∇f 是函数 f 在每个变量方向上的偏导数组成的向量。具体来说&#xff1a; ∇f(∂f/∂x,∂f∂/y) 首先&#xff0c;我们计算 f …

3D、VR、AR技术的应用,对家电品牌营销有哪些影响?

家电行业3D数字化营销正以其独特的优势引领着行业的变革。随着技术的不断进步和应用场景的不断拓展&#xff0c;我们有理由相信&#xff0c;未来家电行业的3D数字化营销将会更加精彩纷呈。 那么3D、VR、AR技术的应用&#xff0c;对家电品牌营销有哪些影响&#xff1f; 01、提升…

[CSP-J 2023] 一元二次方程(模拟)

变态的大模拟…… 洛谷题目传送门https://www.luogu.com.cn/problem/P9750 解题思路 主要还是模拟&#xff0c;题目让你求啥你就求啥&#xff0c;要注意细节。 然后化简根式的可以用质因数分解一下即可。 代码 #include<bits/stdc.h> using namespace std; #define …

vue写个表格,让它滚动起来,没有用datav,有的时候结合会出错,一种简单的方法,直接用animation

表格样式就先不说了哈&#xff0c;这些简单内容&#xff0c;如果粉丝朋友还有什么问题&#xff0c;可以私信 好啦&#xff0c;首先&#xff0c;第一步 1.在目录的这个地方创建文件夹css&#xff0c;里面放两个文件 . 第一个文件里面内容 第二个文件里面内容 .drawCur{ curs…

网站建设中需要注意哪些安全问题?----雷池社区版

服务器与应用安全指南 1. 服务器安全 1.1 操作系统安全 及时更新补丁&#xff1a;确保操作系统始终安装最新补丁&#xff0c;以防范系统漏洞。例如&#xff0c;Windows Server 定期推送安全更新&#xff0c;修复如远程代码执行等潜在威胁。优化系统服务配置&#xff1a;关闭不…

深度学习系列——RNN/LSTM/GRU,seq2seq/attention机制

1、RNN/LSTM/GRU可参考&#xff1a; https://zhuanlan.zhihu.com/p/636756912 &#xff08;1&#xff09;对于这里面RNN的表示中&#xff0c;使用了输入x和h的拼接描述&#xff0c;其他公式中也是如此 &#xff08;2&#xff09;各符号图含义如下 2、关于RNN细节&#xff0c;…

node.js学习Day1

1.全局安装express npm install -g express-generator2.创建项目 express node-demo 3.项目安装依赖,补充nodemon npm installnpm install -g nodemon 4.整理目录和初始代码&#xff0c;去掉view文件夹&#xff0c;添加dao和service文件夹&#xff0c;注意app.js文件夹引用…

qt QSaveFile详解

QSaveFile 是 Qt 提供的一个类&#xff0c;用于安全地保存文件。它的主要特点是在写入文件时确保数据完整性&#xff0c;以防止文件损坏。使用 QSaveFile&#xff0c;您可以创建一个临时文件&#xff0c;并在成功写入后将其重命名为目标文件&#xff0c;这样可以避免在写入过程…

uniapp 常用的地区行业各种多选多选,支持回显,复制粘贴可使用

uniapp 常用的地区行业各种多选多选&#xff0c;支持回显 必须导入uni-popup 弹出层 该组件 1.目前项目开发中使用到这类似挺多的&#xff0c;记录一下&#xff0c;方便以后是使用 2.使用前提&#xff0c;目前不做无限级&#xff0c;只支持二维数组&#xff0c;模板里只循环了两…

Discuz发布原创AI帖子内容生成:起尔 | AI原创帖子内容生成插件开发定制

Discuz发布原创AI帖子内容生成&#xff1a;起尔 | AI原创帖子内容生成插件开发定制 在当今互联网快速发展的时代&#xff0c;内容创作成为了网站运营、社交媒体管理和个人博客维护不可或缺的一部分。然而&#xff0c;高质量内容的创作往往耗时耗力&#xff0c;特别是对于需要频…

【使用winget下载Java21】

winget search java选择需要的版本 winget install BellSoft.Liberic aJDK.21.full

Openpyxl--学习记录

1.工作表的基本操作 1.1 工作表的新建打开与保存 1.1.1 创建工作簿 from openpyxl import Workbook from pathlib import Pathfile_path Path.home() / "Desktop" / "123.xlsx"# 1.创建工作簿 wb Workbook() # 2.访问默认工作簿 ws wb.active # 3.填充…

【算法】spfa最短路径算法

目录 一、概念 二、思路 三、spfa求最短路 在阅读本文前请先食用&#xff1a; 【算法】Bellman-Ford单源最短路径算法&#xff08;附动图&#xff09;-CSDN博客文章浏览阅读366次&#xff0c;点赞16次&#xff0c;收藏14次。算法学习笔记之Bellman-Ford单源最短路径算法htt…

线性代数学习

1.标量由只有一个元素的张量表示 import torchx torch.tensor([3,0]) y torch.tensor([2,0])x y, x * y, x / y, x**y 2.可以将向量视为标量值组成的列表 x torch.arange(4) x 3.通过张量的索引访问任一元素 x[3] 4.访问张量长度 len(x) 5.只有一个轴的张量&#xff0c…

JAVA Maven 的安装与配置

一、下载地址 官方网站&#xff1a;Maven – Download Apache Maven 我这里是3.8.6版本 二、安装步骤 maven安装之前要先安装jdk&#xff0c;请确保你的系统已经安装了jdk环境。 1.将下载好的 Maven 进行解压 apache-maven-3.6.8-bin.zip 2.配置本地仓库:修改 conf/settin…