UNIX 도메인 STREAM과 DATAGRAM 소켓의 차이점은 무엇입니까?
이 질문은 STREAM 유형과 DATAGRAM 유형 INTERNET 소켓의 차이점에 대한 것이 아닙니다 . STREAM 소켓은 TCP를 사용하고 Datagram 소켓은 UDP 및 모든 TCP, UDP 항목, 순서대로 도착하는 패킷, ACK, NACK 등을 사용한다는 것을 알고 있습니다. 인터넷을 통한 이러한 요소의 중요성을 이해합니다.
Q1) 로컬 소켓인 UNIX 도메인 소켓을 생성할 때 소켓이 STREAM 소켓인지 DATAGRAM 소켓인지는 어떻게 됩니까? 이 유형의 소켓은 데이터를 소켓 파일에 기록합니다. 이 경우 네트워크를 통해 데이터를 전송하지 않기 때문에 프로토콜이 문제가 될까요? UNIX 기반 DATAGRAM 소켓을 사용하는 경우 이 경우 데이터 손실 가능성이 있습니까?
Q2) UNIX DATAGRAM 소켓은 UNIX STREAM 소켓보다 더 나은 성능을 제공합니까?
Q3) 내 애플리케이션에서 STREAM/DATAGRAM UNIX 기반 소켓을 결정하는 방법은 무엇입니까?
감사 해요
방금으로 매뉴얼 페이지는 말한다 유닉스 소켓은 항상 신뢰할 수 있습니다. 차이 SOCK_STREAM
와 SOCK_DGRAM
소켓에서 데이터를 소비하는 의미이다.
스트림 소켓은 임의의 바이트 수를 읽을 수 있지만 여전히 바이트 시퀀스를 유지합니다. 즉, 발신자는 소켓에 4K의 데이터를 쓸 수 있고 수신자는 해당 데이터를 바이트 단위로 사용할 수 있습니다. 반대의 경우도 마찬가지입니다. 발신자는 소켓에 여러 개의 작은 메시지를 쓸 수 있으며, 이 소켓은 수신자가 한 번의 읽기로 소비할 수 있습니다. 스트림 소켓은 메시지 경계를 유지하지 않습니다.
반면에 데이터그램 소켓은 이러한 경계를 유지합니다. 발신자가 한 번 쓰기는 항상 수신자가 읽는 것과 일치합니다(수신자의 버퍼 가 해당 메시지에 주어 read(2)
지거나 recv(2)
그보다 작 더라도 ).
따라서 응용 프로그램 프로토콜에 메시지 크기에 대한 상한이 알려진 작은 메시지가 있는 경우 SOCK_DGRAM
관리하기 쉽기 때문에 사용하는 것이 좋습니다 .
프로토콜이 임의의 긴 메시지 페이로드를 요청하거나 구조화되지 않은 스트림(예: 원시 오디오 또는 기타)인 SOCK_STREAM
경우 필요한 버퍼링 을 선택 하고 수행합니다.
두 유형 모두 로컬 커널 내 메모리를 통과하기 때문에 성능은 동일해야 하며 버퍼 관리만 다릅니다.
주요 차이점은 하나라는 것이다 접속 기반 ( STREAM
)와 다른 것은 접속리스 ( DGRAM
스트림 패킷 통신 배향의 차이는 일반적으로 덜 중요 -).
으로 SOCK_STREAM
당신은 여전히 즉, 모든 연결 처리를 얻을 listen
/ accept
와 연결이 다른면에 의해 폐쇄되어 있는지 확인할 수 있습니다.
SEQPACKET
여전히 연결 지향이지만 메시지 경계를 유지 하는 소켓 유형 도 있습니다( 소켓 위에 메시지 지향 레이어를 구현하지 STREAM
않아도 됨).
이러한 모든 유형에 대해 데이터 전송 성능이 유사할 것으로 예상합니다. 주요 차이점은 원하는 의미 체계입니다.
- 한 가지 가능한 차이점은 메시지 경계입니다. 데이터그램은 자연스러운 메시지 경계가 되는 데이터그램과 함께 전체적으로 전달됩니다. 스트림 소켓을 사용하면 N 바이트를 읽을 수 있으며 소켓은 N 바이트가 준비될 때까지 차단됩니다. 그러나 이것은 분명한 메시지 경계가 없음을 의미합니다.
- 아마도. TCP가 있는 스트림 소켓은 연결을 설정하기 위해 최소한 초기 3방향 핸드셰이크가 필요합니다. UDP 소켓은 그렇지 않습니다.
- 속도가 관심사라면 모든 것이 평등합니다. 도구이자 척도입니다. (나는 당신이 이미 TCP 스트림 소켓만이 신뢰할 수 있는 내장된 순차 전송을 제공하고 데이터그램 소켓만 여러 수신자 에게 보내는 데 사용할 수 있다는 것을 이미 알고 있다고 가정합니다 ).
클라이언트와 서버가 항상 같은 시스템에 있고 목표가 최소 대기 시간과 최대 대역폭을 갖는 것이라면 공유 메모리를 사용하십시오.
ReferenceURL : https://stackoverflow.com/questions/13953912/difference-between-unix-domain-stream-and-datagram-sockets
'IT이야기' 카테고리의 다른 글
OpenMP와 파이썬 (0) | 2021.10.05 |
---|---|
함수에서 전역 가져오기를 수행하는 방법 (0) | 2021.10.05 |
Elasticsearch 노드 다시 시작 (0) | 2021.10.05 |
C에서 서명되지 않은 문자를 인쇄하는 방법 (0) | 2021.10.05 |
numpy 값이 true인 인덱스 가져오기 (0) | 2021.10.05 |