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

تحاول أجهزة 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