유닉스 소켓과 TCP / IP 소켓의 차이점은 무엇입니까?


답변:


191

UNIX 소켓 동일한 시스템에서 실행되는 프로세스들 사이의 양방향 데이터 교환을 허용하는 프로세스 간 통신 메커니즘이다.

IP 소켓 (특히 TCP / IP 소켓)은 네트워크를 통해 프로세스 간 통신을 허용하는 메커니즘입니다. 경우에 따라 TCP / IP 소켓을 사용하여 루프백 인터페이스를 사용하여 동일한 컴퓨터에서 실행중인 프로세스와 통신 할 수 있습니다.

UNIX 도메인 소켓은 동일한 시스템에서 실행 중임을 알고 있으므로 라우팅과 같은 일부 검사 및 작업을 피할 수 있습니다. IP 소켓보다 빠르고 가볍습니다. 따라서 동일한 호스트의 프로세스와 통신하려는 경우 IP 소켓보다 더 나은 옵션입니다.

편집 : Nils에 따르면 Toedtmann의 의견 : UNIX 도메인 소켓은 파일 시스템 권한이 적용되며 TCP 소켓은 패킷 필터 수준에서만 제어 할 수 있습니다.


12
아마도 TCP 소켓은 UNIX 도메인 소켓에 파일 시스템 권한이 적용되지 않을 수도 있습니다. 결과적으로 TCP 소켓보다 UNIX 도메인 소켓에 액세스 할 수있는 사용자를 훨씬 쉽게 제어 할 수 있습니다.
Nils Toedtmann

@ pQd, Dude 유닉스 소켓 대신 유닉스 IPC라고 부를 수 있습니까?
Pacerier

4
@Pacerier Unix 소켓은 유닉스 IPC (공개 프로세스 간 메모리 공유)를 달성하는 한 가지 방법이므로 유닉스 소켓 unix IPC를 호출하는 것은 올바르지 않습니다.
fyquah95

TCP 소켓은 유닉스에서도 처리됩니까? TCP 소켓은 TCP 프로토콜 사양의 일부이거나 모든 프로토콜이 IP 소켓을 사용할 수 있습니까?
Federico

@Federico 나는 당신의 질문을 해결하기 위해 답변을 게시했습니다, 당신이 더 깊이 필요하면 새로운 질문을 게시하십시오.
피터 그린

28

다음 명령을 사용하여 자신의 머신 로컬 유닉스 소켓을 나열 할 수 있습니다.

netstat -a -p --unix

즐기세요!


9
Unix 소켓은 Windows에 없습니다. netstat그러나 Windows에서는 작동합니다.
Mark Tomlin

4
@apache, Windows에서 "명명 된 파이프"라고하는 유사한 것.
전문가

5
명명 된 파이프는 Linux에도 있습니다.
Sahil Singh

9
@expert, Windows의 명명 된 파이프는 Unix의 명명 된 파이프와 같습니다. 유닉스의 IPC 소켓은 Windows에서 동일하지 않습니다
Pacerier

2
Windows 10은 Unix 소켓을 지원합니다. 몇 가지 제한 사항이 있지만 사용 가능합니다 : blogs.msdn.microsoft.com/commandline/2017/12/19/…
Tyson

12

유닉스 소켓과 TCP / IP 소켓의 차이점은 무엇입니까?

TCP / IP 소켓은 TCP / IP 네트워크를 통한 통신에 사용됩니다. 연결된 TCP 소켓은 로컬 IP, 로컬 포트, 원격 IP 및 원격 포트의 조합으로 식별됩니다. 수신 TCP 소켓은 로컬 포트 ​​및 가능하면 로컬 IP로 식별됩니다. 클라이언트와 서버가 동일한 시스템에 있더라도 적어도 Linux TCP / IP 소켓의 AIUI는 항상 TCP / IP 패킷을 생성하고 디코딩합니다.

반면 유닉스 도메인 소켓 (때로는 유닉스 소켓으로 단축 됨)은 단일 머신에서 작동합니다. 청취 소켓은 파일 시스템 계층 구조에 있으며 파일 시스템 권한으로 액세스 할 수 있습니다.

또한 Unix 소켓에서 연결을 수락하는 프로세스는 연결하는 프로세스의 사용자 ID를 결정할 수 있습니다. 인증 단계가 필요하지 않습니다. 데이터베이스 서버의 비밀번호를 생성하고 웹 애플리케이션의 코드에 비밀번호 사본을 포함시키는 대신 웹 애플리케이션을 실행하는 사용자가 데이터베이스의 해당 사용자 계정에 액세스 할 수 있음을 데이터베이스 서버에 알릴 수 있습니다.


TCP 소켓은 유닉스에서도 처리됩니까?

물론이야

TCP 소켓은 TCP 프로토콜 사양의 일부입니다

인터넷 프로토콜 사양은 유선에서 발생하는 문제에만 영향을 미치며 TCP 사양에는 Socket 정의가 포함되어 있지만 해당 정의는 "sockets API"에서 용어가 사용되는 방식과 동일하지 않습니다.

우리가 알고있는 "소켓 API"는 BSD에 의해 소개되었지만 나중에 모든 곳에서 복사되었으며 posix 표준의 일부로 포함되었습니다. TCP 및 UDP 소켓의 기본 기능은 다른 플랫폼에서 거의 동일하지만 OS의 다른 부분과 상호 작용하는 고급 기능 및 기능은 다릅니다. 예를 들어 유닉스 계열 시스템에서 소켓은 파일 핸들로 식별되며 파일 API에 의해 읽히거나 쓰여질 수 있지만, Windows에서는 그렇지 않습니다.

소켓 API에 대한 일부 확장은 rfcs에 문서화되어 있지만 RFC는 "정보"일뿐입니다.

또는 모든 프로토콜이 IP 소켓을 사용할 수 있습니까?

응용 프로그램이 "소켓"기능을 사용하여 소켓을 명시 적으로 작성하면 (소켓도 accept 기능으로 작성 됨) "도메인", "유형"및 "프로토콜"의 세 매개 변수를 전달합니다. 이들 사이에서이 세 가지 매개 변수를 사용하여 다양한 유형의 소켓을 선택할 수 있습니다.

  • domain은 사용중인 프로토콜 / 주소 제품군을 선택합니다 (예 : ipv4의 경우 AF_INET, ipv6의 경우 AF_INET6, 유닉스 파일 시스템 경로의 경우 AF_Unix 등).
  • type은 통신 시맨틱을 선택합니다. 주요 의미는 데이터 그램 및 스트림이지만 더 특수한 유형도 있습니다.
  • 프로토콜은 사용할 프로토콜을 선택합니다. 프로토콜이 0으로 설정되면 도메인과 유형의 조합에 대한 기본 프로토콜이 사용됩니다.

"청취 소켓은 파일 시스템 계층에 존재하며 파일 시스템 권한에 의해 액세스 소켓을 제어 할 수 있습니다." 이것은 동일한 파일 시스템에 액세스 할 수있는 두 서버가 소켓을 통해 통신 할 수 있다는 것을 의미합니까?
user5359531

불행히도 AIUI는 아닙니다. superuser.com/questions/352263/…
피터 그린
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.