본문 바로가기

개발에 도움이 되는/Network

WebSocket

- WebSocket : HTML5 표준 기술로, 클라이언트와 서버 사이의 동적인 양방향 연결 채널을 구성하는 통신 프로토콜

 

- 특징

  1. 단방향 통신인 HTTP의 단점을 보완하기 위해 등장

  2. WebSocket은 HTTP에 비해 Header 크기가 작기 때문에 오버헤드를 줄일 수 있음

  3. Real-Time Web Application 구현에 사용

  4. 연결지향 양방향 전이중 통신

 

- 작동 원리

 1. Opening Handshake

 웹 소켓 클라이언트에서 Handshake 요청(HTTP Upgrade)을 하고 이에 대한 응답으로 101(Protocol 전환 승인)을 받는다. Header 정보는 아래와 같다.

 - Upgrade : Protocol 전환을 위해 사용함. WebSocket 요청시 반드시 Websocket이라는 값을 가지며, 이 값이 없거나 다른 값이면 cross-protocol attack이라 간주하여 접속을 중지

 - Connection : 현재의 전송이 완료된 후 네트워크 접속을 유지할 것인가에 대한 정보. WebSocket 요청시에는 반드시 Upgrade라는 값을 가진다. 마찬가지로 이 값이 없거나 다른 값이면 접속 중지

 - Sec-WebSocket-Key : 유효한 요청인지 확인하기 위한 Key 값

 - Sec-WebSocket-Protocol : 사용하고자 하는 하나 이상의 WebSocket Protocol 지정 (필요시)

 - Sec-WebSocket-Version : 클라이언트가 사용하고자 하는 WebSocket Protocol Version

 - Origin : 모든 브라우저는 보안을 위해 보내고, 대부분 Application은 이 Header가 없는 요청을 거부

 

 - Sec-WebSocket-Accept : 요청 header의 Sec-WebSocket-Key에 유니크 ID를 더해서 SHA-1로 해싱한 후, Base64로 인코딩한 결과이며, WebSocket 연결이 개시되었음을 알림

 

 

 2. Data transfer

 연결 수립 후 Data 전송 파트이며, 클라이언트와 서버가 메세지(한 개 이상의 Frame으로 구성되어 있음) 통신을 함

 Handshake가 끝난 시점부터 서버와 클라이언트는 서로 살아있는지 확인하기 위해 Heartbeat Packet을 보내며 Ping-Pong Check

 

 

 3. Closing Handshake

 클라이언트와 서버 모두 접속을 종료하기 위한 Control Frame을 전송할 수 있다. 이 Control Frame은 Closing Handshake를 시작하라는 특정한 Control Sequence를 포함한 Data를 가지고 있다. 연결 종료 이후에 수신되는 모든 추가 Data는 버려짐

 

반응형

'개발에 도움이 되는 > Network' 카테고리의 다른 글

HTTP Status Code  (0) 2022.04.05
SOP(Same-Origin Policy), CORS(Cross-Origin Resource Sharing)  (0) 2022.03.28
DNS(Domain Name System)  (0) 2022.01.14
OSI 7 계층(OSI 7 Layer)  (0) 2022.01.13
쿠키(Cookie), 세션(Session)  (0) 2022.01.11