NTP — چیست، پروتکل زمان و همگام‌سازی در برنامه‌ها

نویسنده: IT Sectr منتشر شده: 2026-07-14 زمان مطالعه: 9 دقیقه

NTP (Network Time Protocol) — پروتکل شبکه‌ای همگام‌سازی ساعت که دقت زمان را تا میلی‌ثانیه در شبکه‌های محلی و تا ده‌ها میلی‌ثانیه در شبکه سراسری تضمین می‌کند. این پروتکل که توسط دیوید میلز در سال 1985 توسعه یافت، در تمام سیستم‌های عامل مدرن، دستگاه‌های موبایل و تجهیزات شبکه برای هماهنگ‌سازی ساعت‌های داخلی با زمان مرجع UTC استفاده می‌شود. طبق داده‌های NTP Pool Project (2026)، بیش از 4 میلیارد دستگاه روزانه برای همگام‌سازی درخواست‌های NTP انجام می‌دهند.

نکات اصلی

  • NTP — پروتکل همگام‌سازی زمان از طریق شبکه، دقت از 1 ms (LAN) تا 50 ms (WAN)
  • سلسله‌مراتب استرات — سیستم سطوح (stratum 0–16)، که stratum 0 ساعت‌های اتمی مرجع هستند
  • تصحیح دریفت — NTP نه تنها زمان را تنظیم می‌کند، بلکه فرکانس کلاک را برای دقت پایدار تنظیم می‌کند
  • SNTP — نسخه ساده‌شده NTP برای دستگاه‌های با منابع محدود، استفاده در IoT و Android
  • امنیت — NTPv4 از احراز هویت از طریق کلیدهای متقارن و NTS (Network Time Security) پشتیبانی می‌کند

NTP چیست؟

NTP (Network Time Protocol) — یک پروتکل شبکه‌ای است که برای همگام‌سازی دقیق ساعت داخلی رایانه با منبع زمان مرجع از طریق شبکه با سوئیچینگ بسته طراحی شده است. این پروتکل که در RFC 5905 (NTPv4) توضیح داده شده، از یک سیستم سلسله‌مراتبی از سرورها استفاده می‌کند که هر سطح استرات (stratum) نامیده می‌شود. کلاینت NTP درخواست‌ها را به سرور ارسال می‌کند، زمان رفت و برگشت بسته (RTT) را اندازه‌گیری می‌کند و جابجایی ساعت خود را نسبت به زمان مرجع محاسبه می‌کند. الگوریتم تصحیح نه تنها جابجایی یک‌باره، بلکه دریفت مولد کلاک را نیز در نظر می‌گیرد که این امکان را فراهم می‌کند تا دقت برای مدت طولانی بدون درخواست‌های مکرر حفظ شود.

تاریخچه توسعه NTP

این پروتکل توسط دیوید میلز در سال 1985 برای شبکه ARPANET توسعه یافت. اولین مشخصات (RFC 958) یک الگوریتم همگام‌سازی ساده با دقت تا 100 ms را توصیف می‌کرد. NTPv3 (RFC 1305، 1992) الگوریتم فیلتراسیون و پردازش بهبودیافته تأخیر را اضافه کرد. NTPv4 (RFC 5905، 2010) — نسخه فعلی — شامل پشتیبانی از IPv6، پیکربندی خودکار سرورها و محافظت در برابر حملات از طریق Network Time Security (NTS) است. در طول 40 سال، این پروتکل از یک پروژه علمی به یک استاندارد زیرساختی تبدیل شده است که بدون آن کار تراکنش‌های مالی، مخابرات و شبکه‌های موبایل غیرممکن است.

NTP چگونه کار می‌کند

اصول کار NTP بر اساس اندازه‌گیری زمان عبور بسته در شبکه است. کلاینت درخواستی با علامت زمانی T1 (زمان ارسال محلی) ارسال می‌کند. سرور درخواست را در لحظه T2 (زمان سرور) دریافت می‌کند، پاسخ با علامت T3 ایجاد و ارسال می‌کند. کلاینت پاسخ را در لحظه T4 دریافت می‌کند. با دانستن هر چهار علامت زمانی، کلاینت جابجایی offset = ((T2 - T1) + (T3 - T4)) / 2 و تأخیر delay = (T4 - T1) - (T3 - T2) را محاسبه می‌کند. اگر تأخیر بیشتر از 1 ثانیه باشد، نتیجه غیرقابل اعتماد در نظر گرفته می‌شود — این محافظتی در برابر کانال‌های بیش از حد بارگذاری شده یا ناپایدار است.

