【发布时间】:2017-10-03 22:34:44
【问题描述】:
浏览器可以向网络服务器发送请求并得到响应,这很容易理解,因为每个域都解析到一个或多个公网IP,浏览器可以通过公网IP找到网络服务器。
有些客户端有公网IP,比如PPPOE,所以,当我在浏览器和服务器之间建立Websocket连接时,服务器可以向拥有公网IP设备的设备上的浏览器发送数据,但并不是每个客户端都有公网IP。
我的问题是服务器如何通过Websocket在局域网中找到没有公共IP的浏览器?
【问题讨论】:
浏览器可以向网络服务器发送请求并得到响应,这很容易理解,因为每个域都解析到一个或多个公网IP,浏览器可以通过公网IP找到网络服务器。
有些客户端有公网IP,比如PPPOE,所以,当我在浏览器和服务器之间建立Websocket连接时,服务器可以向拥有公网IP设备的设备上的浏览器发送数据,但并不是每个客户端都有公网IP。
我的问题是服务器如何通过Websocket在局域网中找到没有公共IP的浏览器?
【问题讨论】:
部分魔法是Network Address Translation,由服务器和网络浏览器计算机之间的路由器执行。
【讨论】:
简单的答案是server 永远不必找到client,因为一旦浏览器向服务器发送请求并建立 TCP 连接,该连接就可以保持必要的时间。
TCP 协议具有keepalive 概念,其中对等方每隔一段时间就会向客户端发送一个探测数据包,而没有预期的数据和 ACK 数据包作为响应。这样,尽管网络不活动,连接仍然有效,并且可以在对等方没有回复的情况下终止。
WebSocket 协议是一种基于 TCP 的协议,它也定义了一个类似的概念 Ping/Pong,其中任何一个对等方都可以在建立连接后按需发送 Ping 探测。对等方必须尽快用 Pong 帧响应 Ping 帧。这会检查死节点,在这种情况下连接会死。
【讨论】: