大多数的应用程序都像之前介绍的一样使用TCP协议来收发数据,但当然也有例外。有些应用程序不使用TCP协议,而是使用UDP协议来收发数据。向DNS服务器查询IP地址的时候我们用的也是UDP协议。下面就简单介绍一下UDP协议

其实TCP中就包含了UDP的一些要点。TCP的工作方式十分复杂,如果我们能够理解TCP为什么要设计得如此复杂,也就能够理解UDP了。那么,为什么要设计得如此复杂呢?因为我们需要将数据高效且可靠地发送给对方。为了实现可靠性,我们就需要确认对方是否收到了我们发送的数据,如果没有还需要再发一遍。

要实现上面的要求,最简单的方法是数据全部发送完毕之后让接收方返回一个接收确认。这样一来,如果没收到直接全部重新发送一遍就好了,根本不用像TCP一样要管理发送和确认的进度。但是,如果漏掉了一个包就要全部重发一遍,怎么看都很低效。为了实现高效的传输,我们要避免重发已经送达的包,而是只重发那些出错的或者未送达的包。TCP之所以复杂,就是因为要实现这一点。

不过,在某种情况下,即便没有TCP这样复杂的机制,我们也能够高效地重发数据,这种情况就是数据很短,用一个包就能装得下。如果只有一个包,就不用考虑哪个包未送达了,因为全部重发也只不过是重发一个包而已,这种情况下我们就不需要TCP这样复杂的机制了。而且,如果不使用TCP,也不需要发送那些用来建立和断开连接的控制包了。此外,我们发送了数据,对方一般都会给出回复,只要将回复的数据当作接收确认就行了,也不需要专门的接收确认包了。

控制用的短数据

这种情况就适合使用UDP。像DNS查询等交换控制信息的操作基本上都可以在一个包的大小范围内解决,这种场景中就可以用UDP来代替TCP。UDP没有TCP的接收确认、窗口等机制,因此在收发数据之前也不需要交换控制信息,也就是说不需要建立和断开连接的步骤,只要在从应用程序获取的数据前面加上UDP头部,然后交给IP进行发送就可以了(表2.5)。接收也很简单,只要根据IP头部中的接收方和发送方IP地址,以及UDP头部中的接收方和发送方端口号,找到相应的套接字并将数据交给相应的应用程序就可以了。除此之外,UDP协议没有其他功能了,遇到错误或者丢包也一概不管。因为UDP只负责单纯地发送包而已,并不像TCP一样会对包的送达状态进行监控,所以协议栈也不知道有没有发生错误。但这样并不会引发什么问题,因此出错时就收不到来自对方的回复,应用程序会注意到这个问题,并重新发送一遍数据。这样的操作本身并不复杂,也并不会增加应用程序的负担。

音频和视频数据

还有另一个场景会使用UDP,就是发送音频和视频数据的时候。音频和视频数据必须在规定的时间内送达,一旦送达晚了,就会错过播放时机,导致声音和图像卡顿。如果像TCP一样通过接收确认响应来检查错误并重发,重发的过程需要消耗一定的时间,因此重发的数据很可能已经错过了播放的时机。一旦错过播放时机,重发数据也是没有用的,因为声音和图像已经卡顿了,这是无法挽回的。当然,我们可以用高速线路让重发的数据能够在规定的时间内送达,但这样一来可能要增加几倍的带宽才行。

此外,音频和视频数据中缺少了某些包并不会产生严重的问题,只是会产生一些失真或者卡顿而已,一般都是可以接受的。

在这些无需重发数据,或者是重发了也没什么意义的情况下,使用UDP发送数据的效率会更高。

总结

  • udp效率高
  • udp可以用于音频 视频等
  • udp遇到错误或丢包一概不管

