Network & AWS

[Socket]이란 무엇인가

Haksae 2022. 2. 4. 19:36

1. Socket

소켓은 컴퓨터 네트워크를 경유하는 프로세스 간 통신(IPC)의 종착점(End Point)이다.
오늘날 컴퓨터 간 통신의 대부분은 인터넷 프로토콜을 기반으로 하고 있으므로, 대부분의 네트워크 소켓은 인터넷 소켓이다.
이는 네트워크를 이용해 데이터를 송수신하고 싶은 프로그램들은 소켓을 거쳐야만 한다는 것을 의미한다.
  • End Poing : 아이피 주소와 포트 번호의 조합을 의미한다. 모든 TCP 연결은 2개의 엔드 포인트로 유일하게 식별되어질 수 있다.OSI
  • OSI 7 계층의 어플리케이션 계층(application layer)에 존재하는 네트워크 응용 프로그램들은 데이터를 송수신 하기 위해 소켓을 거쳐 전송 계층(transport layer)의 통신망으로 전달함으로써 데이터를 송수신 하게 된다.
  • 따라서 소켓은 그 사이에 위치하고 있으며, 응용프로그램에서 TCP/IP를 이용하는 인터페이스 역할을 한다.

2. 소켓 통신의 흐름

  • 서버 (server)
    • 클라이언트 소켓의 연결 요청을 대기하고, 연결 요청이 오면 클라이언트 소켓을 생성하여 통신이 가능하게 한다.
      • 1) socket() 함수를 이용하여 소켓을 생성
      • 2) bind() 함수로 ip와 port 번호를 설정
      • 3) listen() 함수로 클라이언트의 접근 요청에 수신 대기열을 만들어 몇 개의 클라이언트를 대기 시킬지 결정
      • 4) accept() 함수를 사용하여 클라이언트와의 연결을 기다림
  • 클라이언트(client)
    • 실제로 데이터 송수신이 일어나는 것은 클라이언트 소켓이다.
      • 1) socket() 함수로 가장 먼저 소켓을 연다
      • 2) connect() 함수를 이용하여 통신할 서버의 설정된 ip와 port 번호에 통신을 시도
      • 3) 통신을 시도시, 서버가 accept() 함수를 이용하여 클라이언트의 socket descriptor를 반환
      • 이를 통해 클라이언트와 서버가 서로 read(), write() 하며 통신

3.  소켓 종류

1) 스트림 (TCP)

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

2) 데이터그램 (UDP)

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

4. 소켓 통신의 특징

1) server-client 구조

  • TCP/UDP 위에서 동작하므로 당연하게 server-client 통신 구조를 갖춘다.
  • 처음에 데이터를 보내는 쪽이 client가 되고, 받는 쪽이 server가 된다. 이후에는 서로가 데이터를 송수신할 수 있다. (자세한 설명은 아래)

2) 양방향 통신

  • socket은 한 쪽에서 데이터를 보내고 반대 편에서 이를 수신한 뒤 연결이 끊어지는게 아니라 양 쪽에서 실시간으로 데이터를 송수신할 수 있다.
  • 따라서 실시간 스트리밍이나 채팅에 주로 유용하게 사용된다.

3) 프로그래밍 언어나 운영체제에 종속적

  • socket은 TCP/IP 표준이 아니라 네트워크 프로그래밍 인터페이스다.
  • 따라서 운영체제마다 사용법이 약간씩 다르며, 그 안에서 또 프로그래밍 언어마다 소켓 aip를 구현한 라이브러리가 다 다르다.