IT

웹 소켓(WebSocket) 개념 이해

유아마루 2020. 11. 5. 01:07
반응형

웹 소켓(WebSocket)

웹 소켓은 TCP 기반 소켓 API를 대체하기 위해 HTML5 사양의 TCP Connection에 처음 참조되었습니다. 2008년 6월 마이클 카터가 일련의 논의를 주도하여 웹 소켓이라는 프로토콜의 첫 번째 버전을 만들었습니다.

웹소켓 커넥션(WebSocket Connection)

  WebSocket

웹 소켓은 TCP 연결에 완전한 이중 통신 채널을 제공하는 컴퓨터 통신 프로토콜입니다. 웹 소켓 프로토콜은 2011 IETF에 의해 RFC 6455에서 표준화되었으며 현재 웹입니다. IDL의 웹 소켓 API는 W3C에 의해 표준화되었습니다. 

웹 소켓은 HTTP와 다릅니다. 두 프로토콜은 모두 OSI 모델의 7번째 계층에 있으며, TCP의 4번째 계층에 의존하고 있지만 "RFCAcording to 6455, 웹 소켓은 HTTP 포트 80 및 443 이상으로 실행되도록 설계되었으며 HTTP 프록시 및 중간 계층을 지원하도록 설계되어 HTTP 프로토콜과 호환됩니다. 호환성을 달성하기 위해, 웹 소켓 핸드 셰이크는 HTTP 업그레이드 헤더를 사용하여 HTTP 프로토콜 내의 웹 소켓 프로토콜로 변경됩니다.

웹소켓 핸드셰이크(WebSocket Handshake)

웹 소켓 프로토콜은 웹 브라우저(또는 다른 클라이언트 애플리케이션)와 웹 서버 간의 통신을 허용하며, HTTP 풀과 같은 반 이중 모드에 비해 서버와의 실시간 데이터 전송을 쉽게 합니다. 이는 클라이언트가 요청하는 것이 아니라 서버가 클라이언트에 콘텐츠를 전송할 수 있는 표준화된 방법을 제공함으로써 가능해졌습니다. 또한, 연결이 유지되면 메시지를 통해 앞뒤로 이동할 수 있으며, 이러한 방식으로 클라이언트와 서버 간에 양방향 대화가 발생할 수 있습니다. 통신은 TCP 포트 80(443 TLS 암호화 연결용)을 통해 이루어지며 방화벽을 통해 웹이 아닌 인터넷 연결을 차단하는 여러 환경에서 유용합니다. 간단한 양방향 브라우저 서버 통신은 혜성 등 스톱 갭 기술을 사용하여 비표준 방식으로 작동합니다.

대부분 브라우저는 Google Chrome, Microsoft Edge, Internet Explorer, Firefox, Safari 및 Opera를 포함한 프로토콜을 지원합니다.

 

 

  WebSocket 특징

HTTP와 달리 웹 소켓은 완전한 이중 통신을 사용하여 웹 소켓이 TCP에서 메시지를 스트리밍 할 수 있습니다. TCP는 메시지의 상속 개념 없이 바이트 스트림을 처리합니다. 웹 소켓 이전에는 포트 80의 완전한 이중 통신이 혜성 채널을 사용하여 실행 가능했습니다. 그러나 혜성 구현은 사소한 것이 아니며 TCP 핸드 셰이크 및 HTTP 헤더 로드로 인해 작은 메시지에서 비효율적입니다. 웹 소켓 프로토콜은 웹의 보안 문제를 손상하지 않고 이 문제를 해결하는 것을 목표로 합니다. 웹 소켓 프로토콜 사양은 Ws(WebSocket), ws(Websocket Secure)의 두 가지 새로운 통합 리소스 식별자 (URI) 체계를 기반으로 하며 이들은 각각 암호화되지 않은 연결 및 암호화된 연결에 사용됩니다.

 

 

 

  프로토콜 핸드셰이크(Protocol Handshake)

웹 소켓을 연결하기 위해 클라이언트는 웹 소켓 핸드 셰이크 요청을 전송하고, 이렇게 함으로써 서버는 다음 예에서 보기 위해 웹 소켓 핸드 셰이크 응답을 반환합니다.

GET / HTTP/1.1

Host: server.example.com

Upgrade: Websocket

Connection: Upgrade

Sec-WebSocket-Key: pCHJOMbDk5FzXkb9GIhXsw==

Sec-WebSocket-Protocol: chat, superchat

Sec-WebSocket-Version: 13

Origin: http://MY IP or DNS

<클라이언트 요청>

HTTP/1.1 101 Web Socket Protocol

Upgrade: Websocket

Connection: Upgrade

Sec-WebSocket-Key: pXHGOMaDE5fzX4b1GwhLMwk=

Sec-WebSocket-Protocol: chat

<서버 응답>

 

 

  프록시 경유

웹 소켓 프로토콜 클라이언트 구현에서는 사용자 에이전트가 대상 호스트와 포트에 연결할 때 프록시를 사용하도록 구성되었는지 확인하려고 합니다. 만약 그렇다면 HTTPConfigure 영구 터널은 HTTP CONNECT 메소드를 사용하여 구성합니다.

웹 소켓 프로토콜 자체는 프록시 서버와 방화벽을 인식하지 않고 HTTP 호환 핸드셰이크 기능을 제공하여 HTTP 서버가 웹 소켓 게이트웨이 또는 서버와 기본 HTTP 및 HTTPS 포트(80 및 443)를 공유할 수 있게 합니다. 웹 소켓 프로토콜은 웹 소켓과 웹 소켓의 안전 연결을 나타내기 위해 각각 ws:// 및 ws:// 이니셜을 정의합니다. 이 두 가지 방식은 HTTP 업그레이드 메커니즘을 사용하여 웹 소켓 프로토콜로 업그레이드하며 일부 프록시 서버는 투명하고 웹 소켓과 잘 작동합니다. 다른 것들은 제대로 작동하지 못하고 연결되지 않습니다.

경우에 따라 추가 프록시 구성이 필요하며 웹 소켓을 지원하기 위해 특정 프록시 서버로의 업그레이드가 필요할 수 있습니다.

암호화되지 않은 웹 소켓 트래픽이 웹 소켓을 지원하지 않는 명시적 또는 투명한 프록시 서버를 통과하면 연결이 실패할 가능성이 있습니다.

암호화된 웹 소켓 연결을 사용할 때, HTTP는 브라우저가 명시적은 프록시 서버를 사용하도록 구성되었는지 확인하기 위해 전송 계층 보안(TLS)을 사용하는 데 사용됩니다. 이때 HTTP CONNECT 명령이 발급되었는지 보증하게 됩니다.

 

반응형