¶ 网络协议 - UDP 协议详解 基于TCP和UDP的协议非常广泛,所以也有必要对UDP协议进行详解。@pdai

¶ UDP概述

UDP(User Datagram Protocol)即用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。在OSI模型中,在第四层——传输层,处于IP协议的上一层。UDP用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天UDP仍然不失为一项非常实用和可行的网络传输层协议。UDP报文没有可靠性保证、顺序保证和流量控制字段等,可靠性较差。但是正因为UDP协议的控制选项较少,在数据传输过程中延迟小、数据传输效率高,适合对可靠性要求不高的应用程序,或者可以保障可靠性的应用程序,如DNS、TFTP、SNMP等。

¶ UDP特点

UDP提供不可靠服务,具有TCP所没有的优势: UDP无连接,时间上不存在建立连接需要的时延。空间上,TCP需要在端系统中维护连接状态,需要一定的开销。此连接装入包括接收和发送缓存,拥塞控制参数和序号与确认号的参数。UCP不维护连接状态,也不跟踪这些参数,开销小。空间和时间上都具有优势。

举个例子: DNS如果运行在TCP之上而不是UDP,那么DNS的速度将会慢很多。

HTTP使用TCP而不是UDP,是因为对于基于文本数据的Web网页来说,可靠性很重要。

同一种专用应用服务器在支持UDP时,一定能支持更多的活动客户机。

分组首部开销小,TCP首部20字节,UDP首部8字节。

UDP没有拥塞控制,应用层能够更好的控制要发送的数据和发送时间,网络中的拥塞控制也不会影响主机的发送速率。某些实时应用要求以稳定的速度发送,能容 忍一些数据的丢失,但是不能允许有较大的时延(比如实时视频,直播等)

UDP提供尽最大努力的交付,不保证可靠交付。所有维护传输可靠性的工作需要用户在应用层来完成。没有TCP的确认机制、重传机制。如果因为网络原因没有传送到对端,UDP也不会给应用层返回错误信息

UDP是面向报文的,对应用层交下来的报文,添加首部后直接乡下交付为IP层,既不合并,也不拆分,保留这些报文的边界。对IP层交上来UDP用户数据报,在去除首部后就原封不动地交付给上层应用进程,报文不可分割,是UDP数据报处理的最小单位。

正是因为这样,UDP显得不够灵活,不能控制读写数据的次数和数量。比如我们要发送100个字节的报文,我们调用一次sendto函数就会发送100字节,对端也需要用recvfrom函数一次性接收100字节,不能使用循环每次获取10个字节,获取十次这样的做法。

UDP常用一次性传输比较少量数据的网络应用,如DNS,SNMP等,因为对于这些应用,若是采用TCP,为连接的创建,维护和拆除带来不小的开销。UDP也常用于多媒体应用(如IP电话,实时视频会议,流媒体等)数据的可靠传输对他们而言并不重要,TCP的拥塞控制会使他们有较大的延迟,也是不可容忍的

UDP 支持一对一、一对多、多对一和多对多的交互通信。

还要注意的是: IP 数据报要经过互连网中许多路由器的存储转发;UDP 用户数据报是在运输层的端到端抽象的逻辑信道中传送的。

UDP 对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。应用层交给 UDP 多长的报文,UDP 就照样发送,即一次发送一个报文。

¶ UDP的首部格式

在计算检验和时,临时把“伪首部”和 UDP 用户数据报连接在一起。伪首部仅仅是为了计算检验和。

源端口: 占16位、源端口号。在需要对方回信时选用。不需要时可用全0。

目的端口: 占16位、目的端口号。这在终点交付报文时必须使用。

长度: 占16位、UDP用户数据报的长度,其最小值是8(仅有首部)。

检验和: 占16位、检测UDP用户数据报在传输中是否有错。有错就丢弃。

请注意,虽然在 UDP 之间的通信要用到其端口号,但由于 UDP 的通信是无连接的,因此不需要使用套接字。

¶ UDP校验 UDP校验和的计算方法和IP数据报首部校验和的计算方法相似,都使用二进制反码运算求和再取反,但不同的是:IP数据报的校验和之检验IP数据报和首部,但UDP的校验和是把首部和数据部分一起校验。

发送方,首先是把全零放入校验和字段并且添加伪首部,然后把UDP数据报看成是由许多16位的子串连接起来,若UDP数据报的数据部分不是偶数个字节,则要在数据部分末尾增加一个全零字节(此字节不发送),接下来就按照二进制反码计算出这些16位字的和。将此和的二进制反码写入校验和字段。在接收方,把收到得UDP数据报加上伪首部(如果不为偶数个字节,还需要补上全零字节)后,按二进制反码计算出这些16位字的和。当无差错时其结果全为1,。否则就表明有差错出现,接收方应该丢弃这个UDP数据报。

下图是计算UDP校验和的例子:

注意: 校验时,若UDP数据报部分的长度不是偶数个字节,则需要填入一个全0字节,但是次字节和伪首部一样,是不发送的。

如果UDP校验和校验出UDP数据报是错误的,可以丢弃,也可以交付上层,但是要附上错误报告,告诉上层这是错误的数据报。

通过伪首部,不仅可以检查源端口号,目的端口号和UDP用户数据报的数据部分,还可以检查IP数据报的源IP地址和目的地址。

这种差错检验的检错能力不强,但是简单,速度快。

¶ 參考文章 https://blog.csdn.net/dog250/article/details/6896949

https://blog.csdn.net/qq_42196196/article/details/83956689

https://cloud.tencent.com/developer/article/1004554

https://blog.csdn.net/aa1928992772/article/details/85240358

