Dynamic Host Configuration Protocol

Dynamic Host Configuration Protocol (בראשי תיבות: DHCP; בתרגום חופשי: פרוטוקול הגדרת מארחים דינמי) הוא פרוטוקול תקשורת המשמש להקצאה של כתובות IP ייחודיות למחשבים ברשת מקומית (LAN). בנוסף לכתובת ה-IP, שרת DHCP בדרך כלל יספק למחשב גם נתונים כמו ה-Subnet mask, כתובת שרת ה-DNS וכתובת שער הגישה (Gateway), כך שהמחשב יוכל להתחיל לתפקד ברשת ללא צורך בנתונים נוספים.
DHCP מתפקד בשכבת היישום של מודל ה-OSI ובשכבת היישום של מודל ה-TCP/IP. הוא פועל מעל פרוטוקול התעבורה UDP על גבי פורטים 67 (שרת) ו-68 (לקוח) ומעל פרוטוקול הרשת IP, כאשר כל עוד הלקוח לא קיבל כתובת IP הוא משתמש באפסים (0) על־מנת לייצג את כתובתו והוא מזוהה על פי הכתובת הפיזית.
בעוד שאופן פעולת הפרוטוקול נשאר זהה, ברוב המוחלט של המקרים בימינו אין שימוש בשרתי DHCP ייעודיים - שרת DHCP יהיה בדרך כלל באותו הרכיב המאפשר שירותים נוספים, כמו נתב, שרת DNS ועוד.
השימוש ב-DHCP ברשתות מקומיות פתח צוהר להתקפות שונות כגון הונאת DHCP. טכניקה זו יכולה להיות חלק מלוחמת סייבר. כדי לבצע מעקב אחר השימוש ב-DHCP ולוודא שלא נעשה בו שימוש לרעה ניתן להפעיל על מתגי הרשת המקומית אפשרות הנקראת DHCP snooping.

זמן הקצאה

לשרת DHCP קיימת אפשרות להקצות כתובת עבור לקוח ברשת המקומית לזמן מוגבל - זהו זמן ההקצאה (lease time). אם השרת אכן פועל באופן זה, הוא שולח את זמן ההקצאה בפאקטת ה-acknowledge. על פי שיטה זו, למחשב אין כתובת IP קבועה, אלא הוא 'שוכר' כתובת מהשרת.
במקרה של השכרת כתובת, המחשב חייב לפנות אל השרת שוב, כדי לקבל את הכתובת לזמן נוסף, או לקבל כתובת חלופית. פנייה כזו תתבצע כתלות בזמן, וגם בעת עליית המחשב. במקרה הראשון, כאשר מגיע חצי מזמן ההקצאה, פונה המחשב בבקשה נוספת אל השרת, על מנת להאריך את זמן השכרת הכתובת. במקרה שהשרת לא עונה (למשל כי הוא נפל), יחכה המחשב עוד חצי מהזמן הנותר (כלומר שלושת-רבעי (3/4) הזמן מזמן ההקצאה הכולל) וינסה לפנות שוב. כך ימשיך המחשב עד שיענה לו השרת. אם השרת לא עונה לו, ינסה המחשב לפנות אל שרת אחר במטרה להאריך את זמן ההקצאה של הכתובת. אם גם תהליך זה כשל, יפנה המחשב בבקשה לכתובת חדשה.
על התהליך המלא, ראו בקשורים חיצוניים.

שחרור כתובת

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

תקשורת בין שרתי DHCP

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

DHCP relaying

מקרה נוסף בו לא יוכל מחשב ברשת מקומית לקבל כתובת הוא כאשר אין ברשת שרת DHCP - שכן הפנייה היא ב-broadcast ועל כן לא עוברת נתב. מקרה כזה עלול לקרות כאשר השרת המקומי נפל, או כאשר יש רצון להרים שרת אחד למספר רשתות מקומיות שונות - כדי לחסוך ברכיבי רשת.
כדי להתמודד עם מקרה זה ולאפשר למחשבים להשיג כתובת גם ללא פנייה ישירה אל שרת DHCP, מוגדרים רכיבים ברשת בתור 'סוכני DHCP' - הם יקבלו את תעבורת ה-DHCP שמגיע מלקוח ברשת, ויידעו להעביר אותה ישירות אל שרת DHCP מוגדר; רכיבים אלו ידעו גם לקבל חזרה את התעבורה ולהחזיר אותה אל הלקוח, כך שהם מהווים מעין שרת פרוקסי לתעבורת DHCP.
במקרה שבו שרת DHCP אחד מוקצה למספר רשתות מקומיות, עליו לדעת מאיזו רשת מגיעה אליו הבקשה, כדי להקצות כתובת בהתאם - מידע זה ייקבע על פי הכתובת של הסוכן, שתועבר בשדה בפאקטה הנקרא GIADDR.