رصد وقت الشبكة

تحاول أجهزة Android تلقائيًا الحصول على وقت Unix epoch الصحيح من مصدر على الشبكة. يستخدم Android بروتوكول وقت الشبكة البسيط (SNTP)، الذي يستخدم بروتوكول مخطط بيانات المستخدم (UDP)، للحصول على معلومات الوقت.

إنّ المكوّنات الموضّحة في هذه الصفحة هي جزء من نظام رصد الوقت التلقائي الذي يُشار إليه باسم مصدر وقت الشبكة. يمكن استخدام إشارة وقت من خادم وقت الشبكة لضبط ساعة نظام جهاز Android عندما تكون ميزة رصد الوقت التلقائي متاحة على الجهاز وتم ضبط خدمة time_detector لاستخدامها.

تلقائيًا، يستخدم Android مصدر وقت الشبكة كمصدر أساسي لرصد الوقت التلقائي.

نظام رصد وقت الشبكة

تنفّذ خدمة network_time_update_service التي تعمل على خادم نظام Android نظام رصد وقت الشبكة. تستخدم الخدمة بشكل دوري بروتوكول وقت الشبكة البسيط (SNTP) للحصول على إشارة وقت من خادم. تراقب الخدمة أيضًا الاتصال بالشبكة وتؤدي إلى إعادة تحميل الوقت عندما لا تتوفّر إشارة وقت حديثة بعد فترات طويلة من ضعف الاتصال.

تحاول خدمة network_time_update_service الحصول على إشارة وقت بعد التشغيل وعند إنشاء الاتصال بالشبكة لأول مرة. تحاول الخدمة بعد ذلك الحفاظ على أحدث إشارة تحتفظ بها. وتوازن بين احتياجات أجهزة Android الفردية والحِمل الكبير الذي قد ينتج عن إعادة تحميل الوقت على العديد من أجهزة Android في جميع أنحاء العالم.

ترسل خدمة network_time_update_service اقتراحات وقت الشبكة إلى خدمة time_detector باستخدام واجهات برمجة التطبيقات الداخلية. تستخدم بعد ذلك مكوّنات نظام Android الأساسي الأخرى اقتراحات وقت الشبكة هذه.

بعد تلقّي خدمة time_detector اقتراحات من مصدر وقت الشبكة، تحدّد ما إذا كان سيتم تعديل ساعة النظام وفقًا لـ قواعد تحديد الأولويات التي تم ضبطها.

لضبط نظام رصد الوقت التلقائي لاستخدام اقتراحات مصدر الشبكة لضبط ساعة النظام تلقائيًا، استخدِم ملف ضبط خادم النظام core/res/res/values/config.xml. تأكَّد من أنّ القيمة network مضمّنة في config_autoTimeSourcesPriority في الموضع المطلوب. لمزيد من المعلومات، يُرجى الاطّلاع على مقالة أولوية مصدر الوقت.

إعداد الجهاز

يوضِّح هذا القسم كيف يمكن لمصنّعي الأجهزة ضبط نظام رصد وقت الشبكة.

يكون الضبط الأساسي لنظام Android مفتوح المصدر (AOSP) في الملف config.xml: frameworks/base/core/res/res/values/config.xml:

مفتاح الضبط قيمة AOSP الوصف
config_ntpRetry 3 بعد تعذُّر إعادة التحميل، هذا هو عدد المرات التي يحاول فيها النظام إجراء عملية استطلاع وقت الشبكة باستخدام فترة استطلاع أقصر لبروتوكول وقت الشبكة (config_ntpPollingIntervalShorter)، قبل التراجع واستخدام فترة الاستطلاع العادية (config_ntpPollingInterval). تعني القيمة الأقل من 0 أنّ النظام يعيد محاولة الاستطلاع بفترة استطلاع أقصر لبروتوكول وقت الشبكة إلى أن يتمكّن من إعادة التحميل بنجاح.
config_ntpPollingInterval 64800000 (18 ساعة) فترة الاستطلاع العادية لوقت الشبكة بالمللي ثانية.
config_ntpPollingIntervalShorter 60000 (دقيقة واحدة) فترة استطلاع وقت الشبكة لإعادة المحاولة بالمللي ثانية. يتم استخدامها عندما تتعذّر إعادة تحميل الوقت.
config_ntpServers إدخال واحد: ntp://time.android.com خوادم بروتوكول وقت الشبكة التي يجب استخدامها للحصول على وقت دقيق. يجب أن تكون العناصر بالتنسيق: ntp://<host>[:port].
هذا ليس مخطّط URI مسجّلاً لدى IANA.
config_ntpTimeout 5000 الوقت الذي يجب انتظاره لاستجابة خادم بروتوكول وقت الشبكة بالمللي ثانية قبل انتهاء المهلة.

الخوادم

تلقائيًا، يستخدم نظام Android مفتوح المصدر (AOSP) خوادم الوقت على time.android.com، وهو اسم مستعار لـ Google Public NTP. لا تتضمّن هذه الخدمة اتفاقية مستوى خدمة. لمزيد من المعلومات، يُرجى الاطّلاع على الأسئلة الشائعة حول Google Public NTP.

