
在 IP 头(网络层)里面有个 8 位协议,存放数据里面到底是 TCP 还是 UDP
UDP在传输层, 拿到网络层交的数据, 上交给应用层
TCP 和 UDP 有哪些区别?
TCP 是面向连接的,UDP 是面向无连接的。
什么叫面向连接,什么叫无连接呢?在互通之前,面向连接的协议会先建立连接(TCP会三次握手)。
所谓的建立连接,是为了在客户端和服务端维护连接,而建立一定的数据结构来维护双方交互的 状态 , 是一个有状态服务
通过 TCP 连接传输的数据,
- 无差错、不丢失、不重复、并且按序到达。 IP 包是没有任何可靠性保证的,但是 TCP 号称能做到那个连接维护的程序做的事情。
- TCP 是面向字节流的, 是 TCP 自己的状态维护做的事情。
- TCP 有拥塞控制的(窗口)。它意识到包丢弃了或者网络的环境不好了,就会根据情况调整自己的行为,看看是不是发快了,要不要发慢点。
UDP 继承了 IP 包的特性,其他什么都不做
有什么要定制的 , 交给应用层
相信网络通路默认就是很容易送达的,不容易被丢弃的。
特点
- 适合广播
不维护连接状态虽然有端口号,但是监听在这个地方,谁都可以传给他数据,他也可以传给任何人数据,甚至可以同时传给多个人数据。
- 适合广播
- 头很小 (8字节 ,额外开销小)
- 很快
不用建立连接,不对应用层的报文数据进行拆分, 提交到应用层的数据也不用合并再提交
只受这些限制 :应用生成数据速度,计算机能力,传输带宽
- 很快
-
4.占用内存小
不用维护连接的状态, 因此 嵌入式系统适合
服务器接待的TCP连接很有限, UDP 由于是没有连接的,在异步 IO 机制引入之前,常常是应对海量客户端连接的策略。
UDP 使用场景
第一,需要资源少,在网络情况比较好的内网,或者对于丢包不敏感的应用
DHCP(动态主机配置协议) 就是基于 UDP 协议的。一般的获取 IP 地址都是内网请求,而且一次获取不到 IP 又没事,过一会儿还有机会。
第二,广播
UDP 的不面向连接的功能,可以使得可以承载广播或者多播的协议。
DHCP 就是广播
第三,需要处理速度快,时延低
如视频 ,游戏 需要实时性
采用自定义的可靠 UDP 协议
常见使用UDP
- QUIC
原来访问网页和手机 APP 都是基于 HTTP 协议的。
HTTP 协议是基于 TCP 的,建立连接都需要多次交互,对于时延比较大的目前主流的移动互联网来讲,建立一次连接需要的时间会比较长,然而既然是移动中,TCP 可能还会断了重连,也是很耗时的。
目前的 HTTP 1.1,虽然多个数据通道共享一个TCP连接的情况,但是 TCP 的严格顺序策略使得哪怕共享通道,前一个不来,后一个和前一个即便没关系,也要等着,时延也会加大。http2可以一个域名全部数据都在一个TCP连接并发
QUIC(全称Quick UDP Internet Connections,快速 UDP 互联网连接)是 Google 提出的一种基于 UDP 改进的通信协议,其目的是降低网络通信的延迟,提供更好的用户互动体验。
QUIC 在应用层上,会自己实现快速连接建立、减少重传时延,自适应拥塞控制
-
流媒体
-
实时游戏
维护 TCP 连接需要在内核维护一些数据结构,因而一台机器能够支撑的 TCP 连接数目是有限的, UDP 由于是没有连接的,在异步 IO 机制引入之前,常常是应对海量客户端连接的策略。
玩家并不关心过期的数据,对实时要求较为严格的情况下,采用自定义的可靠 UDP 协议,自定义重传策略 -
物联网
物联网领域终端资源少,很可能只是个内存非常小的嵌入式系统,而维护 TCP 协议代价太大;
另一方面,物联网对实时性要求也很高,Google 旗下的 Nest 建立 Thread Group,推出了物联网通信协议 Thread,就是基于UDP 协议的。 -
移动通信领域
在 4G 网络里,移动流量上网的数据面对的协议 GTP-U 是基于 UDP 的。因为移动网络协议比较复杂,而 GTP 协议本身就包含复杂的手机上线下线的通信协议。
网友评论