在程序员面试中,有一个经常被问到的网络协议,那便是TCP与UDP,可能TCP大家都比较熟悉,三次握手四次挥手,对于UDP可能陌生一点,觉得应用场景比较少,不过这几年,由于直播行业的快速发展,UDP的应用也越来越广,今天我们来学习下UDP协议。
UDP,用户数据包协议,又称不可靠数据包协议,顾名思义,就是不能保证数据一定能传输到目标机器,既然不能保证传达,为什么还要用这种协议呢?岂不是非常地不合理?
有位伟人说过,存在即为合理。例如网络直播,网络直播采用的很多协议都是基于UDP的,为什么呢?在网络直播的业务中,是允许部分丢包的,即便我们丢失了部分帧,也能够正常的播放,并且用户不一定感受得到。TCP是不允许丢包的,TCP协议会有复杂的重试机制,特别是在弱网环境下,一旦有数据发送失败,TCP协议就会不停地重试,导致新的视频内容没办法刷出来,那样子视频反而会一卡一顿。同样,在我们经常玩的MOBA游戏中,例如王者荣耀或者英雄联盟,一旦包丢失了,重新获取到几秒钟前的包已经意义不大了。
UDP的数据包非常的简单,包头只有源端口、目标端口、长度跟校验和四个字段,剩下的就是具体的包体了。和TCP相比,这已经是精简到不能再精简了,每一个字段都是必须的。源端口跟目标端口用来给操作系统定位是哪个应用来发送接收包信息,长度跟校验和用来校验UDP包是否正确。
我们注意到,UDP的数据包并没有序列,所以,UDP不保证消息交付顺序,并且不确认,不重传,不排重,随心所欲,有包就发,不像TCP会优先发队首。
UDP不跟踪连接状态,不建立连接也不关心对方是否能收到!
UDP不需要流量控制,不管网络的情况,没有拥塞控制。
即使UDP这么的不靠谱,但是某些场景下的确需要这么搞。UDP有三大使用场景。
UDP虽然非常的简单,但是UDP的应用仍然非常广泛,可以关注我,后面我们再一起学习,一起分享。大家的支持是我继续唠嗑的动力。同名公众号(沙茶敏碎碎念)