UDP -- 用户数据报协议

UDP: User Datagram Protocol。 是 OSI 七层模型中的传输层的协议。 也是面向数据报的传输层协议。

UDP 的特点

UDP 不提供复杂的控制机制,利用 IP 提供面向无连接的通信服务。 并且它是将应用程序传递的数据在接收到的那一刻,立即按照原样发送到网络上的一种机制。

应用程序传递数据 ——> UDP 按照原样立即发送。

  • 不提供 数据包 的分组 和组装 (如果一次发送的数据过大怎么办?)
  • 传输过程中数据包出现丢包,也不会负责重发。
  • 接受法的数据包乱序到达的时候,也不提供排序功能。
  • 在出现网络拥堵的时候,无法进行流量控制来避免网络阻塞。

如果要实现这些细节控制,那么就应该 交由采用 UDP 的上层应用程序去处理。

UDP: 类似于用户(程序员?)说什么就做什么的机制。 (程序员让它发送什么就发送什么)。 反之, TCP 拥有各种各样的控制机制,所以它在发送数据的时候 未必 会按照程序员的编程思路来发送。(比如说,程序员想要发送一个数据包,但是可能TCP会对其进行分组,虽然这些对程序员是透明的)

由于 UDP 面向无连接的,所以 它可以随时发送数据。(不必知道对方是否存在)。 再加上UDP本身的处理既简单又高效,因此经常用于以下几个方面:

  1. 包总量较少的通信: DNS(域名系统)、SNMP(简单网络管理协议)、DHCP(动态主机配置)、RIP(路由信息协议)
  2. 视频音频等多媒体通信(即时通信领域):多媒体游戏,IP电话(VoIP)
  3. 限定于 LAN 等特定网络中的应用通信。
  4. 广播通信 (广播,多播)

百度百科上的一段有关 UDP 的描述非常好:摘下来

(1): UDP是一个面向无连接的协议,传输数据之前 客户端 和服务器 不必建立连接,当它想要传送数据的时候就 简单的抓取来自应用程序的数据,并尽可能快的把它扔到网上。

在发送端: UDP 传送数据的速度仅仅受应用程序生成数据的速度,计算机的能力和传输带宽的限制;

在接收端: UDP 把每个消息段(数据报) 放在队列中,应用程序每次从队列中读取一个消息段。

(2): 由于 传输数据不需要建立连接,因此也就不需要维护连接状态,包括收发状态等,因此一台服务器可以同时向多个客户机传输相同的消息(用于广播和多播)

(3): UDP的首部很短:8个字节(源地址,目的地址、包长度,校验和)。相对于 TCP的20个字节的首部来说,额外的开销比较少。

(4): 吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速度,传输带宽,源端和终端主机的性能限制。

(5): UDP使用尽最大努力交付,既不保证可靠交付,因此主机不需要维持复杂的连接状态表。

(6):UDP是面向报文的。发送方的UDP对应用程序交下来的报文,在添加首部之后就向下交付给IP层,既不拆分也不合并,而是保留这些报文的边界,因此,应用程序需要选择合适的报文大小

虽然UDP不是一个可靠的消息,但是却是分发信息的一个理想的协议。例如在屏幕上报告股票市场、在屏幕上显示航空信息等。 UDP 也用在 路由信息协议 (RIP)中修改路由表。 在这些应用场合之下,如果有一个消息丢失,在几秒之后另一个新的消息就会替换它。 UDP 广泛应用在多媒体应用中(效率高)。 大多数Internet上的电话软件产品也都运行在UDP之上。


TCP 和 UDP 的对比

UDP 和 TCP 协议的主要区别在于: 二者在如何实现消息的可靠传递方面的不同。

TCP 协议中 包含了专门的传递保证机制,当数据接收方,收到发送方发送过来的信息的时候,会自动向发送方发出确认消息(这个是关键点)。 发送方只有在接收到 该确认消息之后,才继续传递其他的信息,否则将一直等待,知道收到确认消息为止。

和 TCP 不同, UDP协议不提供数据的保证机制。 如果在消息传递过程中出现数据的丢失,协议本身并不能做出任何的检测或者提示。 因此, 通常人们把 UDP 协议称为是不可靠的传输协议

另外,UDP 在接受多个数据报的时候,并不能保证数据的发送和接受顺序。

例如: 当一个位于客户端的应用程序 向服务器发送4个数据报的时候:

D1

D22

D333

D4444

UDP 有可能按照以下顺序将所接收到的数据提交到 服务端的应用:

D333

D1

D4444

D22

但是,事实上, UDP协议的这种乱序性质基本上很少出现,通常之后在网络非常拥挤的情况下才有可能发生。


UDP 数据报的格式

格式只有 4 * 2 = 8 个字节,简直简单到了极致。

-------------------------------------------------
|   源端端口号            |       目的端端口号      |
-------------------------------------------------
|   Length              |       CheckSum        |
-------------------------------------------------

可以看到 UDP的格式很简单。没啥好讲的。。。。


有关UDP一些问题

这些都是我在看书的过程中的思考,特地记载下来一一解决:

