当前位置: 首页 > news >正文

[网络协议篇] 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()

相关文章:

[网络协议篇] UDP协议

文章目录 1. 简介2. 特点3. UDP数据报结构4. 基于UDP的应用层协议5. UDP安全性问题6. 使用udp传输数据的系统就一定不可靠吗&#xff1f;7. 基于UDP的主机探活 python实现 1. 简介 User Datagram Protocol&#xff0c;用户数据报协议&#xff0c;基于IP协议提供面向无连接的网…...

关系型数据库(1)----MySQL(初阶)

目录 1.mysql 2.mysqld 3.mysql架构 1.连接层 2.核心服务层 3.存储引擎层 4.数据存储层 4.SQL分类 5.MySQL操作库 6.MySQL数据类型 1. 数值类型 2. 日期和时间类型 3. 字符串类型 4. 空间类型 5. JSON数据类型 7.MySQL表的约束 1. 主键约束&#xff08;PRIMARY…...

计算机毕业设计Python+大模型租房推荐系统 租房大屏可视化 租房爬虫 hadoop spark 58同城租房爬虫 房源推荐系统

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 用到的技术: 1. python…...

深度学习技术演进:从 CNN、RNN 到 Transformer 的发展与原理解析

深度学习的技术演进经历了从卷积神经网络&#xff08;CNN&#xff09;到循环神经网络&#xff08;RNN&#xff09;再到 Transformer 的重要发展。这三个架构分别擅长处理图像、序列数据和多种任务的特征&#xff0c;标志着深度学习在不同领域取得的进步。 1. 卷积神经网络&…...

Lua中的goto语句

软考鸭微信小程序 过软考,来软考鸭! 提供软考免费软考讲解视频、题库、软考试题、软考模考、软考查分、软考咨询等服务 在Lua编程语言中&#xff0c;goto语句是一种跳转语句&#xff0c;用于将程序的执行流程无条件地转移到程序中的另一个位置。这个位置由一个标签&#xff08;…...

【rust实战】rust博客系统2_使用wrap启动rust项目服务

如何创建一个使用warp框架的rust项目1.使用cargo 创建项目 cargo new blog 2.添加warp依赖 1.cd blog 2.编辑Cargo.toml文件 添加warp 和 tokio 作为依赖项 在[dependencies]中添加 [package] name "blog" version "0.1.0" …...

【实战案例】Django框架使用模板渲染视图页面及异常处理

本文基于之前内容列表如下&#xff1a; 【图文指引】5分钟搭建Django轻量级框架服务 【实战案例】Django框架基础之上编写第一个Django应用之基本请求和响应 【实战案例】Django框架连接并操作数据库MySQL相关API 视图概述 Django中的视图的概念是一类具有相同功能和模板的网…...

设置K8s管理节点异常容忍时间

说明 每个节点上的 kubelet 需要定时向 apiserver 上报当前节点状态&#xff0c;如果两者间网络异常导致心跳终端&#xff0c;kube-controller-manager 中的 NodeController 会将该节点标记为 Unknown 或 Unhealthy&#xff0c;持续一段时间异常状态后 kube-controller-manage…...

什么样的JSON编辑器才好用

简介 JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;易于人阅读和编写&#xff0c;同时也便于机器解析和生成。随着互联网和应用程序的快速发展&#xff0c;JSON已经成为数据传输和存储的主要格式之一。在处理和编辑JSON数据…...

ArkUI自定义TabBar组件

在ArkUI中的Tabs&#xff0c;通过页签进行内容视图切换的容器组件&#xff0c;每个页签对应一个内容视图。其中内容是图TabContent作为Tabs的自组件&#xff0c;通过给TabContent设置tabBar属性来自定义导航栏样式。现在我们就根据UI设计的效果图来实现下图效果&#xff1a; 根…...

pair类型应用举例

