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

تحاول أجهزة Android تلقائيًا الحصول على وقت Unix الصحيح من مصدر شبكة. يستخدم 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 في الترتيب المطلوب. لمعرفة التفاصيل، يُرجى الاطّلاع على أولوية مصدر الوقت.

إعداد الجهاز

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

يمكن العثور على الإعدادات الأساسية لنظام التشغيل AOSP على الرابط frameworks/base/core/res/res/values/config.xml:

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

خوادم

بشكلٍ تلقائي، يستخدم AOSP خوادم الوقت على time.android.com، وهو عنوان بديل ل Google Public NTP. لا تتوفر اتفاقية مستوى الخدمة لهذه الخدمة. لمعرفة التفاصيل، يُرجى الاطّلاع على الأسئلة الشائعة حول Google Public NTP.

إتاحة العمل على خوادم متعددة

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

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

 الدقة

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

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

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

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

عند استخدام ميزة "رصد الوقت تلقائيًا"، يمكن أن تتأثر دقة ساعة نظام الجهاز بإعدادات أخرى لخدمة 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