UDP协议相关知识
Posted z啵唧啵唧
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UDP协议相关知识相关的知识,希望对你有一定的参考价值。
UDP协议相关知识
基本特征
- 无连接,不可靠、面向数据报、全双工
- 无连接,socket创建好了之后,就可以尝试读写数据
- 面向数据报:读写数据都是以DatagramPacket为单位进行的
- 全双工:一个socket既能读又能写
理解UDP协议报文格式
-
拼装包头的过程也就是所谓的封装
-
校验和
- 网络中传输的数据本质上就是一些比特流 0 / 1 比特流
- 这些比特流是通过光信号、电信号来进行表示
- 如果在传输的过程当中,受到一些干扰就容易出现一些"比特翻转的情况(0 -> 1 1 -> 0)"
- 校验和就是来看当前的数据是否出现了问题
- 检验和不一定100%的就能够进行校验,当校验和正确不能够保证数据一定正确,当校验和错误一定可以说明数据有问题
- 常见的校验和算法
- crc算法:循环冗余校验
- MD5算法:非对称的Hash算法
如何基于UDP协议实现可靠传输
- 其实这道题看似再问UDP实际上是在考察TCP,因为我们从TCP保证传输可靠性的机制去考虑
- 解决方法
- 1、实现确认机制,把每个数据接收到之后,都要反馈一个ACK(这个就不是内核返回的了,而是应用程序自己定义的ack包,发送回去)
- 2、实现序号/确认序号,以及去重
- 3、实现超时重传
- 4、实现连接管理
- 5、要想提高效率,实现滑动窗口
- 6、为了限制滑动窗口,实现流量控制/拥塞控制
TCP 和 UDP各自的使用场景
- 如果需要可靠性肯定首选TCP
- 如果传输的单个数据比较长(超过了64k)肯定还是使用TCP
- 如果特别注重效率优先考虑UDP,UDP的速度是比TCP快的,因为TCP实现可靠性是需要代价的,UDP只需要咔咔一顿传输
- 像一个典型的场景:机房内部的主机通信他的网络环境简单,带宽充裕,丢包概率本身就不大,机房内部主机之间通信往往传输的数据量大,更需要速度,尤其是像当下的"微服务"这样的环境中其实特别重要,这种场景就要使用这个UDP。如果跨机房、访问外部网络,这种网络环境复杂,丢包概率大,需要使用TCP
- 如果需要广播,也就是说一份数据需要同时发给多个主机,优先使用UDP,因为UDP本身就是支持广播的,TCP自身不支持,只能在应用程序中通过多个连接,使用轮询的方式给每个主机发送数据(这其实是一种伪广播)
像LOL、王者农药这种moba游戏,传输的时候,使用TCP还是UDP
- 像这种游戏即要求保证可靠性还要求保证速度那到底是使用哪一种数据传输协议呢?
- 很有可能既不是TCP和UDP,因为传输层协议并不是TCP和UDP这两种协议,除了这两种协议之外还存在很多其他的传输层协议,有的协议就可以尽可能地兼顾到可靠性和效率(兼顾到可靠性和效率所付出地代价就是更多的机器资源)
- 韦一笑(游戏开发知名大佬)开发的KCP协议,在TCP协议地基础之上让效率更高,这样的协议就适合即时性高的游戏
以上是关于UDP协议相关知识的主要内容,如果未能解决你的问题,请参考以下文章