- 传输层协议:TCP UDP
TCP和UDP有什么区别?
- TCP是面向连接的 UDP是面向无连接。在互通之前,面向连接的协议会先建立连接,如TCP会三次握手。所谓的建立连接,是为了在客户端和服务端维护连接,而建立一定的数据结构来维护双方交互的状态,用这样的数据结构来保证所谓的面向连接的特性。
- TCP提供可靠传输,而UDP继承了IP包的特性,不保证不丢失,不保证按顺序到达
- TCP是面向字节流,而UDP继承了IP的特性,基于数据包的,一个一个的发,一个一个的收
- TCP是可以有拥塞控制,如果包丢失或者网络环境不好会调整行为。UDP则不会。
UDP包头是怎么样的?
UDP包到达服务端,发现MAC地址匹配会取下来,将剩下的包传给处理ip层的代码,把ip头取下来,发现ip地址匹配。ip头里面有个8位协议会存放是UDP/TCP。然后再将数据包传给端口号
UDP的三大特点
- 沟通简单(不需要大量的数据结构、处理逻辑、包头字段)
- 容易欺骗(可以给任何人传数据。任何人都可以传数据给他,还可以同时传给多个)
- 不懂改变(不会根据网络的具体情况进行拥塞控制,也不会理会丢包现象)
UDP的三大使用场景
- 需要资源少,在网络情况比价好的内网,或者对于丢包不敏感的应用。(DHCP就是基于UDP协议)
- 不需要1对1沟通,建立连接,而是可以广播的应用(DHCP就是一种广播的形式)
- 需要处理速度快,时延低,可以容忍少数丢包,但是要求即便网络拥塞,也毫不退缩,一往无前的时候
基于UDP的五个使用例子
-
网页或者APP的访问。
QUIC(quick UDP Internet connections 快速UDP互联网连接)
-
流媒体协议。
直播协议RTMP是基于TCP的,但是由于TCP的严格顺序传输,会导致掉帧。
-
实时游戏
自定义可靠UDP协议,自定义重传策略。能够把丢包产生的时延降到最低,尽量减少网络问题对游戏性造成的影响
-
loT物联网
物联网通信协议Thread就是基于UDP协议的
-
移动通信领域。
4G网络里,移动流量上网的数据面对的协议GTP-U是基于UDP的。
- 以上应用针对的是TCP协议传输过程中造成的卡顿时延掉帧现象,而且维护TCP协议代价太大(维护TCP连接需要在内核维护一些数据结构),而改用UDP协议