[ CS / Network ] Socket

황승환·2022년 7월 27일
0

CS

목록 보기
55/60

Socket

Socket의 정의

소켓은 네트워크 상에서 돌아가는 두 개의 프로그램 간 양방향 통신의 하나의 엔드포인트이다. 포트번호로 바인딩되어 TCP 계층에서 데이터가 전달되어야하는 Application을 식별할 수 있게 해준다.

소켓은 프로토콜, IP주소, 포트번호로 정의된다. 다시 말해 소켓은 두 호스트를 연결하는 인터페이스 역할을 하는 데이터를 주고 받을 수 있는 구조체이다. 이를 통해 데이터 통로가 만들어진다. 소켓은 서버 소켓, 클라이언트 소켓으로 구분된다.

End-point

엔드포인트는 IP주소와 포트번호의 조합을 의미한다. 모든 TCP 연결은 2개의 엔드포인트로 유일하게 식별되어지고, 서버와 클라이언트 간의 여러 개의 연결이 맺어질 수 있다.

Socket 통신

소켓 통신은 서버가 클라이언트의 연결 요청을 소켓을 통해 리스닝하며 기다리고, 클라이언트의 요청을 받으면 이를 허가하고 소켓을 생성시켜 read, write할 수 있도록 하는 통신 기술이다.

Server Socket

클라이언트 소켓의 연결 요청을 항상 기다리는 Listening상태로 대기하고, 연결 요청이 오면 클라이언트 소켓을 생성하여 통신이 가능하도록 한다.

  1. socket() 함수를 통해 소켓을 생성
  2. bind() 함수로 IP와 Port번호를 설정
  3. listen() 함수로 클라이언트의 연결 요청을 기다림
  4. accept() 함수로 클라이언트의 연결 요청을 수락하고 소켓을 생성

Client Socket

클라이언트 소켓에서 실제로 데이터 송수신이 일어난다.

  1. socket() 함수로 가장 먼저 소켓 오픈
  2. connect()함수로 통신 할 서버의 IP와 Port번호에 통신 시도
    • 서버가 accept() 함수로 클라이언트의 socket descriptor를 반환
  3. 클라이언트와 서버가 서로 read(), write()를 하며 통신

Socket 종류

Stream (TCP)

  • 양방향으로 Byte stream 전송. (연결 지향성)
  • 오류 수정, 정송처리, 흐름제어 보장
  • 송신된 순서에 따라 중복되지 않도록 데이터를 수신 (이에 따른 오버헤드 발생)
  • 소량의 데이터보다 대량의 데이터 전송에 적합 (TCP 사용)

Datagram (UDP)

  • 비연결형 소켓
  • 데이터의 크기에 제한
  • Best effort (확실한 전달 보장 X, 데이터 손실이 발생해도 에러 발생 X)
  • 실시간 멀티미디어 정보를 처리하기 위해 주로 사용 (ex. 전화)

HTTP 통신 VS Socket 통신

HTTP 통신

클라이언트의 요청이 있을 때에만 서버가 응답하여 해당 정보를 전송하고, 곧바로 연결을 종료

HTTP 통신 특징

  • 클라이언트가 연결 요청을 하는 경우에만 서버가 응답하는 단방향 통신
  • 서버로부터 응답 받은 후, 연결 바로 종료
  • 실시간 연결이 아니고 필요한 경우에만 서버로 요청을 보내는 상황에 유용
  • 요청을 보내 서버의 응답을 기다리는 어플리케이션의 개발에 주로 사용

Socket 통신

서버와 클라이언트가 특정 포트를 통해 실시간으로 양방향 통신을 하는 방식

Socket 통신 특징

  • 서버와 클라이언트가 계속 연결을 유지하는 양방향 통신
  • 서버와 클라이언트가 실시간으로 데이터를 주고받는 상황이 필요한 경우에 사용
  • 실시간 동영상 스트리밍이나 온라인 게임 등에 사용

정리

  • 소켓 통신은 소켓을 통해 클라이언트가 서버에 연결을 요청하고, 서버는 소켓을 통해 리스닝 상태에 있다가 클라이언트의 요청을 받으면 이를 수락하고 이에 대한 소켓을 생성한다. 이렇게 클라이언트와 서버가 연결된다.
  • 소켓 통신은 소켓을 통해 서버와 클라이언트의 연결을 유지하고, 양방향 통신을 제공
  • 소켓 통신은 실시간성이 중요한 서비스에 주로 이용됨
  • HTTP 통신은 클라이언트의 요청에 대한 응답을 서버가 제공하고 연결을 바로 끊는 단방향 통신 제공
  • HTTP 통신은 클라이언트의 요청에 대한 서버의 응답이 주어지는 서비스에 주로 이용됨
profile
꾸준함을 꿈꾸는 SW 전공 학부생의 개발 일기

0개의 댓글