RTCQuicTransport تأتي في فترة تجريبية للمصدر بالقرب منك (Chrome 73)

ماذا؟

RTCQuicTransport هو نظام أساسي جديد على الويب. واجهة برمجة تطبيقات تسمح بتبادل البيانات العشوائية مع التطبيقات المشابهة عن بُعد باستخدام بروتوكول QUIC والبروتوكول. إنّها مخصّصة لحالات الاستخدام من خلال شبكة الند للند، وبالتالي يتم استخدامها مع برنامج مستقل لـ RTCIceTransport واجهة برمجة التطبيقات لإنشاء اتصال نظير إلى نظير من خلال ICE يتم نقل البيانات بشكل موثوق وبالترتيب (راجِع القسم أدناه). للحصول على تفاصيل حول الطلبات تسليم غير موثوق به). نظرًا لأنها عامة، لنقل البيانات ثنائي الاتجاه، فيمكن استخدامها للألعاب، ونقل الملفات، نقل الوسائط والمراسلة وما إلى ذلك

لماذا؟

يمكن استخدام واجهة برمجة تطبيقات قوية منخفضة المستوى لنقل البيانات من أجل تفعيل التطبيقات (مثل الوقت الفعلي). الاتصالات) لإجراء أشياء جديدة على الويب. يمكنك الاعتماد على واجهة برمجة التطبيقات، إنشاء الحلول الخاصة بك، وتجاوز حدود ما يمكن القيام به مع الزملاء اتصالات التطبيقات المشابهة، مثل فتح المقابض المخصّصة لتخصيص معدل نقل البيانات ضِمن في المستقبل، فقد يتيح الدعم الإضافي للوسائط المشفرة إنشاء تطبيق اتصالات فيديو مع عناصر تحكم منخفضة المستوى. جهد WebRTC المتعلّق بالعناصر هو الانتقال إلى واجهات برمجة تطبيقات ذات مستوى أدنى، وتجربة ذلك في وقت مبكر قيّمة.

مزايا استخدام QUIC

بروتوكول QUIC مرغوب فيه للاتصالات في الوقت الفعلي. يتم إنشاؤه في الأعلى من بروتوكول UDP، ويتضمن تشفيرًا ومراقبة تكدس البيانات ويتم مضاعفة الإرسال بدون حظر الخط. تعطي RTCQuicTransport إمكانيات مماثلة إلى حد كبير RTCDataChannel API، ولكنها تستخدم QUIC بدلاً من SCTP كطريقة نقل والبروتوكول. بما أنّ RTCQuicTransport هي واجهة برمجة تطبيقات مستقلة، لا تتضمّن في الوقت الفعلي لواجهة برمجة تطبيقات RTCPeerConnection، التي تتضمن الوسائط في الوقت الفعلي حزمة.

الطريقة

نظرة عامة على واجهة برمجة التطبيقات

تتضمّن واجهة برمجة التطبيقات 3 تجريدات رئيسية، هي RTCIceTransport وRTCQuicTransport. وRTCQuicStream.

مخطّط RTCQuicTransport يُظهر بنية واجهة برمجة التطبيقات

RTCIceTransport

ICE هو بروتوكول لإنشاء اتصالات من نظير إلى نظير عبر الإنترنت في WebRTC اليوم. يوفّر هذا العنصر واجهة برمجة تطبيقات مستقلّة لإنشاء باتصال ICE. يُستخدم كنقل حزم لاتصال QUIC، وتأخذه RTCQuicTransport في الدالة الإنشائية.

RTCQuicTransport

يمثل اتصال QUIC. وتُستخدم لإنشاء اتصال QUIC لإنشاء ساحات مشاركات QUIC. وتعرض أيضًا الإحصاءات ذات الصلة باتصال QUIC المستوى.

RTCQuicStream

يُستخدم لقراءة البيانات وكتابتها من/إلى الجانب البعيد. نقل مصادر البيانات البيانات بشكل موثوق وبالترتيب. يمكن إنشاء أحداث بث متعددة من الملف نفسه. RTCQuicTransport وبعد كتابة البيانات إلى مصدر بيانات، يتم تنشيط حدث onquicstream في وسائل النقل عن بُعد توفر ساحات المشاركات وسيلة لتمييز البيانات المختلفة على نفس اتصال QUIC. يمكن أن تتضمن الأمثلة الشائعة ونرسل ملفات منفصلة عبر مصادر منفصلة، أي أجزاء صغيرة من البيانات أو مجموعات بث مختلفة أو أنواعًا مختلفة من الوسائط في مجموعات بث منفصلة. تتميز RTCQuicStream بخفة الوزن، ويتم مضاعفتها باستخدام اتصال QUIC. لن تتسبّب في حظر رأس السطر على رموز RTCQuicStream الأخرى.

