首页 > 编程知识 正文

udp协议和tcp协议的区别(UDP 协议介绍)

时间:2023-05-06 11:46:34 阅读:122775 作者:2992

UDP摘要UDP(User Datagram Protocol) 即用户数据报协议是一种在网络上用于处理数据包(与TCP协议类似)且未连接的协议。 在OSI机型上,位于第四层—— 传输层处于IP协议的上一层。 UDP用于支持需要在计算机之间传输数据的网络APP应用程序。 许多客户端/服务器型号的web APP应用程序(包括网络视频会议系统)都需要使用UDP协议。 UDP协议问世已有多年,其最初的辉煌被一些类似协议所掩盖,但直到今天,UDP仍然是一种非常实用、可行的网络传输层协议。 UDP消息没有可靠性保证、顺序保证、流量控制字段等,可靠性较低。 但是,由于UDP协议的控制选项少,数据传输过程中延迟少,数据传输效率高,因此适用于不太要求可靠性的APP应用程序,以及DNS、TFTP、SNMP等可靠的APP应用程序

UDP的特点UDP提供不可靠的服务,具有TCP所没有的优势

UDP无连接,时间上没有建立连接所需的延迟。 在空间上,TCP需要在终端系统上保持连接状态,需要一定的开销。 此连接的读取包括发送和接收缓存、拥塞控制参数、序列号和确认号等参数。 由于UCP不会保持连接状态或跟踪这些参数,所以开销很小。 空间和时间都有优势。 举个例子:

如果DNS在TCP而不是UDP上运行,则DNS的速度会慢很多。 因为HTTP使用TCP而不是UDP对基于文本数据的网页来说可靠性很重要。 如果同一专用APP应用程序服务器支持UDP,则可以支持更多的活动客户端。分组首部开销小,TCP标头20字节,UDP标头8字节。

UDP没有拥塞控制某些实时APP应用程序需要以稳定的速度发送数据以避免数据丢失,但不能接受实时视频、实时等较大的延迟

UDP提供尽最大努力的交付,不保证可靠交付保持传输可靠性的所有工作都必须由用户在APP应用层完成。 没有TCP的确认机制、重发机制。 即使由于网络原因没有转发给对方,UDP也不会向APP应用层返回错误消息

UDP是面向报文的向从APP应用层传递的消息添加报头,然后将其原样从农村传递到IP层,不集成也不划分,维护这些消息的边界。 传递给IP层的UDP用户数据报在去除报头后,原样传递给上层APP应用程序。 消息是不可分割的,是UDP数据报处理的最小单位。 因此,UDP缺乏灵活性,无法控制读写数据的次数和数量。 例如,要发送100字节的消息,请调用sendto函数一次即可发送100字节。 对方也需要通过recvfrom函数一次接收100字节。 不能使用循环每次获取10字节,获取10次的做法。

这是因为,在对这些APP应用采用TCP时,UDP常用一次性传输比较少量数据的网络应用(例如DNS、SNMP等)在连接的创建、维护和移除上花费不少费用。 UDP也经常用于多媒体APP应用,如IP电话、实时视频会议和流媒体。 可靠的数据传输并不重要,TCP拥塞控制导致延迟大,不可接受

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

需要注意的是

IP数据报通过互联网上许多路由器的存储器传输; UDP用户数据报为运输层的端到端抽象的逻辑信道中传送上的UDP 对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。应用层交给 UDP 多长的报文,UDP 就照样发送,即一次发送一个报文

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

源端口:占16位,源端口号。 需要对方回复时选择。 如果不需要,可以使用全0。目的端口:为16位,占用目标端口号。 这必须在终点传递消息时使用。长度:的长度为16比特,占UDP用户数据报的长度,其最小值为8 (仅报头)。检验和:占16个比特,用于检测UDP用户数据报在传输期间是否有错误。 如果错了就放弃注意。 UDP之间的通信使用端口号,但由于未连接UDP通信,因此不需要使用套接字

UDP校验和UDP校验和的计算方法类似于IP数据报开头校验和的计算方法。 都是使用二进制反码运算求和再取反,但3358www.Sina.com/

IP数据报的校验和之检验IP数据报和首部,但UDP的校验和是把首部和数据部分一起校验

数据部分末尾增加一个全零字节(此字节不发送),接下来就按照二进制反码计算出这些16位字的和。将此和的二进制反码写入校验和字段

接收方,把收到得UDP数据报加上伪首部(如果不为偶数个字节,还需要补上全零字节)后,按二进制反码计算出这些16位字的和。当无差错时其结果全为1。否则就表明有差错出现,接收方应该丢弃这个UDP数据报

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

注意

校验时,若UDP数据报部分的长度不是偶数个字节,则需要填入一个全0字节,但是次字节和伪首部一样,是不发送的如果UDP校验和校验出UDP数据报是错误的,可以丢弃,也可以交付上层,但是要附上错误报告,告诉上层这是错误的数据报通过伪首部,不仅可以检查源端口号,目的端口号和UDP用户数据报的数据部分,还可以检查IP数据报的源IP地址和目的地址。 这种差错检验的检错能力不强,但是简单,速度快

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。