【网络编程】【UDP】UDP协议介绍

2023-10-27

一、UDP介绍

       UDP和TCP相比是截然不同的,是一个简单的传输协议。全称是用户数据包协议(User Datagram Protocol),是一个无连接协议。UDP不保证UDP数据报会到达其最终目的地,不保证各个数据报的先后顺序跨网络后保持不变,也不保证每个数据报只到达次。

       我们使用UDP进行网络编程所遇到的问题是它缺乏可靠性。如果一个 数据报到达了其最终目的地,但是校验和检测发现有错误,或者该数据报在网络传输途中被丢弃了,它就无法被投递给UDP套接字,也不会被源端自动重传。如果想要确保一个数据报到达其目的地, 可以往应用程序中添置一大堆 的特性:来自对端的确认、本端的超时与重传等。

       每个UDP数据报都有一个长度。如果一个数据报正确地到达其目的地,那么该数据报的长度将随数据一道传递给接收端应用进程。我们已经提到过TCP是一个字节流(byte stream)协议,没有任何记录边界。

      UDP是无连接的,因为UDP客户与服务器不必存在任何长期的关系。所以服务器和客户端都可以用同一个UDP套接字和不同的对端通讯。

 

       这一端的UDP简单地给来自用户的数据报安上它的8字节的首部以构成UDP数据报,然后传递给IP。IPv4或IPv6给UDP数据报安上相应的IP首部以构成IP数据报,执行路由操作确定外出接口,然后或者直接把数据报加入数据链路层输出队列(如果适合于MTU),或者分片后再把每个片段加入数据链路层的输出队列。如果某个UDP应用进程发送大数据报(譬如说2000字节数据报),那么它们相比TCP应用数据更有可能被分片,因为TCP会把应用数据划分成MSS大小59的块,而UDP却没有对等的手段。

       从写一个UDP套接字的write调用成功返回表示所写的数据报或其所有片段已被加入数据链路层的输出队列。如果该队列没有足够的空间存放该数据报或它的某个片段,内核通常会返回一个ENOBUFS错误给它的应用进程。

 

       尽管UDP无法提供TCP提供的众多特性,需要使用UDP的场合依然不少。广播或多播应用必须使用UDP。简单的请求应答情形也可以使用UDP,不过必须在应用程序中增加某种形式的可靠性。UDP不应该用于海量数据的传送。

 

