Unix 도메인 소켓과 네트워크 소켓의 차이점은 무엇입니까?

Unix 도메인 소켓과 네트워크 소켓의 차이점은 무엇입니까?

내가 맞나요?

  • 두 프로세스가 네트워크 소켓을 통해 통신할 때 각 프로세스는 소켓을 생성하고(각 소켓은 프로세스에 속함) 프로세스는 각자의 소켓을 통해 통신합니다.

  • 두 프로세스가 Unix 도메인 소켓을 통해 통신할 때 하나의 소켓만 생성되고(어떤 프로세스에도 속하지 않음) 두 프로세스 모두 동일한 소켓에 연결됩니까?

답변1

여기서 두 가지를 혼동하고 있습니다.

소켓은 프로그램이 파일처럼 네트워크 연결을 사용할 수 있도록 프로그램에 부여되는 파일 설명자(핸들)입니다. 소켓 API는 프로토콜에 구애받지 않습니다. 소켓은 IPv4 연결 또는 IPv6 연결을 위해 생성될 수 있지만 (커널에서 지원하는 경우) DECnet, AppleTalk 또는 이더넷 읽기 등을 위해 생성될 수도 있습니다.

소켓 API는 상당히 사용하기 쉽지만 실제 네트워크 프로토콜을 사용하여 동일한 컴퓨터의 프로세스와 통신하는 것은 매우 비효율적이기 때문에 어느 시점에서는 소켓 API를 사용할 수 있도록 UNIX 도메인 소켓이 생성되어 비효율성은 없을 것입니다. . 또한 UNIX 도메인 소켓을 통해 파일 설명자를 다른 프로세스에 전달하는 기능과 같은 몇 가지 추가 기능을 추가합니다.

UNIX 도메인 소켓을 사용하는 경우 두 프로세스 모두 연결의 각 측면에 대해 하나씩 여전히 소켓을 보유합니다. 초기 연결 설정을 제외하면 소켓 사용법은 IPv4 소켓과 다르지 않습니다.

소켓 API가 없으면 주소가 없으면 통신할 주소를 전달하지 않고는 소켓을 생성할 수 없으며 이는 UNIX 도메인 소켓의 경우에도 다르지 않습니다. UNIX이고 어쨌든 모든 것이 파일이므로 이러한 주소를 파일 이름처럼 보이게 하기로 결정했습니다. 이제 그 작업을 마쳤으므로 쉽게 검색할 수 있도록 이러한 주소를 파일 시스템에 두는 것이 합리적입니다.

안타깝게도 파일 시스템에 있는 이러한 항목의 이름은 다음과 같습니다.반품"UNIX 도메인 소켓"(또는 적어도 사람들이 그렇게 부르기 시작한 것입니다). 그들은 그렇지 않다실제그러나 소켓 API 의미의 소켓은 숫자일 뿐이므로 불가능합니다. 따라서 IPv4 소켓의 해당 번호는 해당 번호가 아니라 대화 중인 피어의 IP 주소 및 포트 번호입니다.

때로는 소켓 API가 파일을 직접 처리하지 않기 때문에 이러한 파일 시스템 표현이 꼭 필요한 것은 아니라는 점을 덧붙일 것입니다. 실제로 Linux에는 "익명 UNIX 도메인 소켓"이라는 개념이 있습니다. 즉, 파일 시스템에 링크가 없는 UNIX 도메인 소켓...

관련 정보