تصحیح دریفت ساعت

تنظیم ساده زمان دقیق کافی نیست — مولد کوارتز روی دستگاه به دلیل دما، پیری و ولتاژ constantly دریفت می‌کند (عقب یا جلو می‌رود). NTP این مشکل را با الگوریتم PLL (Phase-Locked Loop) حل می‌کند: زمان را به زور تنظیم نمی‌کند، بلکه سرعت حرکت ساعت را تنظیم می‌کند. اگر دستگاه 0.1 ثانیه در ساعت جلو باشد، NTP سرعت ساعت سیستم را کاهش می‌دهد تا زمانی که دریفت جبران شود. این رویکرد امکان همگام‌سازی هر چند ساعت یک بار در شبکه‌های پایدار را فراهم می‌کند، نه هر 30 ثانیه.

cpp
// طرح ساده‌شده الگوریتم NTP
struct NTPPacket {
    uint8_t flags;      // LI، VN، حالت
    uint8_t stratum;    // سطح استرات سرور
    uint32_t refTimestamp;  // timestamp مرجع
    uint32_t originTimestamp; // T1
    uint32_t recvTimestamp;   // T2
    uint32_t xmitTimestamp;   // T3
};

// محاسبه جابجایی و تأخیر
double offset = ((t2 - t1) + (t3 - t4)) / 2.0;
double delay = (t4 - t1) - (t3 - t2);

استرات‌ها — سلسله‌مراتب NTP

کل سیستم NTP در یک سلسله‌مراتب سازماندهی شده است که هر سطح استرات (stratum) نامیده می‌شود. Stratum 0 — ساعت‌های مرجع: ساعت‌های اتمی، گیرنده‌های GPS یا سیگنال‌های رادیویی WWVB. این دستگاه‌ها مستقیماً به شبکه متصل نیستند. Stratum 1 — سرورهایی که مستقیماً به ساعت‌های مرجع متصل هستند. Stratum 2 زمان را از stratum 1 دریافت می‌کند، stratum 3 از stratum 2، و به همین ترتیب تا stratum 15. هر چه عدد استرات بالاتر باشد، دقت بالقوه کمتر است — هر سطح تأخیر و خطای کوچکی اضافه می‌کند. Stratum 16 به معنای عدم دسترسی به زمان (همگام‌سازی نشده) است.

استراتتوضیحاتدقت
Stratum 0ساعت‌های اتمی، GPS، سیگنال‌های رادیویینانوثانیه
Stratum 1سرورهای متصل به مرجعمیکروثانیه
Stratum 2سرورهای عمومی NTP1–10 ms
Stratum 3سرورهای محلی سازمان‌ها10–50 ms
Stratum 4+دستگاه‌های کلاینتتا 100 ms

انتخاب سرور بر اساس استرات

برای دستگاه‌های موبایل، سرورهای stratum 2 optimal هستند — تعداد آنها کافی است و تعادل خوبی بین دقت و دسترسی فراهم می‌کنند. به عنوان مثال، pool.ntp.org — مجموعه‌ای از هزاران سرور در سراسر جهان که به طور خودکار بار را توزیع می‌کند. برای برنامه‌های Android استفاده مستقیم از stratum 1 توصیه نمی‌شود: اولاً، بار اضافی بر سرورهای اولیه ایجاد می‌کند، و ثانیاً، دستگاه موبایل به دقت 10–50 ms نیاز دارد که stratum 2 آن را تأمین می‌کند. در شبکه‌های شرکتی، یک سرور محلی stratum 3-4 نصب می‌شود که با stratum 2 خارجی همگام‌سازی می‌کند.

SNTP — نسخه ساده‌شده NTP

SNTP (Simple Network Time Protocol, RFC 4330) — پیاده‌سازی ساده‌شده NTP برای دستگاه‌های با منابع محدود: میکروکنترلرها، سنسورهای IoT و برنامه‌های موبایل که نیاز به دقت بالا ندارند. بر خلاف NTP کامل، SNTP فیلتراسیون چندین سرور را انجام نمی‌دهد، دریفت ساعت را تحلیل نمی‌کند و از الگوریتم‌های پیچیده PLL استفاده نمی‌کند. کلاینت SNTP درخواست ارسال می‌کند، پاسخ دریافت و زمان را یک‌بار تنظیم می‌کند. دقت SNTP بسته به شبکه 10–100 ms است — این برای اکثریت قریب به اتفاق سناریوهای موبایل به جز تراکنش‌های مالی کافی است.

