Pakiet Outline SDK jest oparty na podstawowych koncepcjach zdefiniowanych jako interfejsy interoperacyjne, które zapewniają kompozycyjność i możliwość łatwego ponownego wykorzystania.
Połączenia
Połączenia umożliwiają komunikację między 2 punktami końcowymi przez abstrakcyjny transport. Dostępne są 2 typy połączeń:
transport.StreamConn
: połączenie strumieniowe, takie jak TCP i gniazdo POSIXSOCK_STREAM
.transport.PacketConn
: połączenie oparte na datagramach, takie jak UDP i gniazdo POSIXSOCK_DGRAM
. W dokumentacji używamy terminu „pakiet” zamiast „datagram”, ponieważ taka konwencja jest stosowana w standardowej bibliotece Go.
Połączenia można opakowywać w celu tworzenia. połączeń zagnieżdżonych w ramach nowego transportu.
Na przykład StreamConn
można realizować przez TCP, TLS-over-TCP, HTTP-over-TLS przez TCP, QUIC itd.
Dialery
Dialery umożliwiają tworzenie połączeń z adresami w formacie host:port przy jednoczesnej hermetyzacji podstawowego protokołu transportu lub proxy.
Typy StreamDialer
i PacketDialer
tworzą odpowiednio połączenia StreamConn
i PacketConn
z podanym adresem. Dialery można także zagnieżdżać.
Na przykład dialer strumienia TLS może użyć dialera TCP do utworzenia połączenia StreamConn
obsługiwanego przez połączenie TCP, a następnie utworzyć połączenie TLS StreamConn
obsługiwane przez połączenie TCP StreamConn
. Dialer SOCKS5 przez TLS może użyć dialera TLS do utworzenia połączenia TLS StreamConn
z serwerem proxy przed nawiązaniem połączenia SOCKS5 z adresem docelowym.
Resolvery
Resolvery (dns.Resolver
) umożliwiają odpowiadanie na zapytania DNS, jednocześnie hermetyzując podstawowy algorytm lub protokół.
Resolvery są używane głównie do mapowania nazw domen na adresy IP.