নেটওয়ার্ক টাইম ডিটেকশন

Android ডিভাইস অটোমেটিক কোনও নেটওয়ার্ক সোর্স থেকে সঠিক Unix epoch টাইম পাওয়ার চেষ্টা করে। Android, সময় সংক্রান্ত তথ্য পেতে Simple Network Time Protocol (SNTP) ব্যবহার করে, যা User Datagram Protocol (UDP) ব্যবহার করে।

এই পৃষ্ঠায় বর্ণিত কম্পোনেন্টগুলি অটোমেটিক সময় শনাক্তকরণ সিস্টেমের অংশ, যা নেটওয়ার্ক টাইম অরিজিন নামে পরিচিত। ডিভাইসে অটোমেটিক সময় শনাক্তকরণ কাজ করলে এবং time_detector পরিষেবা এটি ব্যবহার করার জন্য কনফিগার করা থাকলে, Android ডিভাইসের সিস্টেম ক্লক সেট করতে নেটওয়ার্ক টাইম সার্ভার থেকে পাওয়া টাইম সিগন্যাল ব্যবহার করা যেতে পারে।

ডিফল্ট হিসেবে, 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 কনফিগারেশন config.xml ফাইলে আছে: frameworks/base/core/res/res/values/config.xml:

কনফিগারেশন কী AOSP ভ্যালু বর্ণনা
config_ntpRetry 3 রিফ্রেশ করা না গেলে, সিস্টেম কতবার কম NTP পোলিং ইন্টারভ্যাল (config_ntpPollingIntervalShorter) সহ নেটওয়ার্ক টাইম পোলিং করার চেষ্টা করে তার সংখ্যা এটি। এর পরে সিস্টেমটি সাধারণ পোলিং ইন্টারভ্যাল (config_ntpPollingInterval) ব্যবহার করে। 0-এর থেকে কম ভ্যালু থাকলে, এর অর্থ হল সিস্টেমটি সফলভাবে রিফ্রেশ করতে না পারা পর্যন্ত কম NTP পোলিং ইন্টারভ্যালে পোলিং করার চেষ্টা করে।
config_ntpPollingInterval 64800000 (১৮ ঘণ্টা) মিলিসেকেন্ডে সাধারণ নেটওয়ার্ক টাইম পোলিং ইন্টারভাল।
config_ntpPollingIntervalShorter 60000 (১ মিনিট) মিলিসেকেন্ডে আবার চেষ্টা করার নেটওয়ার্ক টাইম পোলিং ইন্টারভ্যাল। সময় রিফ্রেশ করা না গেলে এটি ব্যবহার করা হয়।
config_ntpServers একটি এন্ট্রি: ntp://time.android.com সঠিক সময় পাওয়ার জন্য ব্যবহার করা NTP সার্ভার। আইটেমকে এই ফর্ম্যাটে থাকতে হবে: ntp://<host>[:port].
এটি রেজিস্টার করা IANA URI স্কিম নয়।
config_ntpTimeout ৫০০০ টাইমআউট হওয়ার আগে NTP সার্ভারের উত্তরের জন্য মিলিসেকেন্ডে কত সময় অপেক্ষা করতে হবে।

সার্ভার

সাধারণত, AOSP time.android.com-এ টাইম সার্ভার ব্যবহার করে, এটি হল Google পাবলিক NTP-এর ছদ্মনাম। এই পরিষেবার কোনও SLA নেই। আরও তথ্যের জন্য, Google পাবলিক NTP সংক্রান্ত প্রায়শই জিজ্ঞাসিত প্রশ্ন দেখুন।

একাধিক সার্ভার কাজ করে

Android 14 ও তার পরবর্তী যেকোনও ভার্সনের জন্য, ফ্রেমওয়ার্ক একাধিক NTP সার্ভার সাপোর্ট করে। এটি এমন পরিস্থিতিতে সাহায্য করে যেখানে ডিভাইসগুলি বিশ্বব্যাপী একটি একক কনফিগারেশনের সাথে বিতরণ করা হয়, কিন্তু যেখানে time.android.com-এর মতো সার্ভারগুলিতে অ্যাক্সেস নির্দিষ্ট কিছু জায়গায় সীমাবদ্ধ।

