নেটওয়ার্ক সময় সনাক্তকরণ

অ্যান্ড্রয়েড ডিভাইসগুলি স্বয়ংক্রিয়ভাবে একটি নেটওয়ার্ক উত্স থেকে সঠিক ইউনিক্স যুগের সময় পাওয়ার চেষ্টা করে। অ্যান্ড্রয়েড সিম্পল নেটওয়ার্ক টাইম প্রোটোকল (SNTP) ব্যবহার করে, যা ব্যবহারকারী ডেটাগ্রাম প্রোটোকল (UDP) ব্যবহার করে, সময়ের তথ্য পেতে।

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

ডিফল্টরূপে, অ্যান্ড্রয়েড প্রাথমিক স্বয়ংক্রিয় সময় সনাক্তকরণের উত্স হিসাবে নেটওয়ার্ক টাইম উত্স ব্যবহার করে৷

নেটওয়ার্ক সময় সনাক্তকরণ সিস্টেম

network_time_update_service যেটি অ্যান্ড্রয়েড সিস্টেম সার্ভারে চলে তা নেটওয়ার্ক সময় সনাক্তকরণ সিস্টেম প্রয়োগ করে। পরিষেবাটি পর্যায়ক্রমে একটি সার্ভার থেকে একটি সময় সংকেত পেতে SNTP ব্যবহার করে। পরিষেবাটি নেটওয়ার্ক সংযোগও নিরীক্ষণ করে এবং একটি টাইম রিফ্রেশ ট্রিগার করে যখন দুর্বল সংযোগের বর্ধিত সময়ের পরে কোনও সাম্প্রতিক সময়ের সংকেত পাওয়া যায় না।

network_time_update_service পরিষেবাটি বুট হওয়ার পরে এবং যখন নেটওয়ার্ক সংযোগ প্রথম প্রতিষ্ঠিত হয় তখন একটি সময় সংকেত পাওয়ার চেষ্টা করে। পরিষেবাটি তখন তাজা রাখা সর্বশেষ সংকেত রাখার চেষ্টা করে৷ এটি স্বতন্ত্র অ্যান্ড্রয়েড ডিভাইসের প্রয়োজনীয়তাগুলিকে যথেষ্ট লোডের সাথে ভারসাম্যপূর্ণ করে যা বিশ্বব্যাপী অনেক অ্যান্ড্রয়েড ডিভাইস তাদের সময়কে রিফ্রেশ করে তৈরি করতে পারে।

network_time_update_service অভ্যন্তরীণ API ব্যবহার করে time_detector পরিষেবাতে নেটওয়ার্ক সময়ের পরামর্শ জমা দেয়। অন্যান্য অ্যান্ড্রয়েড প্ল্যাটফর্ম উপাদানগুলি তারপর এই নেটওয়ার্ক সময় পরামর্শগুলি ব্যবহার করে৷

নেটওয়ার্ক টাইম অরিজিন থেকে পরামর্শ পাওয়ার পর, 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 রিফ্রেশ করতে ব্যর্থ হওয়ার পরে, ব্যাক অফ করার আগে এবং স্বাভাবিক পোলিং ব্যবধান ( config_ntpPollingInterval ) ব্যবহার করার আগে সিস্টেমটি একটি ছোট NTP পোলিং ব্যবধান ( config_ntpPollingIntervalShorter ) সহ নেটওয়ার্ক টাইম পোলিং করার চেষ্টা করে। 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 পাবলিক NTP- এর একটি উপনাম। এই পরিষেবার কোন SLA নেই। আরও তথ্যের জন্য, Google পাবলিক NTP FAQ দেখুন।

একাধিক সার্ভার সমর্থন

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

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

নির্ভুলতা

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

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

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

সামগ্রিক সিস্টেম ঘড়ির নির্ভুলতাও একটি সময় সংকেত প্রাপ্তির পরে নিখুঁতভাবে অতিবাহিত সময় ট্র্যাক করার 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 (অবস্থান) সনাক্ত করতে পারে যখন এটির নেটওয়ার্ক সময়ের তথ্য থাকে তখন দ্রুত ঠিক করে।

ডিবাগিং এবং টেস্টিং

নিম্নলিখিত বিভাগে ডিবাগিং এবং নেটওয়ার্ক সময় সনাক্তকরণ বৈশিষ্ট্য পরীক্ষা করার জন্য শেল কমান্ড বর্ণনা করা হয়েছে।

নেটওয়ার্ক_টাইম_আপডেট_সার্ভিস পরিষেবার সাথে ইন্টারঅ্যাক্ট করুন

network_time_update_service এর বর্তমান অবস্থা ডাম্প করতে, ব্যবহার করুন:

adb shell cmd network_time_update_service dump

কমান্ড লাইন বিকল্পগুলির একটি সেট দেখতে যা পরীক্ষায় সহায়তা করতে পারে, ব্যবহার করুন:

adb shell cmd network_time_update_service help