UDP 协议

news2024/11/29 4:41:29

目录

 

 一、什么是协议

二、认识UDP 协议

2.2 UDP 协议的报文格式

2.3 使用UDP 协议传输大文件时的策略

 2.4 UDP协议的工作流程


 一、什么是协议

为了使数据在网络上传输(从源头到达目的),网络通信的参与方必须遵循相同的规则,如:怎么样建立连接、怎么样传输、怎么样互相解析信息等。只有遵守这个约定,计算机之间才能相互通信交流。这样的规则就被称之为协议(protocol),它最终体现为在网络上传输的数据包的格式。

协议约定了层级和层级之间的调用关系,上层协议调用下层协议,下层协议给上层协议提供支持,不能跨层调用。

详细内容查看:程序猿眼中的协议:TCP / IP 五层网络模型_保护小周ღ的博客-CSDN博客

真实的网络协议使用的是 TCP / IP 五层网络模型,也是当下最广泛使用的网络的模型。

本次讲述的 UDP 协议是传输层上比较常用的协议。

另外一个更厉害的协议 TCP 敬请期待下一篇博客~


二、认识UDP 协议

UDP(User Datagram Protocol)是一种无连接的传输层协议,它不保证数据传输的可靠性,但是具有传输速度快、开销小等特点。UDP协议主要用于需要快速传输数据且对数据的可靠性要求不高的场景,如在线游戏,分布式系统信息的传输(短距离的传输 UDP 的传输的效率是很高的)。

2.1 UDP协议的特点:

  1. 无连接:UDP协议在传输数据之前不需要建立连接,也不需要维护连接状态,可以看作是一股脑地传输,因此传输速度快。
  2. 不可靠:UDP协议不保证数据传输的可靠性,因为它不提供重传机制、异常处理等功能,如果数据在传输过程中出现丢失或错误,UDP协议也不会进行任何处理。
  3. 面向数据报:数据报是通过网络传输的数据的基本单元,包含一个报头(header)和数据本身,其中报头描述了数据的目的地以及和 “荷载” 数据之间的关系。UDP协议的头部只有8个字节,相比TCP协议的头部要小得多,开销也相对小。该知识点下文详细介绍。
  4. 全双工通信:通信允许数据在两个方向上同时传输,比如打电话,通话双方可以同时讲话。
  5. 支持广播和多播:UDP协议支持广播和多播,可以将数据同时发送给多个主机。

敲黑板面试题:TCP 与 UDP有什么区别?

TCP 是面向有连接,采用字节流传输,数据传输可靠的全双工通信协议。

UDP 是面向无连接,采用数据报传输,数据传输不可靠的全双工通信协议。


2.2 UDP 协议的报文格式

学习协议其中一个重要的环节就是认识协议报文格式,一个协议具体是怎么组织数据的。

​编辑

 UDP报文主体分为两个部分: UDP报头(占8个字节的数据) + UDP数据 / UDP载荷

  • 荷载:比较容易理解,里面存储的是应用层的数据报。
  • UDP报头:源端口,目的端口,报文长度,校验和,组成,每个部分占两个字节,可以描述的数据范围是 [0, 65535] 。

解析报文:

  1. 源端口:表示数据从哪里来,端口号可认为是一个进程的标识(那个软件发送的信息),传输层毕竟给应用层提供服务。
  2. 目的端口:表示数据到哪里去,数据报到达指定主机后,将数据报给那个软件解析(进程,通信双方约定了统一的协议格式就可以互相解析数据)。
  3. 传输层的数据报进入网络层后会添加网络层报头,网络层报头中会描述 源 IP 和 目的IP ,这层协议可以用来在庞大的网络环境中找到目标主机。
  4. 报文长度:描述了一条 UDP 数据报所占字节大小,因为长度只占 2个字节,所以他能描述的数据范围是 [0, 65535], 所以一条 UDP 数据报最大长度是 65536 个字节 = 64KB;
  5. 校验和:网络传输并非完全稳定,信息的传输方式有多种多样,难免会出现意外,例如说:恶劣天气,强磁场干扰,传输介质,信号衰减等原因,所以校验和存在的目的就是用来判断一下,当前传输的数据是否出错,如果校验和不对,传输的数据一定不对,即使校验和是对的,数据也有一定的概率是错误的,校验和的校验方式通常会以数据内容(正文荷载中的数据)作为参数进行算法计算,当接收方拿到 UDP 数据报后, 把荷载中的数据拿出来代入校验和算法,再把结果与校验和比较是否相同,即可判断数据传输是否准确。(前提是输入的内容一样,按照统一算法得到的校验和结果也是一样的)。只能由接收端判断数据是否可靠,UDP 协议不提供重发机制,错了就错了,只管传输。
  6. UDP 数据报正文\荷载:里面包含的是应用层数据报的信息,UDP 报文长度(最大值) - UDP 报头即可得荷载大小,报文长度最大是可以描述 64字节,UDP整个报头占 8 个字节,所以荷载最大存储空间(一条UDP 数据报最大能携带的应用层信息)是 64 - 8 = 56字节。

