새소식

CS

[CS] Socket 이란?

  • -

socket이란

💡프로그램이 네트워크에서 데이터를 주고 받을 수 있도록 네트워크 환경에 연결할 수 있게 만들어진 연결부

즉, 두 호스트를 연결해주는 도구로서 인터페이스의 역할을 합니다

일반적으로 TCP/IP 프로토콜을 이용합니다

 

소켓의 구성요소

프로토콜, IP 주소, 포트 번호가 있습니다

프로토콜

  • 어떤 시스템이 다른 시스템과 통신을 원활하게 수용하도록 해주는 통신 규약,약속

IP

  • 전 세계 컴퓨터에 부여된 고유의 식별 주소
  • 서버 장비 또는 네트워크 장비를 주소로 표현한 것

포트(Port)

  • 네트워크 상에서 통신하기 위해서 호스트 내부적으로 프로세스가 할당 받아야하는 고유한 숫자
  • 즉 통신을 사용하는 어플리케이션을 식별하는 번호
  • 같은 호스트내에서 서로 다른 프로세스가 같은 포트 넘버를 가질 수 없습니다

 

소켓이 하는일

  1. 소프트웨어와 소프트웨어를 연결
    IP와 서비스 포트를 통해 찾아서!
  2. 소프트웨어간의 데이터 통신
    인터넷에서 소켓을 찾아 연결하고 데이터를 송수신합니다

소켓 종류

스트림(TCP)

  • 연결 설정 후 통신이 가능한 연결형 프로토콜
  • 신뢰성있는 데이터 전송의 특징을 가지고 있습니다
  • 양방향으로 바이트 스트림을 전송,연결 지향성
  • 데이터 경계의 구분이 없는 바이트 스트림(Byte-Stream) 서비스
  • 소량의 데이터보다 대량의 데이터 전송에 적합

데이터 그램(UDP)

  • 연결 설정 없이 통신이 가능한 비연결형 프로토콜
  • 데이터 크기에 제한이 있습니다
  • TCP 에 비해 신뢰성이 떨어지는 데이터 전송의 특징을 가지고있습니다
    (데이터가 손실되어도 오류가 발생하지 않기 때문)
  • 실시간 멀티 미디어 정보를 처리하기 위해 주로 사용 ex) 전화
  • 데이터 경계를 구분하는 데이터 그램(Datagram)  서비스입니다

소켓 통신의 흐름

 

역할에 따라 서버 소켓, 클라이언트 소켓으로 구분됩니다

 

서버(Server)

클라이언트 소켓의 연결 요청을 대기하고 연결 요청이 오면 클라이언트 소켓을 생성하여 통신이 가능하게 합니다

  1. socket()함수로 소켓을 생성
  2. bind()함수로 ip와 port번호를 설정
  3. listen()함수로 클라이언트의 접근 요청에 수신 대기열을 만들어 몇 개의 클라이언트를 대기 시킬지 결정
  4. accept() 함수로 클라이언트와의 연결을 기다림

 

클라이언트(Client)

실제로 데이터 송수신이 일어나는 것은 클라이언트 소켓입니다

  1.  socket() 함수로 가장 먼저 소켓을 연다
  2. connext() 함수를 이용하여 통신할 서버의 설정된 ip와 port번호에 통신을 시도
  3. 통신 시도시 서버가 accept() 함수를 이용하여 클라이언트의 socket descriptor를 반환
  4. 이를 통해 클라이언트와 서버가 서로 read(),write() 하며 통신

 

소켓 통신의 특징

  1. server-client구조
    TCP/UDP위에서 동작하므로 당연하게 server-client 통신 구조를 갖춥니다
    서버와 클라이언트가 특정 포트를 통해 실시간으로 양방향 통신을 하는 방식
  2. 양방향 통신
    socket은 http 통신과 같이 한쪽에서 데이터를 보내고 반대편에서 이를 수신한 뒤 연결이 끊어지는 것이 아니라 양쪽에서 실시간으로 데이터를 송수신 할 수 있습니다
    실시간 스트리밍이나 채팅에 주로 유용하게 사용
  3. 프로그래밍 언어나 운영체제에 종속적
    TCP/IP 표준이 아니라 네트워크 프로그래밍 인터페이스
  4. 결은 close() 하기 전까지 유지됩니다

 

 

'CS' 카테고리의 다른 글

[CS] Axios 란 무엇일까?  (0) 2024.02.20
[CS] 쿠키(Cookie)와 세션(Session)  (1) 2024.02.06
[CS] CORS란 무엇일까? CORS 개념  (0) 2024.02.06
[CS] HTTP 상태코드 알아보기  (0) 2024.01.07
[CS] HTTP란?  (0) 2023.12.13
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.