你不知道的网络协议

104 阅读4分钟

网络协议详解:从TCP/IP到WebSocket

在网络通信的世界里,不同的应用场景需要不同的协议来确保数据的高效、安全传输。小编将探讨几种关键网络协议的特点及其应用,包括TCP/IP、HTTP、WebSocket以及它们在现代Web开发中的角色。

TCP/IP与连接管理

TCP/IP并非单一协议,而是一组用于互联网通讯的标准集合。其中,TCP(传输控制协议)位于传输层,负责提供可靠的数据传输服务。建立和终止一个TCP连接分别需要三次握手和四次挥手的过程,以确保双方都能准确无误地开始或结束通信。

HTTP协议与Socket编程

HTTP协议是应用层协议,主要用于Web浏览器与网站之间的数据交换。尽管HTTP本身并不直接涉及Socket编程,但通过使用Socket接口,开发者可以创建持久连接(长链接),实现消息推送和广播等高级功能。值得注意的是,即时通讯通常依赖于Socket协议,而不是HTTP。

B/S架构与即时通讯

B/S架构(Browser/Server结构)是指基于Web的应用程序架构,用户通过浏览器访问服务器资源。随着需求的发展,传统的HTTP协议由于其无状态特性,在处理即时通讯时显得力不从心。因此,WebSocket协议应运而生,它允许服务器主动向客户端发送信息,并支持双向通信。

HTTP vs WebSocket

  • http 协议 是无状态的, 每次请求都是独立的url 返回一致 cookie authorization, 没有上下文关系 - websocket 协议 是有状态的, 建立连接后,分配一个socket id 可以保持连接, 可以发送消息, 可以接收消息

1. 状态性

  • HTTP协议:是无状态的协议。这意味着每次请求都是独立的,服务器不会记住之前客户端的状态信息。即使使用了Cookie或Authorization等机制来传递一些会话信息,每个请求仍被视为独立的操作。
  • WebSocket协议:是有状态的协议。一旦建立了连接,服务器和客户端之间可以保持这种连接,并通过分配一个Socket ID来维护状态,使得双方能够在该连接上进行持续的数据交换。

2. 通信方向

  • HTTP协议:是单向的。客户端发起请求(request),服务器响应(response)。在这个模型中,服务器不能主动向客户端发送消息,除非客户端首先发起了请求。
  • WebSocket协议:支持双向通信。在连接建立后,服务器不仅可以响应客户端的消息,还可以主动向客户端推送数据。这种特性非常适合需要实时更新的应用场景,如在线聊天、股票行情更新等。

3. 基于模型

  • HTTP协议:基于请求-响应模型。客户端发送请求到服务器,服务器处理请求并返回相应的结果给客户端。这种方式适用于传统的网页浏览等场景。
  • WebSocket协议:基于事件驱动模型。一旦连接建立,就可以监听onmessage事件来接收来自另一端的消息,并使用send方法发送消息。这种机制允许更灵活和高效的实时数据交换。

4. 协议基础

  • HTTP协议:工作在应用层,通常用于Web浏览器和服务器之间的数据传输。
  • WebSocket协议:同样是应用层协议,但它是建立在TCP协议之上的,提供了更底层的网络通信能力,支持全双工通信。

5. 连接维持

  • HTTP协议:对于每个请求都需要重新建立连接,虽然有Keep-Alive机制可以在一定时间内复用连接,但这仍然限制了其灵活性。
  • WebSocket协议:一次握手成功后,即可维持长连接,极大地减少了因频繁建立和断开连接带来的开销,适合长时间的数据交互。

搭建WebSocket服务

搭建WebSocket服务的基本流程如下:

  1. 通过HTTP服务加载chat页面。
  2. 使用HTML5 WebSocket API向服务器端发起连接请求,例如ws://localhost:3001/
  3. 服务器返回状态码101 Switching Protocols,表示协议切换成功,之后即可进行双向通信。

WebSocket不仅提高了实时交互的效率,还简化了开发复杂度,使得在线聊天室、实时游戏等场景成为可能。了解这些协议的区别和联系,对于选择合适的技术栈至关重要。