每一个程序员应该都知道TCP,UDP协议。UDP是用户数据报文协议,属于OSI模型中的传输层。它是一种无连接的协议,也就说上一报文和下一报文在协议层没有任何联系,同时提供了简单的不可靠的传输服务。

也就是说UDP是不可靠的,如果要想让数据可靠,就需要在业务层做纠错和检错功能。比如:TFTP

那可能就会有同学问了,既然是不可靠的,为什么不直接使用IP协议呢?还要这么大费周章增加一种协议UDP呢?

其实其中一个最重要的原因就是IP协议中没有端口(port)的概念,它只是规定了两台主机之间的通信,并没有解决不同主机上应用程序之间的通信。如果一个主机上的多个应用程序需要通信,直接用IP协议就无法数据区分数据到底哪个应用程序了。

可以理解为一个端口就是一个通信通道,当然UDP在IP协议的基础上增加了一些功能,所以我们来总结下:

  1. UDP无连接,没有连接。所以它的发送和接受的开销就会小很多。
  2. UDP不保证数据可靠交付,只是尽最大可能。所以不需要维护复杂的连接关系。
  3. UDP是面向报文的,添加在应用层下来数据头部,直接塞给IP层。
  4. UDP没有拥塞控制
  5. UDP至支持多播。
  6. UDP头部小,说明传输更多的数据内容

下图展示是UDP和上下层的关系

UDP的首部到底是怎样的呢?

先看下图:

从图中可以看出,UDP的首部由四部分组成:

  • 各16bit的来源端口和目的端口用来标记发送和接受的应用进程。因为UDP不需要应答,所以来源端口是可选的,如果来源端口不用,那么置为零。当运输层从IP层收到UDP数据报时,就是根据首部中的目的端口,把UDP数据报通过相应的端口,上交最后的终点--应用程序。
  • 如果接收方UDP发现收到的报文中的目的端口号不正确,就会丢弃改报文,并由网际控制协议ICMP发送“端口不可达”差错报文给发送方。ICMP应用Traceroute,就是让发送的UDP用户数据报故意使用一个非法的UDP端口,结果ICMP返回“端口不可达”差错报文,因而达到了测试的目的。
  • 在目的端口后面是长度固定的以字节为单位的报文长度域,用来指定UDP数据报包括数据部分的长度,长度最小值为8byte。
  • 首部剩下地16bit是用来对首部和数据部分一起做校验和(Checksum)的,这部分是可选的,但在实际应用中一般都使用这一功能。
  • UDP和TCP的校验和都覆盖到了他们的首部和数据,而IP首部的校验和只覆盖了IP首部。

UDP和socket怎样配合使用

随着我们进入传输层,我们也可以调用操作系统中的API,来构建socket。Socket是操作系统提供的一个编程接口,它用来代表某个网络通信。应用程序通过socket来调用系统内核中处理网络协议的模块,而这些内核模块会负责具体的网络协议的实施

这样,我们可以让内核来接收网络协议的细节,而我们只需要提供所要传输的内容就可以了,内核会帮我们控制格式,并进一步向底层封装。因此,在实际应用中,我们并不需要知道具体怎么构成一个UDP包,而只需要提供相关信息(比如IP地址,比如端口号,比如所要传输的信息),操作系统内核会在传输之前会根据我们提供的相关信息构成一个合格的UDP包(以及下层的包和帧)。看下图吧。

UDP使用场景

  1. 需要资源少,在网络情况比较好的内网,或者对于丢包不敏感的应用。如DHCP协议就是基于UDP的。一般的获取IP地址都是内网请求,而且一次获取不到IP又没事。又比如基于UDP的RTP,TFTP,丢一帧数据问题也不大。再比如一些设备发现协议等等。
  2. 不需要一对一沟通,建立连接,而是可以广播的应用。DHCP就是一种广播的形式。VXLAN也是需要用到组播,也是基于UDP协议的。
  3. 需要处理速度快,时延低,可以容忍少数丢包,但是要求即便网络拥塞,也毫不退缩,一往无前的时候。
  4. QUIC是Google提出的一种基于UDP改进的通信协议,其目的是降低网络通信的延迟,提供更好的用户互动体验。

结语

UDP没有TCP那么复杂,但是网络体系中不可缺少的协议。需要熟练的掌握该协议。