端口号详解:

所谓的端口,可以看作应用程序的门牌号一样,客户端可以通过ip地址找到对应的目的端,但是目的端是有很多应用程序端口的,每个应用程序对应一个端口号;

比如说我电脑qq 给 你发了一条消息,这个条消息通过网络发送到你的电脑,进入你的电脑后,这条消息怎么能知道要给那个应用程序呢(进程)?微信也是腾讯的,也没见着能接收qq 发的消息啊,关键的就是应用程序在启动时会绑定了一个端口号(端口号在一定范围内可以随机使用),一台主机中的端口号不可重复,所以消息在进入主机后就会根据端口号将信息发送到指定应用程序,应用程序就根据应用层的数据报协议(这个可以是通信双方约定的协议,qq自己的协议)解析信息。

端口号只占两个字节,可以描述的数据范围是 [0, 65535] ,也就是我们可以使用的端口号只有这么多,对于小于 1024 的端口号被称之为“知名端口号”,是提供给一些名气比较大的服务器使用,例如:http 服务器的端口号位 80, ssh 的端口号为:22, ftp 服务器的端口号是 21。所以我们要在程序设计中尽量避免使用这部分端口。


2.3 使用UDP 协议传输大文件时的策略

上文介绍 一条 UDP 数据报最大可以传输 64 个字节,去掉报头之后有效的报文荷载只有56字节,也就是说一条 UDP 数据最多传输 56个字节的内容,对于高速发展的科技,太小了,一首歌就有几兆呢(M)。

在面对大型文件传输的时候,UDP 将一个大的数据报拆分成多个部分,使用多个 udp 数据报来传输,作为接收方(应用层)来讲,就需要与发送方(应用层)约定好数据报的解析协议。

例如:我qq给女朋友发送了一大段小作文(应用层的数据报),刷刷的好几百KB, 使用 UDP 协议传输,一条UDP 数据报肯定是不够的,就可以分割成好几条数据报传输,作为接收方(女朋友)的qq, 就需要将发送过来的 UDP 数据报解析\分用成应用层数据报,这个时候根据某种相互约定好的协议才能解析。

​编辑

作为接收方来讲以上数据如何由多条UDP 数据报,组合成一条应用层的数据报呢 ?

所谓封装 UDP 数据报,分割应用层数据报什么的实质上就是字符串的拼接,也就是说数据报的本质就是字符串,协议就是描述了如何 封装\分用\解析 这些字符串。

UDP协议并没有对分割后的数据报作出重新组合的规定,这是由应用层协议负责实现(因为是应用层选择使用 UDP 协议),那么就需要根据UDP协议长度这一特性来设计应用层数据报,一般来说,应用层协议会在发送端进行相关处理,将原始数据分割成多个UDP数据报发送出去,在接收端进行接收之后再进行重新组合,实现方法可以有多种,比如可以在UDP首部附加序列号等信息,接收端通过这些信息来拼接数据报,包括使用一些特殊的分隔符区分一条应用层数据报等等,这方面都是可以通过应用层的手段来控制的。

使用一些特殊的分隔符区举个例子:

这只是一种应用层协议约定的策略,是可以自定义的,前提是通信双方都采用该协议。


