웹소켓?

magnet·2021년 11월 2일
0

https://ko.javascript.info/websocket
https://tecoble.techcourse.co.kr/post/2020-09-20-websocket/
https://www.joinc.co.kr/w/man/12/websocket#sid_2
https://bloodguy.tistory.com/entry/HTML5-WebSocket-%EC%84%9C%EB%B2%84%EC%9D%98-handshake

를 참고하여 만들었습니다.

알아야할 무엇인가!(https://adrenal.tistory.com/20)

먼저 웹소켓은 내가알기론 http의 한계를 극복하기 위해 개발했다고 들었다. 주식패킷전송이나, 실시간 양방향전송이 필요한 경우 또는

이와같이 폭발적인 데이터를 서로 주고받아야 하는 경우 등 실생활에서 이미 다양하게 사용되고 있는 일종의 우리가 모르고 있던

배달어플같은? 그런 느낌인거시다.

웹소켓의 탄생

HTTP를 이용한 실시간 통신의 문제를 해결하기 위해 HTML5부터 웹소켓이 등장하였습니다. HTTP를 이용한 실시간 통신의 문제를 해결하기 위해 HTML5부터 웹소켓이 등장했습니다. 웹소켓은 실시간 양방향 통신을 지원하며 한번 연결이 수립되면 클라이언트와 서버 모두 자유롭게 데이터를 보낼 수 있습니다. 이는 채팅과 같은 연속적인 통신에 대해 계속 유사한 통신을 반복하지 않게 해주어 통신의 효율성도 개선하였습니다.

웹소켓은 2011년 RFC 6455에 의해 표준화 되었으며, 이후 브라우저들에서 지원되기 시작하였습니다. Internet Explorer는 11버전이후부터 지원하며, 현재는 대부분의 브라우저에서 지원합니다. 다음은 웹소켓을 지원하는 브라우저들에 대한 정보입니다.

웹소켓 프로토콜

웹소켓은 HTTP와 같은 OSI 모델의 7계층에 위치하는 프로토콜이며, 4계층의 TCP에 의존합니다.

HTTP 프로토콜을 이용할 때 “http”를 이용하는 것 처럼, 웹소켓을 이용할 때 “ws”를 이용합니다. 또한 보완을 강화한 “https”를 사용하는 것 처럼, “ws”에 대해 보완을 강화한 “wss”를 사용할 수 있습니다.

HTTP를 이용해서 연결을 수립하며 연결 된 이후에도 연결을 할 때 사용했던 포트인 80과 443포트를 이용합니다. 연결 수립은 핸드쉐이크를 통해 이루어지며 핸드쉐이크시 HTTP를 이용합니다.

웹소켓 핸드쉐이크


위 그림은 웹소켓 핸드쉐이크와 통신을 보여주고 있습니다. 그림에서 볼 수 있듯이 핸드쉐이크는 한번의 HTTP 요청과 HTTP 응답으로 이루어집니다. 핸드쉐이크가 끝나면 HTTP 프로토콜을 웹소켓 프로토콜로 변환하여 통신을 하는 구조입니다.

핸드쉐이크는 먼저 클라이언트가 HTTP로 웹소켓 연결 요청을 하면서 시작됩니다. 웹소켓 연결 요청에는 “Connection:Upgrade”와 “Upgrade:websocket” 헤더를 통해 웹소켓 요청임을 표시합니다. 또한 “Sec-WebSocket-Key” 헤더를 통해 핸드쉐이크 응답을 검증할 키 값을 보냅니다. 그 외에도 WebSocket 연결시 보조로 이용할 프로토콜 정보등의 추가적인 정보를 헤더에 담아 보낼 수 있습니다. 다음은 웹소켓 연결 요청 예시입니다.

GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
Origin: http://example.com

이에 대한 서버의 응답역시 HTTP로 옵니다. 정상적인 응답의 상태코드는 101(Switching Protocols)입니다. “Sec-WebSocket-Key” 헤더를 통해 받은 값에 특정 값을 붙인 후, SHA-1로 해싱하고 base64로 인코딩한 값을 “Sec-WebSocket-Accept” 헤더에 보냅니다. 이 값을 통해 클라이언트는 정상적인 핸드쉐이크 과정을 검증합니다. 클라이언트가 정상적으로 응답을 받으면 핸드쉐이크는 종료되고 이후부터 웹소켓 프로토콜을 통해 데이터 통신을 합니다. 다음은 웹소켓 연결 요청에 대한 응답 예시입니다.

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
Sec-WebSocket-Protocol: chat
profile
풀스택을 지향하는 한 발자국씩 삽질하기

0개의 댓글