תצורת שרת לקוח

p i o n e e r

New member
תצורת שרת לקוח

שלום,


בא נניח את הסיטואציה הבאה:
יש לי שרת שמדווח על שינוי מזג האוויר ללקוחות שמתחברים אליו.


Client A פונה ל Server כדי שיתן לו את תחזית מזג האוויר
Client A יודע בדיוק את ה IP וה PORT (פרוטוקול TCP\IP) ומבצע רישום לשרת פעם יחידה.
מאותו הרגע ה Server מודיע על כל שינוי מזג האוויר ופונה ל Client לעדכן אותו (ה Server יודע בדיוק מה ה IP של ה Client כיוון שברישום ה Client שלח אליו את הכתובת IP שלו)


עכשיו לשאלות:
1. במידה וה Client יושב מאחורי NAT כיצד ידע השרת לחזור לאותו ה Client (למרות שיש לו את ה IP שלן) לאחר שה Client נרשם פעם יחידה? (לקוח נרשם פעם אחת ומאז השרת יעדכן את הלקוח ללא יצירת קשר ע"י הלקוח)
2. במידה והלקוח משנה כל פעם את הכתובת שלו (כי הוא מקבל כתובת IP מחדש בכל חיבור לאינטרנט) כיצד ידע ה Server להחזיר לו תשובה?


תודה לעוזרים
 

BravoMan

Active member
אתשובה הפשוטה היא "הוא לא"

1. אם הלקוח נמצא מאחורי NAT יש שתי אפשרויות:
או שהוא ישאיר ערוץ תקשורת פתוח לשרת (הוא לא חייב לשדר בקשות, לכל היות "אות חיים" פעם בכמה זמן, תלוי בהגדרות התקשורת).
או שיוגדר port forwarding בצד הלקוח כדי לעקוף את ה-NAT.

2. הדרך היחידה שבה השרת יכיר את ה-IP החדש היא שהלקוח יספר לו על כך. אין פתרונות קסם.
שירותים שונים שמאפשרים לקבל כתובת URL מוצמדת ל-IP דינמי כמו no-ip.com דורשים התקנת לקוח מיוחד על המחשב שידווח להם בכל פעם שה-IP השתנה.
 

p i o n e e r

New member
שאלה המשך

תודה על התשובה.

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

BravoMan

Active member
כל תוכנות המסרים האלה עובדות באותה הדרך:

הן מחזיקות session פתוח לשרת כל עוד הן במצב "מחובר".
זו גם הסיבה, שאם תשאיר Skype או Whatsup פתוח תראה שהסוללה נגמרת לך יותר מהר.

ב-iOS ו-Android יש שירותים מערכתיים שמאפשרים להפחית את כמות התוכנות הרצות ברקע ע"י כך שרכיב מערכת מרכזי ימתין תמיד להודעת "push" (יחזיק תקשורת לשרת מסוים) וכשהוא יקבל הודעה מתאימה הוא "יעיר" את התוכנה הרלוונטית כדי שתיזום תקשורת ותעשה את שלה.

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

p i o n e e r

New member
session פתוח

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

BravoMan

Active member
חיבור TCP הוא דו-כיווני לכן כל עוד הוא פתוח

המידע יכול לעבור בשני הכיוונים (אחרת לא יכולת לתקשר בכלל).

אז כן - כל עוד לא סוגרים את החיבור הנתב יודע לאן להפנות את החבילות.
 

פרסאוס

New member
שני הלקוחות מחוברים לשרת

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