소켓 통신이 뭐지?

hojoon·2023년 3월 23일
0

백엔드

목록 보기
3/4

소켓이란?

  • 프로세스가 네트워크 세계로 데이터를 내보내거나 혹은 데이터를 받기 위한 실제적인 창구역할
  • 프로세스가 데이터를 보내거나 받기 위해서는 반드시 소켓을 열어서 소켓에 데이터를 써내보내거나 소켓으로부터 데이터를 읽어들어야 한다.
  • 소캣은 프로토컬, IP주소, 포트 넘버로 정의된다.
  • 소켓은 떨어져 있는 두 호스트를 연결해주는 도구로써 인터페이스 역할
    데이터를 주고 받을 수 있는 구조체
  • 소켓을 통해 데이터 통로가 만들어집니다.
  • 소켓은 역할에 따라 서버 소켓, 클라이언트 소켓으로 구분됩니다.

서버(Server)

클라이언트 소켓의 연결 요청을 대기하고, 연결 요청이 오면 클라이언트 소켓을 생성하여 통신이 가능하게 합니다.

  • socket() 함수를 이용하여 소켓을 생성
  • bind() 함수로 ip와 port 번호를 설정
  • listen() 함수로 클라이언트의 접근 요청에 수신 대기열을 만들어 몇 개의 클라이언트를 대기 시킬지 결정
  • accept() 함수를 사용하여 클라이언트와의 연결을 기다림

클라이언트(Client)

실제로 데이터 송수신이 일어나는 것을 클라이언트 소켓이다.

  • socket() 함수로 가장 먼저 소켓을 연다.
  • connect() 함수를 이용하여 통신 할 서버의 설정된 ip와 port 번호에 통신을 시도합니다.
  • 통신을 시도 시, 서버가 accept() 함수를 이용하여 클라이언트의 socket descriptor를 반환
  • 이를 통해 클라이언트 서버가 서로 read(), write()를 하며 통신의 과정 반복

소켓 종류

스트림(TCP)

  • 양방향으로 바이트 스트림을 전송, 연결 지향성
  • 오류 수정, 정송처리, 흐름제어 보장
  • 송신된 순서에 따라 중복되지 않게 데이터를 수신 -> 오버헤드가 발생
  • 소량의 데이터보다 대량의 데이터 전송에 적함 -> TCP를 사용

데이터그램 (UDP)

  • 비연결형 소켓
  • 데이터의 크기에 제한이 있음
  • 확실하게 전달이 보장되지 않음, 데이터가 손실되도 오류가 발생하지 않음
  • 실시간 멀티미디어 정보를 처리하기 위해 주로 사용

Socket 통신

서버와 클라이언트가 특정 port를 통해 실시간으로 양방향 통신을 하는 방식

Socekt 통신의 특징

  • 서버와 클라이언트가 계속 연결을 유지하는 양방향 통신
  • 서버와 클라이언트가 실시간으로 데이터를 주고받는 상황이 필요한 경우에 사용
  • 실시간 동영상이나 Streaming이나 온라인 게임 등과 같은 경우에 자주 사용된다.

소켓은 주로 채팅 서비스, 주식 차트 페이지 등 단방향 통신이 아닌 응답이 없어도 통신을 주고 받아야 할 때 사용된다.

사이드 프로젝트로 npm socket.io를 하는데 뭔지 몰라서 궁금해서 소켓통신에 대해서 찾아보았다.

profile
프론트? 백? 초보 개발자의 기록 공간

0개의 댓글