当前位置: 首页 > java >正文

计算机网络 — UDP协议(看这一篇就可以

UDP协议

UDP是传输层的重要协议之一,另一重要协议为TCP协议。两者对比:TCP协议复杂,但传输可靠。UDP协议简单,但传输不可靠。

UDP协议全称为:User Datagram Protocol(用户数据报协议)。

它是一个简单的面向数据报的传输层协议。提供的是无连接的、不可靠的数据流传输。它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。因此报文可能会丢失、重复以及乱序等。但由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。

UDP是传输层协议,这意味着UDP的数据包需要经过IP协议的封装,然后通过IP协议传输到目的电脑。随后UDP包在目的电脑拆封,并将信息送到相应端口的缓存中。

UDP的特点

UDP传输的过程类似于寄信。

无连接

无连接指的是:UDP传输知道对应的IP和端口号就可以直接进行传输,不需要建立连接。

理解“无连接”特性:

因为使用UDP协议的发送方和接受方之间不需要存在长期的联系。它们没有建立连接这个过程,整个消息传输过程简单来说就是“发送即结束”。在UDP协议传输的过程中,可以向某一个服务器端口发起接收数据申请,然后在下一次再向另外一个端口发起申请。

这样一来,一个UDP服务器接口可以在一段时间内接受多个客户端发送的请求,同样的一个UDP服务器可以从若干个不同的客户接收数据报。

不可靠

不可靠指的是UDP协议没有任何安全机制,发送端发送数据报后,如果出现丢包等现象,UDP协议层也不会给应用层返回任何错误信息。

只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。因此报文可能会丢失、重复以及乱序等。

面向数据报

应用层交给UDP多长的报文,UDP会将其原样发送,既不会拆分,也不会将其合并。

如果,发送端一次性发送1000个字节,那么接收端也必须一次性接收1000个字节,不能将其拆为100份,每份10字节,每次接收一份。

缓冲区

UDP只有接收缓冲区,没有发送缓冲区。

UDP没有真正意义上的发送缓冲区。发送的数据会直接交给内核,由内核将数据传给网络层协议进行后续的传输动作。

UDP具有接收缓冲区,但是这个接收缓冲区不能保证收到的UDP数据报的顺序和发送UDP报的顺序一致;如果缓冲区满了,再达到的UDP数据就会被丢弃。

大小受限

UDP协议首部中有一个16位的最大长度,也就是说一个UDP能传输的数据的最大长度是64K(包含了UDP的首部)。

这是UDP在使用中的一个致命缺陷,也就是说UDP无法直接表示一个比较大的数据报。

解决方法:

可以在应用层,针对大的数据报进行分包(拆分成多个部分),然后再通过多个UDP数据报分别发送(但是这样子无法保证顺序)接收方再将收到的几个包拼接成完整的数据。

上述这种方式是下策。

上策是:将其改成TCP协议,TCP协议没有这样的长度限制。

基于UDP的应用层协议

  • NFS:网络文件系统

  • TFTP:简单文件传输协议

  • DHCP:动态主机配置协议

  • BOOTP:启动协议

  • DNS:域名解析协议

......

UDP协议报文格式

实际格式:

源端口号和目的端口号

用来标记发送和接受的应用进程。因为UDP不需要应答,所以源端口是可选的,如果源端口不用,那么置为零。

当运输层从IP层收到UDP数据报时,就是根据首部中的目的端口,把UDP数据报通过相应的端口,上交最后的终点--应用程序。

UDP长度

16位UDP长度,表示整个数据报(UDP首部+UDP数据)的最大长度

UDP校验和

校验和用来验证网络传输的这个数据是否是正确的,本质上是光信号和电信号(会被外界因素干扰,导致信号出错)。

校验和正确,不能保证数据100%是对的,但校验和不正确,数据100%是不对的。

UDP网络编程模型

http://www.xdnf.cn/news/11259.html

相关文章:

  • JNI原理及常用方法概述
  • Sql中的like的用法
  • 添加Microsoft Office Document Image Writer 打印机
  • gcta计算FST、python绘图
  • latex编辑小常识
  • oracle递归函数
  • 企业高性能web服务器【Nginx详解】
  • FusionCharts Free 报表工具
  • 开发者必去的10大国内网站推荐
  • 黄页
  • 微信公众号分销商城源码系统+多商户入驻+互动直播+整点秒杀 带部署教程
  • 关于asp.net的富文本框编辑器,DotNetTextBox的用法详解
  • JQuery lhgdialog使用
  • 论坛博客常用代码合集
  • GET和POST史上最全总结
  • PropertyUtils的使用
  • Elasticsearch 技术分析(九):全文搜索引擎Elasticsearch,这篇文章给讲透了!
  • 粉丝答疑:如何实现高效免杀?
  • 智能聊天助手:数据分析的新兴英雄
  • 千兆光模块和万兆光模块的安装和维护指南
  • 使用U盘安装Fedora14 32bit操作系统(参考自www.osyunwei.com)
  • 如何给网页和代码做HTML加密?
  • 国家授时中心服务器IP地址
  • mega linux教程,LINUX 安装MegaRAID Storage Manager (MSM)安装使用教程
  • wordpress主题_2020年使用的15个顶级WordPress主题
  • 网络安全应急响应----4、DDoS攻击应急响应
  • 使用Teleport Pro离线下载网页所有内容
  • Ubuntu7.04使用中遇到的问题及从网上搜集的解决办法(截止2007-11-3日) 收藏
  • 协方差矩阵与相关系数矩阵
  • 联想y430完全拆机图解_y430p拆机详细步骤及如何安装mSATA接口的固态硬盘?