UDP协议详解

1、UDP协议的基本属性

  1. 什么是udp协议

    udp也是传输层特别重要的协议;它提供一种无连接的、不可靠的、数据报传输服务。

  2. udp协议的技术特性

    无连接:发送端与接收端传输数据时不用建立连接;因此udp的传输速度快。

    不可靠:这个不可靠是相对于tcp来说的,由于udp协议不用维护连接状态,没有TCP的确认机制、重传机制,如果因为网络原因没有传送到对端,UDP也不会给应用层返回错误信息;网络中的拥塞也不影响主机的发送速率,因此udp没有拥塞控制。

    基于报文传输:传输的数据是以整包的形式;比如sendto发送一包数据(100k),recvfrom就必须把这一整包数据一次性全部接受完。

  3. udp协议的应用

    当程序对数据的传输速度要求远高于传输可靠性时,传输层的数据转发可以使用udp。

    比如视频通话,网络直播,实时网游等,对实时性要求特别高的,即使过程中丢失一些数据,对整体效果影响不大的应用场景。

2、udp协议头简介

        16位源端口号:源主机的应用程序使用的端口号。

        16位目的端口号:目的主机的应用程序使用的端口号。

        16位UDP长度:udp数据包的总长度,udp协议头+数据。因为UDP头部长度为8字节,所以该字段的最小值为8。

        16位UDP校验和:检测udp数据报中是否有错,有错就丢弃;该字段是可选的。(UDP校验)

3、UDP的工作原理

        udp协议与ip协议非常类似,可以将udp看作是ip协议暴露在传输层的接口,但是udp与ip协议的区别就是,ip协议中没有端口(port)的概念,他只负责两台主机(ip地址)之间的数据传输,而udp协议引入了端口(可以精确到主机上的某一个应用程序)。

        正因为udp协议是不面向连接的,所以它才可以实现一对一单播,一对多的广播,组播等数据传输。

  1. 一对一单播原理 
    • 单播:两个主机间单对单的通信。     

      udp协议也是通过套接字编程实现基于TCP/IP协议的面向无连接的通信,因此也可分为客户端和服务端,由于它是无连接的,所以服务器端并不需要listen或accept函数,bind函数看去求,也可不用。具体流程如下图:

  2. 一对多的广播原理   
    • 广播:一个主机对整个局域网上所有主机上的数据通信(网络地址全1),传输层只有udp可以广播。

      单播和广播是两个极端,要么对一个主机进行通信,要么对整个局域网的主机进行通信  

    • 广播地址:在使用TCP/IP 协议的网络中,主机标识段host ID 为全1 的IP 地址为广播地址,广播的分组传送给host ID段所涉及的所有计算机。

    • 广播的具体实现可以参考udp实现广播。

  3. 特定主机的组播

    • 组播:实际情况下,经常需要对一组特定的主机进行通信,而不是所有局域网上的主机。
    • 组播地址:IP 组播通信必须依赖于 IP 多播地址,在 IPv4 中它是一个 D 类 IP 地址,范围从 224.0.0.0 到 239.255.255.255,并被划分为局部链接多播地址、预留多播地址和管理权限多播地址3类:

       局部链接多播地址范围在 224.0.0.0~224.0.0.255,这是为路由协议和其它用途保留的地址,路由器并不转发属于此范围的IP包;

      预留多播地址为 224.0.1.0~238.255.255.255,可用于全球范围(如Internet)或网络协议;

      管理权限多播地址为 239.0.0.0~239.255.255.255,可供组织内部使用,类似于私有 IP 地址,不能用于 Internet,可限制多播范围。 

4、TCP协议与UDP协议的技术特点对比

  1. 相同点:TCP和UDP都是传输层协议,都能都能保护网络层的传输,双方的通信都需要开放端口,TCP和UDP中都存在复用分用技术。
  2. 不同点:
    1. 最主要的区别就是TCP可靠,UDP不可靠。

    2. 传输数据的格式,TCP是字节流,UDP数据报。

      对于TCP:TCP不关心应用程序一次性把多长的数据报文发送到TCP缓存中,而是根据对方给出的窗口值和网络拥塞程度决定报文段应该包含多少字节。
      对于UDP:一次交付一个完整的报文,报文长度由应用程序给出。

5、如何克服UDP的缺点

        虽然UDP协议有不可靠等缺点,但是因为它那传输速度,依旧无法被替代,因此工程师们想尽办法在应用层对UDP进行完善,进而实现可靠的UDP传输协议——KCP。

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

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

相关文章

mac上如何压缩视频大小?

mac上如何压缩视频大小?由于视频文件体积庞大,常常会占据我们设备的大量存储空间。通常情况下,我们选择删除视频以释放内存,但这将永久丢失它们。然而,有一种更好的方法可以在不删除视频的情况下减小内存占用&#xff…

Azure如何调整虚拟机的大小

参考 https://blog.csdn.net/m0_48468018/article/details/132267096 创建虚拟机进入资源,点击大小选项,并对大小进行调整 点击如下图的cloud shell,进入Azure CLI,使用az vm resize 进行大小调整 命令中的g对应资源组,n对应虚拟机名称&am…

马斯克为何说大模型中R语言会替代Python

为什么不是Python? 当今的LLM应用程序,包括推理应用程序和代理,大多是用 Python 编写的。但这种情况即将改变。对于新一波的开发人员来说,Python 实在是太慢、太臃肿,而且要命的是太笨拙了。事实上, LLVM、…

Node.js入门

安装 前往官网下载即可:https://nodejs.org/zh-cn 安装之后检查是否成功并查看版本,winr --> 输入cmd --> 确认 --> 进入命令提示符窗口 --> 输入 node -v --> 出现以下就代表成功了,这也是node的版本号 什么是Node.js Nod…