UDP协议的收发操作相关推荐

  1. 网络是怎样连接的-UDP协议的收发操作

    2.6 UDP 协议的收发操作 2.6.1 不需要重发的数据用 UDP 发送更高效 大多数的应用程序都像之前介绍的一样使用 TCP 协议来收发数据,但当然也有例外. 有些应用程序不使用 TCP 协议, ...

  2. UE4安卓客户端UDP协议模拟电脑操作(_杰森大师)

    只适用于安卓机 链接在最下面 使用步骤,通过手机助手将安装包放进手机进行安装 1.打开软件 2.打开IP设置 3.点击UDP设置输入电脑IP和软件端口,软件端口默认为6666,电脑IP为你的内网IP( ...

  3. TCP与UDP协议,socket套接字编程,通信相关操作

    文章目录 TCP与UDP协议 TCP协议 ==三次握手== ==四次挥手== UDP协议 TCP与UDP的区别 应用层 socket套接字 代码优化 循环通信 半连接池 粘包问题 TCP与UDP协议 ...

  4. C#制作UDP协议可同时收发Winform窗体

    首先启动Visual Studio(以2017版为例): 新建一个点击新建一个项目 找到C#的Windows窗体应用项目,可以在下方更改项目名称和存储路径: 解决方案名称和.net框架默认的就可以 创 ...

  5. TCP与UDP协议、socket套接字编程、通信相关操作(cs架构软件)、TCP黏包问题及解决思路

    OSI七层协议 传输层 1.PORT协议:前面讲过 2.TCP协议与UDP协议:规定了数据传输所遵循的规则(数据传输能够遵循的协议有很多,TCP和UDP是较为常见的两个) TCP协议 基于TCP传输数 ...

  6. TCP UDP 协议深度解析 (未完待续)

    前言 致歉 我打算将 TCP 的交互流程 通过抓包 和 代码演示下,ACK 和 SYNC 的 握手和回收过程,使用原始套接字进行分析 最近在忙Rust,元旦如果忙完Rust 的学习就搞一下 其实TCP ...

  7. 计算机网络实验四:利用UDP协议实现点对点聊天

    文章目录 1. 简介 1.1 功能 1.2 技术 1.3 流程 2. 源码 2.1 客户端1 2.2 客户端2(与客户端1不同的只有端口号) 2.3 服务端 3. 运行 4. 注意 4.1 端口占用 ...

  8. UDP协议下数据的传输分析

    最近在做项目的时候发现了一个严重问题,可能不光是我多人在使用 win32 socket 进行开发的时候也会遇到的问题.首先我分析的模块是 我项目中文件传输的部分,我做的是一个基于UDP协议的一个局域网 ...

  9. 网络 传输层 | UDP协议与TCP协议详解(三次握手及四次挥手、滑动窗口、拥塞控制)

    概念 传输层:是负责应用程序之间的数据传输(通过端口的描述,描述了哪两个进程间的通信):传输层的两个主要协议:UDP 和 TCP UDP协议 UDP协议全称:用户数据报协议(User Dategram ...

最新文章

  1. 不同测试阶段,不同测试类型的区别于联系
  2. 非标自动化转行机器人_机器人与非标自动化这两个有什么区别?可以从结构,功能等方面谈谈吗?...
  3. 对网络数据包进行嗅探
  4. 为什么美元持续贬值,国际市场上价格与美元挂钩的大宗商品,包括石油、钢铁、铜、矿石、粮食等,价格上涨
  5. 城乡投票源码php_响应式投票系统(支持微信、手机) php版 v3.2
  6. hadoop2.x配合ZooKeeper集群环境搭建
  7. php号码归属地查询源码,手机号码归属地查询
  8. 网络知识汇总(基于W5500以太网)
  9. 中图分类号,文献标识码,文章编号
  10. 2017年中国智能卡行业发展现状分析及市场发展前景预测
  11. mpeg1,mpeg2,mpeg4
  12. app营销应该这样做(读书笔记)
  13. 安卓系统培训!从入门到精通的Android进阶学习笔记整理,已整理成文档
  14. Linux 查看进程状态
  15. 京东商城源码_选择源码的经验方法,你get了吗!
  16. 思科全球副总裁、大中华区首席技术官曹图强:网络安全不是奢侈品,而是必需品...
  17. SQL Server锁与事务隔离
  18. android如何开发流量监控软件
  19. java-bmi_Java中的BMI计算器
  20. 笔记本键盘变机械硬盘

热门文章

  1. 了解Docker、Ubuntu20.04安装docker教程
  2. 远程桌面连接-GPU加速
  3. linux学习笔记:yum命令的常见用法
  4. 类的应用python平均分_【数据科学系统学习】Python # 数据分析基本操作[四] 数据规整化和数据聚合与分组运算...
  5. python中pass的用法_python学习之getpass模块使用
  6. JAVA synchonized Lock类----简单总结笔记
  7. git学习(五)分支操作和解决冲突
  8. hzwap u.php_『THINKPHP』U 函数
  9. anaconda安装numpy_Python3.8如何安装Numpy
  10. springboot 配置文件-yaml的用法