Unix/Linux의 맥락에서 "소켓"이라는 용어 이해

Unix/Linux의 맥락에서 "소켓"이라는 용어 이해

나는 "소켓"이라는 용어가 Unix/Linux 환경에서 두 가지 다른 의미를 가질 수 있다는 것을 알고 있습니다.

  • Unix 소켓; 2개 이상의 프로세스 사이의 인터페이스.
  • IP 소켓. 프로세스와 하나 이상의 통신 서비스(또는 기계) 사이의 인터페이스입니다.

일반적인 정의는 이 두 가지를 요약한 것입니까, 아니면 우리의 맥락에서 더 많은 "소켓"이 있습니까?

답변1

http://man7.org/linux/man-pages/man2/socket.2.html

int socket(int domain, int type, int protocol);

설명하다

socket() 통신 끝점을 만들고 끝점을 참조하는 파일 설명자를 반환합니다. 성공적인 호출에 의해 반환된 파일 설명자는 현재 프로세스에 대해 열려 있지 않은 가장 낮은 번호의 파일 설명자가 됩니다.

domain 매개변수는 통신 도메인을 지정하며 이는 통신에 사용될 프로토콜 계열을 선택합니다. 이러한 패밀리는 <sys/socket.h>에 정의되어 있습니다. 현재 이해되는 형식은 다음과 같습니다.

   Name                Purpose                          Man page
   AF_UNIX, AF_LOCAL   Local communication              unix(7)
   AF_INET             IPv4 Internet protocols          ip(7)
   AF_INET6            IPv6 Internet protocols          ipv6(7)
   AF_IPX              IPX - Novell protocols
   AF_NETLINK          Kernel user interface device     netlink(7)
   AF_X25              ITU-T X.25 / ISO-8208 protocol   x25(7)
   AF_AX25             Amateur radio AX.25 protocol
   AF_ATMPVC           Access to raw ATM PVCs
   AF_APPLETALK        AppleTalk                        ddp(7)
   AF_PACKET           Low level packet interface       packet(7)
   AF_ALG              Interface to kernel crypto API

...

위 목록은 포괄적이지 않습니다. 다른 것 중 하나는 AF_BLUETOOTH:-)입니다.

소켓은 호출 sendmsg()하고 recvmsg()열 수 있는 것입니다. 메시지는 소켓 주소로 전송되거나 소켓 주소에서 수신됩니다.

자세한 내용은 있지만 소켓 유형에 따라 다릅니다. 예를 들어-

SOCK_STREAM소켓은 실제로 메시지에 관심이 없습니다. 이는 Unix 파이프에 해당하는 양방향과 같은 바이트 스트림을 전송합니다. 아무것도 잃지 않고 사용 write()하고 전화할 수 있습니다. read()(소위 "대역 외" 데이터는 제외됩니다. 이는더 이상 사용되지 않음그리고 주로 사용됩니다 telnet. )

연결 지향 소켓 유형(포함)의 경우 SOCK_STREAM각 소켓은 하나의 피어 주소와만 데이터를 보내고 받을 수 있습니다. 고급 설정을 사용해야 합니다 connect(). 아니면 상대방이 bind()메시지를 받는 대신 받을 수 있는 특정 주소로 보내세요.소켓. 즉, 호출로 수신 대기를 시작한 listen()다음 accept()소켓을 반환하는 호출로 각 연결을 수신합니다.

유형은 SOCK_SEQPACKET연결 지향(신뢰할 수 있는 순차적 전달)으로 정의되지만 그렇지 않은 경우에는표준 내에서도 정의가 충돌합니다.. 그리고SCTP연결을 받을 수도 있습니다아니요accept()위에서 설명한 호출을 사용하세요 . 따라서 프로토콜을 사용하는 경우 SOCK_SEQPACKET그 의미에 대해 너무 많은 가정을 하지 마십시오. 사용 중인 특정 프로토콜 구현에 대한 정보를 찾으십시오.

관련 정보