常见网络通信协议(http、https、ws)及安全协议(SSL、TLS、XTLS)

文章内容删除了一大半不合适的内容,发不出来,你懂得。🥰

  • 一、常见网络通信协议
    • 1.1、HTTP 协议
      • 1.11 HTTP 协议简介
      • 1.12 HTTP 协议的工作流程
      • 1.13 HTTP 协议的常用方法
      • 1.14 HTTP 协议的常见状态码
      • 1.15 HTTP 的缺点
    • 1.2 HTTPS 协议
      • 1.21 HTTPS 协议简介
      • 1.22 HTTPS 协议的工作原理
        • ● 握手阶段
        • ● 传输阶段
      • 1.23 HTTPS 协议的优势
      • 1.24 HTTPS 协议的缺陷
      • 1.25 拓展问题
    • 1.3 WebSocket 协议
  • 二、常见的代理协议
    • 2.1 HTTP(s) 代理协议
      • 2.11 简介
      • 2.12 基本原理
      • 2.13 分类
      • 2.14 优缺点
    • 2.2 socks 代理协议
    • 2.3 Shadowsocks 代理协议
    • 2.4Tro*** 代理协议
  • 三、专为V**设计的协议
  • 四、安全协议
    • 4.1 SSL
    • 4.2 TLS
    • 4.3 XTLS
    • 拓展:证书

一、常见网络通信协议

HTTP和HTTPS都属于应用层协议,它们都是用于从万维网(WWW)服务器传输超文本到本地浏览器的传送协议。它们都是基于TCP/IP协议来传递数据的,支持客户端-服务器模式的通信。

HTTP和HTTPS的区别主要在于HTTPS在HTTP的基础上增加了SSL/TLS安全层,使得数据传输更加安全。HTTPS需要申请证书,一般需要付费,而HTTP不需要。HTTP传输的数据是明文,容易被窃取或篡改,而HTTPS传输的数据是加密的,可以防止数据泄露和篡改。

HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,HTTP是80端口,HTTPS是443端口。HTTPS在建立连接时需要进行SSL握手,比HTTP多了9个包的交换,所以HTTPS比HTTP更耗费服务器资源和时间。

1.1、HTTP 协议

1.11 HTTP 协议简介

HTTP 协议(Hypertext Transfer Protocol:超文本传输协议)是一种用于在万维网(WWW)上交换信息的应用层协议。它是基于 TCP/IP 协议的(TCP),也就是说,它利用 TCP/IP 协议提供的可靠的数据传输服务来发送和接收数据。

HTTP 协议的主要特点有:

  • 简单:HTTP 协议的语法和结构都很简单,易于实现和扩展。
  • 无状态:HTTP 协议不保存客户端和服务器之间的交互状态,每个请求都是独立的,这样可以减少服务器的负担和资源消耗。
  • 可扩展:HTTP 协议可以通过添加新的请求方法、头部字段、状态码等来增加新的功能,也可以通过协商机制来支持不同的数据格式和编码方式。
  • 灵活:HTTP 协议可以承载任何类型的数据,不仅限于文本、图片、视频等,还可以传输二进制数据、压缩数据、加密数据等。

一般来说,一个 HTTP 请求是由客户端和服务器之间协商决定的。客户端可以在请求头中指定自己支持的 HTTP 版本,如 Upgrade: h2 表示希望升级到 HTTP/2.0,服务器可以在响应头中指定自己使用的 HTTP 版本,如 HTTP/1.1 200 OK 表示使用 HTTP/1.1 协议。如果客户端和服务器之间有代理或中间设备,它们也可能影响 HTTP 版本的选择。

HTTP主要版本对比:

版本特点区别
HTTP/1.0无状态、无连接、明文、支持 GET、HEAD、POST 方法、支持请求头和响应头相对于 HTTP/0.9,增加了请求头和响应头,支持多种类型的数据,支持 POST 方法
HTTP/1.1长连接、管道化、缓存处理、Host 字段、支持更多的方法和头部字段相对于 HTTP/1.0,增加了长连接和管道化技术,优化了性能,增加了缓存机制,支持虚拟主机,修复了一些错误
HTTP/2.0二进制分帧、多路复用、头部压缩、服务器推送、优先级和依赖相对于 HTTP/1.1,采用了二进制格式的编码,实现了真正的并行传输,减少了头部冗余和延迟,增加了服务器主动推送资源的能力,增加了流的优先级和依赖控制
HTTP/3.0基于 QUIC 协议,使用 UDP 代替 TCP,实现可靠传输、快速握手、拥塞控制、加密等功能相对于 HTTP/2.0,采用了 QUIC 协议,解决了 TCP 协议在高延迟网络中的一些问题,如队头阻塞、握手延迟等

1.12 HTTP 协议的工作流程

HTTP 协议的工作流程是基于客户端-服务器模式的:客户端发起请求,服务器返回响应。客户端通常是一个浏览器,服务器通常是一个 Web 服务器。在客户端和服务器之间,可能还有一些代理(Proxy),它们可以执行一些额外的功能,如缓存、过滤、负载均衡等(你懂得)。

在这里插入图片描述

一个典型的 HTTP 协议的工作流程如下:
在这里插入图片描述

  1. 客户端(浏览器)通过 DNS 服务器解析域名,获取服务器的 IP 地址。
  2. 客户端和服务器通过 TCP 协议建立连接,一般使用 80 端口。TCP 连接的建立需要进行三次握手,即客户端发送 SYN 包,服务器回复 SYN+ACK 包,客户端发送 ACK 包。
  3. 客户端向服务器发送 HTTP 请求报文,包含请求行、请求头和请求体等信息。
  4. 服务器接收并解析 HTTP 请求报文,根据请求内容进行相应的处理,并返回 HTTP 响应报文,包含状态行、响应头和响应体等信息。
  5. 客户端接收并解析 HTTP 响应报文,根据响应内容进行相应的展示或处理。
  6. 客户端和服务器通过 TCP 协议断开连接,一般使用四次挥手,即客户端发送 FIN 包,服务器回复 ACK 包,服务器发送 FIN 包,客户端回复 ACK 包。

