WebSocket과 순수 TCP의 근본적인 차이점은 무엇입니까?


167

WebSockets 에 대해 읽었으며 브라우저가 왜 사소한 TCP 연결을 열고 다른 데스크탑 응용 프로그램과 같이 서버와 통신 할 수 없는지 궁금합니다. 왜 웹 소켓을 통해이 커뮤니케이션이 가능합니까?


8
그러나 무엇이 문제입니까? TCP를 사용하게하십시오.
xap4o


2
"WebSocket은 단일 TCP 연결을 통해 전이중 통신 채널을 제공하는 프로토콜입니다." 전이중 인 TCP 연결을 만들 수 있습니까? WebSockets의 특별한 점은 무엇입니까?
Abhishek Jain

12
문제는 일반적으로 웹 서버는 보안상의 이유로 포트가 하나만 열려 있다는 것입니다 80. 정의에 따라 하나의 포트는 하나의 응용 프로그램 에만 연결할 수 있습니다 . 클라이언트가 웹 (HTTP) 이외의 서비스를 사용하려고하지만 사용 가능한 포트가 하나만있는 경우 어떻게해야합니까? 짜잔! 웹 소켓!
Pithikos

3
@Pithikos는 브라우저 서버 통신을위한 단순한 TCP 소켓을 다루는 것이 아니라 왜 웹 소켓의 복잡성이 필요한지에 대해 과시했습니다.
Sunny

답변:


260

인트라넷 경계 내에서 작업하는 경우 해당 네트워크의 시스템을 제어하고 TCP 연결에 적합한 포트를 열 수 있기 때문에 TCP 소켓을 통해 통신하는 것이 더 쉽습니다.

인터넷을 통해 상대방의 다른 서버와 통신하고 있습니다. 그들은이다 매우 연결을위한 오래된 소켓 열려있는 가능성. 일반적으로 HTTP의 경우 포트 80 또는 HTTPS의 경우 443과 같은 몇 가지 표준이 있습니다. 따라서 서버와 통신하려면 해당 포트 중 하나를 사용하여 연결해야합니다.

이 포트는 일반적으로 HTTP를 사용하는 웹 서버의 표준 포트이므로 HTTP 프로토콜을 준수해야합니다. 그렇지 않으면 서버가 사용자와 통신하지 않습니다. 웹 소켓의 목적은 HTTP를 통해 연결을 시작한 다음 웹 소켓 프로토콜 (서버가 그렇게 할 수 있다고 가정)을 사용하여보다 "TCP 소켓"과 유사한 통신 스트림을 허용하도록 협상하는 것입니다.


2
쉽게 설명해 주셔서 감사합니다. Ash.
xap4o

기본적으로 WebSocket은 UDP가 단순히 IP의 래퍼라는 점에서 TCP의 래퍼입니까?
Pacerier

3
@Pacerier : WebSocket은 작동하기 위해 일종의 전송 프로토콜이 필요하지만 전송 계층은 TCP 일 필요는 없습니다 (실제로는 항상 TCP 일 것입니다). WebSocket을 TCP를 감싸는 일종의 래퍼로 생각할 수는 있지만 둘 사이에 규범적인 링크가 있다고 생각하지 않습니다.
Ash

4
"인터넷을 통해 상대방의 다른 서버와 통신하고 있습니다." "일반적으로 HTTP를 사용하는 웹 서버의 표준 포트 (80 및 443)이므로 HTTP 프로토콜을 준수해야합니다. 그렇지 않으면 서버가 대화하지 않습니다. " 일반적으로 우리가 액세스하는 웹 소켓 서버는 우리 자신의 서버입니다. 따라서 포트 청취를 정의하는 프로토콜이있는 응용 프로그램을 가질 수 있습니다. 그렇다면 왜 HTTP 핸드 셰이크와 프로토콜 전환이 필요할까요? 대신 프로토콜과 같은 웹 소켓을 직접 따라갈 수없는 이유는 무엇입니까?
ratul

2
RFC6455에 의해 WebSocket은 먼저 HTTP의 핸드 셰이크가 필요하며 프로토콜은 WebSocket으로 업그레이드됩니다. 대부분의 브라우저는 이것을 따릅니다. 서버에서 프로토콜을 사용하는 경우 클라이언트 측 (브라우저)이 어떻게 지원되는지 모르겠습니다. 프랑스어로 의사 소통을 할 수있는 것처럼 우리 둘만 프랑스어를 알고 있습니다. 핸드 셰이 킹은 영어 (여기에서 HTTP)로 '프랑스어로 의사 소통 할 수 있습니까?'입니다. 여기 크롬과 같은 브라우저는 프랑스어를 알고 있지만 서버 프랑스어를 가르쳐야합니다. 내 질문은 RFC6455 (WebSocketProtocol)가 HTTP에서 핸드 셰이크를 수행하고 복잡한 작업을 수행해야하는 이유는 무엇입니까?
ratul

31

웹 브라우저는 응용 프로그램 계층에서 작동하고 TCP는 전송 계층에서 작동합니다. 웹 응용 프로그램 개발자는 전송 계층에서 원시 바이트 대신 응용 프로그램 계층을 통해 메시지를보다 쉽게 ​​보낼 수 있습니다.

기본 WebSockets TCP이며 단순성을 위해 추상화되었습니다.


2

Websocket은 응용 프로그램 계층 프로토콜이고 TCP는 전송 계층 프로토콜입니다. 전송 계층에는 일반적으로 TCP 및 UDP 프로토콜이 있습니다. 응용 프로그램 계층의 모든 메시지는 전송 계층을 거쳐 다른 시스템으로 전송되어야합니다. 따라서 websocket과 tcp는 서로 관계가 있으며 비교할 수 없습니다.


2

간단하게하기 위해 웹 소켓 통신은 TCP 포트 번호 80 (또는 TLS 암호화 연결의 경우 443)을 통해 이루어 지므로 방화벽을 사용하여 웹 이외의 인터넷 연결을 차단하는 환경에 유리합니다 .

기존 TCP 포트를 사용 하시겠습니까, 아니면 방화벽에 의해 차단 될 수있는 새 TCP 포트를 열겠습니까?

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.