Pakiet Outline SDK opiera się na kilku podstawowych koncepcjach zdefiniowanych jako interfejsy interoperacyjne, które umożliwiają tworzenie kompozycji i łatwe ponowne wykorzystanie.
Połączenia
Połączenia umożliwiają komunikację między dwoma punktami końcowymi za pomocą abstrakcyjnego transportu. Istnieją 2 rodzaje połączeń:
transport.StreamConn
: połączenie oparte na strumieniu, takie jak TCP i typ gniazda PosixSOCK_STREAM
.transport.PacketConn
: połączenie oparte na datagramie, takie jak UDP i typ gniazda PosixSOCK_DGRAM
. Zamiast „Datagram” używamy „Packet”, ponieważ jest to konwencja w standardowej bibliotece Go.
Połączenia można opakować, aby utworzyć zagnieżdżone połączenia za pomocą nowego transportu.
Na przykład StreamConn
może być przesyłana przez TCP, TLS przez TCP, HTTP przez TLS przez TCP, QUIC itp.
Dialer
Dialery umożliwiają tworzenie połączeń z adresem hosta:portu, a także otaczają podstawowy protokół transportowy lub protokół proxy.
Typy StreamDialer
i PacketDialer
tworzą odpowiednio połączenia StreamConn
i PacketConn
z podanym adresem. Dialery mogą być też zagnieżdżone.
Na przykład dialer strumienia TLS może użyć dialera TCP, aby utworzyć StreamConn
z połączeniem TCP, a potem utworzyć StreamConn
TLS z połączeniem TCP StreamConn
. Dialer SOCKS5-over-TLS może użyć Dialer TLS, aby utworzyć połączenie TLS StreamConn
z serwerem proxy przed nawiązaniem połączenia SOCKS5 z adresem docelowym.
Resolvers
Rozwiązania (dns.Resolver
) umożliwiają udzielanie odpowiedzi na pytania DNS, a także otaczają algorytm lub protokół.
Rozwiązania te służą głównie do mapowania nazw domen na adresy IP.