C# SocketType

FGPRJS·2022년 5월 7일
0

다음 링크에서 설명하는 SocketType Enum에 대한 간략한 설명


Stream

데이터 중복이나 경계 유지 없이 신뢰성 있는 양방향 연결 기반의 바이트 스트림을 지원합니다. 이 종류의 Socket은 단일 피어와 통신하며 이 소켓을 사용할 경우 통신을 시작하기 전에 원격 호스트에 연결해야 합니다. Stream은 Transmission Control Protocol(ProtocolType.Tcp) 및 AddressFamily.InterNetwork 주소 패밀리를 사용합니다.

TCP 및 InterNetwork(IPv4)를 사용하는 스펙.
Byte Stream을 지원한다.

Byte Stream
네트워크에 한해서 Octet Stream(8비트 데이터라서 Octet)이라는 어느정도의 비슷한 뜻을 가진 동의어를 사용하기도 한다.
byte 단위로 이루어진 긴 Sequence이다.

여기서 주목할 점은 Byte Stream을 지원한다고 했지, 데이터 프레임 단위를 보장한다고는 안했다.
TCP가 취급하는 데이터 단위는 Byte이지, 데이터 프레임이 아니기 때문이다.
2개 이상의 프레임이 붙어서 나올 수도 있다(데이터가 2개 이상 붙어있을 수도 있음).
따라서 데이터를 정리하기 위해서는 응용레이어에서 데이터를 처리하는 과정을 수행해야 한다.
참고 링크 - TCP Packet concatenating


데이터그램

고정된 최대 길이(대개 작음)의 신뢰할 수 없고 연결 없는 메시지인 데이터그램을 지원합니다. 메시지가 손실되거나 중복될 수 있으며 메시지 순서가 잘못될 수도 있습니다. Socket 종류의 Dgram은 데이터를 보내고 받기 전에 연결하지 않고도 여러 피어와 통신할 수 있습니다. Dgram은 Datagram Protocol(ProtocolType.Udp)과 AddressFamily.InterNetwork 주소 패밀리를 사용합니다.

UDP와 InterNetwork(IPv4)를 사용하는 방식이다. 고정된 최대 길이를 갖는 데이터그램을 지원한다.
데이터를 원하는 단위로 하나씩(작은 크기) 보낸다는 장점이 있지만, 안에 있는 데이터가 손실될 가능성(다시 복구하지 않음)도 있고, 순서가 바뀔수도 있고 많은 것을 보장하지 않는다.
UDP특징상 존재하는건 체크섬정도밖에 없다.


Raw

내부 전송 프로토콜에 대한 액세스를 지원합니다. Raw를 사용하면 Internet Control Message Protocol(ProtocolType.Icmp) 및 Internet Group Management Protocol(ProtocolType.Igmp) 같은 프로토콜을 사용하여 통신할 수 있습니다. 애플리케이션은 전송 시 전체 IP 헤더를 제공해야 합니다. 받은 데이터그램은 변경되지 않은 IP 헤더 및 옵션과 함께 반환됩니다.

이 소켓 타입에 대한 정보는 갖고 있지 않음


RDM

연결 없고, 메시지 지향적이고, 신뢰성 있게 배달되는 메시지를 지원하고, 데이터 내의 메시지 경계를 유지합니다. RDM(Reliably Delivered Message) 메시지는 복제되지 않은 상태로 순서에 따라 도착합니다. 또한 메시지가 손실되면 보낸 사람에게 알립니다. Rdm을 사용하여 Socket을 초기화하면 데이터를 보내고 받기 전에 원격 호스트에 연결하지 않아도 됩니다. 또한 Rdm을 사용하면 여러 피어와 통신할 수 있습니다.

이 소켓 타입에 대한 정보는 갖고 있지 않음


SeqPacket

네트워크를 통해 연결 지향적이고, 양방향으로 신뢰성 있게 전송되며, 순서가 지정된 바이트 스트림을 제공합니다. Seqpacket은 데이터를 중복하지 않고 데이터 스트림 내의 경계를 유지합니다. Seqpacket 종류의 Socket은 단일 피어와 통신하며 통신을 시작하기 전에 원격 호스트에 연결해야 합니다.

연결 지향적이면서 신뢰성 있고, 데이터 중복 없이 데이터 스트림 내의 경계까지 유지하는 멋진 방식으로 보인다.
단점이 있다면 TCP/UDP에서 못쓴다는 것이다.
NetBIOS에서 사용되는 것인데, 이것은 Windows용이다. 따라서 보통 쓸 일이 없다.
관련 링크


profile
FGPRJS

0개의 댓글