Network & Routing & LoadBalance/Network

Socket 이란? (TCP Socket 와 Unix Domain Socket)

서버엔지니어 2023. 9. 20.
728x90

Socket 

소켓(Socket)은 프로세스가 드넓은 네트워크 세계로 데이터를 내보내거나 혹은 그 세계로부터 데이터를 받기 위한 실제적인 창구 역할을 한다. 그러므로 프로세스가 데이터를 보내거나 받기 위해서는 반드시 소켓을 열어서 소켓에 데이터를 써보내거나 소켓으로부터 데이터를 읽어들여야 한다.

 

소켓은은 프로토콜, IP 주소, 포트 넘버로 정의된다.

* 프로토콜 (규약)
프로토콜은 원래 외교상의 언어로써 의례나 국가간에 약속을 의미하며, 통신에서는 어떤 시스템이 다른 시스템과 통신을 원활하게 수용하도록 해주는 통신 규약, 약속

* IP
전 세계 컴퓨터에 부여된 고유의 식별 주소

* 포트
포트(Port)는 네트워크 상에서 통신하기 위해서 호스트 내부적으로 프로세스가 할당받아야 하는 고유한 숫자이다. 한 호스트 내에서 네트워크 통신을 하고 있는 프로세스를 식별하기 위해 사용되는 값이므로, 같은 호스트 내에서 서로 다른 프로세스가 같은 포트 넘버를 가질 수 없다. 즉, 같은 컴퓨터 내에서 프로그램을 식별하는 번호이다.

 

 

 보통 프로그램끼리 통신을 할때 2가지 방식으로 통신하게 됩니다.

 

TCP/IP (Transmission Control Protocol / Internet Protocol)

UDS (Unix Domain Socket) or IPS (Inter-process Communication)

 

TCP/IP

 

Transmission Control Protocol/Internet Protocol의 약자입니다.이 소켓들은 두 컴퓨터 사이의 통신을 용이하게 합니다.따라서 소켓은 IP 주소와 기계가 데이터를 전송하는 데 사용하는 포트 번호로 구성됩니다.실제로 데이터를 전송하는 모든 애플리케이션은 소켓을 사용하여 데이터를 주고 받습니다.
특히 TCP/IP는 스트림 소켓, 데이터그램 소켓, 원시 소켓의 세 가지 유형의 소켓을 지원합니다.

 

스트림 소켓
스트림 소켓은 TCP/IP를 통해 가장 일반적으로 사용되는 통신 전송 프로토콜 유형입니다.또한 이러한 소켓은 두 엔드포인트 사이에 안정적이고 거의 오류가 없는 데이터 파이프를 제공합니다.또한, 데이터 파이프는 양방향일 수 있습니다.두 엔드포인트 모두 소켓을 통해 송수신합니다.
게다가 스트림 소켓은 순서화된 데이터와 중복되지 않은 데이터를 전달하는 데도 사용됩니다.이것은 패킷이 전송되는 순서대로 전송되고 컴퓨터가 특정 패킷을 한 번만 수신한다는 것을 의미합니다.

그러나 패킷이 물리적 네트워크에 정상적으로 도착하지 않으면 네트워크 어댑터와 호스트 운영 체제는 애플리케이션에서 처리하기 위해 올바른 순서로 패킷이 조립되어 있는지 확인합니다.

예를 들어 스트림 소켓의 사용 사례는 포트 80의 HTTP 요청을 처리하는 Apache와 같은 웹 서버입니다.HTTP의 경우 소켓 주소는 23.227.38.65:80과 유사합니다..

 

데이터그램 소켓
데이터그램 소켓은 연결이 없는 서비스를 정의합니다.실제로 이러한 소켓은 데이터를 캡슐화하고 전송하기 위해 UDP(User Dataagram Protocol)를 사용합니다.패킷은 독립적으로 전송되며, 보장은 없습니다.즉, 패킷이 분실되거나 중복되거나 정상적으로 도착할 수 있습니다.

또한 패킷의 크기는 한 번의 트랜잭션으로 전송할 수 있는 크기로 제한됩니다.데이터그램 소켓에는 패킷 분해나 어셈블리가 없습니다.데이터를 성공적으로 전송하려면 데이터그램 소켓을 사용하는 응용 프로그램에 자체 오류 처리 및 데이터 순서 논리가 있어야 합니다.

예를 들어 DNS(Domain Name System) 서버는 도메인 이름 요청을 주고 받기 위해 사용자 데이터그램 프로토콜을 사용합니다.DNS 서버의 기본 포트는 53이므로 소켓 주소는 23.227.38.65:53과 비슷합니다.


원 소켓
원시 소켓은 컴퓨터의 소프트웨어 응용 프로그램이 컴퓨터의 기본 운영 체제를 사용하지 않고 네트워크에서 패킷을 주고받을 수 있도록 하는 네트워크 소켓의 한 종류입니다.원시 소켓은 일반 TCP/IP 처리 시스템을 무시하고 특정 사용자 응용 프로그램에 패킷을 전송합니다.

또한 원시 소켓을 사용하면 응용 프로그램이 IP(Internet Protocol)와 같은 하위 프로토콜에 직접 액세스할 수 있습니다.로우 소켓은 하위 프로토콜에 직접 액세스할 수 있을 뿐만 아니라 추출되지 않은 패킷도 수신합니다.따라서 원시 소켓은 새로운 프로토콜 구현을 테스트하는 데 주로 사용됩니다.

 

UDS

IPC(Inter-process Communication) 소켓이라고도 하는 유닉스 소켓은 동일한 컴퓨터에서 실행되는 프로세스 간에 양방향 데이터 교환을 허용하는 데이터 통신 엔드포인트입니다.

이러한 소켓은 스트림 기반 또는 데이터그램 기반일 수 있습니다.또한 이러한 소켓은 파일 시스템 상의 파일을 통해 운영 체제의 커널에 있는 프로세스 간에 직접 데이터를 교환합니다.데이터를 주고 받기 위해 공유 소켓 파일에 읽기 및 쓰기를 처리합니다.

마지막으로 유닉스 소켓은 네트워크 인터페이스에 연결할 필요가 없는 데이터베이스 시스템에서 널리 사용됩니다.예를 들어 Ubuntu에서 MySQL은 기본적으로 로컬 클라이언트와의 통신에 /var/run/mysql/mysql.sock을 사용합니다.

 

유닉스 소켓 vs.TCP/IP 소켓

유닉스 소켓과 TCP/IP 소켓의 차이점을 살펴보겠습니다.

전체 이름 유닉스 소켓은 IPC(Inter-process Communication) 소켓이라고도 합니다. TCP/IP는 전송제어 프로토콜/인터넷 프로토콜을 의미합니다.
기능성 Unix 소켓은 동일한 컴퓨터에서 실행되는 프로세스 간의 통신에 사용됩니다. TCP/IP 소켓은 다른 컴퓨터에서 실행되는 프로그램에 사용됩니다.
요구 사항들 프로세스가 통신하기 위해 호스트 이름과 포트 번호가 필요 없습니다. TCP/IP 소켓을 사용하여 프로그램과 통신하기 위한 호스트 이름과 포트 번호가 필요합니다.
스피드 프로세스가 동일한 시스템에서 실행되기 때문에 유닉스 소켓 연결이 빠르며, 일부 검사 및 작업을 피할 수 있습니다. 유닉스 소켓에 비해 TCP/IP 연결 속도가 느림

 

댓글