其中:3次握手

进行三次握手的原因是为了实现 TCP 连接的可靠性和双向性,以及同步双方的序列号和确认号。三次握手的过程可以简述如下:

1. 客户端发送一个 SYN 包,携带一个随机的序列号 seq=x,表示请求建立连接,并进入 SYN_SENT 状态。
2. 服务器收到 SYN 包,回复一个 SYN+ACK 包,携带一个随机的序列号 seq=y 和一个确认号 ack=x+1,表示同意建立连接,并进入 SYN_RECV 状态。
3. 客户端收到 SYN+ACK 包,回复一个 ACK 包,携带一个确认号 ack=y+1,表示确认建立连接,并进入 ESTABLISHED 状态。
4. 服务器收到 ACK 包,也进入 ESTABLISHED 状态,此时连接建立成功,双方可以开始传输数据。

在这里插入图片描述

进行三次握手的原因可以从以下几个方面理解:

  • 防止已失效的连接请求报文段突然又传到服务器端,造成服务器端资源的浪费。
  • 确保连接是双工的,即双方都能发送和接收数据。
  • 确保连接是可靠的,即双方都能确认对方已经收到了自己发送的数据。
  • 同步双方的初始序列号和确认号,以便后续的数据传输和校验。

4次挥手:

,四次挥手是指断开一个 TCP 连接时,需要客户端和服务器总共发送4个包以确认连接的断开。四次挥手的过程可以概括为以下几个步骤:

1. 客户端发送一个 FIN 包,表示不再发送数据,请求关闭连接,并进入 FIN_WAIT_1 状态。
2. 服务器收到 FIN 包,回复一个 ACK 包,表示同意关闭连接,并进入 CLOSE_WAIT 状态。
3. 服务器发送一个 FIN 包,表示不再接收数据,请求关闭连接,并进入 LAST_ACK 状态。
4. 客户端收到 FIN 包,回复一个 ACK 包,表示确认关闭连接,并进入 TIME_WAIT 状态。
5. 服务器收到 ACK 包,进入 CLOSED 状态,连接释放。
6. 客户端等待一段时间(2MSL),确保服务器收到 ACK 包,然后进入 CLOSED 状态,连接释放。

在这里插入图片描述

进行四次挥手的原因可以从以下几个方面理解:

  • TCP 是全双工的协议,即双方都可以发送和接收数据。因此,当一方请求关闭连接时,仅表示该方不再发送数据,但仍可以接收数据。另一方可能还有数据要发送或处理,因此需要先确认对方的关闭请求,然后再发送自己的关闭请求。
  • TCP 需要保证数据的可靠传输,即双方都能确认对方已经收到了自己发送的数据。因此,在关闭连接时,也需要双方互相确认对方的 FIN 和 ACK 包。
  • TCP 需要防止已失效的连接请求报文段突然又传到服务器端,造成服务器端资源的浪费或错误。因此,在关闭连接时,主动方需要等待一段时间(2MSL),以确保对方已经收到自己的最后一个 ACK 包。

进行四次挥手的过程中,有两个状态比较特殊:TIME_WAIT2MSL。TIME_WAIT 是主动关闭连接的一方在发送最后一个 ACK 包后进入的状态,表示等待一段时间后再释放连接。2MSL 是指报文段在网络中的最大生存时间(Maximum Segment Lifetime),一般取值为 2 分钟。TIME_WAIT 的持续时间正好是 2MSL。这样做的目的是为了保证网络中的所有报文段都能够消失,避免对后续连接造成影响。

1.13 HTTP 协议的常用方法

HTTP 协议定义了多种请求方法,用来表示客户端想要对服务器上的资源执行什么操作。常用的方法有:

请求方法描述
GET用于从服务器获取数据。
POST用于向服务器提交数据,通常用于创建新资源。
PUT用于向服务器更新或替换指定资源或创建新资源。
DELETE用于请求服务器删除指定资源。
HEAD与 GET 方法类似,但只请求获取响应头信息,不包括实际数据。
PATCH用于部分更新服务器上的资源。
OPTIONS用于获取服务器支持的请求方法列表,通常用于跨域请求预检。
CONNECT用于建立网络连接,通常由代理服务器使用。
TRACE用于在路径上对消息进行跟踪,通常用于诊断和调试。

1.14 HTTP 协议的常见状态码

HTTP 协议定义了多种状态码,用来表示服务器对请求的处理结果。状态码由三位数字组成,第一位数字表示状态码所属的类别。常见的类别有:

  • 1xx:信息类,表示接收到请求并继续处理。
  • 2xx:成功类,表示请求已被成功接收、理解、并接受。
  • 3xx:重定向类,表示需要客户端采取进一步的操作才能完成请求。
  • 4xx:客户端错误类,表示客户端发送的请求有错误,服务器无法处理。
  • 5xx:服务器错误类,表示服务器在处理请求的过程中发生了错误。

常见的状态码有:

  • 200 OK:请求成功。
  • 301 Moved Permanently:请求的资源已被永久移动到新位置,响应中会给出新的 URL。
  • 302 Found:请求的资源临时移动到新位置,响应中会给出新的 URL。
  • 304 Not Modified:请求的资源没有修改,可以直接使用缓存的版本。
  • 400 Bad Request:请求格式错误,服务器无法理解。
  • 401 Unauthorized:请求需要用户身份认证。
  • 403 Forbidden:服务器拒绝执行请求,通常是因为权限不足。
  • 404 Not Found:请求的资源不存在,或者 URL 错误。
  • 500 Internal Server Error:服务器内部错误,无法完成请求。
  • 503 Service Unavailable:服务器暂时不可用,通常是因为过载或维护。

完整的:

在这里插入图片描述

1.15 HTTP 的缺点

