웹 소켓

민정이등장·2024년 11월 15일
0

1. TCP/IP 개요

TCP/IP란?

TCP/IP는 컴퓨터 네트워크에서 데이터를 통신하기 위한 프로토콜 스택이다.

이 프로토콜은 네트워크 간의 데이터 교환을 가능하게 하며, 데이터를 분할하여 보낸 뒤 정확한 전송을 보장하는 역할을 한다. (데이터의 경로를 지정하는 역할)


TCP (Transmission Control Protocol)

TCP는 데이터를 신뢰성 있게 전송하기 위한 프로토콜이다.

  1. 신뢰성 : 데이터의 손실이나 손상을 최소화하고, 데이터의 순서를 보장하는 특성을 의미한다.
  2. 연결 지향적 : 데이터를 주고받기 전에 송신자와 수신자 간에 연결이 이루어지는 것을 의미한다.
  3. 흐름 제어 : 송신자가 수신자의 처리 속도에 맞춰 데이터를 전송하도록 제어하는 기능이다.
  4. 혼잡 제어 : 네트워크의 혼잡 상태를 감지하고 이를 조절하여 네트워크 성능을 유지하는 기능이다.

IP (Internet Protocol)

IP는 인터넷상에서 데이터를 주고받기 위한 통신 규약(약속)이다.

  1. 패킷 기반: 데이터를 작은 패킷 단위로 나누어 전송하고, 각 패킷은 목적지 주소와 출발지 주소 정보를 포함한다.
  2. 비연결성: 패킷은 독립적으로 처리되며, 수신자와의 직접적인 연결이 필요하지 않다.
  3. 라우팅: 각 라우터가 패킷의 경로를 결정하여 목적지까지 전달한다.
  4. IP 주소: IP는 각 컴퓨터를 식별하기 위한 IP 주소를 사용한다.

TCP/IP 4계층


  1. 네트워크 인터페이스 계층은 물리적인 네트워크와 상호작용하며 데이터를 전기 신호로 변환하거나 광 신호로 변환하여 전송하는 역할을 한다. 이 계층에서는 데이터를 프레임 단위로 전송하고 프레임을 수신하여 물리적인 신호로 변환하는 역할을 수행한다. 수신된 프레임에서 오류를 검출하고 MAC (Media Access Control) 주소를 관리한다. EX) Ethernet이나 Wi-Fi 같은 기술이 이 계층에 해당한다.
  2. 인터넷 계층은 데이터를 목적지까지 전달하기 위한 라우팅과 논리적인 주소 지정을 담당한다. IP 프로토콜이 이 계층에서 작동하며, 출발지와 목적지 IP 주소를 이용해 데이터를 전달한다. EX) IP 주소와 관련된 서비스인 ARP (Address Resolution Protocol)와 같은 프로토콜도 이 계층에서 동작한다.
  3. 전송 계층은 데이터의 신뢰성과 흐름 제어를 관리한다. 주요 프로토콜로는 TCP와 UDP가 있다.
  4. 응용 계층은 최종 사용자에게 서비스를 제공하기 위한 응용 프로그램과 사용자 인터페이스가 위치하는 계층이다. 이 계층에는 HTTP, FTP, SMTP, POP3, IMAP,
    DNS 와 같은 다양한 프로토콜이 포함된다.

각 프로토콜은 특정한 응용 서비스를 제공하기 위한 목적으로 사용한다.

UDP (User Datagram Protocol) :

• UDP는 비연결성 프로토콜로, 데이터의 신뢰성은 낮지만 속도가 빠르고 간편하다.
• 데이터그램 단위로 데이터를 전송하며, 순서 보장 및 데이터 신뢰성은 보장되지 않는다.
• 데이터 전송에 관련된 작업이 단순
• 흐름 제어나 혼잡 제어 메커니즘이 없어서 오버헤드가 적다.
• VOIP, 스트리밍, 온라인 게임 등에서 데이터 전송이 빈번하게 발생하는 경우에 사용된다.


2. 소켓(Socket)

소켓이란?

소켓은 프로세스가 네트워크로 데이터를 송수신하기 위한 실제적인 창구 역할이다.

소켓은 서버와 클라이언트 간 연결을 위한 인터페이스로, TCP와 UDP 프로토콜을 사용하여 데이터를 전송한다.

소켓 (Socket)

서버와 클라이언트를 연결해주는 도구로써 인터페이스 역할을 하는 것

• 서버 : 클라이언트 소켓의 연결 요청을 대기하고, 연결 요청이 오면 클라이언트 소켓을 생성해 통신을 가능하게 하는 것
• 클라이언트 : 실제로 데이터 송수신이 일어나는 곳
• 소켓은 프로토콜 , IP 주소 , 포트 넘버로 정의된다.
• TCP와 UDP 프로토콜을 사용하여 데이터를 전송


소켓의 주요 구성 요소

  1. 서버 소켓 : 클라이언트의 연결 요청을 대기하며, 요청이 수락되면 클라이언트와 통신할 수 있는 소켓을 생성한다.
  2. 클라이언트 소켓 : 서버에 연결을 요청하며, 연결이 이루어지면 서버와 데이터를 주고받을 수 있다.
  3. 포트 번호 : 특정 소켓을 식별하기 위한 숫자로, 컴퓨터 내 소프트웨어 간 통신에 사용된다.

소켓 프로그래밍의 흐름

  1. 서버 측 작업
    • socket() 함수는 새로운 소켓을 생성한다.
    • bind() 함수는 소켓에 IP와 포트 번호를 설정한다.
    • listen() 함수는 클라이언트 요청에 대해 수신 대기열을 생성한다.
    • accept() 함수는 클라이언트의 연결 요청을 수락하여 통신할 수 있는 소켓을 반환한다. (클라이언트와의 연결을 기다리는 함수)
  2. 클라이언트 측 작업
    • socket() 함수는 소켓을 연다.
    • connect() 함수는 서버의 IP와 port 번호를 통해 연결을 시도한다.
    • 통신 시도 시, 서버가 accept()함수를 이용해 클라이언트의 socket descriptor를 반환한다.
    • 연결이 완료되면, 서버와 클라이언트는 read()write()를 반복하며 데이터를 주고받는다.

3. WebSocket

HTTP와 WebSocket의 차이점

  1. HTTP 통신

    요청/응답 방식으로 동작하며, 클라이언트가 요청을 보낼 때만 서버가 응답한다. 데이터 전송이 끝나면 즉시 연결이 종료되므로, 실시간 연결이 필요하지 않은 경우 적합하다.

  2. WebSocket 통신

    실시간 양방향 통신을 지원하며, 서버와 클라이언트가 지속적으로 데이터를 주고받을 수 있는 환경을 제공한다. 이 방식은 실시간 데이터 처리가 필요한 환경에 적합하다.


WebSocket이란?

WebSocket은 실시간 양방향 소통을 위한 통신 프로토콜이다.

이 기술은 HTML5 표준으로 제공되며, 핸드셰이크 과정을 통해 클라이언트와 서버 간 연결이 설정된다.

  • 빠르게 작동하며, 통신에 필요한 데이터량이 적다.
  • 이벤트를 단순히 듣고, 보내는 것만 가능하다.
  • 클라이언트는 브라우저의 WebSocket 객체를 사용하여 연결을 생성하고 관리한다.

WebSocket 주요 이벤트

  1. open : 웹소켓 연결이 성공적으로 열렸을 때 발생한다.
  2. message : 데이터를 주고받을 때 발생한다.
  3. error : 통신 중 오류가 발생했을 때 발생한다.
  4. close : 웹소켓 연결이 종료되었을 때 발생한다.

4. WebSocket 서버 구현

Node.js를 이용한 WebSocket 서버 구성

Node.js 환경에서 WebSocket 서버를 구현하려면 ws 모듈을 사용해야 한다.

  • ws 모듈 설치 명령어 : npm install ws

ws 모듈의 주요 이벤트

  1. connection : 클라이언트가 서버에 연결되었을 때 발생하며, 새로운 클라이언트 연결마다 콜백 함수가 실행된다.
  2. message : 클라이언트로부터 메시지를 받았을 때 발생한다.
  3. error : 연결 중 오류가 발생했을 때 발생한다.
  4. close : 클라이언트와의 연결이 종료되었을 때 발생한다.

참고하면 좋은 사이트

https://recipes4dev.tistory.com/153

profile
킵고잉~

0개의 댓글