UDP、TCP、HTTP、WebSocket

184 阅读6分钟
  1. UDP(用户数据报协议)

    • 基本概念

      • UDP 是一种简单的传输层协议。它是无连接的,这意味着在数据传输之前,不需要像 TCP 那样建立连接。UDP 在发送数据时,只是简单地将数据封装成 UDP 数据包(也称为用户数据报),然后通过网络发送给目标主机。
      • 例如,在一个实时视频流应用中,为了尽快将视频数据发送给接收端,减少延迟,可能会选择 UDP。因为对于视频流来说,偶尔丢失一些数据帧可能不会对观看体验产生严重影响,而快速传输数据是更重要的。
    • 数据包结构

      • UDP 数据包由头部和数据部分组成。头部只有 8 个字节,其中包括源端口号(2 字节)、目的端口号(2 字节)、UDP 长度(2 字节)和 UDP 校验和(2 字节)。由于头部比较短小,所以 UDP 的开销相对较小。
    • 特点

      • 传输速度快:没有连接建立和拆除的过程,数据可以快速发送。
      • 开销小:头部简短,协议简单,因此在传输过程中的额外开销较小。
      • 不可靠性:不保证数据的可靠传输,数据可能会丢失、重复或者乱序。
    • 应用场景

      • 实时性要求高的应用:如在线游戏(特别是对操作实时性要求极高的竞技游戏)、视频会议、实时音频传输等。这些应用通常可以容忍一定的数据丢失,但对延迟非常敏感。
      • 简单的查询 - 应答系统:如 DNS(域名系统)查询,UDP 的快速特性使得查询可以快速得到响应,并且 DNS 查询本身有重试机制,所以可以接受 UDP 的不可靠性。
  2. TCP(传输控制协议)

    • 基本概念

      • TCP 是一种面向连接的、可靠的传输层协议。在数据传输之前,需要通过三次握手建立连接,在数据传输完成后,需要通过四次挥手来关闭连接。它为应用层提供了可靠的字节流服务,确保数据能够准确无误地从发送端传输到接收端。
      • 例如,在一个文件传输应用中,我们希望文件的每一个字节都能正确地传输到目的地,这时 TCP 就是一个很好的选择。它会对传输的数据进行编号、确认、重传等操作,以保证数据的完整性。
    • 数据包结构

      • TCP 数据包(也称为 TCP 段)的头部比较复杂,最少 20 个字节。包括源端口号(2 字节)、目的端口号(2 字节)、序列号(4 字节)、确认号(4 字节)、头部长度(4 位)、保留位(6 位)、控制位(6 位)、窗口大小(2 字节)、校验和(2 字节)和紧急指针(2 字节)。这些字段用于实现 TCP 的各种功能,如流量控制、拥塞控制等。
    • 特点

      • 可靠性高:通过序列号、确认号、重传机制等保证数据的准确传输。
      • 面向连接:有明确的连接建立和关闭过程。
      • 提供流量控制和拥塞控制:通过窗口机制和拥塞避免算法等,避免发送端发送过多的数据导致接收端无法处理或者网络拥塞。
    • 应用场景

      • 文件传输:如 FTP(文件传输协议)、HTTP(超文本传输协议)用于传输网页文件等大部分基于文件的传输场景。
      • 电子邮件传输:SMTP(简单邮件传输协议)使用 TCP 来确保邮件内容准确无误地发送。
  3. HTTP(超文本传输协议)

    • 基本概念

      • HTTP 是应用层协议,用于在 Web 浏览器和 Web 服务器之间传输超文本(如 HTML 文件)等资源。它是基于 TCP 的,通常运行在 TCP 的 80 端口(对于 HTTP)或 443 端口(对于 HTTPS,即安全的 HTTP)。
      • 例如,当你在浏览器中输入一个网址并回车时,浏览器会通过 HTTP 协议向服务器请求网页内容,服务器收到请求后,通过 HTTP 协议将网页内容返回给浏览器。
    • 协议版本

      • 主要有 HTTP/1.0、HTTP/1.1 和 HTTP/2。HTTP/1.0 是早期版本,每个 TCP 连接只能发送一个请求并接收一个响应,效率较低。HTTP/1.1 支持持久连接,一个 TCP 连接可以发送多个请求和接收多个响应,提高了效率。HTTP/2 采用二进制格式传输数据,并且引入了多路复用等新特性,进一步提高了性能。
    • 请求 - 响应模式

      • HTTP 请求由请求行、请求头部、空行和请求体(可选)组成。请求行包含请求方法(如 GET、POST 等)、请求的 URL 和 HTTP 协议版本。请求头部包含各种请求信息,如用户代理(浏览器类型)、接受的内容类型等。
      • HTTP 响应由响应行、响应头部、空行和响应体组成。响应行包含 HTTP 协议版本、响应状态码(如 200 表示成功、404 表示未找到等)和响应状态描述。响应头部包含服务器信息、内容类型、内容长度等。响应体则是实际返回的内容,如网页的 HTML 文件。
    • 应用场景

      • 网页浏览:这是 HTTP 最主要的应用场景,用于获取网页内容、图片、脚本文件等各种资源。
      • Web 服务接口:用于实现前后端分离的 Web 应用中,前端通过 HTTP 请求后端提供的 API 接口来获取数据或执行操作。
  4. WebSocket

    • 基本概念

      • WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。它提供了一种浏览器与服务器之间的持久连接,使得服务器可以主动向浏览器推送数据,而不像 HTTP 那样只能由浏览器发起请求。
      • 例如,在一个股票交易网站中,为了实时更新股票价格,服务器可以通过 WebSocket 连接主动将最新的价格信息推送给浏览器,而不需要浏览器不断地发起 HTTP 请求来获取最新价格。
    • 协议升级过程

      • WebSocket 的连接是从 HTTP 协议升级而来的。首先,浏览器通过发送一个带有特殊头部的 HTTP 请求,请求将协议升级为 WebSocket。服务器收到请求后,如果同意升级,会返回一个相应的响应,完成协议升级。之后,双方就可以通过 WebSocket 协议进行通信。
    • 消息格式

      • WebSocket 消息可以是文本消息或者二进制消息。消息的格式比较灵活,它不像 HTTP 那样有严格的请求 - 响应格式。在实际应用中,可以根据具体的需求定义消息的内容和格式。
    • 应用场景

      • 实时通信应用:如在线聊天应用、实时数据监控(如工业控制中的实时数据采集和反馈)、多人协作工具等,这些应用需要服务器和客户端之间进行实时的双向通信。