在main.cpp里输入程序如下&#xff1a; #include <iostream> //使能cin(),cout(); #include <utility> //使能pair数据类型; #include <string> //使能string字符串; #include <stdlib.h> //使能exit(); //pair类型可以将两个相同的或不同类…...

数字 图像处理算法的形式

一 基本功能形式 按图像处理的输出形式&#xff0c;图像处理的基本功能可分为三种形式。 1&#xff09;单幅图像 单幅图像 2&#xff09;多幅图像 单幅图像 3&#xff09;单&#xff08;或多&#xff09;幅图像 数字或符号等 二 几种具体算法形式 1.局部处理邻域对于任一…...

安徽对口高考Python试题选:输入一个正整数,然后输出该整数的3的幂数相加形式。

第一步&#xff1a;求出3的最高次幂是多少 guoint(input("请输入一个正整数:")) iguo a0 while i>0: if 3**i<guo: ai break ii-1print(a)#此语句为了看懂题目&#xff0c;题目中不需要打印出最高幂数 第二步…...

Node.js是什么? 能做什么?

‌Node.js是一个基于Chrome V8引擎的JavaScript运行环境&#xff0c;它使用事件驱动、非阻塞式I/O模型&#xff0c;使得JavaScript能够在服务器端运行。Node.js允许JavaScript脱离浏览器&#xff0c;直接在服务器和计算机上使用&#xff0c;极大地扩展了JavaScript的应用范围。…...

JVM快速入门

1、 JVM探究 面试问题 :谈谈对JVM的理解? java8虚拟机和之前的变化更新?什么是OOM,什么是栈溢出StackOverFlowError?怎么分析?JVM的常用调优参数有哪些?内存快照如何抓取,怎么分析Dump文件?知道吗?谈谈JVM中,类加载器你的认识?2、JVM的位置 3、JVM的体系结构 3.1…...

理解深度学习模型——高级音频特征表示的分层理解

理解深度学习模型可以是一个复杂的过程&#xff0c;因为这些模型通常包含大量的参数和层次。 &#xff08;1&#xff09;复杂性来源&#xff1a; 深度学习模型的复杂性来源于多个方面&#xff0c;包括模型的规模、层次结构、参数数量以及训练数据的复杂性。以下是一些关键点&a…...

【HarmonyOS Next】原生沉浸式界面

背景 在实际项目中&#xff0c;为了软件使用整体色调看起来统一&#xff0c;一般顶部和底部的颜色需要铺满整个手机屏幕。因此&#xff0c;这篇帖子是介绍设置的方法&#xff0c;也是应用沉浸式效果。如下图&#xff1a;底部的绿色延伸到上面的状态栏和下面的导航栏 UI 在鸿蒙…...

数据结构 ——— 树的概念及结构

目录 树的结构以及示意图 树的概念​编辑 树的结构与递归的关系​编辑 树的结构以及示意图 树是一种非线性的数据结构&#xff0c;它是由 n(n>0) 个有限节点组成一个具有层次关系的集合 把这种结构叫做树是因为它看起来像一棵倒挂的树 特点&#xff1a; 有一个特殊的…...

初探Vue前端框架

文章目录 简介什么是Vue概述优势MVVM框架 Vue的特性数据驱动视图双向数据绑定指令插件 Vue的版本版本概述新版本Vue 3Vue 3新特性UI组件库UI组件库概述常用UI组件库 安装Vue安装Vue查看Vue版本 实例利用Vue命令创建Vue项目切换工作目录安装vue-cli脚手架创建Vue项目启动Vue项目…...

Lucas带你手撕机器学习——岭回归

岭回归&#xff08;Ridge Regression&#xff09; 一、背景与引入 在进行线性回归分析时&#xff0c;我们常常面临多重共线性的问题。多重共线性指的是自变量之间高度相关&#xff0c;这会导致回归系数的不稳定性&#xff0c;使得模型的预测能力降低。传统的线性回归通过最小…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...