إعداد الربط

فيما يلي مثال لإعداد اتصال QUIC من نظير إلى نظير. وكما هي الحال في RTCPeerConnection، تتطلب واجهة برمجة التطبيقات RTCQuicTransport استخدام قناة إشارة آمنة للتفاوض على معلمات الاتصال، بما في ذلك معايير الأمان الخاصة به. تتفاوض "RTCIceTransport" مع ICE. (ufrag وكلمة المرور)، بالإضافة إلى RTCIceCandidate.

مخطّط RTCQuicTransport يُظهر بنية واجهة برمجة التطبيقات

منظور العميل:

const iceTransport = new RTCIceTransport();
const quicTransport = new RTCQuicTransport(iceTransport);
// Signal parameters, key and candidates.
signalingChannel.send({
  iceParams: iceTransport.getLocalParameters(),
  quicKey: quicTransport.getKey(),
});
iceTransport.onicecandidate = e => {
  if (e.candidate) {
    signalingChannel.send({candidate: e.candidate});
  }
};

// When remote parameters are signaled, start connection.
signalingChannel.onMessage = async ({iceParams, candidate}) => {
  if (iceParams) {
    iceTransport.start(iceParams);
    quicTransport.connect();
  } else if (candidate) {
    iceTransport.addRemoteCandidate(candidate);
  }
};

منظور الخادم:

const iceTransport = new RTCIceTransport();
const quicTransport = new RTCQuicTransport(iceTransport);
// Signal parameters, key and candidates.
signalingChannel.send({
  iceParams: iceTransport.getLocalParameters(),
});
iceTransport.onicecandidate = e => {
  if (e.candidate) {
    signalingChannel.send({candidate: e.candidate});
  }
};

// When remote parameters are signaled, start connection.
signalingChannel.onMessage = async ({iceParams, quicKey, candidate}) => {
  if (iceParams && quicKey) {
    iceTransport.start(iceParams);
    quicTransport.listen(quicKey);
  } else if (candidate) {
    iceTransport.addRemoteCandidate(candidate);
  }
};

نقل البيانات

يمكن نقل البيانات باستخدام واجهات برمجة تطبيقات RTCQuicStream للقراءة الكتابة:

RTCQuicStreamReadResult readInto(Uint8Array data);
void write(RTCQuicStreamWriteParameters data);
Promise<void> waitForWriteBufferedAmountBelow(unsigned long amount);
Promise<void> waitForReadable(unsigned long amount);

جارٍ التخزين المؤقت…

تسمح الوعود التي تعرضها طرق waitFor* بتخزين البيانات مؤقتًا في حال لغة JavaScript مشغولة. يتم تطبيق ضغط الرجوع على جانب الإرسال عند يصبح المخزن المؤقت للقراءة ممتلئًا على جانب الاستلام. جانب الإرسال يحتوي على كتابة المخزن المؤقت الذي يمكن أن يملأ عند تطبيق الضغط الخلفي، وبالتالي فإن جانب الكتابة لديه طريقة waitForWriteBufferedAmountBelow أيضًا ترك مساحة في المورد الاحتياطي للكتابة. مزيد من المعلومات على يمكن العثور على بيانات الكتابة/القراءة في مطور برامج المستندات.

تسليم غير مرتب أو غير موثوق به

لا تتيح RTCQuicStream إرسال البيانات إلا بشكل موثوق وبالترتيب. يمكن تحقيق التسليم غير الموثوق/غير المطلوب من خلال وسائل أخرى. بالنسبة تسليم غير مرتب، يمكن للمرء إرسال مجموعات صغيرة من البيانات على مصادر منفصلة لأنه لا يتم ترتيب البيانات بين مصادر البيانات. للتسليم غير الموثوق به، واحد إرسال مجموعات صغيرة من البيانات مع تعيين النهاية على "صواب"، يليها استدعاء reset() للبث بعد انتهاء المهلة. ويجب أن تعتمد المهلة على عدد عمليات إعادة الإرسال المطلوبة قبل إسقاط البيانات.

