웹소켓(WebSocket)은 클라이언트와 서버(브라우저와 서버)를 연결하고 실시간으로 통신이 가능하도록 하는 첨단 통신 프로토콜입니다.
웹소켓은 하나의 TCP 접속에 전이중(duplex) 통신 채널을 제공합니다.
웹소켓은 Socket Connection을 유지한 채로 실시간으로
양방향통신 혹은 데이터 전송이 가능한 프로토콜입니다.
단방향 통신입니다. 무상태(Stateless) 프로토콜이므로 상태를 저장하지 않습니다.양방향 통신으로 연결이 이루어지면 클라이언트가 요청하지 않아도 데이터가 저절로 서버로부터 올 수 있습니다. 상태(Stateful) 프로토콜입니다. < 웹소켓 예시 >
구글 Docs
여러 사용자가 동시에 한 문서를 편집할 수 있습니다. 새로고침 하지 않아도 실시간으로 다른 사용자가 편집한 부분이 자동으로 적용되는 모습을 볼 수 있습니다.

웹소켓은 HTTP 포트 80, HTTPS 포트 443 위에서 동작합니다.
웹소켓은 TCP연결 처럼 핸드셰이크를 이용해 연결을 맺습는다.
이때 HTTP 업그레이드 헤더를 사용하여 HTTP 프로토콜에서 웹소켓 프로토콜로 변경합니다.
즉, 최초 접속시에는 HTTP 프로토콜을 이용해 핸드셰이킹을 합니다.
이후 연결이 맺어지면 어느 한쪽이 연결을 끊지 않는 이상 영구적인(persistent) 동일한 채널이 맺어지고, HTTP 프로토콜이 웹소켓 프로토콜로 변경됩니다.
이때 데이터를 암호화하기 위해 WSS 프로토콜 등을 이용할 수도 있습니다.
통신의 양측간에 합의해가는 정보 교환 과정
핸드셰이크는 정보기술과 전기통신 및 관련 분야에서 채널에 대한 정상적인 통신이 시작되기 전에 두 개의 실체 간에 확립된 통신 채널의 변수를 동적으로 설정하는 자동화된 협상 과정이다.
채널의 물리적인 확립이 잇따르며, 정상적인 정보 전송 이전에 이루어진다.
즉, 사람들이 처음 만났을 때 악수하듯이, 두 호스트가 서로 연결할 때에 필요한 정보들을 주고받는 일련의 과정이라 생각하면 됩니다.
[ 참고 ]
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