Ý tưởng

SDK Outline được xây dựng dựa trên một số khái niệm cơ bản, được xác định là các giao diện có thể tương tác cho phép kết hợp và dễ dàng sử dụng lại.

Kết nối

Kết nối cho phép giao tiếp giữa hai điểm cuối qua một phương thức truyền tải trừu tượng. Có hai loại kết nối:

  • transport.StreamConn: kết nối dựa trên luồng, như TCP và loại ổ cắm Posix SOCK_STREAM.
  • transport.PacketConn: kết nối dựa trên datagram, chẳng hạn như UDP và loại ổ cắm Posix SOCK_DGRAM. Chúng ta sử dụng "Gói" thay vì "Gói dữ liệu" vì đó là quy ước trong thư viện tiêu chuẩn Go.

Bạn có thể gói các kết nối để tạo các kết nối lồng nhau qua một phương thức truyền tải mới. Ví dụ: StreamConn có thể qua TCP, qua TLS qua TCP, qua HTTP qua TLS qua TCP, qua QUIC, cùng với các tuỳ chọn khác.

Trình quay số

Trình quay số cho phép tạo kết nối khi có địa chỉ máy chủ:cổng trong khi đóng gói giao thức proxy hoặc truyền tải cơ bản. Các loại StreamDialerPacketDialer tạo các kết nối StreamConnPacketConn tương ứng, với một địa chỉ. Bạn cũng có thể lồng các trình quay số. Ví dụ: Trình quay số luồng TLS có thể sử dụng trình quay số TCP để tạo StreamConn được kết nối TCP hỗ trợ, sau đó tạo StreamConn TLS được StreamConn TCP hỗ trợ. Trình quay số SOCKS5 qua TLS có thể sử dụng Trình quay số TLS để tạo StreamConn TLS cho proxy trước khi thực hiện kết nối SOCKS5 đến địa chỉ mục tiêu.

Trình phân giải

Trình phân giải (dns.Resolver) cho phép trả lời các câu hỏi về DNS trong khi đóng gói thuật toán hoặc giao thức cơ bản. Trình phân giải chủ yếu dùng để liên kết tên miền với địa chỉ IP.