Das Outline SDK basiert auf einigen grundlegenden Konzepten, die als interoperable Schnittstellen definiert sind, die eine Kombination und einfache Wiederverwendung ermöglichen.
Verbindungen
Verbindungen ermöglichen die Kommunikation zwischen zwei Endpunkten über einen abstrakten Transport. Es gibt zwei Arten von Verbindungen:
transport.StreamConn
: streambasierte Verbindungen wie TCP und denSOCK_STREAM
Posix Socket-Typ.transport.PacketConn
: datagram-basierte Verbindungen wie UDP und denSOCK_DGRAM
Posix Socket-Typ. Wir verwenden „Packet“ anstelle von „Datagram“, weil dies die Konvention in der Go-Standard-Bibliothek ist.
Verbindungen können zusammengefasst werden, um verschachtelte Verbindungen über eine neue Transportmethode zu erstellen.
Eine StreamConn
könnte z. B. per TCP, per TLS über TCP, per HTTP über TLS über TCP, per QUIC und andere Optionen erfolgen.
Dialer
Dialer ermöglichen den Aufbau von Verbindungen mit einer Host:Port-Adresse, wobei sie das zugrunde liegende Transport- oder Proxy-Protokoll kapseln.
Die StreamDialer
- und PacketDialer
-Typen erstellen StreamConn
- und PacketConn
-Verbindungen mit jeweils einer Adresse. Dialer können auch verschachtelt werden.
Ein TLS-Stream-Dialer kann z. B. einen TCP-Dialer zum Erstellen einer StreamConn
verwenden, der mit einer TCP-Verbindung gesichert ist. Anschließend kann er eine TLS-StreamConn
erstellen, die von der TCP-StreamConn
gesichert wird. Ein SOCKS5-over-TLS-Dialer kann den TLS-Dialer zum Erstellen der TLS-StreamConn
zum Proxy verwenden, bevor er die SOCKS5-Verbindung zur Zieladresse herstellt.
Resolver
Resolver (dns.Resolver
) ermöglichen die Beantwortung von DNS-Fragen, während sie den zugrunde liegenden Algorithmus oder das Protokoll kapseln.
Resolver werden hauptsächlich zur Zuordnung von Domainnamen zu IP-Adressen verwendet.