NTP: ساعت شبکه
جواب کوتاه
NTP قاعدهای است که دستگاهها با آن ساعتشان را از یک سرور زمان درست میکنند، تا همهی دستگاهها تا چند هزارم ثانیه با زمان جهانی یکی باشند. ساعتها لایهلایهاند: ساعت مرجع، مثل ساعت اتمی، در لایهی صفر است و هر سرور وقتش را از لایهی بالاتر میگیرد. NTP با چهار زمان، هم اختلاف ساعت و هم تأخیر راه را حساب میکند؛ روی UDP و پورت ۱۲۳.
سه کلمه
- NTPکوتاهشدهی Network Time Protocol، یعنی «قاعدهی زمان شبکه»: دستگاهها ساعتشان را با آن از یک سرور زمان درست میکنند.
- لایه (stratum)فاصلهی هر ساعت از ساعت مرجع: صفر خود ساعت مرجع است، یک کسی که مستقیم به آن وصل است، و همینطور پایینتر.
- اختلاف ساعتاینکه ساعت دستگاه شما چقدر از ساعت درست جلو یا عقب است؛ همان چیزی که NTP حساب و درست میکند.
چرا ساعت مهم است
ساعت هر رایانه کمی تند یا کند کار میکند، و اگر کسی درستش نکند، پس از مدتی از زمان درست فاصله میگیرد. شاید فکر کنید چند ثانیه مهم نیست؛ ولی در شبکه مهم است.
گواهی هر سایت تاریخ اعتبار دارد (درس HTTPS)؛ اگر ساعت دستگاه شما غلط باشد، مرورگر ممکن است گواهی درست را نامعتبر بداند. گزارشهای سرورها هم وقتی به درد میخورند که ساعتشان یکی باشد، تا بشود فهمید چه چیزی پیش از چه چیزی رخ داده است. NTP برای همین است: همهی دستگاهها را تا چند هزارم ثانیه با زمان جهانی یکی میکند. از پیش از ۱۹۸۵ کار میکند و از قدیمیترین قاعدههای اینترنت است که هنوز به کار میرود.
برج ساعت
فرض کنید در شهری قدیمی زندگی میکنید. رصدخانه ساعتی بسیار دقیق دارد. برج ساعت شهر وقتش را از رصدخانه میگیرد، ساعتفروشیها از برج، و مردم ساعت مچیشان را با ساعتفروشی کوک میکنند:
NTP همین پلهها را دارد و به هر پله لایه میگوید. لایهی ۰ خود ساعتهای مرجعاند، مثل ساعت اتمی یا گیرندهی ماهوارههای مکانیابی؛ لایهی ۱ رایانهای است که مستقیم به آنها وصل است و تا چند میلیونیم ثانیه دقیق است؛ لایهی ۲ از لایهی ۱ از راه شبکه وقت میگیرد، و همینطور پایینتر. بالاترین عدد ۱۵ است و ۱۶ یعنی «همگام نیستم». یک سرور معمولا از چند سرور بالاتر میپرسد تا اگر یکی اشتباه بود، کار خراب نشود.
پرسیدن ساعت با پای پیاده
اگر پیاده تا برج بروید و ساعت را بپرسید، تا برگردید، آن ساعت کهنه شده است. باید زمان راه را هم حساب کرد. NTP همین کار را با چهار زمان میکند (عددها نمونهاند، به هزارم ثانیه):
- t0: دستگاه شما پرسش را میفرستد، به ساعت خودش.
- t1: پرسش به سرور میرسد، به ساعت سرور.
- t2: سرور جواب را میفرستد، به ساعت سرور.
- t3: جواب به دستگاه شما میرسد، به ساعت خودش.
با این چهار عدد، دو حساب ساده انجام میشود. تأخیر راه: کل زمانی که از فرستادن تا رسیدن گذشت، منهای زمانی که سرور کار کرد؛ یعنی (t3 − t0) − (t2 − t1)، که در مثال میشود ۵ منهای ۱، یعنی ۴. اختلاف ساعت: ((t1 − t0) + (t2 − t3)) ÷ 2، که در مثال میشود ۱۲ بهعلاوهی ۸، تقسیم بر ۲، یعنی ۱۰. پس ساعت دستگاه شما ۱۰ هزارم ثانیه از سرور عقب است، و NTP آن را درست میکند. این حساب فرض میکند رفت و برگشت هماندازهاند.
چقدر دقیق
روی اینترنت، NTP معمولا ساعت را تا چند ده هزارم ثانیه درست نگه میدارد، و در یک شبکهی محلی خوب، بهتر از یک هزارم ثانیه. اگر راه رفت و برگشت هماندازه نباشد یا شبکه شلوغ باشد، خطا میتواند به ۱۰۰ هزارم ثانیه یا بیشتر برسد؛ برای همین فرض «رفت و برگشت هماندازه» مهم است.
NTP روی UDP و پورت ۱۲۳ کار میکند (درس پورتهای رایج). فقط زمان جهانی (UTC) را میدهد، نه منطقهی زمانی یا ساعت تابستانی را؛ ولی از ثانیههای کبیسهای که در راه است خبر میدهد. نسخهی امروزش ۴ است.
روی دستگاه خودتان، و امنیت
لازم نیست کاری بکنید: سیستمعاملها ساعت را خودکار از سرور زمان میگیرند. مثلا سرویس زمان ویندوز الگوریتمهای NTP را به کار میبرد و رایانهای که عضو شبکهی یک سازمان نیست، بهطور پیشفرض با یک سرور زمان همگام میشود. در شبکهی یک سازمان، دستگاهها معمولا وقتشان را از سرور زمان خود سازمان میگیرند.
اگر کسی جواب دروغین به پرسش زمان بدهد، میتواند ساعت دستگاه را به هم بزند. برای همین روشی به نام NTS ساخته شده که با TLS جواب سرور زمان را امن میکند.
سه اشتباه
- «NTP منطقهی زمانی و ساعت تابستانی را هم میفرستد.»NTP فقط زمان جهانی (UTC) را میدهد؛ منطقهی زمانی را خود دستگاه از تنظیمات خودش حساب میکند.
- «هر چه عدد لایه کمتر، ساعت حتما دقیقتر.»عدد لایه فقط فاصله از ساعت مرجع است؛ گاهی یک سرور لایهی ۳ از یک سرور لایهی ۲ بهتر است.
- «چند ثانیه اختلاف ساعت مهم نیست.»سنجیدن گواهیها، ترتیب گزارشها و هماهنگی میان دستگاهها به ساعت درست بسته است؛ برای همین NTP دنبال چند هزارم ثانیه است.
جمعبندی. آنچه از این درس با خودتان میبرید.
- NTP ساعت دستگاهها را با زمان جهانی (UTC) همگام میکند؛ روی UDP، پورت ۱۲۳.
- لایهها: ۰ ساعت مرجع، ۱ وصل به آن، ۲ از ۱ و همینطور؛ ۱۶ یعنی همگام نیست.
- چهار زمان t0 تا t3؛ اختلاف ساعت = ((t1 − t0) + (t2 − t3)) ÷ ۲؛ تأخیر = (t3 − t0) − (t2 − t1).
- دقت معمول روی اینترنت چند ده هزارم ثانیه، در شبکهی محلی بهتر از یک هزارم.
- NTP منطقهی زمانی نمیفرستد؛ NTS آن را با TLS امن میکند.
خودتان را بسنجید
۱۵ پرسش، هر بار تازه از میان ۳۰ پرسش این درس. آخر آزمون فقط کارنامه را میبینید: چند درست، چند نادرست.