MyBatis动态SQL:打造灵活可变的数据库操作

目录 if标签trim标签where标签set标签foreach标签 动态SQL就是根据不同的条件或需求动态地生成查询语句,比如动态搜索条件、动态表或列名、动态排序等。 if标签 在我们填写一些信息时,有些信息是必填字段,有的则是非必填的,这些…

[oneAPI] 使用序列到序列网络和注意力进行翻译

[oneAPI] 使用序列到序列网络和注意力进行翻译 oneAPI特殊写法使用序列到序列网络和注意力进行翻译Intel Optimization for PyTorch导入包加载数据并对数据进行处理序列到序列网络和注意力模型与介绍编码器解码器简单解码器注意力解码器 训练过程准备训练数据训练模型可视化注意…

TCP/IP---网络层

一、网络层的主要功能 1、提供了通讯过程中,必须要使用的另一个地址:逻辑IP地址【ipv4、ipv6】 2、连接不同媒介类型【内网--外网(intra -- inter)】 3、根据运行的不同的路由协议,选择不同的最佳路径 4、在选择的最好…

免费开源的vue+express搭建的后台管理系统

此项目已开源 前端git地址:exp后台管理系统前端: exp后台管理系统前端 后端git地址:express后台管理系统: express后台管理系统 安装运行 npm i yarn i 前端: npm run dev | yarn dev 后端: npm run start | yarn start 主要技术栈 前端后端名称版本名…

【抖音直播小玩法】介绍

一、是什么 直播小玩法是基于抖音直播场景的新型实时互动内容。直播小玩法由开发者自主开发,接入平台并开放给抖音主播挂载使用。开发者提供创意,依托平台生态,获取收益。 介入标准: 企业开发者,暂不支持个人开发者…

【IMX6ULL驱动开发学习】07.驱动程序分离的思想之平台总线设备驱动模型和设备树

一、驱动程序分离的思想 【IMX6ULL驱动开发学习】05.字符设备驱动开发模板(包括读写函数、poll机制、异步通知、定时器、中断、自动创建设备节点和环形缓冲区)_阿龙还在写代码的博客-CSDN博客 之前编写驱动程序的代码存在不少弊端:移植性差…

linux vscode 下开发

linux vscode 下开发 javajdk插件 java jdk 各种JAVA JDK的镜像分发 编程宝库 - 技术改变世界 jdk 镜像 ubuntu22.04 安装 # Linux x64 64位 jdk-8u351-linux-x64.tar.gztar -zxf jdk-8u351-linux-x64.tar.gz mv jdk1.8.0_351 jdk8/ vim ~/.profile expo…

Ceph如何操作底层对象数据

1.基本原理介绍 1.1 ceph中的对象(object) 在Ceph存储中,一切数据最终都会以对象(Object)的形式存储在硬盘(OSD)上,每个的Object默认大小为4M。 通过rados命令,可以查看一个存储池中的所有object信息,例如…

chromedriver.exe 的所有版本下载地址

Chrome for Testing availability 上面的网址是V115 v116.... 以上的。 CNPM Binaries Mirror 上面这个是V115版本以下的。 这个文章没有任何实际价值,记录的原因是因为突然发现过去的py无法运行,原因是chrome浏览器偷偷升级到V115,于是找…

Redis消息传递:发布订阅模式详解

目录 1.Redis发布订阅简介 2.发布/订阅使用 2.1 基于频道(Channel)的发布/订阅 2.2 基于模式(pattern)的发布/订阅 3.深入理解Redis的订阅发布机制 3.1 基于频道(Channel)的发布/订阅如何实现的? 3.2 基于模式(Pattern)的发布/订阅如何实现的? 3.3 Sp…

Linux多线程【初识线程】

✨个人主页: 北 海 🎉所属专栏: Linux学习之旅 🎃操作环境: CentOS 7.6 阿里云远程服务器 文章目录 🌇前言🏙️正文1、什么是线程?1.1、基本概念1.2、线程理解1.3、进程与线程的关系…

【Java 动态数据统计图】动态数据统计思路案例(动态,排序)二(113)

需求&#xff1a; 有一个List<Map<String.Object>>,存储了区域的数据&#xff0c; 数据是根据用户查询条件进行显示的&#xff1b;所以查询的数据是动态的&#xff1b;按区域维度统计每个区域出现的次数&#xff0c;并且按照次数的大小排序&#xff08;升序&#…

容器和云原生(二):Docker容器化技术

目录 Docker容器的使用 Docker容器关键技术 Namespace Cgroups UnionFS Docker容器的使用 首先直观地了解docker如何安装使用&#xff0c;并快速启动mysql服务的&#xff0c;启动时候绑定主机上的3306端口&#xff0c;查找mysql容器的ip&#xff0c;使用mysql -h contain…

shell和Python 两种方法分别画 iostat的监控图

在服务器存储的测试中,经常需要看performance的性能曲线&#xff0c;这样最能直接观察HDD或者SSD的性能曲线。 如下这是一个针对HDD跑Fio读写的iostat监控log,下面介绍一下分别用shell 和Python3 写画iostat图的方法 1 shell脚本 环境:linux OS gnuplot工具 第一步 :解析iosta…

设计模式——适配器模式

引入实例 说起适配器其实在我们的生活中是非常常见的&#xff0c;比如&#xff1a;学校的宿舍的电压都比较低&#xff0c;而有的学生想使用大功率电器&#xff0c;宿舍的就会跳闸&#xff0c;然而如果你使用一个适配器&#xff08;变压器&#xff09;就可以使用了&#xff08;…