HuaWei ❉ UDP详解

一 介绍

        UDP是无连接通信协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接。简单来说,当一台计算机向另外一台计算机发送数据时,发送端不会确认接收端是否存在,就会发出数据,同样接收端在收到数据时,也不会向发送端反馈是否收到数据。

        由于使用UDP协议消耗资源小,通信效率高,所以通常都会用于音频、视频和普通数据的传输例如视频会议都使用UDP协议,因为这种情况即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。

        但是在使用UDP协议传送数据时,由于UDP的面向无连接性,不能保证数据的完整性,因此在传输重要数据时不建议使用UDP协议。UDP的交换过程如下图所示。

二 UDP协议的首部格式

 UDP协议的首部有8个字节,一共四个字段,每个字段的长度都是2个字节。

  1. 16位源端口号:发送方的端口号,不用的话可以置0
  2. 16位目的端口号:接受方的端口号。
  3. 16位UDP长度:首部 + 数据的总长度,单位为字节。也就是说一个UDP能传输的数据最大长度是64K(包含UDP首部);然而我们需要传输的数据超过64K,就需要在应用层手动的分包,多次发送,并在接收端手动拼装。
  4. 16位UDP检验和:是为了接收方进行数据校验设计的,如果校验不通过的话数据会被丢弃,后面会单独讲解。当源主机不想计算校验和,则直接令该字段全为0.

三 UDP的特点

1 UDP特点

  • 无连接:UDP是无连接的协议,他在进行数据传输之前不需要先建立连接,也没有各种重传机制、拥塞控制和流量控制,所以传输速度很快,消耗很低,延迟小,数据传输效率高,适合对可靠性要求不高的应用程序,或者可以保障可靠性的应用程序,如DNS、TFTP、SNMP等。
  • 不可靠:只负责数据的发送,不关心数据是否送达,没有确认机制,主机收到数据也不会有响应
  • 分组首部开销小,TCP的首部是20字节,UDP的首部是8字节
  • 面向报文的:TCP(面向连接的传输控制协议)是面向字节传输,而UDP是面向报文传输,对于应用层交下来的报文段不进行拆分合并,直接保留原有报文段的边界然后添加UDP的首部就交付给网络层。不论报文的长短,UDP都不会进行处理。因此为了避免报文段过短降低传输效率以及报文段过长导致网络层对IP数据进行分片操作,应用层应该选择合适长度的报文交付给运输层的UDP。

2 协议对比

        UDP和TCP协议的主要区别是两者在如何实现信息的可靠传递方面不同。TCP协议中包含了专门的传递保证机制,当数据接收方收到发送方传来的信息时,会自动向发送方发出确认消息;发送方只有在接收到该确认消息之后才继续传送其它信息,否则将一直等待直到收到确认信息为止。与TCP不同,UDP协议并不提供数据传送的保证机制。如果在从发送方到接收方的传递过程中出现数据包的丢失,协议本身并不能做出任何检测或提示。因此,通常人们把UDP协议称为不可靠的传输协议。

        TCP 是面向连接的传输控制协议,而UDP 提供了无连接的数据报服务;TCP 具有高可靠性,确保传输数据的正确性,不出现丢失或乱序;UDP 在传输数据前不建立连接,不对数据报进行检查与修改,无须等待对方的应答,所以会出现分组丢失、重复、乱序,应用程序需要负责传输可靠性方面的所有工作;UDP 具有较好的实时性,工作效率较 TCP 协议高;UDP 段结构比 TCP 的段结构简单,因此网络开销也小。TCP 协议可以保证接收端毫无差错地接收到发送端发出的字节流,为应用程序提供可靠的通信服务。对可靠性要求高的通信系统往往使用 TCP 传输数据。

3 TCP面向字节流和UDP面向报文的区别

(1)TCP面向字节流

        打个比方比喻TCP,你家里有个蓄水池,你可以里面倒水,蓄水池上有个龙头,你可以通过龙头将水池里的水放出来,然后用各种各样的容器装(杯子、矿泉水瓶、锅碗瓢盆)接水。

        上面的例子中,往水池里倒几次水和接几次水是没有必然联系的,也就是说你可以只倒一次水,然后分10次接完。另外,水池里的水接多少就会少多少;往里面倒多少水,就会增加多少水,但是不能超过水池的容量,多出的水会溢出。

        结合TCP的概念,水池就好比接收缓存,倒水就相当于发送数据,接水就相当于读取数据。好比你通过TCP连接给另一端发送数据,你只调用了一次write,发送了100个字节,但是对方可以分10次收完,每次10个字节;你也可以调用10次write,每次10个字节,但是对方可以一次就收完。(假设数据都能到达)但是,你发送的数据量不能大于对方的接收缓存(流量控制),如果你硬是要发送过量数据,则对方的缓存满了就会把多出的数据丢弃。

