تشخیص زمان شبکه

دستگاه‌های اندرویدی به‌طور خودکار تلاش می‌کنند تا زمان صحیح یونیکس را از منبع شبکه به دست آورند. اندروید از پروتکل SNTP که از پروتکل UDP استفاده می کند برای به دست آوردن اطلاعات زمان استفاده می کند.

اجزای توضیح داده شده در این صفحه بخشی از سیستم تشخیص خودکار زمان هستند که به عنوان مبدا زمان شبکه شناخته می شود. هنگامی که تشخیص خودکار زمان در دستگاه پشتیبانی می‌شود و سرویس time_detector برای استفاده از آن پیکربندی شده است، می‌توان از سیگنال زمان از سرور زمان شبکه برای تنظیم ساعت سیستم دستگاه Android استفاده کرد.

به‌طور پیش‌فرض، Android از مبدا زمان شبکه به‌عنوان مبدا تشخیص خودکار اولیه اولیه استفاده می‌کند.

سیستم تشخیص زمان شبکه

سرویس network_time_update_service که در سرور سیستم اندروید اجرا می شود، سیستم تشخیص زمان شبکه را پیاده سازی می کند. این سرویس به صورت دوره ای از SNTP برای دریافت سیگنال زمان از سرور استفاده می کند. این سرویس همچنین اتصال شبکه را کنترل می کند و زمانی که سیگنال زمانی اخیر پس از مدت طولانی اتصال ضعیف در دسترس نباشد، به روز رسانی زمانی را راه اندازی می کند.

سرویس network_time_update_service تلاش می‌کند تا سیگنال زمانی را پس از راه‌اندازی و زمانی که اتصال شبکه برای اولین بار برقرار می‌شود، به دست آورد. سپس سرویس سعی می کند آخرین سیگنالی را که نگه می دارد تازه نگه دارد. این نیازهای هر دستگاه اندرویدی را با بار قابل توجهی که می‌تواند توسط بسیاری از دستگاه‌های اندرویدی در سراسر جهان ایجاد شود، متعادل می‌کند و زمان خود را تازه می‌کند.

با استفاده از API های داخلی، network_time_update_service پیشنهادات زمان شبکه را به سرویس time_detector ارسال می کند. سپس سایر اجزای پلت فرم اندروید از این پیشنهادات زمان شبکه استفاده می کنند.

پس از دریافت پیشنهادات از مبدا زمان شبکه، سرویس 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 (1 دقیقه) بازه زمانی نظرسنجی شبکه مجدداً بر حسب میلی ثانیه. زمانی استفاده می‌شود که به‌روزرسانی زمانی ناموفق باشد.
config_ntpServers یک ورودی: ntp://time.android.com سرورهای NTP برای به دست آوردن زمان دقیق استفاده کنید. موارد باید به این شکل باشند: ntp://<host>[:port] .
این یک طرح IANA URI ثبت شده نیست.
config_ntpTimeout 5000 زمان منتظر ماندن برای پاسخ سرور NTP در میلی ثانیه قبل از اتمام زمان است.

سرورها

به طور پیش فرض، AOSP از سرورهای زمان در time.android.com استفاده می کند که نام مستعار Google Public NTP است. این سرویس SLA ندارد. برای جزئیات، به سؤالات متداول NTP عمومی Google مراجعه کنید.

پشتیبانی از چندین سرور

برای اندروید 14 و بالاتر، این فریم ورک از چندین سرور NTP پشتیبانی می کند. این از موقعیت‌هایی پشتیبانی می‌کند که دستگاه‌ها با یک پیکربندی واحد در سطح جهانی توزیع می‌شوند، اما دسترسی به سرورهایی مانند time.android.com در مکان‌های خاصی محدود شده است.

الگوریتم هر سرور مشخص شده در کلید پیکربندی config_ntpServers را امتحان می کند. وقتی سروری را پیدا می کند که پاسخ می دهد، سیستم به استفاده از آن سرور ادامه می دهد تا زمانی که بازخوانی نشود یا دستگاه راه اندازی مجدد شود.

دقت

همگام‌سازی زمانی شبکه پیش‌فرض اندروید تقریباً یک بار در روز از SNTP با یک پرس‌وجو زمانی استفاده می‌کند تا مطمئن شود همیشه سیگنال زمانی اخیر دارد.

اثرات تأخیر شبکه بزرگترین عامل عدم دقت در اجرای SNTP اندروید است. SNTP تأخیرهای شبکه متقارن را فرض می کند، یعنی تأخیر شبکه برای درخواست با تأخیر شبکه برای پاسخ یکسان است و زمان صحیح دقیقاً در وسط آن شبکه رفت و برگشت است. اغلب، زمان رفت و برگشت شبکه در حدود چند صد میلی ثانیه است و در یک شبکه سیمی تأخیر نزدیک به متقارن است، که منجر به سطوحی از عدم دقت می شود که برای کاربران تقریباً نامحسوس است. با این حال، در تلفن همراه یا رادیو چندین مرحله وجود دارد که در آن تاخیرهای نسبتا طولانی و نامتقارن می توانند در تراکنش شبکه وارد شوند که منجر به عدم دقت بیشتر می شود.

با تنظیم پیش‌فرض AOSP برای config_ntpTimeout روی 5000 میلی‌ثانیه، و اگر تمام تأخیر شبکه صرفاً روی قسمت ورودی یا خروجی متمرکز باشد، حداکثر خطای نظری تقریباً 2.5 ثانیه است.

دقت کلی ساعت سیستم نیز تحت تأثیر توانایی دستگاه اندرویدی برای ردیابی دقیق زمان سپری شده پس از دریافت سیگنال زمانی قرار دارد. این یک نگرانی در مورد تمام زمان‌سنجی در اندروید است، نه فقط تشخیص زمان شبکه، و به همین دلیل است که سرویس 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 (موقعیت) را برای اولین بار سریعتر مکان یابی کند که اطلاعات زمان شبکه را داشته باشد.

اشکال زدایی و تست

بخش زیر دستورات پوسته برای اشکال زدایی و آزمایش ویژگی تشخیص زمان شبکه را توضیح می دهد.

با سرویس network_time_update_service تعامل داشته باشید

برای حذف وضعیت فعلی network_time_update_service ، از:

adb shell cmd network_time_update_service dump

برای دیدن مجموعه‌ای از گزینه‌های خط فرمان که می‌توانند به آزمایش کمک کنند، از موارد زیر استفاده کنید:

adb shell cmd network_time_update_service help