چه زمانی از SNTP به جای NTP استفاده کنیم

SNTP برای برنامه‌های Android که فقط نیاز به دریافت زمان فعلی از سرور دارند بدون حفظ همگام‌سازی مداوم مناسب است. به عنوان مثال، برنامه هنگام ورود زمان سرور را نمایش می‌دهد یا روزی یک بار همگام‌سازی می‌کند. NTP کامل برای سیستم‌های سروری، تجهیزات مخابراتی، پلتفرم‌های مالی و پایگاه‌های داده توزیع‌شده مورد نیاز است، جایی که دقت مداوم و نظارت بر دریفت حیاتی است. برای توسعه موبایل، SNTP کافی است — سرویس زمان داخلی Android از آن برای همگام‌سازی دوره‌ای با سرورهای Google استفاده می‌کند.

پیاده‌سازی NTP در Android

در برنامه‌های Android دریافت زمان دقیق از طریق NTP زمانی مورد نیاز است که زمان سیستم ممکن است توسط کاربر تغییر کند یا به دلیل عدم وجود شبکه از زمان واقعی متفاوت باشد. در Android کلاینت NTP عمومی داخلی وجود ندارد — توسعه‌دهندگان از کتابخانه Apache Commons Net SntpClient یا راه‌حل‌های شخص ثالث استفاده می‌کنند. در سال 2022 Google کلاس داخلی SntpClient را به Android API (از طریق Google Play Services) اضافه کرد، اما نیاز به پیکربندی دارد و برای استفاده عمومی مستند نشده است. رویکرد جایگزین — درخواست زمان از طریق REST API که timestamp سرور را در بدنه پاسخ برمی‌گرداند.

نمونه پیاده‌سازی کلاینت SNTP

پیاده‌سازی پایه SNTP در Android شامل ارسال بسته UDP به سرور NTP (مثلاً pool.ntp.org)، تجزیه پاسخ و استخراج زمان ارسال (T3 — Transmit Timestamp) است. کد باید timeout شبکه و خطاهای تجزیه را مدیریت کند — در برنامه واقعی این عملیات در پس‌زمینه انجام می‌شود و نتیجه تا همگام‌سازی بعدی کش می‌شود. کتابخانه Apache Commons Net کلاس آماده NTPUDPClient را ارائه می‌دهد که با حداقل تغییرات در Android قابل استفاده است، با افزودن وابستگی در build.gradle.

kotlin
// دریافت زمان NTP از طریق 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 و عوامل مؤثر

دقت NTP به چند عامل بستگی دارد: تأخیر شبکه (RTT)، پایداری کانال، بار سرور و کیفیت مولد کلاک محلی. در شبکه محلی با تأخیر کمتر از 1 ms، NTP به دقت 0.1–1 ms می‌رسد. از طریق اینترنت با تأخیر 10–50 ms، دقت به 10–50 ms کاهش می‌یابد. مهم‌تر از دقت یک‌باره، پایداری است: اگر تأخیر تغییر کند (jitter)، NTP برای محاسبه جابجایی قابل اعتماد به زمان بیشتری نیاز دارد. برای دستگاه‌های موبایل عامل اصلی ناپایداری، تغییر بین Wi-Fi و شبکه موبایل است که در آن تأخیر می‌تواند یک مرتبه بزرگی تغییر کند.

توصیه‌هایی برای توسعه موبایل

برای برنامه‌های Android حساس به زمان دقیق توصیه می‌شود: از چندین سرور NTP استفاده کرده و حداقل تأخیر را انتخاب کنید؛ در لحظات تغییر شبکه همگام‌سازی نکنید؛ آخرین زمان دریافت شده را کش کرده و از طریق System.currentTimeMillis تصحیح کنید. برای بازی‌ها و برنامه‌های بلادرنگ (NTP به دلیل تأخیر شبکه مناسب نیست) — از زمان سرور که در هر درخواست منتقل می‌شود استفاده کنید. در برنامه‌های تراکنش‌های مالی حتماً اختلاف با سرور را بررسی کنید — اگر تفاوت بیشتر از 5 ثانیه باشد، عملیات را به عنوان بالقوه ناامن مسدود کنید.