HTTP 协议是一种无状态的、明文的、基于请求-响应模式的应用层协议,它有以下几个主要的缺点:

  • 通信使用明文,内容可能会被窃听或篡改。 HTTP 协议没有加密机制,所以传输的数据都是明文,容易被中间人截获或修改。这样就会导致隐私泄露、数据损坏、身份伪装等安全问题。
  • 不验证通信方的身份,可能遭遇伪装。 HTTP 协议没有认证机制,所以无法确定请求或响应的发送方是否是真实的服务器或客户端。这样就会导致欺骗、钓鱼、中间人攻击等风险。
  • 无法保证报文的完整性,可能已遭篡改。HTTP 协议没有校验机制,所以无法确定传输的数据是否完整和正确。这样就会导致数据丢失、错误、篡改等问题。
  • 性能低效,存在队头阻塞和重复传输的问题。HTTP/1.0 协议每次请求都需要建立新的 TCP 连接,造成额外的开销和延迟。HTTP/1.1 协议虽然引入了持久连接和流水线技术,但仍然存在队头阻塞的问题,即同一个连接上的请求必须按顺序发送和接收,不能并行处理。HTTP/1.x 协议也没有有效利用缓存机制,导致重复传输相同或相似的数据。

为了解决 HTTP 协议的缺点,有以下几种对策:

  • 使用 HTTPS 协议代替 HTTP 协议。HTTPS 协议是在 HTTP 协议的基础上加入了 SSL/TLS 层,实现了通信的加密、认证和完整性保护。HTTPS 协议可以有效防止窃听、篡改、伪装等攻击。
  • 使用 HTTP/2.0 协议代替 HTTP/1.x 协议。HTTP/2.0 协议是在 HTTP/1.x 协议的基础上进行了优化和改进,实现了二进制分帧、多路复用、头部压缩、服务器推送等特性,提高了传输的效率、灵活性和安全性。
  • 使用 HTTP/3.0 协议代替 HTTP/2.0 协议。HTTP/3.0 协议是在 HTTP/2.0 协议的基础上使用了 QUIC 协议代替 TCP 协议,实现了基于 UDP 的可靠传输、快速握手、拥塞控制、加密等功能,解决了 TCP 协议在高延迟网络中的一些问题,如队头阻塞、握手延迟等


1.2 HTTPS 协议

1.21 HTTPS 协议简介

HTTPS(HyperText Transfer Protocol Secure),是一种在 HTTP 的基础上增加了 SSL/TLS 层的网络协议,用于在客户端和服务器之间进行安全的数据传输。HTTPS 的安全基础是 SSL/TLS,因此加密的详细内容就需要 SSL/TLS 来实现。

1.22 HTTPS 协议的工作原理

HTTPS 协议的工作原理可以分为两个阶段:握手阶段和传输阶段。

● 握手阶段

握手阶段是 HTTPS 协议建立连接时进行的一系列交互过程,主要目的是为了协商出双方共同使用的加密算法和密钥,并进行身份认证。握手阶段涉及到非对称加密、对称加密、哈希算法、数字签名等技术

非对称加密是指使用一对不同的密钥(公钥和私钥)来进行加密和解密的过程,公钥可以公开给任何人使用,私钥必须保密。非对称加密算法有 RSA、DSA、ECDSA 等。

对称加密是指使用相同的密钥来进行加密和解密的过程,对称加密算法有 DES、AES-GCM、ChaCha20-Poly1305 等。

哈希算法是指将任意长度的信息转换为较短的固定长度的值,通常其长度要比信息小得多,且算法不可逆。哈希算法有 MD5、SHA-1、SHA-2、SHA-256 等。

数字签名是指对信息进行哈希后,再使用私钥对哈希值进行加密的过程,可以证明信息没有被篡改,并确认发送者的身份。数字签名可以使用公钥进行解密和验证。

握手阶段的具体过程如下:
在这里插入图片描述

  1. 客户端向服务器发送一个 ClientHello 消息,包含客户端支持的 SSL/TLS 版本、加密套件(包括非对称加密算法、对称加密算法和哈希算法)、压缩方法和一个随机数 ClientRandom。
  2. 服务器向客户端发送一个 ServerHello 消息,包含服务器选择的 SSL/TLS 版本、加密套件、压缩方法和一个随机数 ServerRandom。
  3. 服务器向客户端发送一个 Certificate 消息,包含服务器的证书,证书中包含了服务器的公钥和由证书颁发机构(CA)签发的数字签名。
  4. 服务器向客户端发送一个 ServerKeyExchange 消息,包含服务器使用的非对称加密算法(如 DH 或 ECDHE)生成的临时公钥。
  5. 服务器向客户端发送一个 ServerHelloDone 消息,表示服务器握手消息结束。
  6. 客户端收到服务器的消息后,首先验证服务器的证书是否有效,是否由可信任的 CA 签发,是否过期等。如果验证失败,客户端会给出警告或终止连接。如果验证成功,客户端会提取出服务器的公钥。
  7. 客户端向服务器发送一个 ClientKeyExchange 消息,包含客户端使用服务器的公钥加密的一个随机数 PreMasterSecret。
  8. 客户端和服务器根据 PreMasterSecret 和两个随机数(ClientRandom 和 ServerRandom)计算出主密钥 MasterSecret,并用主密钥生成四个密钥:客户端加密密钥、客户端解密密钥、服务器加密密钥和服务器解密密钥。
  9. 客户端向服务器发送一个 ChangeCipherSpec 消息,表示客户端将使用协商好的加密套件和密钥来加密后续的消息。
  10. 客户端向服务器发送一个 Finished 消息,包含所有握手消息的哈希值,用于让服务器验证握手过程是否完整。
  11. 服务器向客户端发送一个 ChangeCipherSpec 消息,表示服务器也将使用协商好的加密套件和密钥来加密后续的消息。
  12. 服务器向客户端发送一个 Finished 消息,包含所有握手消息的哈希值,用于让客户端验证握手过程是否完整。

至此,握手阶段结束,双方已经建立了安全的连接,并准备好进行数据传输。

● 传输阶段

传输阶段是 HTTPS 协议在建立连接后进行数据交互时进行的过程,主要目的是为了保护数据的保密性和完整性。传输阶段涉及到对称加密、哈希算法等技术。

