تحليل PCAP لفشل ترقية WebSocket: 101 بروتوكولات تبديل، ورؤوس الوكيل، وTLS، وحالات انقطاع الاتصال

كيفية استكشاف أخطاء فشل ترقية WebSocket وإصلاحها باستخدام عمليات التقاط الحزم، بما في ذلك HTTP 101 ورؤوس الترقية ورؤوس الاتصال وتجريد الوكيل وTLS وإعادة التعيين ومهلات الخمول.

فشلت ترقية websocket, 101 بروتوكولات التبديل, مقبس الويب الوكيل, ترقية الاتصال, تحليل بي كاب, http troubleshooting

غالبًا ما تختبئ حالات فشل WebSocket خلف رسائل المتصفح أو التطبيق العامة: "فشل اتصال WebSocket"، أو "رمز استجابة غير متوقع"، أو "تم إغلاق الاتصال قبل تلقي استجابة المصافحة"، أو "101 بروتوكول تبديل مفقود"، أو "تم قطع اتصال المقبس". يبحث المستخدمون عن "فشل ترقية WebSocket pcap"، و"لم يتم إرجاع بروتوكولات التبديل 101"، و"رؤوس وكيل nginx websocket"، و"إعادة تعيين اتصال WebSocket" عندما يبدو أن HTTP يعمل ولكن حركة المرور في الوقت الفعلي لا تعمل." يمكن أن يُظهر التقاط الحزمة ما إذا كان قد تم إرسال طلب ترقية HTTP، وما إذا كان الخادم قد قام بإرجاع "101 Switching Protocols"، وما إذا كان الوكيل قد أزال الرؤوس المطلوبة، وما إذا كان TLS قد نجح، وما إذا كان الاتصال قد انقطع بعد الترقية.

تعد جراحة PCAP مفيدة لأن تتبعات WebSocket غالبًا ما تحتاج إلى كل من تأكيد اتصال HTTP والمخطط الزمني لـ TCP بعد الترقية.

كيف تبدو ترقية WebSocket الصحية

يرسل العميل طلب HTTP مع رؤوس الترقية:

GET /socket HTTP/1.1
Host: example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: ...
Sec-WebSocket-Version: 13

The server replies:

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: ...

بعد ذلك، لم يعد الاتصال عبارة عن حركة مرور طلب/استجابة HTTP عادية. يحمل إطارات WebSocket.

فشل الترقية الشائعة

تشمل الأسباب الشائعة ما يلي:

  • شرائط الوكيل رأس "الترقية".
  • يقوم الوكيل بإزالة أو إعادة كتابة "الاتصال: الترقية".
  • مسار الواجهة الخلفية لا يدعم WebSocket.
  • يرسل إنهاء TLS طلبًا إلى المنبع الخاطئ.
  • تم تكوين سلوك ترقية HTTP/2 إلى HTTP/1.1 بشكل خاطئ.
  • تتم إعادة توجيه المصادقة بدلاً من 101.
  • تقوم الواجهة الخلفية بإرجاع 400 أو 403 أو 404 أو 426 أو 502 أو 504.
  • تتم إعادة تعيين الاتصال بعد الترقية.
  • تؤدي مهلة الخمول إلى إغلاق WebSocket الهادئ.

رمز الحالة والعناوين مهمان.

مشاكل رأس الوكيل

يجب على الوكلاء العكسيين إعادة توجيه رؤوس ترقية WebSocket بشكل صحيح. إذا لم تتمكن الواجهة الخلفية من رؤية Upgrade: websocket مطلقًا، فقد تتعامل مع الطلب على أنه HTTP عادي.

أدلة الحزمة:

  • يتضمن طلب العميل إلى الوكيل رؤوس الترقية.
  • طلب الوكيل إلى الواجهة الخلفية يفتقر إليها.
  • تقوم الواجهة الخلفية بإرجاع استجابة HTTP العادية بدلاً من 101.

هذه مشكلة في تكوين الوكيل، وليست خطأ عميل WebSocket.

TLS وSNI

بالنسبة إلى WebSocket الآمن (wss://)، يحدث TLS قبل ترقية HTTP. إذا فشل TLS، فلن تبدأ مصافحة WebSocket أبدًا. احتفظ بـ DNS وTCP وTLS ClientHello وSNI وأي تنبيه أو إعادة تعيين لـ TLS.

لا تقم بتشخيص رؤوس الترقية حتى يتم إثبات مسار TLS.

ينقطع الاتصال بعد 101

في بعض الأحيان تنجح الترقية، ثم يتم إغلاق الاتصال. وهذا فشل مختلف.

بحث:

  • مرسل FIN أو RST.
  • مدة مهلة الخمول.
  • نشاط WebSocket بينج/بونج.
  • مهلة قراءة الوكيل.
  • إعادة إرسال TCP.
  • نافذة صفر.
  • إعادة تشغيل عملية الواجهة الخلفية.

إذا حدث الانخفاض في فترة زمنية محددة، فمن المرجح أن تكون سياسة المهلة.

Checklist

استخدم سير العمل هذا:

  1. الحفاظ على اتصال DNS وTCP.
  2. تحقق من مصافحة TLS لـ wss://.
  3. فحص رؤوس طلب ترقية العميل.
  4. فحص حالة استجابة الخادم.
  5. قم بتأكيد "101 Switching Protocols" إذا كان متوقعًا.
  6. قارن طلبات العميل بالوكيل والوكيل بالواجهة الخلفية.
  7. ابحث عن عمليات إعادة التوجيه أو ردود المصادقة.
  8. إذا نجحت الترقية، فافحص FIN/RST/مهلة ما بعد الترقية.
  9. احتفظ بتوقيت WebSocket ping/pong إذا كان مرئيًا.
  10. لا تقليم إلا بعد الحفاظ على المصافحة الكاملة.

التشخيص النهائي

عادةً ما تكون حالات فشل ترقية WebSocket عبارة عن مشكلات مصافحة HTTP أو إعادة توجيه الوكيل حتى يتم إثبات "101 Switching Protocols". بعد الترقية، تصبح حالات الفشل مشكلة انتهاء مهلة TCP أو إعادة تعيينها أو بروتوكول التطبيق لفترة طويلة.

تساعد جراحة PCAP في الحفاظ على كلتا المرحلتين بحيث يمكن تتبع خطأ WebSocket الغامض إلى الرؤوس أو سلوك الوكيل أو TLS أو استجابة الواجهة الخلفية أو عمر الاتصال.