TCP、UDP、HTTP、WebSocket四种通信协议


TCP

优点:可靠性、全双工协议、开源支持多、应用较广泛、面向连接、研发成本低、报文内容不限制(IP层自动分包,重传,不大于1452bytes)

缺点:操作系统:较耗内存,支持连接数有限、设计:协议较复杂,自定义应用层协议、网络:网络差情况下延迟较高、传输:效率低于UDP协议

特性:面向连接、可靠性、全双工协议、基于IP层、OSI参考模型位于传输层、适用于二进制传输, 长链接

UDP

优点:操作系统:并发高,内存消耗较低、传输:效率高,网络延迟低、传输模型简单,研发成本低

缺点:协议不可靠、单向协议、开源支持少、报文内容有限,不能大于1464bytes、设计:协议设计较复杂、网络:网络差,而且丢数据报文

特性:无连接,不可靠,基于IP协议层,OSI参考模型位于传输层,最大努力交付,适用于二进制传输

HTTP

优点:协议较成熟,应用广泛、基于TCP/IP,拥有TCP优点、研发成本很低,开发快速、开源软件较多,nginx,apache,tomact等

缺点:无状态无连接、只有PULL模式,不支持PUSH、数据报文较大

特性:基于TCP/IP应用层协议、无状态,无连接(短链接)、支持C/S模式、适用于文本传输.
注意:grpc传输就用的HTTP2

WebSocket

优点:协议较成熟、基于TCP/IP,拥有TCP优点、数据报文较小,包头非常小、面向连接,有状态协议、开源较多,开发较快

缺点:没发现啥缺点

特性:有状态,面向连接、数据报头较小、适用于WEB3.0,以及其他即时联网通讯
长链接

协议选择

通过以上对协议特性分析,建议:

  1. 对于弱联网类游戏,必须消除类的,卡牌类的,可以直接HTTP协议,考虑安全的话直接HTTPS,或者对内容体做对称加密;
  2. 对于实时性,交互性要求较高,且team有过相关经验,可以优先选择websocket,其次TCP协议;
  3. 对于实时性要求极高,且可达性要求一般可以选择UDP协议;
  4. 局域网对战类,赛车类,直接来UDP协议吧(公网对战,P2P的UDP还得“打洞”处理)

常见问题:

1.TCP与UDP的区别:

1.基于连接(TCP)与无连接(UDP);
2. 对系统资源的要求(TCP较多,UDP少);
3. UDP程序结构较简单;
4. 流模式(TCP)与数据报模式(UDP) ;
5. TCP保证数据正确性,UDP可能丢包;
6. TCP保证数据顺序,UDP不保证。

2.计算机网络有几层:

常见的大学课本《计算机网络》谢希仁版总结是五层, 从下到上分别是物理层、数据链路层、网络层、传输层应用层,当然也有4层(少个物理层)、7层的分法。

3.HTTP的长连接:

HTTP长连接的概念,以及HTTP与TCP的关系,简单概括一下就是:
HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。

每个HTTP连接完成后,其对应的TCP连接并不是每次都会关闭。从 HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头有加入这个头部字段:Connection:keep-alive
在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache,Nginx,Nginx中这个默认时间是 75s)中设定这个时间。实现长连接要客户端和服务端都支持长连接。
HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议。IP协议主要解决网络路由和寻址问题,TCP协议主要解决如何在IP层之上可靠的传递数据包,使在网络上的另一端收到发端发出的所有包,并且顺序与发出顺序一致。TCP有可靠,面向连接的特点。

相关