מה ההבדל בין sockets ל-ports ?

renon2000

New member
מה ההבדל בין sockets ל-ports ?

שלום, מה ההבדל בין sockets ל-ports ? בעבר כבר שאלתי את השאלה הנ"ל וקיבלתי תשובה ש-socket הוא ערך שהוא שילוב של port + כתובת ip . אם כך השאלה שלי בשביל מה צריך בכלל socket ? התפקיד של פורט לפי הבנתי הוא לקשר בין מערכת ההפעלה לבין האפליקציה. , או לחלופין לכוון את ה-tcp packets , לאפליקציה הנכונה. בהנחה שכמה אפליקציות מעבירות מידע בינהם – על מנת שמערכת ההפעלה תדע לשייך את ה-packets לאפליקציה הנכונה היא תכוון אותו לפורט מסויים שהוא למעשה "הגישור לאפליקציה" כל פעם שאפליקציה נפתחת ייפתח process חדש עם מספר חדש, ולכן גם ייפתח פורט חדש לאותו ה-process . או קיי – אז עכשיו בחזרה לשאלה שלי – אם לכל process יש פורט ייחודי לו – בשביל מה צריך מספר שהוא socket ? הרי מספר הפורט עצמו הוא ייחודי ויחיד במינו ל-process . אם כך בשביל מה צריך sockets , ומה ההבדל בין sockets לפורטים ? תודה רבה
 

Teo Toriatt

New member
הסבר כללי

נניח שאתה מגיע לשקת רשת על פורט 80 (HTTP) יש יותר מקישור אחד לפורט הזה באותו זמן - אתה מגיעה מSource port שלך - גבוהה מ1024, אבל ישנו סיכוי שדי טוב שתבחר פורט שמישהו אחר בחר. התוכנה בצד השני מזהה אותך לפי הפורט היא הייתה נותרת ללא מזהה חד ערכי לכן צריך IP. אם החיבור היה רק על פי IP - מה היינו עושדים במקרה של NAT דינאמי בו כל הרשת מתורגמת לכתובת אחת (בד"כ)? מי שעושה NAT משנה את הSource port בהתאם - אז הזיהוי החד ערכי נעשה על בסיס הIP הפעם. כדי לכסות את כל המקרים יש לנו Socket. זה הסבר מאוד כוללני, וישנן עוד סיבות ושימושים אך הרעיון ברור - מזהה חד ערכי. יש עוד הרבה מאוד להעמיק - אם אתה רוצה עוד מידע - יש המון מידע באינטרנט.
 

renon2000

New member
לפי מה שהבנתי

תודה , לפי מה שהבנתי כאשר אני פונה לשרת web בפורט 80 , הוא מקבל את הפנייה שלי ומעביר אותי לפורט שאף אחד אחר לא משתמש בו. כלומר הפורט שאני מתקשר עם שרת ה-web הוא פורט ייחודי, שאף אחד אחר בעולם באותו רגע לא משתמש באותו הפורט. המקרה של nat בדיוק מוכיח את מה שאמרתי - קיימת כתובת ip חיצונית אחת. שאיתה ה-nat מתקשר עם אותו שרת לכמה משתמשים. כלומר הכתובת החיצונית תמיד קבועה, מה שמשתנה זה מספר הפורט . מה שמחזיר אותי לאותה שאלה נשכחת - אם הפורט הוא פורט ייחודי תמיד, כאשר עובדים מול שרת. בשביל מה צריך ערך שהוא שילוב של כתובת Ip ושל פורט . הפורט עצמו הוא ערך ייחודי בפני עצמו תודה
 

myofer

New member
לא "אף אחד בעולם"

אלא אף אחד באותו שרת עם אותו פורט עוד פרט קטן, בלי כתובת IP הPACKET לא יגיע לשרת
 

Teo Toriatt

New member
זו טעות נפוצה

זה לא נכון - אתה יוצא מפורט רנדומלי שלך - מעל 1024 אבל תמיד מתקשר לפורט 80 (לטובת WEB) השרת בצד השני לא מקפיץ אותך לשום פורט אחר - ניסוי פשוט להוכיח את זה- תריץ Netstat -n ותראה לאיזה פורט אתה פונה - תראה שהוא נקאר קבוע על 80. אם המצב היה כפי שאתה אומר שרת יחיד יכל לתת שירות בו זמנית לעד כ63000 איש - מה שמזמן כבר לא נכון (בהנחה שיש לו מספיק זכרון ורוחב פס) אם תסכים עם מה שאמרתי - ותכניס NAT למשוואה - תקבל את התשובה - NAT מחליף לכתובת אחת אבל דואד לSource port אחר - ועל ידי כך מכניס משתנה חד ערכי לSocket
 
למעלה