Phát hiện thời gian mạng

Các thiết bị Android tự động cố gắng lấy thời gian Unix chính xác từ nguồn mạng. Android sử dụng giao thức SNTP, giao thức này sử dụng giao thức UDP, để lấy thông tin về thời gian.

Các thành phần được mô tả trên trang này là một phần của hệ thống phát hiện thời gian tự động được gọi là nguồn gốc thời gian mạng . Tín hiệu thời gian từ máy chủ thời gian mạng có thể được sử dụng để đặt đồng hồ hệ thống của thiết bị Android khi tính năng phát hiện thời gian tự động được hỗ trợ trên thiết bị và dịch vụ time_detector được định cấu hình để sử dụng nó.

Theo mặc định, Android sử dụng nguồn gốc thời gian mạng làm nguồn phát hiện thời gian tự động chính.

Hệ thống phát hiện thời gian mạng

Dịch vụ network_time_update_service chạy trong máy chủ hệ thống Android triển khai hệ thống phát hiện thời gian mạng. Dịch vụ định kỳ sử dụng SNTP để nhận tín hiệu thời gian từ máy chủ. Dịch vụ này cũng giám sát kết nối mạng và kích hoạt làm mới thời gian khi không có tín hiệu thời gian gần đây sau một thời gian dài kết nối kém.

Dịch vụ network_time_update_service cố gắng thu được tín hiệu thời gian sau khi khởi động và khi kết nối mạng được thiết lập lần đầu tiên. Sau đó, dịch vụ sẽ cố gắng giữ tín hiệu mới nhất mà nó giữ được. Nó cân bằng nhu cầu của từng thiết bị Android với tải trọng đáng kể có thể được tạo ra bởi nhiều thiết bị Android trên toàn thế giới nhằm cải thiện thời gian của họ.

Bằng cách sử dụng API nội bộ, network_time_update_service gửi đề xuất về thời gian mạng tới dịch vụ time_detector . Sau đó, các thành phần nền tảng Android khác sẽ sử dụng các đề xuất về thời gian mạng này.

Sau khi nhận được đề xuất từ ​​nguồn gốc thời gian mạng, dịch vụ time_detector sẽ xác định xem có cập nhật đồng hồ hệ thống theo quy tắc ưu tiên đã định cấu hình hay không.

Để định cấu hình hệ thống phát hiện thời gian tự động nhằm sử dụng các đề xuất nguồn gốc mạng nhằm tự động đặt đồng hồ hệ thống, hãy sử dụng tệp cấu hình máy chủ hệ thống core/res/res/values/config.xml . Đảm bảo network giá trị được chứa trong config_autoTimeSourcesPriority ở vị trí mong muốn. Để biết chi tiết, hãy xem Ưu tiên nguồn thời gian .

Cấu hình thiết bị

Phần này mô tả cách nhà sản xuất thiết bị có thể định cấu hình hệ thống phát hiện thời gian mạng.

Cấu hình AOSP cơ sở là ở frameworks/base/core/res/res/values/config.xml :

Phím cấu hình Giá trị AOSP Sự miêu tả
config_ntpRetry 3 Sau khi không làm mới, đây là số lần hệ thống thử thăm dò thời gian mạng với khoảng thời gian thăm dò NTP ngắn hơn ( config_ntpPollingIntervalShorter ), trước khi tắt và sử dụng khoảng thời gian thăm dò thông thường ( config_ntpPollingInterval ). Giá trị nhỏ hơn 0 nghĩa là hệ thống thử thăm dò lại ở khoảng thời gian thăm dò NTP ngắn hơn cho đến khi có thể làm mới thành công.
config_ntpPollingInterval 64800000 (18 giờ) Khoảng thời gian thăm dò thời gian mạng bình thường tính bằng mili giây.
config_ntpPollingIntervalShorter 60000 (1 phút) Khoảng thời gian thử lại trong thời gian thăm dò mạng tính bằng mili giây. Được sử dụng khi việc làm mới thời gian không thành công.
config_ntpServers Một mục duy nhất: ntp://time.android.com Máy chủ NTP được sử dụng để có được thời gian chính xác. Các mục phải ở dạng: ntp://<host>[:port] .
Đây không phải là lược đồ IANA URI đã đăng ký.
config_ntpTimeout 5000 Thời gian chờ phản hồi của máy chủ NTP tính bằng mili giây trước khi hết thời gian chờ.

May chủ

Theo mặc định, AOSP sử dụng máy chủ thời gian tại time.android.com , đây là bí danh của Google Public NTP . Dịch vụ này không có SLA. Để biết chi tiết, hãy xem Câu hỏi thường gặp về NTP của Google Public .

Hỗ trợ nhiều máy chủ

Đối với Android 14 trở lên, khung này hỗ trợ nhiều máy chủ NTP. Điều này hỗ trợ các tình huống trong đó thiết bị được phân phối trên toàn cầu với một cấu hình duy nhất nhưng quyền truy cập vào máy chủ như time.android.com bị hạn chế ở một số nơi nhất định.