1. UDP是面向无连接的, TCP 是面向连接的,IP 是无连接的协议,那么到底什么是连接呢?

  1. UDP 的报文大小很有关系,是由应用程序来设定的。 UDP协议不会对数据包进行分组 和 合并的操作。 现在问题来了,数据包的大小应该设定为多少合适呢(MTU)? 如果设置的比较大,超过了MTU(因为路径上最小的MTU,不会很容易的得知),IP会进行切片吗? IP切片之后会发生什么现象 ? 如果IP不切片会发生什么现象? UDP报文的大小应该如何设置呢?
  2. 虽然说 UDP 可以随时发送数据,不必知道对方是否存在,但是如果对方不存在又如何接受数据呢? 所以说服务器还是必须先运行。
  3. 如何模拟出 使用 UDP 协议,数据包出现乱序的现象呢?

UDP 编程相关

时间: 2024-08-29 01:24:12

UDP -- 用户数据报协议的相关文章

udp用户数据报协议

UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768是UDP的正式规范.UDP在IP报文的协议号是17. UDP协议全称是用户数据报协议[1]  ,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议.在OSI模型中,在第四层--传输层,处于IP协议的上一层.UDP有不提供数

UDP用户数据报协议--IP分片

1.UDP首部 2.UDP分片 在第二章,讲链路层是,提到过以太网,刨除数据帧帧头,最多传输的长度为1500,也就是说,如果一个ip数据报,长度大于1500,则需要分片. 分片方法: 在ip头中3位标志,13位片偏移,这俩东西就是用来分片的. 3位标志中:一个更多的片标识,除了最后一个分片,其它分片都要有这个标识,还有一个不分片标识,如果置上,则即便IP数据报再长,也不分片,但是会将该IP数据报丢弃,并发送一个ICMP差错报文给发送端. 13位片偏移:用于表示相对于起始的偏移量,就是个offse

《TCP/IP详解卷2:实现》笔记--UDP:用户数据报协议

用户数据报协议,即UDP,是一个面向数据报的简单运输层协议:进程的每次输出操作只产生一个UDP数据报,从而发送 一个IP数据报. 进程通过创建一个Internet域内的SOCK_DGRAM类型的插口,来访问UDP.该类型插口默认地称为无连接的.每次进程发送 数据时,必须指定目的IP地址和端口号.每次从插口上接收数据报时,进程可以从数据报中收到源IP地址和端口号. UDP插口也可以被连接到一个特殊的IP地址和端口,这样,所有写到该插口的数据报都被发往该目的地,而且只有来自该IP 地址和端口号的数据

《TCP/IP详解卷1:协议》第11章 UDP:用户数据报协议-读书笔记

章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP:网际协议(1)-读书笔记 <TCP/IP详解卷1:协议>第3章 IP:网际协议(2)-读书笔记 <TCP/IP详解卷1:协议>第4章 ARP:地址解析协议-读书笔记 <TCP/IP详解卷1:协议>第5章 RARP:逆地址解析协议-读书笔记 <TCP/IP详解卷1:协

UDP:用户数据报协议

UDP是一个简单的面向数据报的运输层协议:进程的每个输出操作都正好产生一个UDP数据报,并组装成一份待发送的IP数据报.这与面向流字符的协议不同,如TCP,应用程序产生的全体数据与真正发送的单个IP数据报可能没有什么联系. UDP数据报封装成一份IP数据报的格式.如下图所示. UDP不提供可靠性:它把应用程序传给IP层的数据发送出去,但是并不保证它们能到达目的地. UDP首部 UDP首部 UDP报文首部结构如上图所示,它由RFC 768定义.应用层数据占用了UDP报文段的数据字段.例如,对于DN

TCP/IP详解 卷一(第十一章 UDP:用户数据报协议)

UDP是一个简单的面向数据报的运输层协议. UDP不提供可靠性:它把应用程序传给IP层的数据发送出去,但是并不保证它们能到达目的地. UDP首部的个字段如下图所示

六LWIP学习笔记之用户数据报协议(UDP)

一.背景知识 1.传输层协议 2.UDP协议 3.端口 4.UDP报文的交付 5.UDP报文格式 6.UDP伪首部与校验和 二.UDP数据结构 1.报文首部结构 2.控制块 三.控制块操作函数 1.使用UDP编程 2.新建控制块 3.绑定控制块 4.连接控制块 5.其他控制块操作函数 四.报文处理函数 1.报文的发送 2.报文接收与递交 五.测试程序 原文地址:https://www.cnblogs.com/qinzhou/p/8386090.html

TCP/IP协议族-----14.用户数据报协议(UDP)

UDP:用户数据报

UDP是一个简单的面向数据报的运输层协议:进程的每个输出操作通常会产生一个UDP数据报,并组装成一份待发送的IP数据报.这与面向流的协议不同,如TCP,应用程序产生的数据与真正发送的单个IP数据报并不存在直接的关联. 相关的协议参考tcp/ip协议学习笔记(7)UDP用户数据报协议 UDP输入和输出以及轻量级UDP涉及以下文件: include/net/udplite.h 定义轻量级UDP专用的函数等 include/linux/udp.h 定义UDP传输控制块等 net/ipv4/udp.c