פורסם: 04/01/2016 - 10:34
נושא ההודעה: מנסה להבין -sockets
|
מצאתי את הפסקה הזו:
קוד: |
Only one process may bind to a specific IP address and port combination using the same transport protocol. Common application failures, sometimes called port conflicts, occur when multiple programs attempt to bind to the same port numbers on the same IP address using the same protocol. |
בדף הזה:
קוד: | https://en.wikipedia.org/wiki/Port_(computer_networking) |
ומה שהבנתי זה שאני לא יכול להשתמש בשני אפליקציות שמשתמשות א. באותו פרוטוקול תעבורה (TCP וכדו') ב. אותו פורט ג. אותה כתובת IP.
אז למה אני יכול היום להפעיל נניח את firefox ו-chrome יחד? הרי הם משתמשים באותו פורט IP ופרוטוקול?
|
|
חזרה לתוכן הדיון |
פורסם: 04/01/2016 - 10:43
נושא ההודעה:
|
לכל שיחה יש שני צדדים. כשאתה משתמש בדפדפן אינטרנט הוא פותח שיחה מהמחשב שלך בפורט אקראי (אחד פנוי שנבחר על ידי מערכת ההפעלה), אל השרת בפורט 80.
כל "שיחה" כזאת מתרחשת בפורט שונה במחשב שלך, אבל במקרה של דפדפן אינטרנט באמת תגיע תמיד לפורט 80 (או 443 אם מדובר ב-SSL) בשרת.
שים לב שבמחשב השרת יהיו הרבה שיחות כאלו שיגיעו אליו לפורט 80, אבל כולן יטופלו על ידי אותו תהליך / תכנה.
|
|
חזרה לתוכן הדיון |
פורסם: 04/01/2016 - 11:19
נושא ההודעה: הבנתי, והשרת
|
והשרת ששולח לי בחזרה את המידע, ישלח לי לפורט האקראי שהתקבל ממערכת ההפעלה שלי?
|
|
חזרה לתוכן הדיון |
פורסם: 04/01/2016 - 11:27
נושא ההודעה:
|
כן. ברגע שנוצרת "שיחה" כזאת הפורטים קבועים, עד שאחד הצדדים מפסיק את השיחה. אחרי זה יצטרכו להתחיל שיחה חדשה, בה הפורטים לא בהכרח יהיו אותם פורטים.
|
|
חזרה לתוכן הדיון |
פורסם: 04/01/2016 - 13:59
נושא ההודעה:
|
האדם לפני ענה לך מצוין. אני רק אוסיף שהנושא ללמידה פה הוא לא פורטים אלא TCP (או UDP, אבל זה פחות מה שאתה מדבר עליו).
|
|
חזרה לתוכן הדיון |
פורסם: 04/01/2016 - 14:14
נושא ההודעה: מנצל"ש
|
מישהו יכול להמליץ על תוסף לדפדפן המציג את הפורט הנוכחי שבשימוש?
|
|
חזרה לתוכן הדיון |
פורסם: 04/01/2016 - 14:48
נושא ההודעה:
|
תוסף לדפדפן לא יעזור לך כי אין לך גישה לתוכנה עצמה שרצה.
אתה יכול לבדוק אילו פורטים פתוחים ע"י איזה תוכנה עם פקודה כמו netstat:
קוד: |
sudo netstat -nput | grep firefox
|
|
|
חזרה לתוכן הדיון |
פורסם: 04/01/2016 - 17:06
נושא ההודעה:
|
Anonymous : | תוסף לדפדפן לא יעזור לך כי אין לך גישה לתוכנה עצמה שרצה.
אתה יכול לבדוק אילו פורטים פתוחים ע"י איזה תוכנה עם פקודה כמו netstat:
קוד: |
sudo netstat -nput | grep firefox
|
|
netstat זה עתיק, היום משתמשים ב-ss
קוד: | ss --tcp -np | grep firefox |
|
|
חזרה לתוכן הדיון |
פורסם: 05/01/2016 - 13:37
נושא ההודעה: מה התכוונת במשפט "כי אין לך גישה לתוכנה עצמה שרצה."
|
Anonymous : | תוסף לדפדפן לא יעזור לך
אתה יכול לבדוק אילו פורטים פתוחים ע"י איזה תוכנה עם פקודה כמו netstat:
קוד: |
sudo netstat -nput | grep firefox
|
|
למערכת ההפעלה שמקצה את הפורטים??
|
|
חזרה לתוכן הדיון |
פורסם: 06/01/2016 - 07:55
נושא ההודעה:
|
אתה שאלת על הרחבה לדפדפן, מה שהתכוונתי זה שאם אתה כותב תוכנה שניגשת לרשת אתה יכול לדעת איזה פורט המערכת הקצתה לסוקט שלך אבל לא מתוך הרחבה לדפדפן.
מ- javascript (שזה מה שהדפדפן שלך מריץ בתור הרחבות) אין לך גישה לקריאות מערכת.
|
|
חזרה לתוכן הדיון |
פורסם: 06/01/2016 - 08:49
נושא ההודעה:
|
אולי זה לא הניסוח הכי טוב בעולם. אתה לא באמת מריץ קוד על המערכת אלא הדפדפן שלך מריץ קוד שיש לו מגבלות. ל- firefox למשל יש גישה לקריאות מערכת. אבל זה לא באמת מעניין מה הפורט שהמערכת מקצה ל- client.
http://man7.org/linux/man-pages/man2/getsockname.2.html
קוד: |
getsockname() returns the current address to which the socket sockfd
is bound, in the buffer pointed to by addr. The addrlen argument
should be initialized to indicate the amount of space (in bytes)
pointed to by addr. On return it contains the actual size of the
socket address.
|
|
|
חזרה לתוכן הדיון |
פורסם: 06/01/2016 - 16:21
נושא ההודעה: Re: מנסה להבין -sockets
|
Anonymous : | מצאתי את הפסקה הזו:
[code]
אז למה אני יכול היום להפעיל נניח את firefox ו-chrome יחד? הרי הם משתמשים באותו פורט IP ופרוטוקול? |
כשאתה פותח פיירפורס וכרום אתה לא פותח סוקט לחיבור בצד שלך עם אותו הפורט, אתה מתחבר ליעד בעל אותו פורט וIP
|
|
חזרה לתוכן הדיון |
פורסם: 10/01/2016 - 08:21
נושא ההודעה: מצטער על הניטפוק
|
המשפט "רק process אחד יכול להתחבר לפורט נתון" פשוט לא נכון, משתי סיבות.
הסיבה הפחות מעניינת היא שמדובר לא על התחברות, אלא על קישור (bind). הסיבה היותר עמוקה היא שהמגבלה היא לא על מספר התהליכים, אלא על מספר ה–sockets. רק socket אחד יכול להקשר לפורט נתון בכתובת נתונה. ב–socket הזה יכולים להשתמש כמה תהליכים שרק תרצה, ונסיון של אותו התהליך לקשר עוד socket לאותו הפורט ייכשל.
לגבי ההבדל בין התחברות לבין קישור, הרי שזו בדיוק נקודת הבילבול של השואל המקורי. כאשר אתה מייצר תקשורת יוצאת, אתה מייצר socket שמתחבר לפורט 80 של מכונה מרוחקת, אבל מקושר לפורט אקראי במכונה המקומית. מכיוון שמדובר בפורט אקראי, אין התנגשות בין פיירפוקס לבין כרום.
עוד נקודה, אם אנחנו כבר מנסים לדייק, היא שטכנית כן אפשר להגיע למצב שבו מספר sockets מקושרים לאותו הפורט. כאשר אנחנו פותחים פורט מקשיב, יש לו רק כתובות מקומיות. כאשר מתבצע אליו חיבור חדש ואנחנו קוראים ל–accept, החיבור החדש מקבל socket חדש. ה–socket החדש מקושר לאותו הפורט כמו ה–socket שהקשיב. אין התנגשות, אבל, מכיוון של–socket החדש יש כתובת ופורט מרוחקים בעוד ל–socket המקורי אין. זה מאפשר למערכת ההפעלה לנתב את המידע הנכנס ל–socket הנכון.
שחר
_________________ שחר שמש
|
|
חזרה לתוכן הדיון |
|