TCP | UDP |
---|---|
首部开销大 | 首部开销小 |
可靠 | 不可靠 |
面向连接 | 无连接 |
面向字节流 | 面向报文 |
何谓可靠?
是否具有手段以保证传输过程中,数据不会发生丢失、乱序等情况
TCP:必须经过三次握手,与对方确认连接关系。
具有:超时重传、滑动窗口、流量控制
适合的场景:
TCP:数据完整性、通信质量要求高的场景,如:下载文件、浏览网页
UDP:实时视频通讯、网络游戏
传输方式:
TCP面向字节流:
数据以:字节流的形式传递,每个TCP有一个发送缓冲区,如果字节流太长,会拆分再发送;字节流太短,会等待缓冲区中字节流到合适的时机再发送
UDP面向报文:
使用应用程序控制:应用层交给UDP多长的报文,UDP照样发送,不拆分不合并,保留报文的边界;发送一个数据包,对面就接收一个数据包。
其他协议:kcp
基于udp,通过算法实现的可靠传输协议,相比tcp主要优点是快(平均延迟降低30%-40%)
内网&外网
内网:可以直接向外网发送udp数据
外网:用nat转换向内网发送udp数据
其他——关于UDP
- 物联网的Coap协议基于UDP
- 游戏比较复杂,FPS、MOBA实时性要求较高一般采用UDP,数据校验和同步在算法上实现,除此之外也可以是TCP或者TCP+UDP
- udp最大单个报文长度是uint16_max
- 数据链路层有一个最大传输单元,任何高层协议报文都会小于这个传输单元大小,如果报文体积过大,错误信息应该逐层传递到上层协议,最好在业务逻辑层面限制udp数据包大小。