1. TCP/IP 개요
TCP/IP란?
TCP/IP는 컴퓨터 네트워크에서 데이터를 통신하기 위한 프로토콜 스택이다.
이 프로토콜은 네트워크 간의 데이터 교환을 가능하게 하며, 데이터를 분할하여 보낸 뒤 정확한 전송을 보장하는 역할을 한다. (데이터의 경로를 지정하는 역할)
TCP (Transmission Control Protocol)
TCP는 데이터를 신뢰성 있게 전송하기 위한 프로토콜이다.
- 신뢰성 : 데이터의 손실이나 손상을 최소화하고, 데이터의 순서를 보장하는 특성을 의미한다.
- 연결 지향적 : 데이터를 주고받기 전에 송신자와 수신자 간에 연결이 이루어지는 것을 의미한다.
- 흐름 제어 : 송신자가 수신자의 처리 속도에 맞춰 데이터를 전송하도록 제어하는 기능이다.
- 혼잡 제어 : 네트워크의 혼잡 상태를 감지하고 이를 조절하여 네트워크 성능을 유지하는 기능이다.
IP (Internet Protocol)
IP는 인터넷상에서 데이터를 주고받기 위한 통신 규약(약속)이다.
- 패킷 기반: 데이터를 작은 패킷 단위로 나누어 전송하고, 각 패킷은 목적지 주소와 출발지 주소 정보를 포함한다.
- 비연결성: 패킷은 독립적으로 처리되며, 수신자와의 직접적인 연결이 필요하지 않다.
- 라우팅: 각 라우터가 패킷의 경로를 결정하여 목적지까지 전달한다.
- IP 주소: IP는 각 컴퓨터를 식별하기 위한 IP 주소를 사용한다.
TCP/IP 4계층

