김 컴퓨터


소켓 (Socket) 기초

소켓(Socket)은 네트워크상에서 두 프로그램이 데이터를 주고받을 수 있도록 해주는 논리적인 연결점(Endpoint)입니다.

물리적으로 전선을 연결하기 위해 벽에 있는 콘센트(Socket)에 플러그를 꽂는 것처럼, 소프트웨어적으로 네트워크에 연결하기 위해 사용하는 인터페이스라고 이해하면 쉽습니다.


1. 소켓의 핵심 공식

소켓은 단독으로 존재하지 않고, 다음 두 가지 정보의 결합으로 정의됩니다.

$$ \text{Socket} = \text{IP Address (컴퓨터 위치)} + \text{Port Number (프로그램 위치)} $$


2. 소켓의 종류 (전송 계층에 따라)

주로 사용하는 프로토콜에 따라 두 가지 소켓이 가장 많이 쓰입니다.

종류 타입 (C언어 상수) 기반 프로토콜 특징 비유
스트림 소켓 SOCK_STREAM TCP 연결 지향형, 신뢰성 보장, 순서 보장 전화 통화 (연결 후 대화)
데이터그램 소켓 SOCK_DGRAM UDP 비연결형, 빠른 속도, 신뢰성 낮음 편지/택배 (보내고 끝)

3. 소켓 통신 흐름 (서버 vs 클라이언트)

소켓 통신은 서버(서비스 제공자)클라이언트(서비스 요청자) 간의 약속된 절차를 따릅니다.

  1. 서버 (Server):

    • socket(): 소켓을 생성합니다. (전화기 설치)
    • bind(): 소켓에 IP와 포트 번호를 할당합니다. (전화번호 부여)
    • listen(): 연결 요청을 기다리는 상태로 만듭니다. (벨이 울리길 대기)
    • accept(): 클라이언트의 요청이 오면 수락하여 연결을 맺습니다. (수화기 듦)
  2. 클라이언트 (Client):

    • socket(): 소켓을 생성합니다.
    • connect(): 서버의 IP와 포트로 연결을 요청합니다. (전화 걸기)
  3. 데이터 교환: 연결이 성립되면 send() / recv() 함수를 통해 데이터를 주고받습니다.