当需要我们使用UDP 协议传输大文件时,还有一种方式是建议直接使用 TCP 协议传输,哈哈,即使没有 UDP 传输的快,但是数据传输的真实性高,还没有 UDP 这么麻烦,TCP 是面向字节流传输的嘛,同时也需要通信双方约定好应用层协议,方便解析信息。


 2.4 UDP协议的工作流程

  1. 应用程序将应用层数据报传输给UDP协议。
  2. UDP协议将数据封装成UDP数据报(直接在应用层数据报的基础上加上UDP 报文),包括源端口号、目的端口号、数据长度等信息。
  3. UDP协议将UDP数据报传输给IP协议。
  4. IP协议将UDP数据报封装成IP数据报,包括源IP地址、目的IP地址等信息。
  5. IP数据报通过网络传输到目的主机。
  6. 目的主机的IP协议将IP数据报解封装成UDP数据报。
  7. UDP协议将UDP数据报传输给应用程序

总结:UDP协议是一种简单、快速的传输协议,适用于实时应用程序和需要快速传输数据的应用场景。但是由于它不保证数据传输的可靠性,因此在传输重要数据时需要使用其他协议,如TCP协议。


不用勉强自己去做不喜欢的事

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpaceX的星舰爆炸了:产品开发,快速失败真的很重要

目录 前言 快速失败 产品生命周期 专栏上线 前言 看到很多人都在聊星舰,今天就来简单谈谈“炸星舰”带给我们的启示。 在美国中部时间20日,SpaceX公司的“星舰”超重型火箭进行了首次轨道飞行。 但在该火箭成功点火升空几分钟后,却在半…

Java-synchronized实现详解(从Java到汇编)

synchronized作为java语言中的并发关键词,其在代码中出现的频率相当高频,大多数开发者在涉及到并发场景时,一般都会下意识得选取synchronized。 synchronized在代码中主要有三类用法,根据其用法不同,所获取的锁对象也…

如何通过开源项目搭建私有云平台--第四步下:安装rancher 监控

第四步下:安装rancher 监控,缺告警 本来想监控与告警一起写,但最近几天研究了rancher的告警,按照文档说法,配置了但没有触发,网上找了一些资料,有的在rancer 2.6成功的,但我用同样的方法在2.7.…

09 【Sass语法介绍-函数指令】

1.前言 在之前的章节我们学习过 Sass 提供的各种各样的函数,那么如果我们需要自定定义函数来使用就需要用到函数指令 function了。本节内容我们来学习 Sass 函数指令的语法和使用,在 Sass 中自定义函数是必须要掌握的! 2.什么是 Sass 函数指…

又一款可视化神器,开源了!

在互联网数据大爆炸的这几年,各类数据处理、数据可视化的需求使得 GitHub 上诞生了一大批高质量的 BI 工具。 借助这些 BI 工具,我们能够大幅提升数据分析效率、生成更高质量的项目报告,让用户通过直观的数据看到结果,减低沟通成…

安卓项目如何做单元测试

前言 先说一下创建篇文章的目的,近期负责搭建公司的单元测试框架,于是查阅了网上的很多文章,以及参考了github上很多的项目例子,并且也进行了相当多的尝试。这其中花费了很多的精力,大约有两三周的时间,远…

淘系抓包流程(淘宝数据无法抓包解决方式)

淘系抓包流程 结合frida和adb工具以及mumu模拟器进行抓包。 具体的关系图: frida的安装 frida安装,直接安装官网的脚手架。frida官网使用python的pip安装,python > 3。 安装后使用查看版本命令来确认是否安装。 pip install frida-tools frida --ve…

【严重】VMware Aria Operations for Logs v8.10.2 存在反序列化漏洞(CVE-2023-20864)

漏洞描述 VMware Aria Operations for Logs前身是vRealize Log Insight,VMware用于处理和管理大规模的日志数据产品。 VMware Aria Operations for Logs 8.10.2版本中存在反序列化漏洞,具有 VMware Aria Operations for Logs 网络访问权限的未经身份验…

“SCSA-T学习导图+”系列:交换技术之STP

