커널에서 네트워크 계층에 접근할 수 있는 도구가 소켓이며, 그중에서 TCP프로토콜에 접근하는 소켓이 TCP소켓이다. WebSocket은 TCP소켓을 활용한 웹 전용 프로토콜이다.
소켓 (기본)
↓
TCP소켓
↓
WebSocket
소켓(socket)은 OS 커널에 구현되어 있는 프로토콜 요소에 대한 추상화된 인터페이스
장치파일의 일종으로 이해할 수 있다.
일반 파일에 대한 개념이 대부분 적용된다.
File I/O 시스템의 관점으로 소켓을 바라보자.
-----------------
| process |
| |
-----------------
user mode ⬇️
------------------------------
kernel mode [ TCP ]
[ IP ]
⬇️
S/W [ Driver ]
-------------------------------
H/W ⬇️
[ hw ]
process : 주체가 되어 뭔가를 함 ( open, create, close, delete, read write … )이런거함.
대상체 파일이 TCP스택에 대한 추상화된 인터페이스를 제공할 때 이 파일의 이름을 TCP Socket 이라 부른다.
TCP Network 대상이니까 write하는걸 Send 라고 칭하며, read하는걸 receive한다고 함.
파일 열고닫을 때 fopen fclose 하는 것처럼 socket함수를 통해 열고닫고함 (단, TCP특성상 추가적인 뭔가를 더해주긴함)
socket()
→ bind()/listen()/accept()
또는 connect()
→ send()/recv()
→ close()
http://localhost...
대신 ws://localhost...
로 호출시작user -----------------------------------------------------------------------------------
| 사용자가 연결버튼 클릭 => websocket API => 브라우저 내장 WebSocket 기능 활성화 |
-----------------------------------------------------------------------------------
⬇️
⬇️
⬇️
첫 HTTP 요청
⬇️
⬇️(HTTP)
⬇️
server ----------------------------------------------------------------------
| WebSocket라이브러리 => 연결 => application layer에서 프로토콜 처리 시작 |
----------------------------------------------------------------------
user -----------------------------------------------------------
| websocket API => 브라우저 내장 WebSocket 기능 활성화 |
-----------------------------------------------------------
⬇️ ⬇️ 1️⃣
⬇️ ⬇️(Frame > Strame)
⬇️0️⃣ ⬇️ 4️⃣5️⃣
첫 HTTP 요청完 사용자의 커널 TCP 🙋♀️📞 <연결> 📞🙋 서버 커널 TCP 소켓
⬇️ 2️⃣3️⃣ ⬇️
⬇️(HTTP) ⬇️(Steam)
⬇️ 6️⃣⬇️ ⬆️7️⃣(서버응답은 반대로)
server ----------------------------------------------------------------------
| WebSocket라이브러리 => 연결 => application layer에서 프로토콜 처리 |
----------------------------------------------------------------------