IT이야기

UNIX 도메인 STREAM과 DATAGRAM 소켓의 차이점

cyworld 2021. 10. 5. 21:21
반응형

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_STREAMSOCK_DGRAM소켓에서 데이터를 소비하는 의미이다.

스트림 소켓은 임의의 바이트 수를 읽을 수 있지만 여전히 바이트 시퀀스를 유지합니다. 즉, 발신자는 소켓에 4K의 데이터를 쓸 수 있고 수신자는 해당 데이터를 바이트 단위로 사용할 수 있습니다. 반대의 경우도 마찬가지입니다. 발신자는 소켓에 여러 개의 작은 메시지를 쓸 수 있으며, 이 소켓은 수신자가 한 번의 읽기로 소비할 수 있습니다. 스트림 소켓은 메시지 경계를 유지하지 않습니다.

반면에 데이터그램 소켓은 이러한 경계를 유지합니다. 발신자가 한 번 쓰기는 항상 수신자가 읽는 것과 일치합니다(수신자의 버퍼 가 해당 메시지에 주어 read(2)지거나 recv(2)그보다 작 더라도 ).

따라서 응용 프로그램 프로토콜에 메시지 크기에 대한 상한이 알려진 작은 메시지가 있는 경우 SOCK_DGRAM관리하기 쉽기 때문에 사용하는 것이 좋습니다 .

프로토콜이 임의의 긴 메시지 페이로드를 요청하거나 구조화되지 않은 스트림(예: 원시 오디오 또는 기타)인 SOCK_STREAM경우 필요한 버퍼링 을 선택 하고 수행합니다.

두 유형 모두 로컬 커널 내 메모리를 통과하기 때문에 성능은 동일해야 하며 버퍼 관리만 다릅니다.


주요 차이점은 하나라는 것이다 접속 기반 ( STREAM)와 다른 것은 접속리스 ( DGRAM스트림 패킷 통신 배향의 차이는 일반적으로 덜 중요 -).

으로 SOCK_STREAM당신은 여전히 즉, 모든 연결 처리를 얻을 listen/ accept와 연결이 다른면에 의해 폐쇄되어 있는지 확인할 수 있습니다.

SEQPACKET여전히 연결 지향이지만 메시지 경계를 유지 하는 소켓 유형 도 있습니다( 소켓 위에 메시지 지향 레이어를 구현하지 STREAM않아도 됨).

이러한 모든 유형에 대해 데이터 전송 성능이 유사할 것으로 예상합니다. 주요 차이점은 원하는 의미 체계입니다.


  1. 한 가지 가능한 차이점은 메시지 경계입니다. 데이터그램은 자연스러운 메시지 경계가 되는 데이터그램과 함께 전체적으로 전달됩니다. 스트림 소켓을 사용하면 N 바이트를 읽을 수 있으며 소켓은 N 바이트가 준비될 때까지 차단됩니다. 그러나 이것은 분명한 메시지 경계가 없음을 의미합니다.
  2. 아마도. TCP가 있는 스트림 소켓은 연결을 설정하기 위해 최소한 초기 3방향 핸드셰이크가 필요합니다. UDP 소켓은 그렇지 않습니다.
  3. 속도가 관심사라면 모든 것이 평등합니다. 도구이자 척도입니다. (나는 당신이 이미 TCP 스트림 소켓만이 신뢰할 수 있는 내장된 순차 전송을 제공하고 데이터그램 소켓만 여러 수신자 에게 보내는 데 사용할 수 있다는 것을 이미 알고 있다고 가정합니다 ).

클라이언트와 서버가 항상 같은 시스템에 있고 목표가 최소 대기 시간과 최대 대역폭을 갖는 것이라면 공유 메모리를 사용하십시오.

ReferenceURL : https://stackoverflow.com/questions/13953912/difference-between-unix-domain-stream-and-datagram-sockets

반응형