Основные понятия

Outline SDK основан на ряде базовых концепций, реализованных в виде совместимых интерфейсов, которые можно комбинировать и легко использовать повторно.

Подключения

Подключения обеспечивают связь между двумя конечными точками через абстрактный протокол. Существует два типа подключений:

  • transport.StreamConn: потоковое подключение, например TCP и тип сокета POSIX SOCK_STREAM.
  • transport.PacketConn: подключение на основе датаграммы, например UDP и тип сокета Posix SOCK_DGRAM. Мы используем Packet вместо Datagram, поскольку так принято в стандартной библиотеке Go.

Подключения можно упаковывать, создавая вложенные подключения через новые протоколы. Например, StreamConn может работать поверх TCP, поверх TLS поверх TCP, поверх HTTP поверх TLS поверх TCP, поверх QUIC и других вариантов.

Дайлеры

Дайлеры позволяют создавать подключения по адресу вида host:port, при этом инкапсулируя используемый транспортный или прокси-протокол. Типы StreamDialer и PacketDialer создают подключения StreamConn и PacketConn исходя из заданного адреса. Дайлеры также могут быть вложенными. Например, дайлер TLS Stream может использовать дайлер TCP, чтобы создать StreamConn на основе TCP-подключения, а затем создать TLS StreamConn на основе TCP StreamConn. Дайлер типа SOCKS5-over-TLS может использовать дайлер TLS, чтобы установить TLS-подключение StreamConn с прокси-сервером перед выполнением SOCKS5-подключения к целевому адресу.

Резолверы

Резолверы (dns.Resolver) позволяют отвечать на DNS-запросы, инкапсулируя реализацию алгоритма или протокола. В первую очередь они используются для сопоставления доменных имен с IP-адресами.