Thuật toán thử từng máy chủ được chỉ định trong khóa cấu hình config_ntpServers . Khi tìm thấy máy chủ phản hồi, hệ thống sẽ tiếp tục sử dụng máy chủ đó cho đến khi không làm mới được hoặc thiết bị khởi động lại.

Sự chính xác

Đồng bộ hóa thời gian mạng mặc định của Android sử dụng SNTP với một truy vấn thời gian duy nhất khoảng một lần mỗi ngày để cố gắng đảm bảo nó luôn có tín hiệu thời gian gần đây.

Hiệu ứng độ trễ mạng là nguyên nhân lớn nhất gây ra tình trạng thiếu chính xác về thời gian khi triển khai SNTP của Android. SNTP giả định độ trễ mạng đối xứng, nghĩa là độ trễ mạng cho yêu cầu bằng với độ trễ mạng cho phản hồi và thời gian chính xác nằm chính xác ở giữa hành trình khứ hồi của mạng đó. Thông thường, thời gian truyền khứ hồi của mạng vào khoảng vài trăm mili giây và trên mạng có dây, độ trễ gần như đối xứng, dẫn đến mức độ thiếu chính xác mà người dùng gần như không thể nhận ra. Tuy nhiên, với điện thoại di động hoặc điện thoại vô tuyến, có một số giai đoạn trong đó độ trễ tương đối dài, không đối xứng có thể được đưa vào giao dịch mạng dẫn đến độ chính xác cao hơn.

Với cài đặt mặc định AOSP cho config_ntpTimeout được đặt thành 5000 mili giây và nếu tất cả độ trễ mạng chỉ tập trung ở chặng vào hoặc chặng đi thì lỗi lý thuyết tối đa là khoảng 2,5 giây.

Độ chính xác chung của đồng hồ hệ thống cũng bị ảnh hưởng bởi khả năng theo dõi thời gian đã trôi qua của thiết bị Android một cách chính xác sau khi nhận được tín hiệu thời gian. Đây là mối lo ngại với tất cả các tính năng chấm công trên Android, không chỉ tính năng phát hiện thời gian trên mạng và là lý do tại sao dịch vụ time_detector bỏ qua các đề xuất về thời gian cũ. Dịch vụ network_time_update_service làm mới thường xuyên bằng cách sử dụng khoảng config_ntpPollingInterval để giữ cho dịch vụ time_detector luôn được cung cấp các đề xuất về thời gian mới và để đảm bảo rằng dịch vụ time_detector không quay trở lại mức độ ưu tiên thấp hơn và thường có độ chính xác thấp hơn hoặc nguồn gốc thời gian đôi khi không chính xác, chẳng hạn như telephony .

Khi sử dụng tính năng phát hiện thời gian tự động, độ chính xác của đồng hồ hệ thống thiết bị có thể bị ảnh hưởng bởi các cấu hình khác của dịch vụ time_detector , chẳng hạn như các hằng số và cờ ảnh hưởng đến mức độ khác biệt của đề xuất thời gian với thời gian của đồng hồ hệ thống hiện tại trước khi đồng hồ được điều chỉnh ( ServiceConfigAccessorImpl.java ).

Nhà sản xuất thiết bị có thể sửa đổi độ chính xác bằng cách sử dụng các hằng số và tùy chọn cấu hình trước đó. Tuy nhiên, điều quan trọng là phải nhận thức được những hạn chế trong việc triển khai SNTP của nền tảng và tác động tiềm tàng đến mức tiêu thụ điện năng do hoạt động mạng thường xuyên hơn, tác động đến các ứng dụng chạy trên thiết bị do điều chỉnh đồng hồ thường xuyên hơn nhưng nhỏ hơn và ảnh hưởng đến tải máy chủ.

Các cách sử dụng khác của thời gian mạng

Nếu tính năng phát hiện thời gian tự động sử dụng nguồn gốc network không được định cấu hình hoặc nếu người dùng đã tắt tính năng phát hiện thời gian tự động thì thời gian mà dịch vụ network_time_update_service thu được vẫn được các thành phần sau sử dụng:

  • Phương thức SystemClock.currentNetworkTimeClock() .
  • Chức năng nền tảng nội bộ. Ví dụ: A-GPS có thể xác định vị trí GNSS (vị trí) đầu tiên nhanh hơn khi có thông tin về thời gian mạng.

Gỡ lỗi và thử nghiệm

Phần sau đây mô tả các lệnh shell để gỡ lỗi và kiểm tra tính năng phát hiện thời gian mạng.

Tương tác với dịch vụ network_time_update_service

Để kết xuất trạng thái hiện tại của network_time_update_service , hãy sử dụng:

adb shell cmd network_time_update_service dump

Để xem một tập hợp các tùy chọn dòng lệnh có thể hỗ trợ kiểm tra, hãy sử dụng:

adb shell cmd network_time_update_service help