NTP (Network Time Protocol) هو بروتوكول شبكة لمزامنة الوقت يوفر دقة تصل إلى ملي ثانية في الشبكات المحلية وعشرات الملي ثانية في الشبكة العالمية. تم تطوير البروتوكول بواسطة ديفيد ميلز في عام 1985، ويُستخدم في جميع أنظمة التشغيل الحديثة والأجهزة المحمولة ومعدات الشبكات لمزامنة الساعات الداخلية مع الوقت المرجعي UTC. وفقًا لمشروع NTP Pool (2026)، يقوم أكثر من 4 مليارات جهاز يوميًا بإجراء طلبات NTP للمزامنة.
الرئيسية
NTP (Network Time Protocol) هو بروتوكول شبكة مصمم للمزامنة الدقيقة لساعة الكمبيوتر الداخلية مع مصدر الوقت المرجعي عبر شبكة بتبديل الحزم. الموضح في RFC 5905 (NTPv4)، يستخدم البروتوكول نظامًا هرميًا من الخوادم، حيث يُسمى كل مستوى طبقة. يرسل عميل NTP طلبات إلى الخادم، ويقيس وقت رحلة الحزمة ذهابًا وإيابًا (RTT)، ويحسب انحراف ساعته الخاصة بالنسبة للوقت المرجعي. تأخذ خوارزمية التصحيح في الاعتبار ليس فقط الانحراف الفردي ولكن أيضًا انحراف مولد الساعة، مما يسمح بالحفاظ على الدقة لفترات طويلة دون طلبات متكررة.
تم تطوير البروتوكول بواسطة ديفيد ميلز في عام 1985 لشبكة ARPANET. وصفت المواصفات الأولى (RFC 958) خوارزمية مزامنة بسيطة بدقة تصل إلى 100 مللي ثانية. أضاف NTPv3 (RFC 1305، 1992) خوارزمية تصفية وتحسين معالجة التأخير. NTPv4 (RFC 5905، 2010) — الإصدار الحالي — يتضمن دعم IPv6، والتكوين التلقائي للخوادم، والحماية من الهجمات عبر Network Time Security (NTS). على مدى 40 عامًا، تطور البروتوكول من مشروع بحثي إلى معيار بنية تحتية لا يمكن بدونه تنفيذ المعاملات المالية والاتصالات والشبكات المحمولة.
يعتمد مبدأ عمل NTP على قياس وقت رحلة الحزمة في الشبكة. يرسل العميل طلبًا مع طابع زمني T1 (وقت الإرسال المحلي). يتلقى الخادم الطلب في الوقت T2 (وقت الخادم)، ويُنشئ ردًا مع طابع زمني T3 ويرسله. يتلقى العميل الرد في الوقت T4. باستخدام جميع الطوابع الزمنية الأربعة، يحسب العميل الانحراف = ((T2 - T1) + (T3 - T4)) / 2 والتأخير = (T4 - T1) - (T3 - T2). إذا تجاوز التأخير ثانية واحدة، تُعتبر النتيجة غير موثوقة — وهذا يحمي من القنوات المثقلة أو غير المستقرة.
مجرد ضبط الوقت الصحيح لا يكفي — فمذبذب الكوارتز في الجهاز ينحرف باستمرار (يتقدم أو يتأخر) بسبب درجة الحرارة والتقادم والجهد. NTP يحل هذه المشكلة باستخدام خوارزمية PLL (Phase-Locked Loop): فهو لا يضبط الوقت بالقوة، بل يعدل سرعة الساعة. إذا كان الجهاز يتقدم بمقدار 0.1 ثانية في الساعة، يقوم NTP بإبطاء ساعة النظام حتى يتم تعويض الانحراف. يسمح هذا النهج بالمزامنة كل بضع ساعات على الشبكات المستقرة، بدلاً من كل 30 ثانية.
// Simplified NTP algorithm schema
struct NTPPacket {
uint8_t flags; // LI, VN, Mode
uint8_t stratum; // server stratum level
uint32_t refTimestamp; // reference timestamp
uint32_t originTimestamp; // T1
uint32_t recvTimestamp; // T2
uint32_t xmitTimestamp; // T3
};
// Calculate offset and delay
double offset = ((t2 - t1) + (t3 - t4)) / 2.0;
double delay = (t4 - t1) - (t3 - t2);
نظام NTP بأكمله منظم في تسلسل هرمي، حيث يُسمى كل مستوى طبقة. الطبقة 0 هي الساعة المرجعية: الساعات الذرية، وأجهزة استقبال GPS، أو إشارات الراديو WWVB. هذه الأجهزة غير متصلة مباشرة بالشبكة. الطبقة 1 — الخوادم المتصلة مباشرة بالساعات المرجعية. الطبقة 2 تتلقى الوقت من الطبقة 1، الطبقة 3 من الطبقة 2، وهكذا حتى الطبقة 15. كلما زاد رقم الطبقة، انخفضت الدقة المحتملة — يضيف كل مستوى تأخيرًا صغيرًا وخطأً. الطبقة 16 تعني أن الوقت غير متاح (غير متزامن).
| الطبقة | الوصف | الدقة |
|---|---|---|
| Stratum 0 | الساعات الذرية، GPS، إشارات الراديو | نانو ثانية |
| Stratum 1 | الخوادم المتصلة بالمرجع | ميكرو ثانية |
| Stratum 2 | خوادم NTP العامة | 1–10 مللي ثانية |
| Stratum 3 | الخوادم المحلية للمؤسسات | 10–50 مللي ثانية |
| Stratum 4+ | أجهزة العميل | حتى 100 مللي ثانية |
بالنسبة للأجهزة المحمولة، خوادم الطبقة 2 هي الأمثل — فهي كافية وتوفر توازنًا جيدًا بين الدقة والتوفر. على سبيل المثال، pool.ntp.org هو مجموعة من آلاف الخوادم حول العالم توزع الحمل تلقائيًا. لتطبيقات Android، لا يُنصح باستخدام الطبقة 1 مباشرة: أولاً، يخلق ذلك حملاً زائدًا على الخوادم الأولية، وثانيًا، يحتاج الجهاز المحمول فقط إلى دقة 10–50 مللي ثانية، والتي توفرها الطبقة 2. في الشبكات المؤسسية، يتم إعداد خادم محلي من الطبقة 3-4 يتزامن مع طبقة 2 خارجية.
SNTP (Simple Network Time Protocol، RFC 4330) هو تطبيق مبسط لـ NTP للأجهزة محدودة الموارد: المتحكمات الدقيقة، وأجهزة استشعار IoT، والتطبيقات المحمولة التي لا تتطلب دقة عالية. على عكس NTP الكامل، لا يقوم SNTP بتصفية خوادم متعددة، ولا يحلل انحراف الساعة، ولا يستخدم خوارزميات PLL المعقدة. يرسل عميل SNTP طلبًا، ويتلقى ردًا، ويضبط الوقت مرة واحدة. دقة SNTP هي 10–100 مللي ثانية اعتمادًا على الشبكة — وهذا كافٍ للغالبية العظمى من السيناريوهات المحمولة، باستثناء المعاملات المالية.
SNTP مناسب لتطبيقات Android التي تحتاج ببساطة إلى الحصول على الوقت الحالي من الخادم دون الحفاظ على مزامنة مستمرة. على سبيل المثال، يعرض التطبيق وقت الخادم عند تسجيل الدخول أو يتزامن مرة واحدة يوميًا. يتطلب NTP الكامل لأنظمة الخوادم، ومعدات الاتصالات، والمنصات المالية، وقواعد البيانات الموزعة حيث تكون الدقة المستمرة ومراقبة الانحراف أمرًا بالغ الأهمية. للتطوير المحمول، SNTP كافٍ — تستخدم خدمة الوقت المضمنة في Android ذلك للمزامنة الدورية مع خوادم Google.
في تطبيقات Android، يلزم الحصول على الوقت الدقيق عبر NTP عندما يمكن تغيير وقت النظام بواسطة المستخدم أو يختلف عن الوقت الفعلي بسبب عدم وجود شبكة. لا يحتوي Android على عميل NTP عام مدمج — يستخدم المطورون مكتبة Apache Commons Net SntpClient أو حلول جهات خارجية. في عام 2022، أضافت Google فئة SntpClient داخلية إلى Android API (عبر Google Play Services)، لكنها تتطلب تكوينًا وغير موثقة للاستخدام العام. النهج البديل هو طلب الوقت عبر REST API الذي يُرجع الطابع الزمني للخادم في نص الاستجابة.
يتكون التنفيذ الأساسي لـ SNTP على Android من إرسال حزمة UDP إلى خادم NTP (مثل pool.ntp.org)، وتحليل الاستجابة، واستخراج الطابع الزمني للإرسال (T3). يجب أن يعالج الكود مهلات الشبكة وأخطاء التحليل — في التطبيق الحقيقي، تتم هذه العملية في خيط خلفي، ويتم تخزين النتيجة مؤقتًا حتى المزامنة التالية. توفر مكتبة Apache Commons Net فئة NTPUDPClient جاهزة يمكن استخدامها في Android مع تعديلات طفيفة بإضافة التبعية إلى build.gradle.
// Get NTP time via Apache Commons Net
fun getNtpTime(server: String = "pool.ntp.org"): Date? {
return try {
val client = NTPUDPClient()
client.setDefaultTimeout(5000)
val info = client.getTime(InetAddress.getByName(server))
client.close()
Date(info.getMessage().getTransmitTimeStamp().getTime())
} catch (e: Exception) {
null
}
}
تعتمد دقة NTP على عدة عوامل: تأخير الشبكة (RTT)، واستقرار القناة، وحمل الخادم، وجودة مولد الساعة المحلي. في شبكة محلية بتأخير أقل من 1 مللي ثانية، يحقق NTP دقة 0.1–1 مللي ثانية. عبر الإنترنت مع تأخير 10–50 مللي ثانية، تنخفض الدقة إلى 10–50 مللي ثانية. الأهم من الدقة الفردية هو الاستقرار: إذا كان التأخير متغيرًا (jitter)، يحتاج NTP إلى وقت أطول لحساب انحراف موثوق. للأجهزة المحمولة، عامل عدم الاستقرار الرئيسي هو التبديل بين Wi-Fi والشبكات المحمولة، حيث يمكن أن يتغير التأخير بمقدار كبير.
لتطبيقات Android الحساسة للوقت الدقيق، يُوصى بـ: استخدام خوادم NTP متعددة واختيار أقل تأخير؛ تجنب المزامنة أثناء تبديل الشبكات؛ تخزين آخر وقت تم الحصول عليه مؤقتًا وتعديله عبر System.currentTimeMillis. للألعاب والتطبيقات في الوقت الفعلي (NTP غير مناسب هنا بسبب زمن الوصول للشبكة) — استخدم وقت الخادم المُرسل في كل طلب. في التطبيقات المالية، تحقق دائمًا من الاختلاف مع الخادم — إذا تجاوز الفرق 5 ثوانٍ، امنع العملية باعتبارها غير آمنة.
الأسئلة الشائعة
NTP (Network Time Protocol) هو بروتوكول مزامنة الساعة عبر الإنترنت. هو مطلوب لمزامنة الوقت على الأجهزة مع مرجع UTC. بدون NTP، تنحرف ساعات الكمبيوتر بثوانٍ في اليوم بسبب انحراف مذبذب الكوارتز، وهو أمر بالغ الأهمية للمعاملات المالية والتسجيل والأمان.
يستخدم نظام NTP مستويات — طبقات: الطبقة 0 (الساعات الذرية و GPS)، الطبقة 1 (الخوادم المتصلة بالمرجع)، الطبقة 2 (خوادم NTP العامة)، الطبقة 3–4 (الخوادم المحلية)، الطبقة 5–15 (العملاء). كلما ارتفعت الطبقة، زاد الخطأ المحتمل. الطبقة 16 تعني أن الوقت غير متزامن.
SNTP هو نسخة مبسطة من NTP للأجهزة محدودة الموارد. لا يقوم بتصفية الخوادم، ولا يحلل انحراف الساعة، ولا يستخدم PLL. SNTP مناسب للتطبيقات المحمولة حيث دقة 10–100 مللي ثانية كافية. هناك حاجة إلى NTP كامل للخوادم ومعدات الاتصالات وأنظمة التكنولوجيا المالية.
استخدم مكتبة Apache Commons Net مع فئة NTPUDPClient. أرسل طلبًا إلى pool.ntp.org، واحصل على الرد، واستخرج الطابع الزمني للإرسال. بدلاً من ذلك، استخدم REST API لخادمك الذي يُرجع وقت الخادم في رأس Date أو في نص الاستجابة بتنسيق Unix Timestamp.
بدون مزامنة NTP، يمكن أن يختلف وقت النظام على الجهاز بدقائق أو ساعات. هذا يعطل إشعارات الدفع، والتحقق من شهادات SSL، والسجلات، وجدولة المهام، والبروتوكولات المشفرة. في التطبيقات المالية، يعتبر الاختلاف لأكثر من 5 ثوانٍ تهديدًا أمنيًا.
الخلاصة
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.
اقرأ أيضًا