浏览器如何使用WebSockets处理DNS查找和TLS?

时间:2017-09-21 00:49:48

标签: ajax http ssl websocket dns

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

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

目前我正在衡量对我的服务器发出的ajax请求(很多),我已经获得了这些信息:

Ajax request time

" DNS查询","初始连接"和" SSL"时间是我试图消除的(如果可能的话)

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

所以我的问题是:我说错了吗?实现WebSockets将确保" DNS查找"和"初始连接"步骤只发生在握手上?

提前感谢您的帮助,如果我的理解错误,请抱歉。

1 个答案:

答案 0 :(得分:2)

  

我理解基础知识:通过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。然后,在此TLS隧道中也会使用WebSocket协议,类似于使用HTTP。

  

所以我的问题是:我说错了吗?实现WebSockets将确保" DNS查找"和"初始连接"步骤只发生在握手上?

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