Socket

박준서·2025년 3월 25일

CS

목록 보기
3/4
post-thumbnail

✅ 다른 컴퓨터 위의 2개의 프로세스가 통신 할 때

  • 반드시 네트워크를 통해 소통해야 한다.
  • 이때 사용하는 대표적인 통신 수단이 소켓(Socket)이다.

📌 흐름

  • 프로세스 A (송신자):
    • 소켓을 생성 (socket())
    • 네트워크 주소와 포트를 지정하여 연결 시도 (connect())
  • 프로세스 B (수신자):
    • 소켓을 생성하고 포트를 열어 대기 (bind(), listen())
    • 들어오는 연결을 수락 (accept())
  • 메시지 교환:
    • 🔥송신자는 send() / sendto() 함수로 메시지를 보냄
    • 수신자는 recv() / recvfrom() 함수로 메시지를 받음

📦 정리하자면:

  • 소켓은 서로 다른 컴퓨터에 있는 프로세스 간 네트워크 통신을 가능하게 하는 인터페이스
  • 그래서 프로세스 간 통신(IPC) 중에서도 네트워크 기반 IPC로 분류됨.
  • TCP/IP, UDP 같은 프로토콜 위에서 동작하며, 대부분의 네트워크 기반 프로그램(웹 서버, 채팅, 게임 등)이 소켓을 사용해 통신한다.

✅ 더 풀어보자

소켓은 네트워크 통신을 쉽게 할 수 있도록 제공되는 하나의 "인터페이스"

  • 원래 컴퓨터끼리 통신하려면 하드웨어(이더넷, 라우터 등) + 복잡한 프로토콜(TCP/IP)을 다 다뤄야 함.
  • 소켓은 OS가 이런 복잡한 네트워크 동작을 추상화해서 개발자에게 "간단한 함수"들로 제공하는 도구

📦 소켓의 역할

역할설명
추상화send(), recv() 등으로 복잡한 통신을 단순하게 수행 가능
연결 설정TCP라면 connect()accept() 등으로 연결 관리
데이터 송수신바이트 단위로 데이터 보내고 받기 가능
프로토콜 선택TCP (스트림), UDP (데이터그램) 등 원하는 방식 선택 가능

💡 비유하자면?

마치 전화기처럼, 각 프로세스가 소켓을 들고 전화를 거는 느낌이다. 전화선(네트워크)은 복잡하지만, 우리는 전화기만 잘 다루면 통신할 수 있다.

소켓에는 포트번호가 반드시 할당될까 ? A) 그렇다.

🎯 왜 포트 번호가 필요할까?

  • IP 주소는 "어느 컴퓨터"인지를 나타내고,
  • 포트 번호는 "그 컴퓨터 안의 어떤 프로그램(프로세스 또는 서비스)"인지를 나타낸다.

📦 즉, "IP 주소 + 포트 번호" = 하나의 고유한 네트워크 통신 종착점 (이걸 소켓 주소 혹은 endpoint라고 부르기도 함)

⚙️ 어떤 식으로 할당될까?

상황포트 번호 할당 방식
서버개발자가 직접 지정 (bind() 함수에서 포트 설정) 예: 웹서버는 보통 80번, HTTPS는 443번
클라이언트OS가 자동으로 임시 포트(동적 포트)를 할당 (보통 49152 ~ 65535 범위)
profile
Back-End Developer

0개의 댓글