การตรวจหาเวลาของเครือข่าย

อุปกรณ์ 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 ใช้ API ภายในเพื่อส่งเวลาของเครือข่าย คำแนะนำสำหรับบริการ 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 (1 นาที) ช่วงเวลาการหยั่งสัญญาณเวลาของเครือข่ายลองอีกครั้งในหน่วยมิลลิวินาที ใช้เมื่อ การรีเฟรชเวลาล้มเหลว
config_ntpServers รายการเดียว: ntp://time.android.com เซิร์ฟเวอร์ NTP ที่จะใช้ในการรับเวลาที่แม่นยำ รายการต้องอยู่ในรูปแบบดังนี้ ntp://<host>[:port]
นี่ไม่ใช่รูปแบบ URI ของ IANA ที่ลงทะเบียน
config_ntpTimeout 5000 เวลาที่ต้องรอการตอบกลับของเซิร์ฟเวอร์ NTP เป็นมิลลิวินาทีก่อนหมดเวลา

เซิร์ฟเวอร์

ตามค่าเริ่มต้น AOSP จะใช้เซิร์ฟเวอร์เวลาที่ time.android.com ซึ่งเป็นชื่อแทนสำหรับ NTP สาธารณะของ Google บริการนี้มี ไม่มี SLA โปรดดูรายละเอียดที่ คำถามที่พบบ่อยเกี่ยวกับ NTP สาธารณะของ Google

การรองรับหลายเซิร์ฟเวอร์

สําหรับ Android 14 ขึ้นไป เฟรมเวิร์กจะรองรับ เซิร์ฟเวอร์ NTP หลายเซิร์ฟเวอร์ ซึ่งสามารถรองรับกรณีที่อุปกรณ์ ที่กระจายทั่วโลกด้วยการกำหนดค่าแบบเดียว แต่สามารถเข้าถึงเซิร์ฟเวอร์ได้ เช่น time.android.com ถูกจำกัดในบางพื้นที่

อัลกอริทึมจะพยายามแต่ละเซิร์ฟเวอร์ที่ระบุใน config_ntpServers คีย์การกำหนดค่า เมื่อพบการแจ้งเตือน ระบบจะใช้งานต่อ เซิร์ฟเวอร์ดังกล่าวจนกว่าจะรีเฟรชไม่สำเร็จหรืออุปกรณ์รีบูต

ความถูกต้อง

การซิงค์เวลาเครือข่ายเริ่มต้นของ Android ใช้ SNTP กับการค้นหาครั้งเดียว ประมาณวันละครั้ง เพื่อให้แน่ใจว่าจะมีสัญญาณเวลาล่าสุดเสมอ

ผลกระทบจากเวลาในการตอบสนองของเครือข่ายเป็นปัจจัยที่สำคัญที่สุดที่ทำให้เกิดความไม่ถูกต้องของเวลา การใช้ SNTP ของ Android SNTP ถือว่าความล่าช้าของเครือข่ายแบบสมมาตร กล่าวคือ เวลาในการตอบสนองของเครือข่ายสำหรับคำขอจะเหมือนกับเวลาในการตอบสนองของเครือข่ายสำหรับ และเวลาที่ถูกต้องจะอยู่ตรงกลางของส่วนนั้น การเชื่อมต่อเครือข่ายแบบไป-กลับ บ่อยครั้งที่การเชื่อมต่อเครือข่ายแบบไป-กลับมักเรียงตามลำดับจาก 100 มิลลิวินาที และสำหรับเครือข่ายแบบใช้สาย เวลาในการตอบสนองใกล้เคียงกับ แบบสมมาตร ซึ่งทำให้เกิดความไม่ถูกต้องในระดับที่แทบจะไม่เป็นที่รับรู้ได้ ผู้ใช้ อย่างไรก็ตาม ในการใช้โทรศัพท์เคลื่อนที่หรือวิทยุ มีหลายขั้นตอนที่ อาจมีการหน่วงเวลาแบบไม่สมมาตรที่ค่อนข้างนานในการทำธุรกรรมของเครือข่าย นำไปสู่ความไม่ถูกต้องมากขึ้น

เมื่อตั้งค่าเริ่มต้นของ 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 สำหรับการแก้ไขข้อบกพร่องและทดสอบ ของ Google Cloud

โต้ตอบกับบริการ network_time_update_service

หากต้องการถ่ายโอนสถานะปัจจุบันของ network_time_update_service ให้ใช้

adb shell cmd network_time_update_service dump

หากต้องการดูชุดตัวเลือกบรรทัดคำสั่งที่ช่วยทดสอบได้ ให้ใช้ปุ่มต่อไปนี้

adb shell cmd network_time_update_service help