传输阶段的具体过程如下:

  1. 客户端或服务器在发送数据时,首先使用对称加密算法对数据进行加密,然后使用哈希算法对数据生成校验码(MAC),并将校验码附在数据后面一起发送。
  2. 客户端或服务器在接收数据时,首先使用对称解密算法对数据进行解密,然后使用哈希算法对数据生成校验码,并与接收到的校验码进行比较。如果校验码一致,则说明数据没有被篡改,可以继续处理。如果校验码不一致,则说明数据可能被篡改,应该丢弃或报错。

1.23 HTTPS 协议的优势

HTTPS 协议是为了解决 HTTP 协议的安全问题而设计的,它在 HTTP 和 TCP 之间增加了一个 SSL/TLS 层,用于对数据进行加密、身份认证和完整性保护。SSL/TLS 是一种安全协议套件,它包括了多种加密算法和认证机制,可以根据不同的场景和需求进行选择和组合。

HTTPS 协议具有以下几个优势:

  • 数据保密性:保证数据内容在传输过程中不会被第三方查看,只有通信双方才能解密数据。
  • 数据完整性:保证数据内容在传输过程中不会被第三方篡改,通信双方可以通过校验码来验证数据是否完整。
  • 身份认证:保证数据到达用户期望的目的地,通信双方可以通过证书来验证对方的身份是否合法。

1.24 HTTPS 协议的缺陷

  • HTTPS 的缺点:
    • HTTPS 需要申请和维护 SSL 证书,增加了网站的成本。(【SSL证书】给网站安装SSL证书(Nginx服务器))
    • HTTPS 需要进行加密和解密的计算,增加了服务器和客户端的资源消耗。
    • HTTPS 在握手阶段耗时较长,会影响页面的加载速度。
    • HTTPS 会影响缓存的效率,增加数据的开销和功耗。

1.25 拓展问题

为什么用户好像什么都不用做就可以使用HTTPS?

要开启HTTPS服务,通常是在服务器上安装证书、并修改web服务器的配置文件,用户好像什么都没做,就可以享受数据的安全传输?

原因是:

  • HTTPS 的连接是基于 SSL/TLS 协议的,这是一种使用公钥和私钥的非对称加密技术。
  • 服务器端需要有一个由 CA 机构颁发的证书,这个证书包含了服务器的公钥和域名等信息。
  • 客户端访问服务器时,会收到服务器的证书,并验证其有效性和合法性
  • 如果证书有效,客户端会使用服务器的公钥加密一个随机数,并发送给服务器。
  • 服务器收到客户端的消息后,会用自己的私钥解密得到随机数,并用它作为对称加密的密钥。
  • 之后,客户端和服务器就可以用这个对称加密的密钥来加密和解密通信的内容。

所以,用户不需要证书,只需要信任 CA 机构,并使用浏览器来验证服务器的证书即可。 用户不需要向服务器提供自己的身份信息,只需要用服务器的公钥来协商一个对称加密的密钥。这样,HTTPS 连接就可以实现数据的安全性和完整性,防止中间人攻击、数据篡改、信息泄露等风险。

在浏览器的地址栏,点击前面的锁,就可以看到相关的信息:
在这里插入图片描述


如何确保数据不会泄露、篡改?

简单说一下:

  1. 首先,浏览器会获取服务器的证书,证书中除了公钥,还有服务器的域名、有效期、签名等信息,证书是所有人都可以获取的,私钥只安装在服务器;
  2. 浏览器使用这个公钥随机加密一个整数,服务器使用私钥解密(这时,只有服务器能解密这个整数),然后使用这个整数作为对称加密秘钥,这个“协商”的秘钥,只有用户和服务器知道,之后,客户端和服务器使用这个对称秘钥来加密和解密数据。
  3. 这样说,好像使用HTTPS就不会导致信息泄露,其实不然。也有可能导致数据泄露或篡改(后面讲)。
  4. 如何保证收到的数据没有被篡改呢?公私钥又来了:私钥和公钥不仅用来协商对称加密的密钥,还用来进行数字签名和验证数字签名是用私钥对数据的摘要进行加密,生成一个签名。验证是用公钥对签名进行解密,得到一个摘要,然后和数据的摘要进行比较。如果一致,说明数据没有被篡改,且来源可信

信息为什么有可能会泄露?

HTTPS 不是绝对的安全,它可能存在一些潜在的风险,例如:

  • 证书认证中心 CA 被冒充或者被攻击
  • 服务器或客户端的私钥被泄露或者被破解
  • SSL/TLS 协议本身存在漏洞或者缺陷

因此,HTTPS 虽然能够提高数据传输的安全性,但也不能保证数据不泄露,还需要注意其他的安全措施和防范方法。希望这些信息对您有帮助。

综上:HTTPS能识别数据是否被篡改,但是不能保证数据是否会泄露(当然,HTTPS数据泄露是小概率事件)。


如何确保数据的安全性?

目前还没有一种协议能够完全保证数据不会泄露,因为数据的安全性不仅取决于协议本身,还取决于数据的来源、存储、处理、传输等多个环节,任何一个环节出现漏洞或者攻击都可能导致数据泄露。因此,除了使用 HTTPS 等加密协议外,还需要采取其他的安全措施,例如:

  • 使用可信赖的证书认证中心 CA,并定期更新证书
  • 保护好服务器和客户端的私钥,使用强密码和加密算法
  • 及时修复 SSL/TLS 协议的漏洞或者缺陷,使用最新版本的协议
  • 对于涉及个人信息和数据的合作,签订保密协议或承诺函,明确双方的保密义务和违约责任

这些措施,大的互联网公司会做的比较好,即使如此,有时也会发生数据泄露。当年上学的时候,学习通就发生了数据泄露,想必很多人都还记得。所以对于个人来说,网站密码的设置还是要多注意一下。

1.3 WebSocket 协议

WebSocket是一种网络传输协议,可在单个TCP连接上进行全双工通信,位于OSI模型的应用层。它使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就可以建立持久性的连接,并进行双向数据传输

