🕸️ Network

Socket

정의

클라이언트와 서버 양쪽에서 서로에게 데이터 전달을 하는 방식의 양방향 통신
인터넷 상에 존재하는 각 Port를 고유하게 식별하기 위한 주소

특징

  • 소켓은 떨어져 있는 두 호스트를 연결해주는 도구로써 인터페이스의 역할을 하며 데이터를 주고 받을 수 있는 구조체로 이를 통해 데이터 통로가 만들어진다.
  • 소켓은 Protocol + IP Address + Port Number로 정의된다.
  • 또한 소켓은 역할에 따라 서버 소켓, 클라이언트 소켓으로 구분된다.
  • 각 Socket은 인터넷 상에서 고유하다.
  • TCP/IP stack에서 어플리케이션이 시스템의 기능을 함부로 쓸 수 없다.
    • 대신 시스템은 프로그래밍 인터페이스를 제공
  • 어플리케이션은 Socket을 통해 데이터를 주고 받는다.
  • 개발자는 Socket Programming을 통해 네트워크 상 다른 프로세스와 데이터를 주고 받도록 구현한다.

Connection & Socket

  • 각 Connection을 고유하게 식별할 수 있어야 한다.
  • 한 쌍의 Socket은 Connection을 고유하게 식별한다.
    • src internet addr, src port, dest internet addr, dest port
  • 하나의 Socket은 동시에 여러 Connection들에서 사용될 수 있다.

프로토콜 스펙을 시스템 레벨에서 구현하면서 조금씩 달라짐!

  • TCP는 Socket으로 고유하게 식별 X
  • UDP는 Socket으로 고유하게 식별 O

TCP Socket 동작 방식

  1. 서버는 Connection 맺는 요청을 기다리는 Listening Socket을 엶
  1. 3 Way Handshake → Connection 성립
  1. 새로운 Socket 생성 → TCP 통신
  1. but, 새로운 Socket들은 IP Address, Port Number 모두 동일
  1. src IP, src Port 추가적으로 식별
→ TCP Socket은 IP, Port만으로 고유하게 식별 X

UDP Socket 동작 방식

UDP Socket은 IP, Port만으로 고유하게 식별 O
→ UDP Socket에서 데이터를 보낼 때, 어느 UDP Socket으로 보낼지 지정할 수 있다.

소켓 통신의 흐름

notion image

서버(Server)

클라이언트 소켓의 연결 요청을 대기하고, 연결 요청이 오면 클라이언트 소켓을 생성하여 통신이 가능하게 한다.
1) socket() 함수를 이용하여 소켓을 생성
2) bind() 함수로 ip와 port 번호를 설정하게 됩니다.
3) listen() 함수로 클라이언트의 접근 요청에 수신 대기열을 만들어 몇 개의 클라이언트를 대기 시킬지 결정
4) accept() 함수를 사용하여 클라이언트와의 연결을 기다림

클라이언트(Client)

실제로 데이터 송수신이 일어나는 것은 클라이언트 소켓이다.
1) socket() 함수로 가장먼저 소켓을 연다.
2) connect() 함수를 이용하여 통신 할 서버의 설정된 ip와 port 번호에 통신을 시도
3) 통신을 시도 시, 서버가 accept() 함수를 이용하여 클라이언트의 socket descriptor를 반환
4) 이를 통해 클라이언트와 서버가 서로 read(), write() 를 하며 통신 (이 과정을 반복)

소켓 종류

스트림(TCP)

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

데이터그램(UDP)

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

장점

단점

소켓 통신은 계속해서 Connection을 들고 있기 때문에 HTTP 통신에 비해 많은 리소스가 소모된다.

단점 극복 방법

HTTP

예시

보통 스트리밍이나 실시간 채팅 등 실시간으로 데이터를 주고 받아야 하는 경우 Connection을 자주 맺고 끊는 HTTP 통신보다 소켓 통신이 적합

비교군과의 차이

질문

출처