【问题标题】:How does browsers handle DNS lookup and TLS with WebSockets?浏览器如何使用 WebSockets 处理 DNS 查找和 TLS?
【发布时间】:2018-03-02 04:55:28
【问题描述】:

我目前正在考虑在我的应用程序中实现 websockets 的选项。但在这样做之前,我想确保我正确理解它的工作原理以及它是否值得。

我了解基础知识:通过 WebSockets,握手将仅通过 HTTP 进行一次,然后将与服务器对话以切换到较低级别的 TCP 层,此时,我们之间有一个全双工通道服务器和客户端。

目前我正在测量向我的服务器发出的 ajax 请求(很多),我得到了以下信息:

“DNS 查找”、“初始连接”和“SSL”时间是我试图消除的(如果可能的话)

据我了解,这些时间是握手过程的一部分,我假设使用 websockets 只会在开始时发生(握手),但我不确定。

所以我的问题是:我说的对吗?实施 WebSocket 将确保“DNS 查找”和“初始连接”步骤仅在握手时发生?

提前感谢您的帮助,如果我的理解有误,请见谅。

【问题讨论】:

  • WebSocket 使用持久 TCP 连接,所以是的,这些操作仅在新连接开始时执行。

标签: ajax http ssl websocket dns


【解决方案1】:

我了解基础知识:通过 WebSockets,握手将仅通过 HTTP 进行一次,然后将与服务器对话以切换到较低级别的 TCP 层,此时,我们之间有一个全双工通道服务器和客户端。

它不会切换到较低级别的 TCP 层。相反,它将协议从普通的 HTTP(请求、响应)切换到基于消息的协议——就像 HTTP 在应用层的 TCP 之上而不是在较低级别。这只是同一级别的不同协议。它的行为有点像 TCP,因为您可以随时发送和接收消息,而不受 HTTP 的请求/响应方案的限制。但是例如 TCP 是一个数据流,而 WebSockets 实现了一个面向消息的协议。

而且,DNS 在 WebSockets 之外。 DNS 只需要查找 IP 地址以建立 TCP 连接,然后用于在协议切换到 WebSockets 之前进行初始 HTTP 握手。

情况与 TLS 类似。在 DNS 查找以获取 IP 地址后建立 TCP 连接,然后在 TCP 连接之上建立 TLS 会话,然后在切换到 WebSockets 之前完成初始 HTTP 握手:即 TCP 内的 TLS 隧道内的 HTTP连接 - 换句话说就是 HTTPS。然后 WebSocket 协议也在这个 TLS 隧道中使用,类似于使用 HTTP 的方式。

所以我的问题是:我说的对吗?实施 WebSocket 将确保“DNS 查找”和“初始连接”步骤仅在握手时发生?

正确。如果名称的 IP 尚未缓存,则在每个 ws:// 连接开始时,您可能会进行 DNS 查找。您将有一个 TCP 握手,您将有一个 HTTP 握手,然后会导致协议切换。对于每个ws:// 连接都是如此。对于wss://,还会在 TCP 连接建立之后和 HTTP 握手开始之前创建 TLS 隧道。

【讨论】:

  • 感谢您的详细解释
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-27
  • 1970-01-01
  • 2014-11-08
  • 2011-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多