סנכרון בעזרת NTP
**Network Time Protocol** (בראשי תיבות: **NTP**) הוא פרוטוקול תקשורת המאפשר להתקני מחשוב לסנכרן את השעון שלהם, היינו את השעה ביום ואת התאריך (Time Of Day -TOD), לשעון מרכזי ומדויק המצוי ברשת. הפרוטוקול מתבסס על תקשורת TCP/IP. הפרוטוקול מתבסס על service או daemon שרץ על שרת המחובר לשעון אטומי, מקלט GPS או התקן זמן מדויק אחר, השרת עצמו נקרא לרוב שרת זמן (time server). כל מחשב המעוניין (ומורשה, במקרים מסוימים) להסתנכרן מול אותו התקן זמן מזדהה מול השרת בעזרת פרוטוקולים מוכרים או באופן אנונימי, אם הדבר מאופשר, ואז הוא יכול להסתנכרן מולו. בין השאר מתמודד הפרוטוקול עם השבתה של שרתי הזמן, חלוקת עומסים, שיפור הדרגתי של דיוק, תעדוף שרתים ועוד.

מידע טכני
---------

### התמודדות עם העברת המידע ברשת

לשדר העובר ברשת לוקח זמן להגיע מקצה לקצה ולכן אחד מהאתגרים שהפרוטוקול הציב כיעד הוא התמודדות עם בעיה זו. כאשר מחשב מבקש להסתנכרן מול שרת זמן הוא שולח לשרת הזמן את הבקשה ואת השעה המקומית אצלו. כאשר חוזר משרת הזמן שדר המכיל את השעה הנכונה יחד עם השעה שנשלחה על ידי השרת המבקש, מושווה השעה המקומית הנוכחית לשעה שנשלחה בשדר המקורי הקיימת גם בשדר שהוחזר ואז מבוצע חישוב של הזמן הממוצע שלוקח לשדר לעשות את המרחק משרת אחד למשנהו. הממוצע מתקבל לאחר שליחת בקשה לסנכרון מספר פעמים (לרוב 4).

### תקשורת

התקשורת עצמה נעשית בפורט 123 UDP מועבר בה מידע על השעון על-גבי מבנה נתונים המכיל 32 ביט המתארים את השניות, ועוד 32 ביט לתיאור חלקי השניות מה שמאפשר בתאוריה דיוק של עשיריות-ננו שניות, הדיוק הממשי הוא של כ-10 מיליוניות השנייה.

### תעדוף שרתים

לכל שעון בדיוק גבוה מספיק מוגדר ערך מיוחד הנקרא Stratum, הנע בין 0-16 כאשר ככל שמספרו נמוך יותר כך הדיוק גדל. לפי הגדרת הפרוטוקול, אין יכולת להסתנכרן מול מקור זמן בעל stratum השווה ל-16 וכך נשמרת היררכיה של עד 16 רמות. לרוב שרתים אינם מקבלים את הערך 0 אלא את הערך 1 מכיוון שהם מסתנכרנים מול התקן הזמן.

### כיוון השעון

במחשבים קיימים, בדרך כלל שני סוגי שעונים. שעון המערכת (System clock) ושעון זמן אמת (RTC - Real Time Clock). שעון המערכת מנוהל תוכנה בעזרת ספירה של פסיקות השעון על ידי מערכת ההפעלה. "שעון זמן האמת" הוא התקן חומרה בעל גיבוי של סוללה המאפשר למחשב לשמור את השעה ואת התאריך גם כשהמחשב כבוי. המידע שמתקבל בעזרת הפרוטוקול משמש לעדכון שעון המערכת בעזרת הוספה או גריעה של ההיסט בזמן, שנוצר בין שעון המערכת לזמן שהתקבל מן השרת. זמן המערכת יכול לשמש לתיקון ההיסט של "שעון זמן האמת" החומרתי לצורך שמירת השעה והתאריך בזמן כיבוי המחשב.

### התמודדות עם השבתה

בכל פעם שבה מחשב מבצע סנכרון בעזרת הפרוטוקול, הוא שומר אצלו (בזיכרון או בתוך קובץ) את הסטייה של שעונו הפנימי לעומת שעון הייחוס בשרת הזמן, לאחר בדיקת ממוצע הסטיות והתעלמות ממקרי קצה, המחשב מסוגל לשמור על שעון פנימי יחסית מדויק גם ללא תלות בשרת הזמן.

### גלובליזציה

מכיוון שבכל אזור זמן בעולם השעה היא שונה, הפרוטוקול מתבסס על הסבת השעון לזמן אוניברסלי מתואם.

המאגר העולמי
------------

הכתובת **pool.ntp.org** מצביעה לשרת NTP אקראי מבין קבוצה של אלפי שרתי זמן אמינים. ישנן כתובות משנה, כגון fr.pool.ntp.org לשרתים מצרפת. נכון ל-2024 קיימים 5 שרתים בישראל (il.pool.ntp.org). השם הראשי וכל אחד משמות המשנה מחזיר באקראי שם אחד מבין השמות המופיעים בו. לכן אפשר להשתמש בשם זה להגדרת שרת NTP למחשב שמיקומו בעולם לא ידוע (מחשב נייד, או ברירת מחדל לתצורה למערכת תוכנה).

שימושים נפוצים
--------------

* Windows משתמשת בפרוטוקול לסנכרון השעונים על מנת שתתאפשר עבודה עם פרוטוקול ההצפנה שאיתה היא עובדת - Kerberos וגם עבור משתמשים המחפשים נוחות.

ראו גם
------

* Precision Time Protocol

קישורים חיצוניים
----------------

* 

* אתר האינטרנט הרשמי של Network Time Protocol (באנגלית)

RFC5905 - Network Time Protocol Version 4: Protocol and Algorithms Specification

הערות שוליים
------------

1. ↑  אתר פרויקט NTP Pool