(2)UDP面向报文

        UDP和TCP不同,发送端调用了几次write,接收端必须用相同次数的read读完。UPD是基于报文的,在接收的时候,每次最多只能读取一个报文,报文和报文是不会合并的,如果缓冲区小于报文长度,则多出的部分会被丢弃。也就说,如果不指定MSG_PEEK标志,每次读取操作将消耗一个报文。

(3)原因

        其实,这种不同是由TCP和UDP的特性决定的。TCP是面向连接的,也就是说,在连接持续的过程中,socket中收到的数据都是由同一台主机发出的(劫持什么的不考虑),因此,知道保证数据是有序的到达就行了,至于每次读取多少数据自己看着办。

        而UDP是无连接的协议,也就是说,只要知道接收端的IP和端口,且网络是可达的,任何主机都可以向接收端发送数据。这时候,如果一次能读取超过一个报文的数据,则会乱套。比如,主机A向发送了报文P1,主机B发送了报文P2,如果能够读取超过一个报文的数据,那么就会将P1和P2的数据合并在了一起,这样的数据是没有意义的。

(4)UDP的首部校验

        校验的时候需要在UDP数据报之前增加12字节的伪首部,伪首部仅仅是为了计算校验和,并不是是真实存在的数据结构。他会从网络层获取到源IP地址和目的IP地址然后结合自己的UDP长度进行校验。这样既检查了UDP数据报,又对IP数据报的源地址和目的IP地址进行了检验。

        UDP校验和的计算方法和IP数据报首部校验的计算方法很相似,都是用二进制反码运算求和再取反,但是IP数据报只是对IP数据报的头部进行校验,UDP的校验是把首部和数据部分一起校验。

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

  1. 校验时,如果UDP数据报部分的长度不是偶数个字节则会填入一个全0字节,但是填入的这个字节是不发送的。
  2. 如果接收方计算出的校验和不一致,那么可以丢弃也可以交付上层,但是要附上错误报告,告诉上层这是错误的数据报。
  3. 伪首部的校验可以同时校验端口号和IP地址

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

 

四 应用

        UDP也常用于多媒体应用(如IP电话,实时视频会议,流媒体等)数据的可靠传输对他们而言并不重要,TCP的拥塞控制会使他们有较大的延迟,也是不可容忍的

        应用层协议DNS(域名服务)、DHCP(动态主机配置协议)、TFTP(简单文件传输协议)、SNMP(简单网络管理协议)、RIP(路由信息协议)传输层协议都是采用的UDP协议。

        应用层协议FTP(文件传输协议)、Telnet(远程终端协议)、SMTP(简单邮件传输协议)、HTTP(超文本传输协议)、BGP(边界网关协议)传输层协议采用的是TCP协议。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
华为SCP(SuperCharge Protocol)是一种快速充电协议,用于华为手机的快速充电。它可以让华为手机在短时间内快速充电,从而满足用户快速充电的需求。下面是华为SCP快充协议的详细介绍: 1. 技术原理 华为SCP协议的技术原理是通过改变充电器输出电压和电流的组合来实现快速充电。通常情况下,充电器输出电压为5V,输出电流为1A或2A。但是,华为SCP协议支持充电器输出电压高达10V,输出电流高达4A,从而实现了快速充电。 2. 充电器输出 华为SCP协议需要使用特殊的充电器才能实现快速充电。这些充电器具有较高的输出电压和电流,可以在短时间内为华为手机充电。目前,华为SCP充电器的最高输出功率为22.5W。 3. 兼容性 华为SCP协议是一种专有协议,只适用于华为手机。如果用户使用非华为SCP充电器进行充电,将不能实现快速充电效果。同时,如果用户使用非华为充电器,可能会对手机造成损害。 4. 安全性 华为SCP协议支持多项安全机制,包括过热保护、过充保护和短路保护等,可以保证充电的安全性。同时,华为SCP充电器还支持国际电压适配器,可以在不同国家和地区使用。 总之,华为SCP快充协议是一种高效、安全的快速充电协议,可以为华为手机用户提供快速充电服务。但是,用户在选择充电器时需要注意选择华为SCP充电器,以免对手机造成损害。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值