【问题标题】:What is the fundamental difference between WebSockets and pure TCP?WebSockets 和纯 TCP 的根本区别是什么?
【发布时间】:2011-02-10 11:54:30
【问题描述】:

我读过WebSockets,我想知道为什么浏览器不能像任何其他桌面应用程序一样简单地打开简单的 TCP 连接并与服务器通信。为什么这种通信可以通过 websockets 实现?

【问题讨论】:

  • 但是有什么问题呢?让他们使用 TCP。
  • “WebSocket 是一种通过单个 TCP 连接提供全双工通信通道的协议”。您也可以创建全双工的 TCP 连接吗? WebSockets 有什么特别之处?
  • 问题是通常web服务器出于安全原因只开放一个端口,即端口80。根据定义,一个端口可以连接到一个应用程序。那么,如果客户端想要使用 Web (HTTP) 以外的服务但只有一个端口可用怎么办?瞧!网络套接字!
  • @Pithikos 指出了为什么我们需要这种复杂的 websockets 而不仅仅是处理用于浏览器-服务器通信的直接 TCP 套接字。

标签: tcp websocket


【解决方案1】:

当您在 Intranet 边界内工作时,通过 TCP 套接字进行通信会更容易,因为您可能可以控制该网络上的机器并且可以打开适合进行 TCP 连接的端口。

通过互联网,您正在与另一端的其他服务器进行通信。它们不太可能打开任何旧套接字进行连接。通常它们只有少数标准端口,例如用于 HTTP 的端口 80 或用于 HTTPS 的 443。因此,要与服务器通信,您必须使用这些端口之一进行连接。

鉴于这些是通常使用 HTTP 的网络服务器的标准端口,因此您必须遵守 HTTP 协议,否则服务器不会与您通信。 Web 套接字的目的是允许您通过 HTTP 发起连接,然后协商使用 Web 套接字协议(假设服务器能够这样做)以允许更像“TCP 套接字”的通信流。

【讨论】:

  • 感谢您的简单解释,Ash。
  • 所以基本上 WebSocket 只是 TCP 的包装器,而 UDP 只是 IP 的包装器?
  • @Pacerier:WebSocket 需要某种传输协议才能运行,但传输层不一定是 TCP(但实际上几乎总是使用 TCP)。您可以将 WebSockets 视为一种围绕 TCP 的包装器,但我不认为两者之间有任何规定性的联系。
  • “在互联网上,您正在与另一端的其他服务器进行通信。”“鉴于这些是通常使用 HTTP 的 Web 服务器的标准端口(80 和 443),您可以因此必须遵守 HTTP 协议,否则服务器不会与您对话。”通常,我们访问的 websocket 服务器是我们自己的。因此,我们可以让应用程序使用我们定义的协议监听端口。那么,为什么我们需要 HTTP 握手和协议切换呢?相反,为什么我们不能直接遵循类似 websocket 的协议?
  • 根据 RFC6455,WebSocket 需要先在 HTTP 中握手,然后协议升级到 WebSocket。大多数浏览器都遵循这一点。如果您在服务器中使用任何协议,我不知道您的客户端(浏览器)将如何支持。就像我们可以用法语交流一样,只有我们俩都懂法语。握手就像,我问你,'我们可以用法语交流吗?'用英语(这里是 HTTP)。这里的浏览器(如 chrome)懂法语,但我们必须教服务器法语。我的问题是为什么 RFC6455(WebSocketProtocol) 想要在 HTTP 中进行握手并使事情复杂化,为什么他们不能按照自己的方式去做?
【解决方案2】:

Web 浏览器在应用层运行,而 TCP 在传输层运行。作为 Web 应用程序开发人员,通过应用程序层而不是传输层的原始字节通过线路发送消息更容易。

底层 WebSockets TCP,为了简单起见,它只是被抽象掉了。

【讨论】:

    【解决方案3】:

    为简单起见,websocket 通信通过 TCP 端口号 80(或 TLS 加密连接的 443)完成,这对于那些使用 阻止非 Web Internet 连接的环境很有用防火墙

    您想使用现有的 TCP 端口还是打开一个可能被防火墙阻止的新 TCP 端口?

    【讨论】:

      【解决方案4】:

      Websocket 是应用层协议,而 TCP 是传输层协议。在传输层,我们通常有 TCP 和 UDP 协议。来自应用层的任何消息都需要经过传输层才能传输到其他机器。所以websocket和tcp是有关系的,不能相提并论的。

      【讨论】:

        猜你喜欢
        • 2018-06-12
        • 2014-09-11
        • 2019-12-04
        • 1970-01-01
        • 2014-09-04
        • 2011-11-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多