WebSocket的主要特点是:

  • 使用HTTP协议进行握手:WebSocket使用HTTP协议进行握手,客户端向服务器发送一个Upgrade请求,服务器返回一个101 Switching Protocols响应,表示同意建立WebSocket连接。
  • 使用TCP协议进行传输:WebSocket使用TCP协议进行传输,客户端和服务器之间的连接是双向的,可以互相发送和接收数据。
  • 使用帧格式进行编码:WebSocket使用帧格式进行编码,每个数据包由一个或多个帧组成,每个帧包含一个头部和一个负载。头部包含了帧的类型、长度、掩码等信息,负载包含了实际的数据。
  • 支持文本和二进制数据:WebSocket支持文本和二进制数据,可以根据不同的场景选择不同的数据类型。

WebSocket的基本原理是:

  • 客户端向服务器发送一个HTTP请求,其中包含Upgrade: websocket和Sec-WebSocket-Key等头部字段,表示请求建立WebSocket连接。
  • 服务器接收到客户端的请求后,根据自身的配置和规则,决定是否同意建立WebSocket连接,并返回一个HTTP响应,其中包含Upgrade: websocket和Sec-WebSocket-Accept等头部字段,表示接受建立WebSocket连接。
  • 客户端和服务器之间建立了一个TCP连接,并开始使用帧格式进行编码,互相发送和接收数据。
  • 客户端或服务器可以随时关闭连接,发送一个关闭帧,并等待对方的确认。
    在这里插入图片描述

WebSocket优点、缺点和风险:

  • 提高了网络访问速度:由于WebSocket使用了持久的连接,因此可以减少网络延迟和带宽消耗。
  • 实现了网络访问控制:由于WebSocket使用了HTTP协议进行握手,因此可以实现对网络访问的控制和管理。
  • 支持了实时通信:由于WebSocket使用了双向的连接,因此可以实现实时的数据交换。
  • 降低了网络透明性:由于WebSocket使用了自定义的帧格式,因此可能导致一些网络问题难以排查和解决。
  • 增加了网络开销:由于WebSocket使用了额外的头部字段和掩码算法,因此可能增加了网络开销。
  • 影响了数据完整性和安全性:由于WebSocket使用了不可信或恶意的服务器或客户端时,更需要注意这一点。

二、常见的代理协议

2.1 HTTP(s) 代理协议

2.11 简介

HTTP代理协议是一种网络通信协议,它允许客户端通过一个中间服务器(代理服务器)来访问其他服务器上的资源。HTTP代理协议的主要作用是:

  • 提高网络访问速度:代理服务器可以缓存客户端请求过的资源,从而减少网络延迟和带宽消耗。
  • 实现网络访问控制:代理服务器可以根据客户端的身份、目标地址、内容等进行过滤和转发,从而实现对网络访问的控制和管理。
  • 隐藏客户端真实地址:代理服务器可以修改客户端的请求头,从而隐藏客户端的真实IP地址,保护客户端的隐私和安全。

HTTP 代理协议和 HTTP 协议是不同的,尽管它们都涉及到 HTTP(Hypertext Transfer Protocol):

  1. HTTP 协议:HTTP 是一种应用层协议,用于在客户端和服务器之间传输超文本文档和其他资源。HTTP 协议定义了请求方法、请求头部、响应状态码和响应内容等规范,用于在 Web 浏览器和 Web 服务器之间进行通信。

  2. HTTP 代理协议:HTTP 代理协议是一种基于 HTTP 协议的特定协议,用于实现代理服务器。代理服务器充当客户端和服务器之间的中间人,接收来自客户端的 HTTP 请求,并将请求转发给目标服务器,并将来自目标服务器的响应返回给客户端。

HTTP 代理协议在 HTTP 协议的基础上引入了一些特定的机制和规范,以实现代理服务器的功能。代理服务器可以用于多种用途,如访问控制、缓存、负载均衡、流量监控等。

需要注意的是,HTTP 代理协议和普通的 HTTP 协议虽然有相似之处,但它们在协议规范和实现上存在一些差异。HTTP 代理协议通常包括额外的头部字段和命令,用于控制和管理代理服务器的行为和配置。

2.12 基本原理

  • 客户端向代理服务器发送一个HTTP请求,其中包含目标服务器的地址和其他信息。
  • 代理服务器接收到客户端的请求后,根据自身的配置和规则,决定是否将请求转发给目标服务器,或者直接从缓存中返回响应给客户端。
  • 如果代理服务器将请求转发给目标服务器,那么它会建立一个到目标服务器的连接,并将客户端的请求发送给目标服务器。
  • 目标服务器收到代理服务器转发的请求后,会处理该请求,并将响应发送给代理服务器。
  • 代理服务器收到目标服务器的响应后,会根据自身的配置和规则,决定是否将响应缓存起来,并将响应发送给客户端。
  • 客户端收到代理服务器的响应后,会处理该响应,并关闭与代理服务器的连接。
    在这里插入图片描述

2.13 分类

  • 正向代理:正向代理是指客户端知道代理服务器的存在,并主动通过代理服务器来访问目标服务器。正向代理可以帮助客户端突破网络限制,访问一些无法直接访问的资源。
  • 反向代理:反向代理是指客户端不知道代理服务器的存在,并认为自己直接访问了目标服务器。反向代理可以帮助目标服务器提高性能和安全性,分担负载和抵御攻击。

2.14 优缺点

  • 降低了网络透明性:由于客户端和目标服务器之间有一个中间层,因此可能导致一些网络问题难以排查和解决。
  • 增加了网络开销:由于每个请求都需要经过至少一个额外的跳转,因此可能增加了网络延迟和带宽消耗。
  • 影响了数据完整性和安全性:由于代理服务器可以修改客户端和目标服务器之间的数据,因此可能导致数据被篡改或泄露。特别是当使用不可信或恶意的代理服务器时,更需要注意这一点。

2.2 socks 代理协议

2.3 Shadowsocks 代理协议

2.4Tro*** 代理协议

三、专为V**设计的协议

这部分发不出来,删了。

四、安全协议

SSL(Secure Sockets Layer),TLS(Transport Layer Security),以及 XTLS 是一些常见的安全协议,用于在网络通信中提供加密和身份验证的功能。

  1. SSL(Secure Sockets Layer):SSL 是一种早期的安全协议,用于在客户端和服务器之间建立安全连接。它使用对称加密和公钥加密技术,确保通信的保密性和完整性。然而,由于一些安全漏洞,现在较少使用 SSL

  2. TLS(Transport Layer Security):TLS 是 SSL 的继任者,提供更安全和强大的安全通信。TLS 使用对称加密、公钥加密和数字签名等技术,用于加密通信和进行身份验证。TLS 的不同版本(如 TLS 1.0、TLS 1.1、TLS 1.2、TLS 1.3)提供了不同的安全性和功能特性。

  3. XTLS(Extended Transport Layer Security):XTLS 是 V**项目中的一种扩展传输层安全协议。它在 TLS 的基础上添加了一些额外的功能和扩展选项,以提供更灵活和高级的安全传输。XTLS 通过混淆、伪装和流量控制等技术,增加了网络流量的隐蔽性和安全性。

这些安全协议都用于建立安全的通信连接,保护数据的隐私和完整性。TLS 是当前主流和推荐使用的安全协议,它在互联网通信中广泛应用于 HTTPS、SMTPS、IMAPS 等协议中。XTLS 是在 V** 项目中开发的一种扩展传输层安全协议,用于提供更高级的安全传输功能。

4.1 SSL

已经被TLS取代,现在所说的“SSL”、“SSL证书”实际上都是TLS。

SSL的基本原理是:

  • 客户端向服务器发送一个请求,其中包含加密协议的信息。
  • 服务器接收到客户端的请求后,根据自身的配置和规则,决定是否同意建立SSL连接,并返回一个响应给客户端。
  • 客户端和服务器之间建立了一个TCP连接,并开始使用加密协议进行通信。

SSL的主要特点是:

  • 使用HTTP协议进行握手:SSL使用HTTP协议进行握手,客户端向服务器发送一个请求,服务器返回一个响应,表示是否同意建立SSL连接。
  • 使用TCP协议进行传输:SSL使用TCP协议进行传输,客户端和服务器之间的连接是双向的,可以互相发送和接收数据。
  • 使用单步骤的握手过程:SSL使用单步骤的握手过程,只包含一个消息,包含加密协议的信息。

4.2 TLS

TLS是Transport Layer Security的缩写,它是基于SSL 3.0的升级版本,由IETF在1999年发布。它修复了一些SSL的安全问题,并增加了一些新的功能。它有四个版本,分别是TLS 1.0、TLS 1.1、TLS 1.2和TLS 1.3。TLS 1.3是最新的版本,它在2018年发布,提高了性能和安全性。

TLS的位置在不同的网络模型中有不同的说法,但一般来说,它位于应用层和传输层之间,或者说是在会话层或表示层。TLS可以为上层的应用协议(如HTTP,SMTP,FTP等)提供加密和身份验证的服务,同时利用下层的传输协议(如TCP)进行可靠的数据传输。

在这里插入图片描述

TLS的基本原理是:

  • 客户端向服务器发送一个请求,其中包含加密协议和身份验证的信息。
  • 服务器接收到客户端的请求后,根据自身的配置和规则,决定是否同意建立TLS连接,并返回一个响应给客户端。
  • 客户端和服务器之间建立了一个TCP连接,并开始使用加密协议进行通信。
    在这里插入图片描述

TLS的主要特点是:

  1. 数据加密: TLS 使用强加密算法来保护数据在传输过程中的机密性。这意味着即使数据包在传输中被截获,也无法轻易读取其内容。TLS支持多种加密算法,包括对称加密和非对称加密。
  2. 完整性保护: TLS 使用消息认证码(MAC)来验证数据在传输过程中的完整性。接收方可以确保数据未被篡改或损坏,因为任何对数据的修改都会导致MAC验证失败。
  3. 身份验证: TLS 允许服务器和客户端进行身份验证。服务器通常提供数字证书,用于验证其身份。客户端也可以选择提供证书以进行身份验证。这有助于确保通信双方的合法性和信任。
  4. 会话密钥协商: TLS 使用密钥协商协议来安全地生成会话密钥,以供加密和解密通信数据使用。这确保了每个 TLS 会话都具有唯一的密钥,提高了安全性。
  5. 协议版本和参数协商: TLS 允许客户端和服务器协商支持的 TLS 版本和加密算法。这确保了通信双方都能达成一致的加密参数,从而选择最高级别的安全性。
  6. 抵抗中间人攻击: TLS 设计旨在抵抗中间人攻击,通过证书验证和安全密钥交换来确保通信的安全性。这使得攻击者难以窃听或篡改通信。

一般来说,你应该使用TLS而不是SSL,因为TLS更安全、更快、更灵活。而且你每天都在使用TLS,即使你不知道。因为大多数网站和浏览器都已经支持并默认使用TLS了。

那么为什么还有人说SSL呢?这是因为SSL这个词已经被广泛地使用和认知了,而且很多人并不清楚它和TLS的区别。 所以你可能会看到一些地方还在使用SSL这个词,比如说SSL证书、SSL加密等等。 但其实它们指的都是TLS。

在这里插入图片描述

在这里插入图片描述


4.3 XTLS

这不是常用协议,它是专为xxx设计的。了解即可,无法过多阐述。

XTLS是一种基于TLS 1.3的网络代理工具,它可以帮助用户******,访问一些无法直接访问的资源。XTLS是Project X Community开发并维护的项目。

XTLS的基本原理是:

  • 客户端向XTLS服务器发送一个请求,其中包含目标服务器的地址和端口,以及其他信息。
  • XTLS服务器接收到客户端的请求后,根据自身的配置和规则,决定是否建立一个到目标服务器的连接,并返回一个响应给客户端。
  • 如果XTLS服务器返回了一个成功的响应(0x00),那么它会建立一个到目标服务器的连接,并将客户端和目标服务器之间的通信进行加密、混淆和分流。
  • 如果XTLS服务器返回了一个失败的响应(非0x00),那么它会关闭与客户端的连接,并不再转发任何数据。
  • 客户端收到XTLS服务器的响应后,如果是成功的响应,那么它会与目标服务器进行通信,并接收目标服务器的响应。如果是失败的响应,那么它会处理该响应,并关闭与XTLS服务器的连接。