الموعد؟

ستبدأ مرحلة التجربة والتقييم في الإصدار Chrome 73، وستكون متاحة. بما في ذلك الإصدار M75. بعد ذلك، ستبدأ مرحلة التجربة والتقييم النهاية. سنُجري التغييرات المناسبة بناءً على الملاحظات والآراء المقدَّمة لدينا. وإما شحن واجهة برمجة التطبيقات أو المتابعة باستخدام مرحلة تجريبية جديدة لواجهة برمجة التطبيقات هذه إيقاف واجهة برمجة التطبيقات.

أين؟

متصفّح Chrome في جميع الأنظمة الأساسية باستثناء iOS.

وماذا أيضًا؟

ملاحظات

إنّ أحد الأهداف الرئيسية لمرحلة التجربة والتقييم هو الحصول على ملاحظات منك المطورين. نهتم بما يلي:

  • ما الذي توفِّره واجهة برمجة التطبيقات هذه لك؟
  • كيف تحسّن واجهة برمجة التطبيقات هذه أداء واجهات برمجة التطبيقات الأخرى لنقل البيانات؟ (WebSocket أو RTCDataChannel في WebRTC)؟ كيف يمكن تحسينها؟
  • الأداء
  • هندسة واجهة برمجة التطبيقات

التسجيل في مرحلة التجربة والتقييم

  1. اطلب رمزًا مميّزًا من المصدر.
  2. أضف الرمز المميز إلى صفحاتك، وهناك طريقتان لتقديم هذا الرمز على أي صفحات في المصدر:
    • أضِف العلامة <meta> لبرامج origin-trial إلى رأس أيّ صفحة. على سبيل المثال: قد يبدو هذا شيئًا مثل: <meta http-equiv="origin-trial" content="TOKEN_GOES_HERE">
    • إذا كان بإمكانك ضبط خادمك، يمكنك أيضًا تقديم الرمز المميّز على الصفحات. باستخدام عنوان HTTP يتضمّن العنصر Origin-Trial. يجب أن يكون عنوان الاستجابة الناتج يبدو مشابهًا لما يلي: Origin-Trial: TOKEN_GOES_HERE

مواصفات الويب

تم إبعاد مواصفات المسودة عن واجهة برمجة التطبيقات في مرحلة التجربة والتقييم بما في ذلك:

  • مجموعات بث أحادية الاتجاه تتماشى بشكل أكبر مع مجموعات بث whatWG
  • إيقاف عمليات إعادة الإرسال
  • (قريبًا) مخططات البيانات

نحن مهتمون بتطبيق المواصفات الكاملة وما بعدها (بما في ذلك دعم بشأن ساحة المشاركات whatWG)، ولكن يهمّنا معرفة ملاحظاتك أولاً

الأمان

يتم فرض الأمان في تأكيد اتصال QUIC من خلال استخدام مفتاح مشترك مسبقًا لإنشاء اتصال QUIC مشفّر عبر P2P. يجب إرسال إشارة إلى هذا المفتاح قناة آمنة خارج الفرق مع ضمانات السرية والنزاهة. يُرجى العِلم أنّه سيتم عرض المفتاح بلغة JavaScript.

الهجوم النشط

بخلاف DTLS-SRTP، الذي لا يتطلب سوى التكامل للإشارة إلى الشهادة بصمة الإصبع، فإن الإشارة إلى المفتاح الذي تمت مشاركته مسبقًا يتطلب تكامل البيانات السرية. إذا تم اختراق PSK (على سبيل المثال، من خلال الخادم في عملية الإشارة يمكن لمهاجم نشط أن يشن هجوم وسيط مقابل المصافحة QUIC.

الوضع الحالي

الخطوة الحالة
1. إنشاء شرح مكتمل
**2(أ)- مواصفات RTCQuicTransport ** **قيد التقدّم**
**2ب. مواصفات RTCIceTransport ** **قيد التقدّم**
**3- جمع الملاحظات التكرار التحسيني للتصميم** **قيد التقدّم**
4. مرحلة التجربة والتقييم يبدأ في Chrome 73!
5- إطلاق Not started

وصلات مساعدة