[리눅스 프로그래밍] 클라이언트와 서버, 그리고 소켓

Jin Hur·2022년 5월 24일
0

네트워크(Network)

목록 보기
11/24

클라이언트와 서버

소켓이란?

소켓이란 응용 프로그램이 이를 통해 데이터를 송수신할 수 있는 추상화된 개념으로, 응용 프로그램이 저장 매체에 파일을 읽고 쓰기 위해 사용하는 파일 핸들러와 매우 흡사하다. 소켓은 응용 프로그램이 네트워크에 플러그인(plug-in)하는 것을 가능하게 하고, 동일한 네트워크에 플러그인된 다른 응용 프로그램과의 통신을 가능하게 한다. 하나의 응용 프로그램이 소켓에 데이터를 쓰게 되면 다른 호스트에 있는 응용 프로그램은 소켓을 통해 데이터를 읽을 수 있게 된다(반대도 마찬가지).

'네트워크에 플러그인' 의미
: 소켓 API를 사용하게 될 경우, 표준화되고 사용이 쉬운 소켓 API 셋을 통해 응용 프로그램이 TCP/IP 네트워킹 서비스를 제공받을 수 있다는 의미.

각기 다른 하부 프로토콜 집합체와 한 집합체의 다른 프로토콜 스택에 대응하기 위해 여러 가지 형식의 소켓이 존재한다. 특히 TCP/IP의 두 가지 기본 소켓 타입은 "스트림 소켓(스트림 형태)""데이터그램 소켓(메시지 형태)"이다.

스트림 소켓은 종단 간 전송 프로토콜로 TCP를 사용하기에 종단 간 신뢰성 있는 바이트-스트림 전송 기능을 제공한다.

데이터그램 소켓은 UDP를 사용하게 되는데, 이러한 이유로 응용 프로그램이 전달할 수 있는 개별 메시지는 최대 크기가 65,500 바이트로 제한되며 비 신뢰적인 최선 전달 서비스를 제공하는 특징을 가진다.

스트림 소켓과 데이터그램 소켓은 기본적으로 IP에서 동작하지만 IP가 아닌 다른 프로토콜 집합체에서도 지원이 된다.

TCP/IP 소켓은 (1) IP 주소, (2) TCP 또는 UDP를 의미하는 종단 간 전송 프로토콜 종류 그리고 (3) 포트 번호에 의해 개별적으로 구분된다.

위 그림은 하나의 호스트 내에 존재하는 응용 프로그램, 추상화된 소켓, 프로토콜, 포트 번호 간의 논리적인 관계를 묘사하고 있다. 이 그림을 통해 아래와 같은 내용을 확인할 수 있다.

  1. 응용 프로그램은 사용중인 소켓을 동시에 여러 개 가질 수 있다.

  2. 흔한 경우는 아니지만 여러 개의 프로그램은 하나의 추상화된 소켓을 사용할 수 있다. 각 소켓은 TCP나 UDP 포트와 연관되어 있다. 이런 연관된 포트를 통해서 수신 중인 패킷을 올바른 응용 프로그램에 전달할 수 있게 되는 것이다.
    좀 더 정확히 말하자면 포트가 특정 호스트의 소켓을 구분한다 볼 수 있다.

0개의 댓글

관련 채용 정보