XTLS的主要特点是:

  • 使用TLS 1.3协议进行握手:XTLS使用TLS 1.3协议进行握手,客户端向服务器发送一个请求,服务器返回一个响应,表示是否同意建立XTLS连接。
  • 使用TCP协议进行传输:XTLS使用TCP协议进行传输,客户端和服务器之间的连接是双向的,可以互相发送和接收数据。
  • 使用加密技术:XTLS使用了多种加密算法,如AES、ChaCha20、RC4等,来加密客户端和服务器之间的通信,防止数据被窃听或篡改。
  • 使用混淆技术:XTLS使用了多种混淆插件,如simple-obfs、v**-plugin等,来*******。
  • 使用分流技术:XTLS使用了多种分流插件,如kcptun、udpspeeder等,来优化客户端和服务器之间的通信,提高网络访问速度和稳定性。

拓展:证书

数字证书(通常简称为证书)是一种用于在网络上进行身份验证的数字文件。它们用于确保通信双方的身份,并提供了一种机制,用于建立信任和保护通信的安全性。以下是关于数字证书的重要信息:

  1. 身份验证: 数字证书用于验证通信方的身份。通常,服务器会提供数字证书,以证明其身份。客户端可以使用这个证书来确认它们正在与合法的服务器通信。数字证书中包含了关于证书持有者身份的信息,例如域名。

  2. 公钥: 数字证书包含一个公钥,该公钥用于加密通信。客户端使用服务器的公钥来加密发送给服务器的数据,从而确保只有服务器可以解密这些数据。这有助于保护数据的机密性。

  3. 数字签名: 数字证书也包含了一个数字签名,该签名是由证书颁发机构(Certificate Authority,简称 CA)生成的。签名用于验证证书的完整性和真实性。如果证书被篡改,数字签名将无效。

  4. 证书颁发机构(CA): CA 是一个可信赖的实体,负责验证证书持有者的身份并签发数字证书。流行的 CA 包括像DigiCert、Let’s Encrypt、GlobalSign等。

  5. 用途: 数字证书在各种网络通信场景中使用,包括保护网页浏览(HTTPS)、加密电子邮件、建立虚拟私人网络(VPN)、进行远程身份验证等。

  6. 证书链: 有时,证书可以构成证书链,其中根证书颁发机构颁发证书给中间 CA,然后中间 CA 颁发证书给最终通信方。这种层级结构有助于建立信任链。


如果你常常使用cloudflare。

在 Cloudflare 上,有不同类型的证书用于不同的用途,包括边缘证书(Edge Certificates)、客户端证书(Client Certificates)以及源服务器证书(Origin Certificates):
在这里插入图片描述

  1. 边缘证书(Edge Certificates): 边缘证书是 Cloudflare 用于加密和保护访问你网站的用户与 Cloudflare 的通信的 SSL/TLS 证书。这些证书由 Cloudflare 管理和部署,可用于启用 HTTPS,确保数据在用户与 Cloudflare 之间的传输是安全的。边缘证书通常是由 Cloudflare 自动生成和管理的。

  2. 客户端证书(Client Certificates): 客户端证书是一种用于对客户端进行身份验证的证书。这些证书通常由客户端(例如浏览器或应用程序)持有,并用于验证其身份以与服务器建立安全连接。Cloudflare 可以配置为要求客户端提供有效的客户端证书才能访问受保护的资源。

  3. 源服务器证书(Origin Certificates): 源服务器证书是由 Cloudflare 生成并用于在 Cloudflare 和你的源服务器之间建立安全连接的证书。这些证书用于保护数据在 Cloudflare 边缘节点和你的源服务器之间的传输。Origin Certificates 是免费提供的,并且是自签名证书,适用于你的源服务器,而不需要购买其他证书。

协议与证书的关系,简要图示:

在这里插入图片描述



~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/116589.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

结合OB Cloud区别于MySQL的4大特性,规划降本方案

任何一家企业想要获得持续性的发展与盈利,“降本增效”都是难以绕开的命题。但是“一刀切”的降本影响往往不太可控,成本的快速收缩往往会给业务带来低效运营和增长缓慢的风险。所以我们所说的降本,是指在成本降低的同时,效率不降…

js 正则表达式 验证 :页面中一个输入框,可输入1个或多个vid/pid,使用英文逗号隔开...

就是意思一个输入框里面&#xff0c;按VID/PID格式输入,VID和PID最大长度是4,最多50组 1、页面代码 <el-form ref"ruleForm" :model"tempSet" :rules"rules" label-position"right"> <!-- 最多 50组&#xff0c;每组9个字符…

【C语言】字符函数,字符串函数,内存函数

大家好&#xff01;今天我们来学习C语言中的字符函数&#xff0c;字符串函数和内存函数。 目录 1. 字符函数 1.1 字符分类函数 1.2 字符转换函数 1.2.1 tolower&#xff08;将大写字母转化为小写字母&#xff09; 1.2.2 toupper&#xff08;将小写字母转化为大写字母&…

ZigBee案例笔记 -- RFID卡片读写(模拟饭卡)

RFID模拟饭卡应用 RFID&#xff08;射频识别技术&#xff09;RFID通讯协议RFID发展历史RFID操作流程说明RFID卡片读写流程RFID寻卡RFID防碰撞RFID选卡RFID卡密验证RFID读卡RFID写卡读写数据流程 RFID饭卡模拟案例驱动代码串口协议饭卡操作案例结果优化建议 RFID&#xff08;射频…

Cordova Android 生成的 APK 中添加代码混淆

