【网络编程】【UDP】UDP协议介绍

一、UDP介绍

       UDP和TCP相比是截然不同的,是一个简单的传输协议。全称是用户数据包协议(User Datagram Protocol),是一个无连接协议。UDP不保证UDP数据报会到达其最终目的地,不保证各个数据报的先后顺序跨网络后保持不变,也不保证每个数据报只到达次。

       我们使用UDP进行网络编程所遇到的问题是它缺乏可靠性。如果一个 数据报到达了其最终目的地,但是校验和检测发现有错误,或者该数据报在网络传输途中被丢弃了,它就无法被投递给UDP套接字,也不会被源端自动重传。如果想要确保一个数据报到达其目的地, 可以往应用程序中添置一大堆 的特性:来自对端的确认、本端的超时与重传等。

       每个UDP数据报都有一个长度。如果一个数据报正确地到达其目的地,那么该数据报的长度将随数据一道传递给接收端应用进程。我们已经提到过TCP是一个字节流(byte stream)协议,没有任何记录边界。

      UDP是无连接的,因为UDP客户与服务器不必存在任何长期的关系。所以服务器和客户端都可以用同一个UDP套接字和不同的对端通讯。

 

       这一端的UDP简单地给来自用户的数据报安上它的8字节的首部以构成UDP数据报,然后传递给IP。IPv4或IPv6给UDP数据报安上相应的IP首部以构成IP数据报,执行路由操作确定外出接口,然后或者直接把数据报加入数据链路层输出队列(如果适合于MTU),或者分片后再把每个片段加入数据链路层的输出队列。如果某个UDP应用进程发送大数据报(譬如说2000字节数据报),那么它们相比TCP应用数据更有可能被分片,因为TCP会把应用数据划分成MSS大小59的块,而UDP却没有对等的手段。

       从写一个UDP套接字的write调用成功返回表示所写的数据报或其所有片段已被加入数据链路层的输出队列。如果该队列没有足够的空间存放该数据报或它的某个片段,内核通常会返回一个ENOBUFS错误给它的应用进程。

 

       尽管UDP无法提供TCP提供的众多特性,需要使用UDP的场合依然不少。广播或多播应用必须使用UDP。简单的请求应答情形也可以使用UDP,不过必须在应用程序中增加某种形式的可靠性。UDP不应该用于海量数据的传送。

 

二、UDP协议

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值