首先,我们通过一张图来展示TCP,UDP,socket之间的关系(图来自B站 小白debug)

socket是传输层和应用层之间的软件抽象层,他是一组接口,在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。通过socket,用户(即开发者)不需要直接处理 TCP 层或更低层级(如 IP 层、数据链路层等)的数据通信细节和实现逻辑。Socket 提供了一个抽象层,使得开发者能够更专注于应用层的逻辑设计,而将底层网络通信的具体实现细节交给操作系统和相关的网络协议栈来管理。
客户端和服务端建立socket的过程

WebSocket于HTTP之间的联系
首先,两者传输层都是基于TCP实现,TCP是一个双工通信,但是HTTP却是一个半双工通信,相当于TCP协议被切掉了一半,当然这是因为HTTP本身设计之初就是用来进行查看网页文本,没必要进行双向信息传输;那么现在在需要进行双向通信的时候,就需要使用WebSocket协议了
在使用WebSocket协议的过程中,WebSocket首先通过http向服务器发送一个特殊的upgrade请求到服务器,请求将现有的http连接升级为websocket连接,当连接成功以后,http协议就被转换成为了WebSocket,之后的通信不再基于http协议,而是直接基于TCP进行,使用WebSocket自己的帧格式进行数据交换
HTTP协议和RPC之间的关联和差异
经常会有人问既然有了HTTP为什么还需要RPC,但是实际上应该反过来问,为什么有了RPC还要有HTTP,因为RPC产生于80年代,HTTP产生于90年代,说白了两者都是用来进行网络服务通信,但是在目的上有些许不同,并且RPC是针对于特定的语言或者框架而设计的,并不如HTTP那样具有广泛的兼容性和可移植性
HTTP 是一种用于分布式、协作式和超媒体信息系统的应用层协议。它是万维网的数据通信基础,主要用于Web浏览器与网站服务器之间的通信。
RPC(远程过程调用)是一种通过网络从远程计算机程序上请求服务的技术,而不需要了解底层网络技术的协议。它允许一个程序调用位于网络另一端的另一个地址空间中的过程或函数,就像调用本地函数一样简单。
功能差异:HTTP 主要用于客户端与服务器之间的文档交换和服务调用,特别是 Web 应用;而 RPC 更侧重于提供一种机制让不同机器上的应用程序能够像调用本地方法一样调用对方的方法,适用于构建分布式系统。
使用场景:对于需要快速、频繁地进行小数据量交互的应用,RPC 可能更合适;而对于需要传递复杂文档或多媒体内容的应用,HTTP 则更为适用。
