Pojęcia

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 Posix SOCK_STREAM.
  • transport.PacketConn: połączenie oparte na datagramie, takie jak UDP i typ gniazda Posix SOCK_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 StreamDialerPacketDialer tworzą odpowiednio połączenia StreamConnPacketConn 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.