[Network] 웹소켓(WebSocket)과 핸드셰이킹

zizi·2023년 7월 31일

네트워크

목록 보기
2/2
post-thumbnail

> 웹소켓(WebSocket) 프로토콜이란?

웹소켓(WebSocket)은 클라이언트와 서버(브라우저와 서버)를 연결하고 실시간으로 통신이 가능하도록 하는 첨단 통신 프로토콜입니다.

웹소켓은 하나의 TCP 접속에 전이중(duplex) 통신 채널을 제공합니다.

웹소켓은 Socket Connection을 유지한 채로 실시간으로 양방향 통신 혹은 데이터 전송이 가능한 프로토콜입니다.

> HTTP와 웹소켓의 차이점

1) HTTP

  • 기존 HTTP는 단방향 통신입니다.
  • 클라이언트에서 서버로 Request를 보내면 서버는 클라이언트로 Response를 보내는 방식으로 동작합니다.
  • HTTP는 기본적으로 무상태(Stateless) 프로토콜이므로 상태를 저장하지 않습니다.

2) 웹소켓

  • 양방향 통신으로 연결이 이루어지면 클라이언트가 요청하지 않아도 데이터가 저절로 서버로부터 올 수 있습니다.
  • HTTP처럼 별도의 요청을 보내지 않아도 데이터를 수신할 수 있습니다.
  • 웹소켓은 HTTP와 다르게 상태(Stateful) 프로토콜입니다.
  • 즉, 클라이언트와 서버가 한 번 연결되면 같은 연결을 이용해 통신하므로 TCP 커넥션 비용을 아낄 수 있습니다.

< 웹소켓 예시 >
구글 Docs
여러 사용자가 동시에 한 문서를 편집할 수 있습니다. 새로고침 하지 않아도 실시간으로 다른 사용자가 편집한 부분이 자동으로 적용되는 모습을 볼 수 있습니다.

> 웹소켓 동작

웹소켓은 HTTP 포트 80, HTTPS 포트 443 위에서 동작합니다.

웹소켓은 TCP연결 처럼 핸드셰이크를 이용해 연결을 맺습는다.
이때 HTTP 업그레이드 헤더를 사용하여 HTTP 프로토콜에서 웹소켓 프로토콜로 변경합니다.

즉, 최초 접속시에는 HTTP 프로토콜을 이용해 핸드셰이킹을 합니다.

이후 연결이 맺어지면 어느 한쪽이 연결을 끊지 않는 이상 영구적인(persistent) 동일한 채널이 맺어지고, HTTP 프로토콜이 웹소켓 프로토콜로 변경됩니다.

이때 데이터를 암호화하기 위해 WSS 프로토콜 등을 이용할 수도 있습니다.

> 핸드셰이킹(Handshaking)

통신의 양측간에 합의해가는 정보 교환 과정

핸드셰이크는 정보기술과 전기통신 및 관련 분야에서 채널에 대한 정상적인 통신이 시작되기 전에 두 개의 실체 간에 확립된 통신 채널의 변수를 동적으로 설정하는 자동화된 협상 과정이다.
채널의 물리적인 확립이 잇따르며, 정상적인 정보 전송 이전에 이루어진다.

즉, 사람들이 처음 만났을 때 악수하듯이, 두 호스트가 서로 연결할 때에 필요한 정보들을 주고받는 일련의 과정이라 생각하면 됩니다.


[ 참고 ]
https://ko.wikipedia.org/wiki/%EC%9B%B9%EC%86%8C%EC%BC%93
https://code-lab1.tistory.com/300
https://velog.io/@dltmdrl1244/%EC%86%8C%EC%BC%93%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D3-%ED%95%B8%EB%93%9C%EC%85%B0%EC%9D%B4%ED%82%B9-Handshaking

profile
좋았다면 추억이고 나빴다면 경험이다.🍀

0개의 댓글