二、UDP协议

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【网络编程】【UDP】UDP协议介绍 的相关文章

  • 在不使用环回网络的情况下将数据包转发到同一主机中的服务

    我有这个 libnetfilter queue 应用程序 它根据某些 iptables 规则从内核接收数据包 在直接讨论我的问题之前 我提供了一个示例可行代码和其他工具来设置测试环境 以便我们的问题定义和可能的解决方案可以更加准确和稳健 以
  • 播放 UDP 数据包中收到的原始 PCM 音频

    远程设备正在 UDP 数据包中发送实时原始 PCM 音频 不包含标头 我需要在 java 中实现一个程序来接收这些数据包并在 PC 上实时播放它们 据我所知 原始 PCM 的属性是 16 位 单声道 采样率 24KHz 因此我尝试向该原始
  • 对 C# 中 UDP 协议的套接字感到困惑

    我刚刚开始通过各种 Google 搜索学习套接字 但在弄清楚如何在 C 中正确使用套接字时遇到一些问题 我需要一些帮助 我有一个测试应用程序 Windows 窗体 和一个不同的类 实际上在它自己的 dll 中 但这无关紧要 我有我的套接字代
  • C# UDP广播和接收示例

    问题 我正在尝试将 udp 套接字绑定到特定地址 我会广播一条消息 同一个套接字需要能够接收消息 当前代码 static void Main UdpClient Configuration new UdpClient new IPEndPo
  • 数据报总是被完整接收吗?

    大多数数据报接收函数 例如c的recv或read java的DatagramPacket类或python的SocketServer 都包含找出接收数据量的可能性 c int amount recv sock buf n MSG WAITAL
  • Java:使用多个 DatagramSocket 接收 UDP 数据报包

    我正在尝试实现一种将 UDP 数据包发送到多个接收者的方法 我认为这应该是可行的设置setReuseAddress true 在接收 DatagramSocket 实例上 我的问题是 在某些情况下 我需要限制与本地计算机的通信 因此限制本地
  • C++ 反序列化通过 UDP 从 C# 应用程序发送的对象

    我有一个申请c 它连接到另一个应用程序 编写为c 通过UDP 我更喜欢高性能的解决方案 因为我希望测量事件客户端 某些处理服务器端和客户端处理完成的响应之间的时间 本质上是 往返延迟 我有一个 C 对象 例如 public class Pa
  • 如果客户端在服务器之后启动,则 GStreamer v1.0 UDP 多播流无法正确解码

    我正在尝试使用 GStreamer 进行 UDP 多播屏幕流传输 我的投屏服务器应该在 Windows 上运行 and my 客户端应在 Linux 上运行 如果我在服务器之前启动客户端 一切都很好 问题是当我启动客户端并且服务器已经启动时
  • NodeJS UDP 多播如何

    我正在尝试将 UDP 多播数据包发送到 230 185 192 108 以便每个订阅的人都会收到 有点卡住了 我相信它的广播正确 但似乎无法从任何客户端获取任何信息 Server var news Borussia Dortmund win
  • 更改Windows下的默认套接字缓冲区大小[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我无法更改的应用程序正在丢弃一些传入的 UDP 数据包 我怀疑接收缓冲区溢出 是否有注册表设置可以使默认缓冲区大于 8KB From th
  • C# 广播是UDP消息,监听多个回复

    我正在尝试编写一些执行 UDP 广播的代码 然后侦听来自远程服务器的答复 说明它们存在 它用于识别子网上运行服务器应用程序的计算机 因此基本上会发出 谁在那儿 并听取所有答复 我在 Java 中有这个 工作完美 它将 DatagramPac
  • 对等网络应用程序的网络发现

    我希望有两个类 一个服务器类和一个客户端类 服务器类应该接收每个新客户端的 IP 地址和端口号并将它们存储在列表中 它应该为每个客户端提供已连接客户端及其 IP 地址的列表 然后 客户端可以使用 TCP 连接相互通信 问题是客户端不知道服务
  • Windows 操作系统中无法访问的 IP 套接字关闭时间

    这些代码通过用户数据报协议提供发送数据 下面有两个代码 当我使用第一个代码来处理无法访问的 IP 地址时 我得到了三秒的延迟 请查看新结果标题 只需打开新的 C 控制台应用程序并将这些代码粘贴到其中 第一个代码 using System u
  • 提高UDP可靠性

    我正在构建一个基于 UDP 的小型服务器 服务器基于 Net并使用它自己的Socket类 我通过 ReceiveMessageFromAsync 和异步发送使用完成端口 我的问题是我失去了大约 5 10 的流量 现在我明白这是正常的 但是有
  • Rails 是否支持侦听 UDP 套接字的简洁方式?

    在 Rails 中 集成更新模型某些元素的 UDP 侦听过程的最佳方式是什么 特别是向其中一个表添加行 简单的答案似乎是在同一进程中使用 UDP 套接字对象启动一个线程 但不清楚我应该在哪里执行适合 Rails 方式的操作 有没有一种巧妙的
  • 使用 Boost.Asio 进行广播的问题

    如果问题之前已得到解答 我提前表示歉意 但我已经搜索并没有找到任何对我有帮助的东西 正如问题标题所示 我正在尝试将包从服务器广播到一组侦听任何消息的客户端 客户端将计算一秒钟内收到的消息数 服务器端的事情是这样的 class Server
  • P2P网络游戏/应用程序:类似“战网”匹配服务器的不错选择

    我正在制作一个网络游戏 1v1 游戏中是 p2p 不需要游戏服务器 然而 为了让玩家能够 找到彼此 而不需要在另一种媒介中协调并输入IP地址 类似于网络游戏的现代时代 我需要有一个协调 匹配服务器 我无法使用常规网络托管 因为 客户端将使用
  • recvfrom() 中的 addrlen 字段有何用途?

    我在程序中使用 recvfrom 从我在 src addr 中指定的服务器获取 DGRAM 数据 但是 我不确定为什么需要初始化并传入addrlen 我读了手册页 但不太明白它的意思 如果src addr不为NULL 并且底层协议提供了源地
  • 如何使用 Nmap 检索 TCP 和 UDP 端口? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我需要在使用 Nmap 的同一扫描中以尽可能最快的方式检索 TCP 和 UDP 端口 我会尽力解释得更好 如果我使用最常用的命令 nmap 192 1
  • 错误号:11,资源暂时不可用

    我正在使用 c 套接字来实现可靠的 UDP 协议 我正在使用以下代码在等待确认的套接字上设置超时 我不确定为什么会收到 errno 11 资源暂时不可用 set timer for recv socket struct timeval tv

随机推荐

  • el-checkbox的基本使用,避坑指南

    el checkbox的基本使用 避坑指南 使用el checkbox勾选出现的问题 全选不生效 全选后底下的勾选不能回显 有问题的代码
  • Linux下并行时间增加,Linux下Castep并行计算时节点配置

    1 并行所使用的节点及核心配置文件 PATH ms42 share data machines LINUX 格式为 节点名称 核心数 每cpu核心数 cpu数 node1 8 Intel R Xeon R CPU E5430 2 66GHz
  • 【python+selenium】UI自动化测试环境搭建及使用(建议收藏)

    一 什么是Selenium Selenium 是一个浏览器自动化测试框架 它主要用于web应用程序的自动化测试 其主要特点如下 开源 免费 多平台 浏览器 多语言支持 对web页面有良好的支持 API简单灵活易于使用 支持分布式测试用例执行
  • python基础笔记

    https www bilibili com video BV1qW4y1a7fU p 12 spm id from pageDriver vd source db3d134c564b091aeb95550baf2fa5b0 第一阶段 01
  • linux和windows的对比

    Windows下可以运行绝大部分的游戏 硬件厂商近乎100 的支持 linux下可直接运行的软件数量 和win比起来就是1和99的区别 选择linux的人基本不会考虑玩游戏 同时linux正期待更多硬件厂商的支持 linux安全性高 win
  • Ubuntu 20.04下docker安装和添加阿里云服务器镜像和加速镜像

    官方的docker安装文档 https docs docker com engine install ubuntu 先卸载旧版的docker sudo apt get remove docker docker engine docker i
  • C/C++程序员何去何从

    滚滚长江东逝水 浪花淘尽英雄 虽说是个人英雄的时代已经成为过去 但我们仍然不能对这样的榜样们有所忘怀 他们是WPS求伯君 CCDOS严援朝 2 13吴晓军 四通利方王志东 CCED朱崇君 UCDOS鲍岳桥等 因为他们不仅是成名的优秀程序员
  • element组件:点击侧边栏,切换右侧内容

    侧边栏 远程加载了页面的头部
  • pip工具使用之版本变更及恢复

    1 版本变更 降低版本 pycharm安装第三方库 Try to run this command from the system terminal Make sure that you use the问题 亲测已解决 爱编程的小新的博客
  • STL-String容器

    string本质上是一个类 string 类内部封装了很多成员方法 例如 查找find 拷贝copy 删除delete 替换replace 插入insert string管理char 所分配的内存 不用担心复制越界和取值越界等 由类内部进行
  • Android通用的筛选栏实现

    最近事情比较多 不管是生活还是工作 感觉节奏都在赶着走 对于之前相对比较喜欢自由的我 也要慢慢适应之后的节奏了 不管怎样 生活还在继续 加油 今天来写一个通用的筛选栏的实现 也是因为之前项目中要好多地方用到筛选栏这么个东西 所以为了之后用起
  • C++基础知识 - 类模板函数写在类的外部

    1 所有的类模板函数写在类的外部 在一个cpp中 include
  • Could not initialize class sun.awt.X11GraphicsEnvironment

    当你的代码出现这一段你不慌吗 其实解决方法很简单 这一段代码很重要 用了它就能在linux环境下没有桌面的情况下运行验证码 在静态代码块中添加这一段表示启用headless模式就不用下载桌面环境了 static System setProp
  • 2014年2月21日星期五(DEMO7-6战区漫步)

    这是本章最后一个例子 与上个例子不同的是 1 加载的物体是2个 2 用了欧拉相机 视野120度 这个DEMO是个综合 应该没有新的函数了 稍微简单些 首先设定个宇宙空间 以及 各物体参数 define UNIVERSE RADIUS 400
  • 集成 Redis & 异步任务-SpringBoot 2.7 .2实战基础

    学SpringBoot 2 7 2实战基础 09 集成 Redis 异步任务 1 集成Redis docker 安装 MySQL 和 Redis 一文已介绍如何在 Docker 中安装 Redis 本文就看看 SpringBoot 如何整合
  • warning: #1295-D: Deprecated declaration lcd_init - give arg types

    将void lcd init 改为void lcd init void 即可
  • FFMPEG视音频编解码学习笔记

    文章转载自 http www jianshu com p 5c7bec29fdbd 一直对音视频这块比较感兴趣 但是一直不知道从何下手 终于找到了比较好的资料 希望通过接下来的时间好好研究一下FFMPEG相关的知识 这里感谢一下雷霄骅大神
  • 2022年软件测试面试题分享

    一 上来必然是自我介绍 自我介绍是任何一个面试过程中必不可少的环节 并且可以说是最重要的环节 因为每个面试官都需要用最短的时间去了解你这个人 以前干过什么 有过几年经验 做过哪些项目 可以说 通过一个简短的自我介绍 面试官心里已经有50 的
  • UE4状态机

    1 准备一套带动作的模型 并导入UE4 2 新建一个动画蓝图 右键 gt Animation gt AnimationBlueprint 选择继承AnimationInstance 并选择相应的骨骼 命名HeroAnimation 3 双击
  • 【网络编程】【UDP】UDP协议介绍

    一 UDP介绍 UDP和TCP相比是截然不同的 是一个简单的传输协议 全称是用户数据包协议 User Datagram Protocol 是一个无连接协议 UDP不保证UDP数据报会到达其最终目的地 不保证各个数据报的先后顺序跨网络后保持不