-
[네트워크] web socket 알아보기TodayILearned 2021. 8. 2. 01:18
프로젝트를 진행하면서 채팅에 사용한 socket 통신에 대해 더 잘 알아보고싶다는 생각이 들었다.
요즘 듣고있는 네트워크 강의 중, UDP, TCP 소켓에 대한 이야기가 나오는데,
처음엔 그 소켓이 이 소켓인 줄 알았다.. 나와 나같은 사람을 위한 글이다.
전송 계층의 소켓
전송계층에서 사용하는 소켓은, 애플리케이션 계층에서 데이터 패킷을 전송할 때 사용하는 연결부라고 생각하면 된다.
데이터를 주고받기 위해서는 소켓을 연결해 사용한다.
마치 전기를 사용하기 위해서는 전기가 흐르는 장소가 필요하고, 그 전기를 소켓에 플러그를 꼽아 사용하는 것 처럼.
종류는 TCP/UDP가 있다.
*패킷 : 데이터 묶음의 단위
웹소켓 프로토콜
웹소켓 프로토콜은 전송계층의 소켓 중 TCP 소켓을 통해 동작하는 애플리케이션 계층의 프로토콜이다.
기존의 HTTP 프로토콜은 서버-클라이언트간의 양방향 통신을 위해 폴링 등을 사용하며 HTTP를 여러번 호출해야 했다.
이 경우, 각 클라이언트와의 통신을 위해 클라이언트의 수 만큼의 TCP 연결을 해야했고, 이는 서버에 부담을 준다.
이를 해결하기 위해 단일 TCP 연결을 통한 양방향 통신인 웹소켓 프로토콜이 생겼다.
웹소켓 프로토콜의 핸드셰이크는 아래와 같다.
- 클라이언트
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== Origin: http://example.com
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13- 서버
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
Sec-WebSocket-Protocol: chatHTTP 헤더에 웹소켓 업그레이드 요청을 담아 핸드셰이크를 하고 성공하면 데이터 송신이 시작된다.
(웹소켓 프로토콜로 업그레이드)
(HTTP와 웹소켓은 연결을 위한 핸드셰이크 과정에서만 관련이 있고, 이외에는 전혀 다른 프로토콜이다.)
다음 글에서는 공부한 내용을 바탕으로?
기존에 작성한 웹소켓 코드를 분리하려고한다.
reference
https://datatracker.ietf.org/doc/rfc6455/?include_text=1
'TodayILearned' 카테고리의 다른 글
투포인터 (0) 2022.04.22 [CSS] BEM (0) 2020.08.18