المفاهيم

يتّبع تصميم حزمة Outline SDK بعض المفاهيم الأساسية، فهو مبني على واجهات تعمل بشكل تفاعلي، ما يضمن سهولة دمجها وإعادة استخدامها.

الاتصالات

تتيح الاتصالات التواصل بين نقطتَي نهاية من خلال بروتوكولات نقل بسيطة. وهناك نوعان من الاتصالات:

  • transport.StreamConn: الاتصال المستنِد إلى البثّ مثل بروتوكول TCP ونوع المقبس SOCK_STREAM من Posix
  • transport.PacketConn: الاتصال المستندِ إلى مخططات نقل البيانات مثل بروتوكول UDP ونوع المقبس SOCK_DGRAM من Posix. ونحن نستخدم مصطلح "الحزمة" بدلاً من "مخطط نقل البيانات" لأنّه المصطلح المستخدَم في مكتبة لغة Go العادية.

يمكن تجميع الاتصالات لإنشاء اتصالات مُدمجة عبر بروتوكول نقل جديد. فعلى سبيل المثال، يمكن نقل StreamConn من خلال بروتوكول TCP، أو TLS عبر TCP، أو HTTP عبر TLS عبر TCP، أو بروتوكول QUIC، وغير ذلك من الخيارات الأخرى.

برامج الاتصال

تتيح برامج الاتصال إنشاء الاتصالات باستخدام عنوان من المضيف إلى المنفذ، بينما يتم تغليف بروتوكول النقل أو بروتوكول الخادم الوكيل الأساسي. وتُنشئ أنواع StreamDialer وPacketDialer اتصالات StreamConn وPacketConn، على التوالي، بالاستناد إلى أحد العناوين. ويمكن أن تكون برامج الاتصال مُدمجة، فعلى سبيل المثال، يمكن أن يستخدم "برنامج اتصال بثّ عبر بروتوكول أمان طبقة النقل (TLS)" برنامج اتصال TCP لإنشاء StreamConn استنادًا إلى اتصال TCP، ثم إنشاء StreamConn عبر TLS استنادًا إلى StreamConn عبر TCP. ويمكن أن يستخدم "برنامج اتصال SOCKS5 عبر بروتوكول TLS" "برنامج اتصال TLS" لإنشاء StreamConn عبر TLS مع الخادم الوكيل قبل أن يبدأ الاتصال SOCKS5 مع العنوان المطلوب.

برامج التعيين

تتيح برامج التعيين (dns.Resolver) إمكانية الردّ على طلبات نظام أسماء النطاقات، بينما يتم تغليف الخوارزمية أو البروتوكول الأساسي. وتُستخدم هذه البرامج بشكل رئيسي لتحويل أسماء النطاقات إلى عناوين IP.