WebSockets和纯TCP之间的根本区别是什么?


167

我已经读过有关WebSockets的文章,我想知道为什么浏览器不能像其他桌面应用程序那样简单地打开琐碎的TCP连接并与服务器通信。以及为什么可以通过websockets进行这种通信?


8
但是有什么问题呢?让他们使用TCP。
xap4o 2010年


2
“ WebSocket是通过单个TCP连接提供全双工通信通道的协议”。您还可以创建全双工的TCP连接吗?WebSockets有什么特别之处?
Abhishek Jain

12
问题在于,出于安全原因,通常Web服务器仅打开一个端口,即port 80。通过定义一个端口可以连接到一个应用程序。那么,如果客户端要使用Web(HTTP)以外的服务,但只有一个端口可用,该怎么办?瞧!Websockets!
2014年

3
@Pithikos决定了为什么我们需要这种复杂的websocket,而不仅仅是处理直接的TCP套接字进行浏览器-服务器通信的原因。
2015年

Answers:


260

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

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

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


2
谢谢您的简单解释,Ash。
xap4o 2010年

因此,从根本上讲,WebSocket仅仅是TCP的包装器,而UDP仅仅是IP的包装器?
Pacerier

3
@Pacerier:WebSocket需要某种传输协议才能进行操作,但是该传输层不一定必须是TCP(尽管实际上几乎总是要使用TCP)。您可以将WebSockets视为TCP的包装器,但我不认为两者之间存在任何规定性的联系。
Ash Ash

4
“通过互联网,您正在与另一端的其他服务器通信。”“鉴于这些是通常使用HTTP的Web服务器的标准端口(80和443),因此您必须遵守HTTP协议,否则服务器将无法与您对话。” 通常,我们访问的websocket服务器将是我们自己的。因此,我们可以使用定义了监听端口的协议的应用程序。那么,为什么我们需要HTTP握手和协议切换?相反,为什么我们不能直接遵循类似websocket的协议?
拉特尔

2
通过RFC6455,WebSocket首先需要在HTTP中进行握手,然后协议才能升级到WebSocket。大多数浏览器都遵循此规则。如果您在服务器中使用任何协议,我不知道您的客户端(浏览器)将如何支持。就像我们可以用法语交流一样,只有我们两个人都知道法语。握手就像,我问你,“我们可以用法语交流吗?”,用英语(此处为HTTP)沟通。在这里,浏览器(例如chrome)知道法语,但是我们必须教服务器法语。我的问题是,为什么RFC6455(WebSocketProtocol)想要在HTTP中进行握手并使事情复杂化,为什么他们不能按照自己的方式做呢?
拉特尔

31

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

WebSockets的基础 TCP,为简单起见,仅对其进行了抽象。


2

Websocket是应用程序层协议,而TCP是传输层协议。在传输层,我们通常使用TCP和UDP协议。来自应用层的任何消息都需要经过传输层才能传输到其他机器。因此,websocket和tcp具有相互关系,并且不可比。


2

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.