- 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 |