UDP协议

3.1 概述

UDP是一个简单的面向数据报的运输层协议:进程的每个输出操作都正好产生一个 U D P 数据报,并组装成一份待发送的 I P数据报。 这与面向流字符的协议不同,如 T C P,应用 程序产生的全体数据与真正发送的单个 I P数据报可能没有什么联系。
用户数据报协议 UDP(User Datagram Protocol)是无连接的,尽最大可能交付,没有拥塞控制,面向报文(对于应用程序传下来的报文不合并也不拆分,只是添加 UDP 首部),支持一对一、一对多、多对一和多对多的交互通信。

注意: UDP是传输层协议,和TCP协议处于一个分层中,但是与TCP协议不同,UDP协议并不提供超时重传,出错重传等功能,也就是说其是不可靠的协议。
3.2 UDP首部

UDP的首部占8个字节如下图:

在这里插入图片描述

在ip首部为20个字节,由于数据封装是逐层进行的所有UDP的数据报为下图:

在这里插入图片描述

UDP端口号
    由于很多软件需要用到UDP协议,所以UDP协议必须通过某个标志用以区分不同的程序所需要的数据包。端口号的功能就在于此,例如某一个UDP程序A在系统中注册了3000端口,那么,以后从外面传进来的目的端口号为3000的UDP包都会交给该程序。端口号理论上可以有2^16这么多。因为它的长度是16个bit

UDP检验和

    U D P和T C P在首部中都有覆盖它们首部和数据的检验和。 U D P的检验和是可选的,而T C P 的检验和是必需的。 (伪首部的长度为12个字节,所以TCP的长度一定为20)

在这里插入图片描述

    UDP检验和覆盖UDP协议头和数据,这和IP的检验和是不同的,IP协议的检验和只是覆盖IP数据头,并不覆盖所有的数据。UDP和TCP都包含一个伪首部,这是为了计算检验和而摄制的。伪首部甚至还包含IP地址这样的IP协议里面都有的信息,目的是让UDP两次检查数据是否已经正确到达目的地。如果发送端没有打开检验和选项,而接收端计算检验和有差错,那么UDP数据将会被悄悄的丢掉(不保证送达),而不产生任何差错报文。

3.3 UDP长度

理论上,I P数据报的最大长度是64K(65535字节)(2的16次幂),这是由I P首部16比特总长度字段所 限制的。去除 2 0字节的IP首部和8个字节的U D P首部,U D P数据报中用户数据的最长长度为 65507字节。但是一般网络在传送的时候,一次一般传送不了那么长的协议(涉及到MTU的问题),就只好对数据分片,当然,这些是对UDP等上级协议透明的,UDP不需要关心IP协议层对数据如何分片 。

在一个以太网上,数据帧的最大长度是 1 5 0 0字节 , 其中1 4 7 字节留给数据,假定 I P首部为2 0字节, 而且U D P首部为8字节,所以每片UDP最大数据为1472个字节

在这里插入图片描述

另外需要解释几个术语: I P数据报是指 I P层端到端的传输单元(在分片之前和重新组装 之后),分组是指在I P层和链路层之间传送的数据单元。一个分组可以是一个完整的 I P数据报, 也可以是I P数据报的一个分片。

3.4 UDP服务器设计

​ UDP协议的某些特性将会影响我们的服务器程序设计,大致总结如下:

关于客户IP和地址:服务器必须有根据客户IP地址和端口号判断数据包是否合法的能力(这似乎要求每一个服务器都要具备)
关于目的地址:服务器必须要有过滤广播地址的能力。
关于数据输入:通常服务器系统的每一个端口号都会和一块输入缓冲区对应,进来的输入根据先来后到的原则等待服务器的处理,所以难免会出现缓冲区溢出的问题,这种情况下,UDP数据包可能会被丢弃,而应用服务器程序本身并不知道这个问题。
服务器应该限制本地IP地址,就是说它应该可以把自己绑定到某一个网络接口的某一个端口上。

3.5 UDP的应用

​ 三种 I P地址:单播地址、广播地址和多播地址 ,广播和多播仅应用于 U D P
单播, 广播,多播

概念:有时一个主机要向网上的所有其他主机发送帧, 这就是广播 ,多播 (multicast) 处于单播和广播之间:帧仅传送给属于多播组的 多个主机。

广播和多播仅应用于 U D P,它们对需将报文同时传往多个接收者的应用来说十分重要 ,T C P是一个面向连接的协议,它意味着分别运行于两主机(由 I P地址确定)内的两进程(由 端口号确定)间存在一条连接。

I P多播提供两类服务:

    向多个目的地址传送数据。有许多向多个接收者传送信息的应用:例如交互式会议系 统和向多个接收者分发邮件或新闻。如果不采用多播,目前这些应用大多采用 T C P来完成 (向每个目的地址传送一个单独的数据复制)。然而,即使使用多播,某些应用可能继续采用 T C P来保证它的可靠性。

    客户对服务器的请求。例如,无盘工作站需要确定启动引导服务器。目前,这项服务 是通过广播来提供的,但是使用多播可降低不提供这项服务主机的负 担。

作者:zpoison
来源:CSDN
原文:https://blog.csdn.net/zpoison/article/details/86528327
版权声明:本文为博主原创文章,转载请附上博文链接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值