본문 바로가기
네트워크

[네트워크] Socket 이란?

by fiat_lux 2024. 9. 1.

  • 네트워크에서 데이터를 주고받기 위한 통신의 끝점을 의미한다
  • 즉, 소켓은 컴퓨터 프로그램이나 애플리케이션이 네트워크상에서 다른 프로그램과 통신하기 위해 사용하는 인터페이스 이다
  • OSI 7계층 중에서 응용 계층 즉, 7계층 에 속하는 프로세스들은 데이터 송수신을 위해 반드시 소켓을 거쳐서 전송 계층으로 데이터를 전달해야 한다
  • 다시 말해 소켓은 전송 계층과 응용 프로그램 사이의 인터페이스
  • 역할을 하고 두 호스트를 연결한다

 

 

소켓의 3요소

  1. IP 주소
    • 서버등을 식별하기 위한 고유한 주소
  2. 포트 번호(Port)
    • 동일한 IP 주소 에서 여러 애플리케이션이 네트워크 통신을 할 수 있도록 특정 애플리케이션을 식별하는 숫자
  3. 프로토콜(Protocol)
    • 통신 방식이나 규칙을 정의하는 네트워크 프로토콜

 

이렇게 세가지 요소는 함께 사용되어 소켓을 통해 네트워크 상에서 특정 서비스를 식별하고 통신을 수행 할 수 있게 해준다

 

 

소켓 통신의 흐름

 

 

  1. Socket 생성
    • 서버에서 소켓 생성
    • 소켓을 생성하고 IP 주소 와 프로토콜을 설정
    • socket() 함수
  2. Binding 바인딩
    • 생성된 소켓을 IP 주소와 포트 번호에 바인딩 한다
    • 소켓을 특정 주소 (IP, Port) 에 묶는다
    • bind() 함수
  3. Listening 리스닝
    • 서버는 연결 요청을 대기하기 위해 소켓을 listening 상태로 설정
    • listen() 함수
  4. 클라이언트 Socket 생성
    • 클라이언트는 서버와 통신하기 위해 자신의 소켓을 생성
    • socket() 함수
  5. 클라이언트 Socket 연결 
    • 클라이언트는 서버의 IP 주소와 포트 번호를 사용하여 서버에 연결 요청을 보냄
    • 서버의 소켓에 연결을 시도한다
    • connect() 함수
  6. 서버 소켓 연결 수락
    • 서버는 클라이언트의 연결 요청을 수락
    • accept() 함수
  7. 데이터 송수신
    • 클라이언트와 서버는 서로 데이터를 주고 받는다
    • 클라이언트와 서버 모두에서 이루어 진다
    • 송신할 때 send() 함수, 수신할 때 recv() 함수
  8. Socket 종료
    • 통신이 끝나면 각각 소켓을 닫는다
    • 연결된 소켓을 종료
    • close() 함수