java udp 协议_网络协议 - UDP 协议详解相关推荐

  1. linux检查网络是否通畅_网络基础Ping命令详解(使用Ping这命令来测试网络连通)...

    相关知识点 BIOS 在计算机领域,BIOS是 "Basic Input Output System"的缩略语,译为"基本输入输出系统", 与前者读法相同.计算 ...

  2. ptp精准时间协议_网络时钟同步协议– NTP, PTP – 默默的点滴

    这篇文章介绍一下两个时钟同步的网络协议:NTP和PTP. 这里不涉及协议的原理和具体实现(想了解的可自行Google),重点是如何搭建起这两个服务. 1. NTP及PTP简介 NTP(Network ...

  3. java爬虫入门_Java 网络爬虫新手入门详解

    这是 Java 网络爬虫系列文章的第一篇,如果你还不知道 Java 网络爬虫系列文章,请参看Java 网络爬虫基础知识入门解析.第一篇是关于 Java 网络爬虫入门内容,在该篇中我们以采集虎扑列表新闻 ...

  4. java enum 父类_枚举基类Enum详解

    本文主要是对枚举类型的基类Enum类做一个介绍: 首先,Enum类位于java.lang包下,根据类的介绍可以发现,Enum类是Java中所有枚举类的父类,将枚举作为一个set或者Map的keys来使 ...

  5. java cookie路径_路径问题以及cookie详解

    1.路径问题: 注意 .代表执行程序的文件夹路径,在tomcat中也就是bin目录,所以要用this.getServletContext().getRealPath("/WEB-INF/cl ...

  6. java response 对象_常用response对象的详解

    每一个程序语言或开发工具都有一定的函数与用户进行沟通,Asp同样如此.在Asp中负责将信息传递给用户的对象就是Response对象.Response对象用于动态响应客户端请求(Request),并将动 ...

  7. 三菱FX5U系列PLC之间进行UDP以太网通信的具体方法示例详解(二)

    三菱FX5U系列PLC之间进行UDP以太网通信的具体方法示例详解(二) 假设有A.B两个FX5U系列的PLC要进行UDP以太网通信,进行数据交互. 上次和大家分享了两台FX5U系列PLC进行UDP以太 ...

  8. java path类_基于java Files类和Paths类的用法(详解)

    Java7中文件IO发生了很大的变化,专门引入了很多新的类: import java.nio.file.DirectoryStream; import java.nio.file.FileSystem ...

  9. ncm 网络_江森楼宇自控网络控制模块NCM优势详解

    江森楼宇自控网络控制模块NCM优势详解 江森楼宇自控网络控制模块NCM 网络控制模块NCM是NCU的主处理器.完全可以由用户编程.它负责监控链接到NCU上的点与控制回路,以及链接在局部N2总线上进行通 ...

  10. FIFA21服务器维护,FIFA21网络连接检测功能怎么用 FIFA21网络连接检测功能详解_游侠网...

    FIFA21网络连接检测功能怎么用?这是fifa21新推出的功能,可以帮助玩家们更好的监测与维护网络,下面小编就带来FIFA21网络连接检测功能详解,一起来看看吧. FIFA21网络连接检测功能详解 ...

最新文章

  1. saxreader读取服务器xml文件,使用SAXReader从xml文件读取元素
  2. pycharm和python区别-一些 PyCharm 的使用和设置建议
  3. 翻翻git之---溜的飞起的载入效果AVLoadingIndicatorView
  4. 没想到啊!3980元的Web前端视频今日免费送
  5. 百度地图订单分布php,php与百度地图API实现注册用户分布图
  6. java 线程不安全例子_Java中多线程安全问题实例分析
  7. 技术面试时这样介绍自己的项目经验,等于成功了一大半
  8. nvidia控制面板只有3d设置?
  9. 如何在通达信软件上随意画图_通达信指标公式编写教程:绘图函数DRAWLINE、DRAWTEXT 等...
  10. 图文详解教你在线换系统(无须U盘)
  11. 嵌入式系统多媒体框架分析
  12. ML面试1000题系列(71-80)
  13. 流利阅读 2019.3.18 Can baijiu, China’s sorghum firewater, go global?
  14. 视觉SLAM十四讲 第9讲 后端1 贝叶斯法则 式9.5推导
  15. 计算机特殊的标点符号教案,三年级下册信息技术《标点符号的输入》教学设计...
  16. Vivo手机安装谷歌Play商店,安装服务框架谷歌Google,支持X90,X80,X70,X60,s系列,IQOO
  17. Java实现是否为节假日、工作日判断(调用“http://api.goseek.cn/Tools/holiday”接口)
  18. 使用IBM InfoSphere Guardium Encryption Expert保护您的敏感数据
  19. jeesite 框架的简单应用
  20. razer鼠标测试软件,Razer Viper Ultimate无线鼠标评测

热门文章

  1. linux vps 运行exe文件夹,在centos环境下运行.exe文件
  2. 备案php代码,备案查询API PHP代码
  3. android底部弹出显示不全,Android 解决 NestedScrollView 底部内容被遮挡显示不全
  4. java基础 最重要的部分_Java基础(1)最基础的部分
  5. 3蛋白wb_老司机手把手教你选WB内参
  6. matlab 判断鼠标按下_Simulink(其他校验模块)+Matlabgui(鼠标响应事件)+Stateflow汽车运动逻辑状态(二)...
  7. 360浏览器设置多标签操作步骤
  8. 轻量级RTSP服务SDK
  9. Spring的@ExceptionHandler注解使用方法
  10. Java核心类库篇2——lang