- 네트워크 인터페이스 계층은 물리적인 네트워크와 상호작용하며 데이터를 전기 신호로 변환하거나 광 신호로 변환하여 전송하는 역할을 한다. 이 계층에서는 데이터를 프레임 단위로 전송하고 프레임을 수신하여 물리적인 신호로 변환하는 역할을 수행한다. 수신된 프레임에서 오류를 검출하고 MAC (Media Access Control) 주소를 관리한다. EX) Ethernet이나 Wi-Fi 같은 기술이 이 계층에 해당한다.
- 인터넷 계층은 데이터를 목적지까지 전달하기 위한 라우팅과 논리적인 주소 지정을 담당한다. IP 프로토콜이 이 계층에서 작동하며, 출발지와 목적지 IP 주소를 이용해 데이터를 전달한다. EX) IP 주소와 관련된 서비스인 ARP (Address Resolution Protocol)와 같은 프로토콜도 이 계층에서 동작한다.
- 전송 계층은 데이터의 신뢰성과 흐름 제어를 관리한다. 주요 프로토콜로는 TCP와 UDP가 있다.
- 응용 계층은 최종 사용자에게 서비스를 제공하기 위한 응용 프로그램과 사용자 인터페이스가 위치하는 계층이다. 이 계층에는 HTTP, FTP, SMTP, POP3, IMAP,
DNS 와 같은 다양한 프로토콜이 포함된다.
각 프로토콜은 특정한 응용 서비스를 제공하기 위한 목적으로 사용한다.
UDP (User Datagram Protocol) :
• UDP는 비연결성 프로토콜로, 데이터의 신뢰성은 낮지만 속도가 빠르고 간편하다.
• 데이터그램 단위로 데이터를 전송하며, 순서 보장 및 데이터 신뢰성은 보장되지 않는다.
• 데이터 전송에 관련된 작업이 단순
• 흐름 제어나 혼잡 제어 메커니즘이 없어서 오버헤드가 적다.
• VOIP, 스트리밍, 온라인 게임 등에서 데이터 전송이 빈번하게 발생하는 경우에 사용된다.
2. 소켓(Socket)
소켓이란?
소켓은 프로세스가 네트워크로 데이터를 송수신하기 위한 실제적인 창구 역할이다.
소켓은 서버와 클라이언트 간 연결을 위한 인터페이스로, TCP와 UDP 프로토콜을 사용하여 데이터를 전송한다.
소켓 (Socket)
서버와 클라이언트를 연결해주는 도구로써 인터페이스 역할을 하는 것
• 서버 : 클라이언트 소켓의 연결 요청을 대기하고, 연결 요청이 오면 클라이언트 소켓을 생성해 통신을 가능하게 하는 것
• 클라이언트 : 실제로 데이터 송수신이 일어나는 곳
• 소켓은 프로토콜 , IP 주소 , 포트 넘버로 정의된다.
• TCP와 UDP 프로토콜을 사용하여 데이터를 전송
소켓의 주요 구성 요소
- 서버 소켓 : 클라이언트의 연결 요청을 대기하며, 요청이 수락되면 클라이언트와 통신할 수 있는 소켓을 생성한다.
- 클라이언트 소켓 : 서버에 연결을 요청하며, 연결이 이루어지면 서버와 데이터를 주고받을 수 있다.
- 포트 번호 : 특정 소켓을 식별하기 위한 숫자로, 컴퓨터 내 소프트웨어 간 통신에 사용된다.
소켓 프로그래밍의 흐름
- 서버 측 작업
socket() 함수는 새로운 소켓을 생성한다.
bind() 함수는 소켓에 IP와 포트 번호를 설정한다.
listen() 함수는 클라이언트 요청에 대해 수신 대기열을 생성한다.
accept() 함수는 클라이언트의 연결 요청을 수락하여 통신할 수 있는 소켓을 반환한다. (클라이언트와의 연결을 기다리는 함수)
- 클라이언트 측 작업
socket() 함수는 소켓을 연다.
connect() 함수는 서버의 IP와 port 번호를 통해 연결을 시도한다.
- 통신 시도 시, 서버가 accept()함수를 이용해 클라이언트의 socket descriptor를 반환한다.
- 연결이 완료되면, 서버와 클라이언트는
read()와 write()를 반복하며 데이터를 주고받는다.
3. WebSocket
HTTP와 WebSocket의 차이점
-
HTTP 통신
요청/응답 방식으로 동작하며, 클라이언트가 요청을 보낼 때만 서버가 응답한다. 데이터 전송이 끝나면 즉시 연결이 종료되므로, 실시간 연결이 필요하지 않은 경우 적합하다.
-
WebSocket 통신
실시간 양방향 통신을 지원하며, 서버와 클라이언트가 지속적으로 데이터를 주고받을 수 있는 환경을 제공한다. 이 방식은 실시간 데이터 처리가 필요한 환경에 적합하다.
WebSocket이란?
WebSocket은 실시간 양방향 소통을 위한 통신 프로토콜이다.
이 기술은 HTML5 표준으로 제공되며, 핸드셰이크 과정을 통해 클라이언트와 서버 간 연결이 설정된다.
- 빠르게 작동하며, 통신에 필요한 데이터량이 적다.
- 이벤트를 단순히 듣고, 보내는 것만 가능하다.
- 클라이언트는 브라우저의 WebSocket 객체를 사용하여 연결을 생성하고 관리한다.
WebSocket 주요 이벤트
- open : 웹소켓 연결이 성공적으로 열렸을 때 발생한다.
- message : 데이터를 주고받을 때 발생한다.
- error : 통신 중 오류가 발생했을 때 발생한다.
- close : 웹소켓 연결이 종료되었을 때 발생한다.
4. WebSocket 서버 구현
Node.js를 이용한 WebSocket 서버 구성
Node.js 환경에서 WebSocket 서버를 구현하려면 ws 모듈을 사용해야 한다.
- ws 모듈 설치 명령어 :
npm install ws
ws 모듈의 주요 이벤트
- connection : 클라이언트가 서버에 연결되었을 때 발생하며, 새로운 클라이언트 연결마다 콜백 함수가 실행된다.
- message : 클라이언트로부터 메시지를 받았을 때 발생한다.
- error : 연결 중 오류가 발생했을 때 발생한다.
- close : 클라이언트와의 연결이 종료되었을 때 발생한다.
참고하면 좋은 사이트
https://recipes4dev.tistory.com/153