要在 Cordova Android 生成的 APK 中添加代码混淆&#xff0c;你可以按照以下步骤进行操作&#xff1a; 1. 在项目根目录下&#xff0c;找到 platforms/android/ 目录&#xff0c;进入该目录。 2. 打开 build.gradle 文件&#xff0c;并在 android { ... } 部分添加以下代码&…

关于两个不同数据库的两张表建立数据库链接,关联查询数据

一、数据库链接 数据库链接&#xff08;database link&#xff09;是用于跨不同数据库之间进行连接和数据传输的工具或方法。它允许在一个数据库中访问另一个数据库中的对象和数据。 二、具体操作 以Oracle数据库为例 --1.建立链接tjpt CREATE DATABASE LINK tjpt CONNECT…

go语言--锁

锁的基础&#xff0c;go的锁是构建在原子操作和信号锁之上的 原子锁 原子包实现协程的对同一个数据的操作&#xff0c;可以实现原子操作&#xff0c;只能用于简单变量的简单操作&#xff0c;可以把多个操作变成一个操作 sema锁 也叫信号量锁/信号锁 核心是一个uint32值&#…

基于单片机的串行通信发射机设计

一、项目介绍 串行通信是一种常见的数据传输方式&#xff0c;允许将数据以比特流的形式在发送端和接收端之间传输。当前实现基于STC89C52单片机的串行通信发射机&#xff0c;通过红外发射管和接收头实现自定义协议的数据无线传输。 二、系统设计 2.1 单片机选择 在本设计中&…

前端基础2——CSS样式

文章目录 一、使用方式1.1 内联方式1.2 内部方式1.3 外部导入方式&#xff08;推荐&#xff09; 二、选择器类型2.1 元素选择器2.2 ID选择器2.3 类选择器2.4 派生选择器 三、常用属性3.1 内边距和外边距3.2 文本3.3 边框3.4 背景3.5 定位3.6 浮动3.7 字体3.8 其他属性 四、案例…

MySQL 数据库常用命令大全(完整版)

文章目录 1. MySQL命令2. MySQL基础命令3. MySQL命令简介4. MySQL常用命令4.1 MySQL准备篇4.1.1 启动和停止MySQL服务4.1.2 修改MySQL账户密码4.1.3 MySQL的登陆和退出4.1.4 查看MySQL版本 4.2 DDL篇&#xff08;数据定义&#xff09;4.2.1 查询数据库4.2.2 创建数据库4.2.3 使…

DataTable扩展 列转行方法(2*2矩阵转换)

源数据 如图所示 // <summary>/// DataTable扩展 列转行方法&#xff08;2*2矩阵转换&#xff09;/// </summary>/// <param name"dtSource">数据源</param>/// <param name"columnFilter">逗号分隔 如SDateTime,PM25,PM10…

docker desktop安装es 并连接elasticsearch-head:5

首先要保证docker安装成功&#xff0c;打开cmd&#xff0c;输入docker -v&#xff0c;出现如下界面说明安装成功了 下面开始安装es 第一步&#xff1a;拉取es镜像 docker pull elasticsearch:7.6.2第二步&#xff1a;运行容器 docker run -d --namees7 --restartalways -p 9…

ShardingSphere——压测实战

摘要 Apache ShardingSphere 关注于全链路压测场景下&#xff0c;数据库层面的解决方案。 将压测数据自动路由至用户指定的数据库&#xff0c;是 Apache ShardingSphere 影子库模块的主要设计目标。 一、压测背景 在基于微服务的分布式应用架构下&#xff0c;业务需要多个服…

WebVR — 网络虚拟现实

推荐&#xff1a;使用 NSDT编辑器 快速搭建3D应用场景 虚拟现实设备 随着Oculus Rift和许多其他生产设备即将上市&#xff0c;未来看起来很光明——我们已经有足够的技术来使VR体验“足够好”&#xff0c;可以玩游戏。有许多设备可供选择&#xff1a;像Oculus Rift或HTC Vive这…

JasperReport定义变量后打印PDF变量为null以及整个pdf文件为空白

问题1: JasperReport打印出来的整个pdf文件为空白文件&#xff1b; 问题2&#xff1a;JasperReport定义变量后打印PDF变量为null&#xff1b; 问题1原因是因为缺少数据源JRDataSource JasperFillManager.fillReport(jasperReport, params,new JREmptyDataSource());如果你打印…

Go 使用 Gorm 将操作信息集成到链路跟踪 Jaeger,进行增删改查使用举例,并做可视化UI界面展示(附源码)

Go 使用 Gorm 将操作信息集成到链路跟踪 Jaeger,进行增删改查使用举例(附源码)。 为了增强程序的可观测性,方便问题定位,在发起数据库操作请求时我们也可以调用代码统一集成链路跟踪的能力,Jaeger 是当今比较流行的选择。使用 Gorm 来将操作信息集成到 Jaeger 中。 全面…

Autofac中多个类继承同一个接口,如何注入?与抽象工厂模式相结合

多个类继承同一个接口,如何注入&#xff1f;与抽象工厂模式相结合 需求: 原来是抽象工厂模式,多个类继承同一个接口。 现在需要使用Autofac进行选择性注入。 Autofac默认常识: Autofac中多个类继承同一个接口,默认是最后一个接口注入的类。 解决方案&#xff1a;(约定大于配…

使用远程桌面软件改善工作与生活的平衡

在当今高度互联的世界中&#xff0c;我们的工作和个人生活之间的界限变得越来越模糊。在本文中&#xff0c;我们将探讨像 Splashtop 这样的远程桌面工具如何成为实现和谐工作与生活平衡不可或缺的一部分。 在当今的背景下理解工作与生活的平衡 工作与生活的平衡不仅仅是一个时…

【C++进阶】模板进阶

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习C和算法 ✈️专栏&#xff1a;C航路 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&#x1…

Ansible学习笔记5

copy模块&#xff1a;&#xff08;重点&#xff09; copy模块用于对文件的远程拷贝&#xff08;如把本地的文件拷贝到远程主机上。&#xff09; 在master的主机上准备一个文件&#xff0c;拷贝文件到group1的所有主机上。 这个用的频率非常高&#xff0c;非常有用的一个模块…