UDP协议

  UDP协议位于计算机网络的传输层,而运输层提供的是端到端之间的通信,也就是进程之间的通信。数据交付和差错检测是2个最低限度的运输层服务,而UDP协议恰恰只提供了这两个服务,可以说UDP是运输层上最简单的协议。当然这种简单性使得UDP实现变得十分简单,没有流量限制,数据的传送速度也达到最大值,但这也造成了UDP传输的不可靠性。

  网络层的IP协议不是不可靠传输的,而传输层在IP协议基础上使用UDP,仅仅发挥了多路复用/多路分解,以及差错检测而已。

  下面我们首先介绍一下什么是多路复用/多路分解,网站背后的服务器每天都要接受大量的不同电脑的访问,而服务器是如何区分出不同的电脑做出相应反应的呢?(这里我们以UDP协议上网做一个例子,实际上现在都是使用TCP协议来实现上网)。

  在传输层使用UDP发送报文段,从而进行上网时,报文段包括了客户机端口号和主机端口号,主机接收到来自客户机的信息一步步分解得到最后的报文段,从报文段的主机端口号可以知道客户机想要访问的主机的对象(也就是网页),反过来主机知道了客户机的端口号,也就知道要将反馈信息发放到客户机的哪一个端口(可以理解为应用程序)。


UDP报文段格式结构:


    UDP首部只有四个字段:源端口号,目的端口号,长度,校验和。每个字段由两个字节组成,也就是16bits。

   通过源端口号和目的端口号实现了多路分解和多路复用,那么差错检验是如何实现的?差错检验由四个字段共同完成,其中设置校验和字段是专门为了服务于差错检验。在传输过程中可能会出现比特位翻转,使得数据出现错误,所以差错检验是必须的。

差错检验的实现方法:

对于发送方,首先将源端口号,目的端口号,长度这三个字段相加得和,设置校验和字段为相加结果的反码。那么这4个字段相加便是16个1。

对于接受方,接收到了报文段后,将源端口号,目的端口号,长度,校验和相加,若结果出现了0,那么接收方会意识到报文段是出错的。

对于UDP协议,遇到出错的报文段,处理的方法十分简单--直接丢弃报文段。因为UDP只有差错检验的功能,无法对其进行纠错。

UDP的机制存在非常大的弊端,数据传输的可靠性不足,但是UDP简单快速的优点是的UDP使用许多应用。

DNS 是一个通常使用UDP的应用层协议的例子。 当一台主机中的 DNS 应用程序想要进行一次查询时,它构造了一个 DNS 查询报文并将其交给 UDP。无须执行任何与运行在目的端系统中的 UDP 实体之间的握手,主机端的 UDP 为此报文添加首部字段,然后将形成的报文段交给网络层。 网络层将此 UDP 报文段封装进一个IP数据报中,然后将其发送给一个名字服务器。 在查询主机中的 DNS 应用程序则等待对该查询的响应。 如果它没有收到响应(可能是由于底层网络丢失了查询或响应) ,则要么试图向另一个名字服务器发送该查询,要么通知调用的应用程序它不能获得响应。 


  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值