udp接受_UDP协议-看这篇就够了相关推荐

  1. tcp协议一定要有服务器吗,复习TCP协议——看这篇就够了

    TCP协议知识复习-附带有关TCP常见面试题 ~~本篇文章有点长,建议收藏之后有空慢慢看喔!~~ TCP报文段结构 TCP三次握手:建立连接 相关问题: 1.握手过程中可以携带数据吗? 2.初始序列号 ...

  2. Docker入门实战看这篇就够了(最新详细以及踩过的坑)

    Docker入门实战看这篇就够了 前言 初识 是什么 容器与虚拟机 能干什么 去哪玩 安装 先决条件 查看自己的内核 安装所需的软件包(支持devicemapper存储类型) 设置镜像的仓库 设置yu ...

  3. 【超全汇总】学习数据结构与算法,计算机基础知识,看这篇就够了【ZT帅地】2020-3-7

    https://blog.csdn.net/m0_37907797/article/details/104029002 由于文章有点多,并且发的文章也不是一个系列一个系列发的,不过我的文章大部分都是围 ...

  4. 网络编程懒人入门(十二):快速读懂Http/3协议,一篇就够!

    本文中文译文由作者"ably.io"发布于公众号"高可用架构",译文原题:<深入解读HTTP3的原理及应用>.英文原题:<HTTP/3 dee ...

  5. React入门看这篇就够了

    2019独角兽企业重金招聘Python工程师标准>>> 摘要: 很多值得了解的细节. 原文:React入门看这篇就够了 作者:Random Fundebug经授权转载,版权归原作者所 ...

  6. uiautomation遍历windows所有窗口_万字长文!滑动窗口看这篇就够了!

    大家好,我是小浩.今天是小浩算法 "365刷题计划" 滑动窗口系列 - 整合篇.之前给大家讲解过一些滑动窗口的题目,但未作系统整理. 所以我就出了这个整合合集,整合工作中除了保留原 ...

  7. Spring Cloud入门,看这篇就够了!

    点击▲关注 "中生代技术"   给公众号标星置顶 更多精彩 第一时间直达 概述 首先我给大家看一张图,如果大家对这张图有些地方不太理解的话,我希望你们看完我这篇文章会恍然大悟. 什 ...

  8. Java String,看这篇就够了

    String,是Java中最重要的类.这句肯定的推断不是Java之父詹姆斯·高斯林说的,而是沉默王二说的,因此你不必怀疑它的准确性. 关于字符串,有很多的面试题,但我总觉得理论知识绕来绕去没多大意思. ...

  9. Cookie、Session、Token、JWT 看一篇就够了

    目录 Cookie.Session.Token.JWT 看一篇就够了 什么是认证(Authentication) 什么是授权(Authorization) 什么是凭证(Credentials) 怎么让 ...

最新文章

  1. 太扎心!人艰不拆!16 个程序员专属笑话讲给你听
  2. 新发现判断一个点在多边形的最高效率算法 推荐******
  3. mvvm 耗时加载进度条_ZK的实际应用:MVVM –加载和渲染数据
  4. JavaScript快速入门(四)——JavaScript函数
  5. 心离钱越远,钱离口袋越近,心离钱越近,钱离口袋越远
  6. ubuntu 16.04 登录后黑屏
  7. HTML输入=“文件”接受属性文件类型(CSV)
  8. 图像 - 灰度化、灰度反转、二值化
  9. 免安装版的Mysql
  10. 大厂面试八股文——数据库mysql
  11. 革新科技CIDE-EDA:实验1 3-8译码器
  12. Java表格Table冻结前几列或者前几行,其余行或列自由滑动。
  13. 现代软件工程 第九章 【项目经理】练习与讨论
  14. jQuery 即点即改
  15. java sub函数,请问Sub子过程与Function函数过程有什么区别?
  16. C语言求两数最小公倍数
  17. String和数据库类型的相互转化
  18. 2018年全国多校算法寒假训练营练习比赛(第五场)解题报告
  19. 解决Hyperledger Fabric通道重复创建问题( readset expected key [Group] /Channel/Application at version 0, but )
  20. 助眠的产品有哪些?失眠值得拥有和了解的助眠好物以及方法

热门文章

  1. Qt学习笔记-OpenGL做正方体并旋转
  2. 平衡二叉树的实现原理
  3. 奥拉星插件flash下载手机版下载安装_奥拉星游戏插件
  4. SpringBoot - MyBatis-Plus使用详解2(设置实体类对应的表名、字段名 )
  5. 表格占据整个页面_excel转换为pdf6个示例,在多个工作表、表格和空白页中进行选择...
  6. linux ded编译,重新编译deb包
  7. java web高级编程 百度网盘_[有书共享]JavaWeb高级编程
  8. linux 进程监控命令2——ps
  9. 使用arpspoof实现内网ARP欺骗
  10. qt 下log4cplus的使用