소켓 (Socket)

1. TCP/IP 통신의 접점, 소켓 (Socket)의 개념

개념도
개념원격지 호스트 간 상호 통신을 위해 TCP/IP 기반 연결 및 데이터 전송을 수행하는 네트워크 종단점(Endpoint)
  • TCP/IP 기반 통신 수행 시 호스트 내 전송 계층과 응용 프로그램 간 인터페이스 역할 수행하며, TCPUDP 프로토콜을 통해 데이터 전송

 

2. TCP 소켓 (TCP Socket) 동작 과정 및 소켓 함수

(1) TCP 소켓 동작 과정

  • 서버/클라이언트 모두 소켓 생성 후 클라이언트에서 서버로 연결 요청 후 데이터 전송

(2) TCP 소켓 함수

구분소켓 함수역할
공통 함수Socket통신을 위한 초기 소켓 생성
Read연결된 소켓 스트림에 데이터 읽기
Write연결된 소켓 스트림에 데이터 쓰기
Close연결된 소켓을 종료
서버측 함수Bind생성된 소켓에 네트워크 주소 부여
Listen서버 대기큐 지정을 통한 클라이언트의 연결요청 대기
Accept서버측에서 클라이언트와 연결
클라이언트측 함수Connect클라이언트가 서버측에 소켓 통신 요청
  • TCP  소켓은 Listen, Accept 함수를 이용한 연결 기반 신뢰성이 필요한 서비스에 사용

 

3. UDP 소켓 (UDP Socket) 동작 과정 및 소켓 함수

(1) UDP 소켓 동작 과정

  • 서버/클라이언트 모두 소켓 생성 후 클라이언트는 서버에 연결 요청 없이 즉시  데이터 전송

(2) UDP 소켓 함수

구분소켓 함수역할
공통 함수Socket통신을 위한 초기 소켓 생성
Recvfrom데이터 수신 및 송신지 정보 획득
Sendto전송할 목적지 지정 및 데이터 전송
서버측 함수Bind생성된 소켓에 네트워크 주소 부여
  • UDP 소켓은 사전 연결 절차 없이 빠른 데이터 전송 기반 실시간 서비스에 사용
  • 최근 HTTP 환경에서 웹소켓 (Web Socket)을 통해 양방향 실시간 통신 채널 제공

 

4. 웹소켓 (Web Socket)의 개념 및 동작 과정

(1) 웹소켓의 개념 및 특징

웹소켓 개념웹서버와 웹브라우저 간 실시간 통신을 위해 ws 프로토콜 기반 클라이언트와 서버 사이에 지속적인 양방향 통신 채널을 제공하는 기술
기술 구현
특징
– HTML5의 기능으로 양방향 통신 API 제공
– 웹서버와 웹응용 간 Handshake 기반 상호 연결
– 양방향 전이중 통신 (Bi-Direction Full Duplex)
TCP/IP 소켓 구조 (Listen, Accept, Send, Receive 등)
서비스 제공
특징
– 대부분의 웹브라우저 지원(Google Chrome, MS Edge, Firefox 등)
– 기능이 웹브라우저에 내장되어 별도의 설치 과정 불필요
– Windows, UNIX/Linux 등 운영체제 플랫폼에 독립적
– 연결 지향 서비스로 서버 측면의 오버헤드, 보안취약점 발생

(2) 웹소켓의 동작과정

– 웹브라우저와 웹서버간 Handshake를 통해 연결
– 웹브라우저에서 WebSocket 객체 생성
– 웹브라우저는 연결 시 사용한 WebSocket 객체를 이용하여 데이터 전송
(send() 함수 이용하여 웹서버로 데이터 전송)
– 웹서버로부터 처리된 결과는 WebSocket 객체의 핸들러를 통해서 수신
(onMessage() 핸들러를 이용하여 웹서버로부터 데이터 수신)
– Event 발생 시 웹서버에서 데이터를 브라우저로 Push
– 웹브라우저는 WebSocket 객체의 핸들러를 통해 지속적 수신
(onMessage() 핸들러를 이용하여 웹서버로부터 데이터 수신)
– 웹브라우저는 이를 위해 Polling 불필요
  • 웹소켓 사용시 보안취약점 존재 여부 점검 및 웹서버 부하를 고려한 서비스 설계 필요

 
[참고]

  • 백창우, 한빛미디어, TCP/IP 소켓 프로그래밍, 2005
  • MDN Web Docs, WebSocket을 이용하여 클라이언트 애플리케이션 작성하기

콘텐츠 사용 시 출처 표기 부탁 드리고, 댓글은 큰 힘이 됩니다^^