UDP是一位顽皮的“朋友”,他说话时从来不问听他说话的人是否听到,UDP不管对方当前在做什么事,是在吃饭还是喝水,是在唱歌还是跳舞,总之他想跟别人说话时就直接说,而且说的速度也不控制,一直到把想说的话说完为止,即使对方没有听到他的话也不在乎。
听起来UDP真的很顽皮呢,看起来是个任性十足的朋友,个性极强,UDP很瘦,身体由五个部分组成,不像TCP那样有很多帮助控制说话稳定性、可靠性以及速度的字段,一共十几个之多。UDP的身体只有五部分,如下图:
- source Port 发出声音的人
- Destination Port 听声音的人
- Length 说话的长短
- Checksum 把声音转换成二进制进行和运算,再取反,接收方收到数据以后,会按照和运算的方法重新计算一遍,是否等于报文的checksum,不相等的话,说明数据有丢失。
- Data octets 一个字节的数据,Octets是8位
UDP有哪些不同于TCP的技能
作用不同:
TCP主要想保证可靠性并且传输数据
UDP要轻装上阵,只保证核心数据传输功能,不做其他工作安全程度
TCP 在保证数据不丢失的基础上,传输数据
UDP 只进行最简单的和校验,没有其他保证数据安全的措施连接
TCP 传输数据必须以建立连接为前提
UDP 没有建立连接的概念传输速度
TCP 有滑动窗口协商机制,用来控制传输速度
UDP 协议简单,封包小,没有连接-握手、挥手,只专注数据发送流控技术
TCP 会根据缓冲区和接收方的要求控制同一时间发送数据的大小
UDP 没有相关设置场景差异
每个协议都有自己适合的场景,TCP每次请求都有ACK确认,面向连接,但是这样就会造成传输时间有一定的延迟,所以特别适合数据传输过程不能丢失,而且数据量不是特别大的情况,,如发邮件、发短信。而UDP呢,因为传输包小,没有流速控制,所以特别适合传输数据量大,可以允许少量丢包的场景,如音频、视频、直播、ping等。
但是近些年有一种趋势,随着技术手段和需求不断的更替,TCP和UDP使用的场景变的不那么清晰了,使用TCP传输文件是通用的解决方法,但是TCP传输时间延迟比较长。如果我们想要以更快的速度传输文件,少量的数据丢失也可以通过技术手段找回来,那么UDP就是最好的替代方案。再比如HTTP1.0,HTTP2.0都使用TCP来保证数据可靠性,但是HTTP3.0在目前没有更多更好的优化方案情况下,采用UDP来提高数据发送速率,增加亮点。
理论上来说能够使用TCP作为传输协议的,UDP都能替代,近些年对于小而轻的工具越来越多的受到大家的追捧,也是技术的趋势,从前整套的解决方案不再是主流追逐的方向。人们喜欢用不同的工具自由解决实际问题,如linux中有很多小而美的工具。
以下列出,一些协议适用的场景:
TCP场景:
- 远程控制(SSH)
- File Transfer Protocol(FTP)
- 邮件(SMTP、IMAP)等
- 点对点文件传输(微信)等
UDP场景:
- 网络游戏
- 音视频传输
- DNS
- Ping
- 直播
模糊地带:
- HTTP(目前TCP为主)
- 文件传输