本期引言: 在通信工程当中,从物理层面上,我们可以采用冗余链路保证网络的健壮性。冗余是指出于系统安全和可靠性等方面的考虑,人为地对一些关键部件或功能进行重复的配置。当系统发生故障时,比如某一设备发生损坏&…

【Linux】Linux下的gbd调试,你学废了吗

操作系统核心数centos 3.10.032位单核 gbd调试方法-以线程运行时调试为例 线程死锁状态时查看栈升级gbd通过gdb在程序运行时进行调试 线程死锁状态时查看栈 在线程-线程安全之互斥中,我们自己写了一个模拟实现的线程死锁情况 我们用gbd调试查看了当前线程的调用&a…

拉链表制作

1.拉链表的应用场景 拉链表适合于:数据会发生变化,但是大部分是不变化的(即:缓慢变化维。还需要保留历史数据做分析的场景) 2.拉链表的形成过程 关键的过程 第四步:获取变化的数据(创建和修改…

Flask连接MySQL

本文章涉及到Flask框架和HTML内容,相关知识可查看链接 HTML-form表单和提交_html form 提交_小梁今天敲代码了吗的博客-CSDN博客https://blog.csdn.net/weixin_43780415/article/details/130110722 前端引入和html标签_小梁今天敲代码了吗的博客-CSDN博客https://b…

vscode下drawio无法使用

问题描述: Vscode下, 刚下载drawio这个插件,在vscode左边EXPLORER下,没有Test这个页面,导致vscode无法使用drawio。 解决办法: 在自己需要的目录下,新建一个文件,例如test,并命名为test.drawi…

数据结构算法

直接插入排序 1.从第一个元素开始,该元素可以认为已经被排序 2.取下一个元素tem,从已排序的元素序列从后往前扫描 3.如果该元素大于tem,则将该元素移到下一位 4.重复步骤3,直到找到已排序元素中小于等于tem的元素 5.tem插入到该元…

5.1劳动节,致敬最可爱的人!Cocos社区杰出贡献者出炉

Cocos 引擎的生态建设与繁荣,离不开社区开发者的辛勤付出。 2022.5 ~ 2023.5 年度期间,有这样一批 Cocos 社区开发者,他们使用 Cocos Creaor 引擎创作内容与产品、分享技术和经验,为 Cocos 社区默默贡献自己的一份力量&#xff0c…

改进YOLOv8:替换轻量化骨干网络Efficient V1、Efficient V2《重新思考卷积神经网络的模型缩放》)

这里写目录标题 1 EfficientNetV1中存在的问题2.EfficientNetV2网络框架3.YOLOv8添加Efficient V1代码yaml文件Efficient V1代码运行4. 添加Efficient V2代码yaml文件Efficient V2运行Efficient V1论文地址:https://arxiv.org/pdf/1905.11946.pdf Efficient V1代码地址:

Golang每日一练(leetDay0049) 二叉树专题(9)

目录 144. 二叉树的前序遍历 Binary-tree Preorder Traversal 🌟 145. 二叉树的前序遍历 Binary-tree Postorder Traversal 🌟 对比: 94. 二叉树的中序遍历 Binary-tree Inorder Traversal 🌟 146. LRU缓存 LRU Cache &am…

调用移动云OCR识别身份证

一.开通移动云OCR服务 在下面这个网址开通免费服务,,每个账号可免费使用500次,先要实名认证。 通用文字识别 (10086.cn)https://ecloud.10086.cn/home/product-introduction/Generalverify 有两种方式: 这里选择第二种 。 二…

炸裂的 Auto-GPT,帮我自动生成小视频!

大家好,我是程序员贺同学。 继前段时间爆火的 ChatGPT 后,又一个炸裂的开源项目 Auto-GPT 出现了。 仿佛一夜之间,AI 圈又出现了一个新晋顶流。我们来看看它有多🔥。 在 GitHub 上,仅最近不到两个礼拜,这个…

TCP/IP基础知识

文章目录 互联网与TCP/IP的关系TCP/IP与OSI参考模型硬件(物理层)互联网层(网络层)IPICMPARP 传输层TCPUDP 应用层WWW电子邮件(E-Mail)文件传输(FTP)远程登录(TELNET与SSH&#xff09…