config_ntpServers কনফিগারেশন কী-তে উল্লেখ করা প্রতিটি সার্ভার অ্যালগরিদম চেষ্টা করে। অ্যালগরিদম এমন কোনও সার্ভার খুঁজে পেলে যা উত্তর দেয়, সিস্টেম সেটি রিফ্রেশ করতে না পারা পর্যন্ত বা ডিভাইস রিবুট না হওয়া পর্যন্ত সেই সার্ভার ব্যবহার করা চালিয়ে যায়।

যথার্থতা

Android-এর ডিফল্ট নেটওয়ার্ক টাইম সিঙ্ক, দিনে একবার একটি টাইম কোয়েরি সহ SNTP ব্যবহার করে যাতে এটি সবসময় সাম্প্রতিক টাইম সিগন্যাল পায়।

Android-এর SNTP প্রয়োগের ক্ষেত্রে নেটওয়ার্ক লেটেন্সি এফেক্ট হল সময়ের ভুল হওয়ার একটি গুরুত্বপূর্ণ কারণ। SNTP ধরে নেয় যে নেটওয়ার্ক বিলম্ব সিমেট্রিক, অর্থাৎ, অনুরোধের জন্য নেটওয়ার্ক লেটেন্সি এবং উত্তরের জন্য নেটওয়ার্ক লেটেন্সি একই এবং সঠিক সময়টি নেটওয়ার্ক রাউন্ড ট্রিপের ঠিক মাঝখানে থাকে। প্রায়শই, নেটওয়ার্ক রাউন্ড ট্রিপ টাইম কয়েকশ মিলি সেকেন্ডের অর্ডারে থাকে এবং ওয়্যারড নেটওয়ার্কে লেটেন্সি প্রায় সিমেট্রিক হয়, যার ফলে ইনঅ্যাকুরেসি লেভেল ব্যবহারকারীদের কাছে প্রায় অদৃশ্য থাকে। তবে, মোবাইল বা রেডিও টেলিফোনিতে এমন অনেক পর্যায় আছে যেখানে নেটওয়ার্ক ট্রানজ্যাকশনে তুলনামূলকভাবে দীর্ঘ, অপ্রতিসম বিলম্ব হতে পারে, যার ফলে আরও বেশি ভুল হতে পারে।

config_ntpTimeout-এর জন্য AOSP ডিফল্ট সেটিং 5000 মিলিসেকেন্ডে সেট করা থাকলে এবং সমস্ত নেটওয়ার্ক লেটেন্সি শুধুমাত্র ইনবাউন্ড বা আউটবাউন্ড লেগের উপর কেন্দ্রীভূত হলে, সর্বাধিক তাত্ত্বিক ত্রুটি প্রায় ২.৫ সেকেন্ড হয়।

Android ডিভাইসের সময় সিগন্যাল পাওয়ার পর অতিবাহিত সময় সঠিকভাবে ট্র্যাক করার ক্ষমতার উপর সামগ্রিক সিস্টেম ক্লকের নির্ভুলতাও নির্ভর করে। এটি Android-এ সব টাইমকিপিংয়ের ক্ষেত্রে একটি সমস্যা, শুধু নেটওয়ার্ক টাইম শনাক্তকরণের ক্ষেত্রে নয়, যার জন্য time_detector পরিষেবা পুরনো সময়ের সাজেশনকে উপেক্ষা করে। time_detector পরিষেবাতে ফ্রেশ সময়ের সাজেশন প্রদান করতে এবং time_detector পরিষেবা যাতে কম-অগ্রাধিকার এবং প্রায়ই কম-নির্ভুলতা বা কখনও কখনও ভুল সময় সোর্স যেমন telephony-এ ফিরে না যায় তা নিশ্চিত করতে, config_ntpPollingInterval ইন্টারভ্যাল ব্যবহার করে network_time_update_service পরিষেবা নিয়মিত রিফ্রেশ হয়।

অটোমেটিক সময় শনাক্তকরণ ব্যবহার করা হলে, ডিভাইস সিস্টেম ক্লকের নির্ভুলতা 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