إتاحة استخدام خوادم متعددة

بالنسبة إلى Android 14 والإصدارات الأحدث، يتيح إطار العمل استخدام خوادم متعددة لبروتوكول وقت الشبكة (NTP). ويتيح ذلك الحالات التي يتم فيها توزيع الأجهزة على مستوى العالم باستخدام ضبط واحد، ولكن يتم فيها حظر الوصول إلى خوادم مثل time.android.com في أماكن معيّنة.

تحاول الخوارزمية الوصول إلى كل خادم محدّد في مفتاح الضبط config_ntpServers. عندما تعثر الخوارزمية على خادم يستجيب، يواصل النظام استخدام هذا الخادم إلى أن يتعذّر إعادة التحميل أو تتم إعادة تشغيل الجهاز.

الدقة

يستخدم التزامن التلقائي لوقت الشبكة في Android بروتوكول وقت الشبكة البسيط (SNTP) مع طلب واحد للوقت مرة واحدة في اليوم تقريبًا، بحيث تكون هناك دائمًا إشارة وقت حديثة.

تؤثر حالات التأخُّر في الاستجابة على الشبكة بشكل كبير في عدم دقة الوقت في تنفيذ بروتوكول وقت الشبكة البسيط (SNTP) في Android. يفترض بروتوكول وقت الشبكة البسيط (SNTP) حالات تأخُّر متماثلة في الاستجابة على الشبكة، أي أنّ التأخُّر في الاستجابة على الشبكة للطلب هو نفسه التأخُّر في الاستجابة على الشبكة للاستجابة، ويكون الوقت الصحيح في منتصف مدة الذهاب والعودة على الشبكة تمامًا. في أغلب الأحيان، تكون مدة الذهاب والعودة على الشبكة في حدود بضع مئات من المللي ثانية، ويكون التأخُّر في الاستجابة على الشبكة السلكية قريبًا من التماثل، ما يؤدي إلى مستويات من عدم الدقة لا يمكن للمستخدمين ملاحظتها تقريبًا. ومع ذلك، في الاتصالات الهاتفية عبر الجوّال أو اللاسلكية، هناك عدة مراحل يمكن فيها إدخال حالات تأخُّر غير متماثلة وطويلة نسبيًا في معاملة على الشبكة، ما يؤدي إلى زيادة عدم الدقة.

إذا تم ضبط الإعداد التلقائي لنظام Android مفتوح المصدر (AOSP) على config_ntpTimeout بقيمة 5000 مللي ثانية، وإذا كان كل التأخُّر في الاستجابة على الشبكة يتركز فقط على جزء الإرسال أو جزء الاستلام، فإنّ الحد الأقصى للخطأ النظري هو 2.5 ثانية تقريبًا.

تتأثر الدقة الإجمالية لساعة النظام أيضًا بقدرة جهاز Android على تتبُّع الوقت المنقضي بدقة بعد الحصول على إشارة وقت. ويشكل ذلك مصدر قلق لجميع عمليات حفظ الوقت على Android، وليس فقط رصد وقت الشبكة، ولهذا السبب تتجاهل خدمة time_detector اقتراحات الوقت القديمة. تعيد خدمة network_time_update_service التحميل بانتظام باستخدام الفترة config_ntpPollingInterval لتزويد خدمة time_detector باقتراحات وقت حديثة ولضمان عدم رجوع خدمة time_detector إلى مصادر وقت أقل أولوية وغالبًا أقل دقة أو مصادر وقت غير صحيحة في بعض الأحيان، مثل telephony.

عند استخدام ميزة رصد الوقت التلقائي، يمكن أن تتأثر دقة ساعة نظام الجهاز بـ عمليات ضبط أخرى لخدمة time_detector، مثل الـ ثوابت والعلامات التي تحدّد مقدار اختلاف اقتراح الوقت عن وقت ساعة النظام الحالي قبل تعديل الساعة (ServiceConfigAccessorImpl.java).

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

الاستخدامات الأخرى لوقت الشبكة

إذا لم يتم ضبط ميزة رصد الوقت التلقائي باستخدام مصدر network أو إذا أوقف المستخدم ميزة رصد الوقت التلقائي، سيظل يتم استخدام الوقت الذي تحصل عليه خدمة network_time_update_service من خلال المكوّنات التالية:

  • الطريقة SystemClock.currentNetworkTimeClock()
  • وظائف المنصة الداخلية على سبيل المثال، يمكن لنظام A-GPS تحديد الموقع الجغرافي لأول إصلاح لنظام GNSS (الموقع الجغرافي) بشكل أسرع عندما تتوفّر لديه معلومات وقت الشبكة.

تصحيح الأخطاء والاختبار

يوضِّح القسم التالي أوامر shell لتصحيح أخطاء ميزة رصد وقت الشبكة واختبارها.

التفاعل مع خدمة network_time_update_service

لعرض الحالة الحالية لـ network_time_update_service، استخدِم:

adb shell cmd network_time_update_service dump

للاطّلاع على مجموعة من خيارات سطر الأوامر التي يمكن أن تساعد في الاختبار، استخدِم:

adb shell cmd network_time_update_service help