소켓이란? 종류, 통신 흐름, HTTP통신과의 차이

나른한 개발자·2022년 10월 19일
5

studylog

목록 보기
45/45
post-custom-banner

Socket이란?

네트워크를 경유하는 프로세스 간 통신의 종착점. OSI 7계층 중 응용 계층에 속하는 프로세스들은 데이터 송수신을 위해 반드시 소켓을 거쳐 전송 계층으로 데이터를 전달해야한다. 즉, 소켓은 전송 계층과 응용 프로그램 사이의 인터페이스 역할을 하며 떨어져 있는 두 호스트를 연결해준다.

소켓은 아래의 3 요소로 정의된다.

  1. 프로토콜
  2. IP
  3. Port

일반적인 소켓 통신의 흐름

서버

  1. 소켓 생성
  2. 바인딩 (ip, port번호 설정)
  3. listen()으로 클라이언트 요청에 대기열을 만들어 몇개의 클라이언트를 대기시킬지 결정
  4. accept()로 클라이언트와 연결
  5. 데이터 송수신
  6. 소켓 닫기

클라이언트

  1. 소켓 생성
  2. 서버에 설정된 ip, port로 연결 시도
  3. accept()로 클라이언트의 socket descriptor 반환
  4. 데이터 송수신
  5. 소켓 닫기

소켓 종류

(1) 스트림 소켓

  • TCP(Transmission Control Protocol)을 사용하는 연결 지향방식의 소켓
  • 송수신자의 연결을 보장하여 신뢰성있는 데이터 송수신이 가능
  • 데이터의 순서 보장
  • 소량의 데이터보다 대량 데이터 전송에 적합
  • 점대점 연결

서버

  • 소켓 생성
  • 바인딩
  • listen (연결되지 않은 소켓을 대기모드로 전환)
  • 클라이언트 요청 수락 후 통신을 위한 실질적인 소켓 생성 (처음에 생성한 소켓은 새로운 클라이언트 요청을 대기하기 위해 쓰임)
  • 데이터 송수신
  • 소켓 닫음

클라이언트

  • 소켓 생성
  • 서버가 설정한 ip, port로 연결
  • accept()로 클라이언트의 socket descriptor 반환
  • 데이터 송수신
  • 소켓 닫음

(2) 데이터그램 소켓

  • UDP(User Diagram Protocol)을 사용하는 비연결형 소켓
  • 데이터의 순서와 신뢰성을 보장하기 어려움
  • 점대점 뿐만아니라 일대다 연결도 가능
  • accept 과정없이 소켓 생성 후 바로 데이터 송수신


HTTP 통신과 소켓 통신의 차이

(1) HTTP 통신

  • 클라이언트의 요청이 있을 때만 서버가 응답
  • JSON, HTML, Image 등 다양한 데이터를 주고 받을 수 있음
  • 서버가 응답한 후 연결을 바로 종료하는 단방향 통신이지만 Keep Alive 옵션을 주어 일정 시간동안 커넥션을 유지할 수 있다.
  • 실시간 연결이 아닌 데이터 전달이 필요한 경우에만 요청을 보내는 상황에 유리

(2) 소켓 통신

  • 클라이언트와 서버가 특정 포트를 통해 양방향 통신을 하는 방식
  • 데이터 전달 후 연결이 끊어지는 것이 아니라 계속해서 연결을 유지 → HTTP에 비해 더 많은 리소스 소모
  • 클라이언트와 서버가 실시간으로 계속하여 데이터를 주고받아야하는 경우에 유리
  • 실시간 동영상 스트리밍이나 온라인 게임 등에 사용



참고
HTTP통신과 소켓의 차이점
소켓 통신이란?
소켓 프로그래밍 - 소켓의 의미/특징/종류
[Python] 소켓 통신하여 채팅 하기

profile
Start fast to fail fast
post-custom-banner

2개의 댓글

comment-user-thumbnail
2023년 7월 26일

점대점이란 말이 무슨 뜻일까요?

1개의 답글