~에서아푸에:
17.3 고유한 연결
서버가 준비할 수 있음고유한 UNIX 도메인 연결표준, 기능을 활용하여 고객에게 정보를
bind
제공합니다 . 클라이언트는 서버에 접속하는 데 사용됩니다. 서버에서 연결 요청을 수락한 후에는 클라이언트와 서버 사이에 고유한 연결이 존재합니다. 이것은 우리가 설명한 것과 같은 방식으로 작동합니다listen
accept
connect
인터넷 도메인 소켓그림 16.16과 16.17에 나와 있습니다.
내가 옳다면, 두 개의 인터넷 도메인 TCP 소켓 사이에는 최대 하나의 연결이 있을 수 있습니다..
두 개의 Unix 도메인 소켓 사이에 몇 개의 연결이 있을 수 있습니까?
최대 하나만 있을 수 있다면 왜 이 책에서는 두 개의 UNIX 도메인 소켓 간의 연결을 고유하게 만드는 데 섹션을 할애합니까?
감사해요.
답변1
나는 이 주제에 대한 Steffen Ullrich의 말을 좋아하는지 잘 모르겠습니다. 소켓은 매우 다양한 프로토콜과 함께 사용할 수 있는 일반적인 인터페이스이기 때문에 본질적으로 복잡합니다(참고 1 참조).
다양한 프로토콜을 요약하면 소켓 인터페이스는 다양한 프로토콜의 공통 특성을 식별합니다.
- 모든 프로토콜에는 일종의 주소 지정 메커니즘이 있어야 합니다. (참고 1 참조)
- 모든 데이터는 한 주소에서 다른 주소로 전송됩니다.
- 여기서는 두 가지 유형의 프로토콜을 논의하는 것이 유용합니다.
- 일부 프로토콜은 연결을 나타냅니다: SOCK_STREAM
- 일부 프로토콜은 일련의 메시지를 나타냅니다: SOCK_DGRAM
SOCK_STREAM 프로토콜은 일반적으로 SOCK_DGRAM 프로토콜과 매우 다릅니다. 그러나 각 그룹 내에서는 합의에 큰 차이가 없었습니다.
SOCK_STREAM
- 예: TCP
- 데이터는 중단 없이 긴 스트림으로 도착합니다.
- 데이터는 항상 전송된 순서대로 도착합니다.
연결 지향 프로토콜은 항상(?) 한 쌍의 소켓이며, 두 소켓 사이에 데이터가 전달됩니다.하나의연결하다. 연결 프로토콜은 일반적으로 새로운 연결 요청을 기다리는 것이 유일한 목적인 "수신" 소켓의 형태를 지원합니다.
연결 지향 소켓을 두 개의 전화기 사이에 선이 있는 것으로 생각하십시오.
호출되면 connect()
두 accept()
개의 바인딩된 소켓(연결 양쪽에 하나씩)을 사용하여 새 연결이 생성됩니다.
SOCK_DGRAM
- UDP 예
- 데이터는 연속 스트림으로 혼합되지 않고 전송된 것과 동일한 청크(메시지)로 도착합니다.
- 메시지가 순서대로 도착하지 않을 수 있습니다.
데이터그램 지향 프로토콜은 상당히 다릅니다. 소켓은 사서함과 비슷하게 구성하여 어디서나 메시지를 받을 수 있습니다. 연결될 필요는 없습니다. UDP의 경우 모든 패킷이 전송됩니다.도착하다올바른 IP 및 포트~에서모든 IP와 포트는 동일한 소켓으로 획득됩니다. 따라서 동일한 소켓을 통해 여러 다른 컴퓨터와 통신할 수 있습니다.
특별한 의미가 있어요connect()
SOCK_DGRAM 소켓에서.
소켓 sockfd가 SOCK_DGRAM 유형인 경우 addr은 데이터그램을 보내는 기본 주소이자 데이터그램을 받는 유일한 주소입니다.
이는 새로운 고유 연결을 생성하지 않습니다. 이는 다른 쪽 소켓이 아닌 소켓이 수신할 메시지를 제한할 뿐입니다.
이 sendto()
기능을 사용하면 프로그램이 메시지를 보내고 보내는 주소를 지정할 수 있습니다.
유닉스 도메인 소켓
인터넷 소켓(TCP 및 UDP)과 마찬가지로 두 가지 형태(SOCK_STREAM 및 SOCK_DGRAM)가 있습니다. 따라서 SOCK_STREAM 유닉스 소켓의 경우 소켓 쌍 사이에 연결이 하나만 있습니다. 그러나 SOCK_DGRAM 유닉스 소켓은 다릅니다(UDP가 TCP와 다른 것처럼).
참고 1: Unix 소켓은 기본 프로토콜이 없고 커널 구성이기 때문에 유행합니다. 커널은 주소 지정 메커니즘으로 자체 소켓 inode를 자유롭게 사용할 수 있습니다. mosvy가 지적했듯이, 이는 유닉스 소켓의 주소를 확인하려고 할 때 이상한 동작을 초래할 수 있습니다.
답변2
- 최대 1개입니다.
- 소켓 파일과 fifo 파일의 사용법을 구별합니다. 쓰기 위해 명명된 fifo를 열면 독자에 대한 고유한 연결이 생성되지 않습니다. (혹은 그 반대로도). 즉, 이는 섹션 15.5 "FIFO"와 대조하기 위해 수행됩니다.