udp协议java_UDP协议

UDP协议详解
本文详细介绍了UDP协议的特点与工作原理,包括其优势、首部格式、校验和计算方法等内容。适用于希望了解UDP如何实现轻量级数据传输的读者。

UDP 的概述(User Datagram Protocol,用户数据报协议)

UDP 是传输层的协议,功能即为在 IP 的数据报服务之上增加了最基本的服务:复用和分用以及差错检测。

1.UDP 优势:

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

举个例子:

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

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

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

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

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

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

UDP 是面向报文的,相对于 TCP 这样的流模式的协议,UDP 则是一种数据报的模式,UDP 面向报文的传输方式是应用层交给 UDP 多长的报文,UDP 就照样发送,即一次发送一个报文。因此,应用程序必须选择合适大小的报文。若报文太长,则 IP 层需要分片。UDP 对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。这也就是说,应用层交给 UDP 多长的报文,UDP 就照样发送,即一次发送一个报文。(一个 upd 的最大报文长度 2^16-1-20-8,20 是 ip 报文头,8 是 udp 报文头)

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

2.UDP 首部格式

UDP(User Data Protocol,用户数据报协议)是一个非连接的协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP 传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制。

dd6412f9ec96132f16a3fe494381975b.png

UDP 首部有 8 个字节,由 4 个字段构成,每个字段都是两个字节,

源端口: 源端口号,需要对方回信时选用,不需要时全部置 0.

目的端口:目的端口号,在终点交付报文的时候需要用到。

长度:UDP 的数据报的长度(包括首部和数据)其最小值为 8(只有首部)

校验和:检测 UDP 数据报在传输中是否有错,有错则丢弃。

该字段是可选的,当源主机不想计算校验和,则直接令该字段全为 0.

当传输层从 IP 层收到 UDP 数据报时,就根据首部中的目的端口,把 UDP 数据报通过相应的端口,上交给应用进程。如果接收方 UDP 发现收到的报文中的目的端口号不正确(不存在对应端口号的应用进程 0,),就丢弃该报文,并由 ICMP 发送“端口不可达”差错报文给对方。

3.UDP 校验和

目的:检测 UDP 段在传输中是否发生错误(如位翻转)

5393f049030421906c2b6fedb385d5ee.png

举例说明

发送方

假设数据中有 3 个 16 比特的数

求出前两个的和

前两个的和加上第三个数,如果溢出就回卷,及和去掉最高位,然后+1

现在已经加完了所有 16 比特的数,取反码就变成了校验和,然后发送

接收方

将 4 个 16 比特的数(包含校验和)加起来,一定等于 1111 1111 1111 1111(相当于两个反码相加),这也是取反码做校验和的原因

如果不等,校验和错误,传输出现问题

8ef96f804e9f0ab4b30178ff2512f6e8.pngUDP校验和

相信你能想到,这个还是太脆弱了,仅仅只能解决数据缺失问题,而比如其中 16 比特的数互相交换位置这类错误无法检测

而且,他也只能知道发生了错误,而不知道哪里发生了错误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值