سؤالات متداول

NTP چیست و چه کاربردی دارد؟

NTP (Network Time Protocol) — پروتکل همگام‌سازی ساعت از طریق اینترنت. برای هماهنگ‌سازی زمان روی دستگاه‌ها با UTC مرجع استفاده می‌شود. بدون NTP، ساعت‌های رایانه به دلیل دریفت مولد کوارتز روزانه ثانیه‌ها خطا دارند که برای تراکنش‌های مالی، ثبت رویدادها و امنیت حیاتی است.

سلسله‌مراتب NTP چگونه است؟

سیستم NTP از سطوح — استرات‌ها استفاده می‌کند: stratum 0 (ساعت‌های اتمی و GPS)، stratum 1 (سرورهای متصل به مرجع)، stratum 2 (سرورهای NTP عمومی)، stratum 3–4 (سرورهای محلی)، stratum 5–15 (کلاینت‌ها). هر چه استرات بالاتر باشد، خطای بالقوه بیشتر است. Stratum 16 به معنی همگام‌سازی نشدن زمان است.

تفاوت NTP با SNTP چیست؟

SNTP — نسخه ساده‌شده NTP برای دستگاه‌های با منابع محدود. سرورها را فیلتر نمی‌کند، دریفت ساعت را تحلیل نمی‌کند و از PLL استفاده نمی‌کند. SNTP برای برنامه‌های موبایل که دقت 10–100 ms کافی است مناسب می‌باشد. NTP کامل برای سرورها، تجهیزات مخابراتی و سیستم‌های فینتک مورد نیاز است.

چگونه زمان دقیق را از طریق NTP در Android دریافت کنیم؟

از کتابخانه Apache Commons Net با کلاس NTPUDPClient استفاده کنید. به pool.ntp.org درخواست ارسال کنید، پاسخ را دریافت و Transmit Timestamp را استخراج کنید. همچنین می‌توانید از REST API سرور خود استفاده کنید که زمان سرور را در هدر Date یا بدنه پاسخ در قالب Unix Timestamp برمی‌گرداند.

چرا همگام‌سازی زمان روی دستگاه‌های موبایل مهم است؟

بدون همگام‌سازی NTP، زمان سیستم روی دستگاه می‌تواند دقیقه‌ها و ساعت‌ها تفاوت داشته باشد. این کار اعلان‌های push، گواهی‌های SSL (بررسی اعتبار)، لاگ‌ها، زمان‌بندهای وظایف و پروتکل‌های رمزنگاری را مختل می‌کند. در برنامه‌های با تراکنش‌های مالی، عدم همگام‌سازی بیش از 5 ثانیه تهدید امنیتی محسوب می‌شود.

خلاصه

  • NTP — پروتکل همگام‌سازی زمان شبکه که دقت از 1 ms (LAN) تا 50 ms (WAN) را از طریق سلسله‌مراتب استرات stratum 0–16 فراهم می‌کند
  • تصحیح دریفت — NTP نه تنها زمان را تنظیم می‌کند، بلکه فرکانس کلاک را از طریق PLL تنظیم می‌کند و دقت را ساعت‌ها بین همگام‌سازی‌ها حفظ می‌کند
  • سلسله‌مراتب استرات — هر سطح (stratum) خطای بالقوه اضافه می‌کند؛ برای دستگاه‌های موبایل سرورهای stratum 2 مانند pool.ntp.org optimal هستند
  • SNTP — نسخه ساده‌شده NTP برای IoT و Android، بدون استفاده از فیلتراسیون و PLL؛ دقت 10–100 ms برای بیشتر سناریوها کافی است
  • پیاده‌سازی در Android — از طریق Apache Commons Net (NTPUDPClient) یا REST API با timestamp سرور؛ پلتفرم کلاینت NTP عمومی داخلی ندارد
  • امنیت — NTPv4 از Network Time Security (NTS) برای محافظت در برابر جعل پاسخ پشتیبانی می‌کند؛ حیاتی برای برنامه‌های مالی و شرکتی
  • عوامل دقت — RTT، jitter، تغییر شبکه؛ برنامه‌های موبایل به دقت 10–50 ms نیاز دارند، اما عملیات بحرانی نیاز به بررسی اختلاف با سرور دارند

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید