SOCKET 통신이란?

wldbs._.·2024년 10월 16일

WEB-STUDY

목록 보기
7/9
post-thumbnail

출처
Unix Socket과 TCP Socket의 차이
Unix Socket 과 TCP Socket은 어떤 차이가 있을까?
소켓 통신이란?
소켓이란?
소켓 프로그래밍

MQTT - Go 프로젝트를 구상하던 중, TCP Socket과 UNIX Socket을 접하여 해당 내용을 정리하고자 한다.
단, UNIX Socket에 우선순위를 두어 초점을 맞출 예정이다.


일반적으로 웹 어플리케이션을 구동하는 경우, 앞 단에 Apache 혹은 Nginx와 같은 웹서버를 연결하여 서비스한다.

웹서버와 어플리케이션을 연결할 때 -> UNIX 소켓을 이용하는 방법과 특정 포트로 연결(TCP 통신)하는 방법이 있다.

  • 웹서버와 웹 어플리케이션이 같은 서버에 있는 경우, UDS 방식이 훨씬 유리하다.

0. Socket이란?

네트워크를 경유하는 프로세스 간 통신의 종착점.

  • OSI 7계층 중 응용 계층에 속하는 프로세스들은 데이터 송수신을 위해 반드시 소켓을 거쳐 전송 계층으로 데이터를 전달해야 한다.
  • 즉, 소켓은 전송 계층과 응용 프로그램 사이의 인터페이스 역할을 하며 떨어져 있는 두 호스트를 연결해준다.



1. Socket 통신이란?

소켓(Socket)이란 프로세스가 네트워크 세계로 데이터를 내보내거나, 혹은 그 세계로부터 데이터를 받기 위한 실제적인 창구 역할을 한다.

그러므로, 프로세스가 데이터를 보내거나 받기 위해서는 반드시 소켓을 열어서 소켓에 데이터를 써보내거나 소켓으로부터 데이터를 읽어들여야 한다.

소켓은 프로토콜, IP 주소, 포트 넘버 로 정의된다.

  • 프로토콜: 통신에서는 어떤 시스템이 다른 시스템과 통신을 원활하게 수용하도록 해주는 통신 규약, 약속
  • IP: 전세계 컴퓨터에 부여된 고유의 식별 주소
  • 포트: 네트워크 상에서 통신하기 위해서 호스트 내부적으로 프로세스가 할당 받아야 하는 고유한 숫자
    • 한 호스트 내에서 네트워크 통신을 하고 있는 프로세스를 식별하기 위해 사용됨.
    • 같은 호스트 내에서 서로 다른 프로세스가 같은 포트 넘버를 가질 수는 없다!
    • => 같은 컴퓨터 내에서 프로그램을 식별하는 번호

다시 말해, 소켓은 떨어져 있는 두 호스트를 연결해주는 도구로써, 인터페이스의 역할을 수행한다.
또한, 데이터를 주고받을 수 있는 구조체로, 소켓을 통해 데이터 통로가 만들어진다.


1-1. Socket 통신의 흐름

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

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

2. 클라이언트
: 데이터 송수신이 일어나는 것

  • socket() 함수로 소켓 열기
  • connect() 함수로 통신할 서버의 설정된 ip와 port 번호에 통신 시도
  • 통신 시도 시, 서버가 accept() 함수 이용해 클라이언트의 socket descriptor 반환
  • 이를 이용해 클라이언트와 서버가 서로 read(), write() 하며 통신 (해당 과정 반복)

1-2. Socket의 종류

1. 스트림(TCP)

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

2. 데이터그램(UDP)

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


1-3. HTTP 통신 vs Socket 통신

1. HTTP 통신
: 클라이언트의 요청(Request)이 있을 때만 서버가 응답하여 해당 정보를 전송하고 곧바로 연결을 종료하는 방식

  • 클라이언트가 요청을 보내는 경우에만 서버가 응답: 단방향 통신
  • 서버로부터 응답을 받은 후에는 연결 바로 종료됨
  • 실시간 연결이 아닌, 필요한 경우에만 서버로 요청을 보내는 상황에 유용
  • 요청을 보내 서버의 응답을 기다리는 어플리케이션의 개발에 주로 사용

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

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


2. What

IPC를 위한 방법으로 파이프, 메세지 큐, 세마포어, 소켓 등이 있다.

  • 그 중 소켓을 이용한 IPC는 기존의 네트워크 통신 방식과 동일하다.

IPC (Inter-Process Communication, 프로세스 간 통신)

  • 프로세스들 사이에 서로 데이터를 주고받는 행위 또는 그에 대한 방법이나 경로

2-1. UNIX (Domain) Socket

1) 단일 시스템 내에서 프로세스 간 데이터 교환을 허용하는 통신 메커니즘.

  • 동일 시스템 내 실행 중인 프로세스 간 통신이므로 TCP/IP Socket 보다 빠르고 가볍다.
  • 파일 시스템 권한으로 소켓 권한 제어 가능.

2-2. TCP Socket

1) 다른 시스템의 프로세스와 네트워크를 통해 통신하기 위해 사용하는 통신 메커니즘.

  • TCP 소켓은 로컬 IP, 로컬 Port, 원격 IP, 원격 Port 로 식별.
profile
공부 기록용 24.08.05~ #LLM #RAG

0개의 댓글