|
13-06-2012, 20:59
|
מנהל פורומי "תכנות ובניית אתרים" ו"חומרה ורשתות"
|
|
חבר מתאריך: 25.10.01
הודעות: 42,775
|
|
בבקשה... (זאת לקחה קצת יותר זמן. ככה זה שאין לך אינטרנט. ותודה לבזק.)
לא, הבנת לא נכון. כפי שכתבתי, הכתובת הראשונה שאת רואה ב Traceroute היא הכתובת של הראוטר הראשון בדרך אל היעד (באופן כללי; לכן דייקתי וכתבתי לגבי ה TTL Expired, שזה מה ש traceroute מראה; יכולים להיות עוד מחשבים בדרך ולא תראי אותם, זה כבר דיון מעבר לגבולות האשכול הזה...)
ה Wireshark יראה לך את כל תקשורת הרשת, הוא לא יגיד לך למי שייכת הכתובת הזו, ואף אחד לא יוכל להגיד לך את זה. אם זה ה DGW שלך, אז תוכלי להגיד שהיא שלך. אם זה לא, אז כבר קשה מאוד לדעת - ואפשר לדעת יותר על פי סוג החיבור. כך או כך, לדעתי לא זו התשובה שמי ששאל את השאלה מחפש.
כדי להעלות תמונה, בתחתית מסך כתיבת ההודעה ישנו קישור "לחץ כאן להעלאת קובץ"
אני אתאר עכשיו את כל השלבים, מההתחלה עד הסוף, שקורים בהנחה שאין cache-ים בכלל במערכת, וזה אמור להיות זהה לחלוטין למה שתראי ב Wireshark.
- גולש מקליד בדפדפן http://www.google.com
- הדפדפן לא יודע מה ה IP של www.google.com ולכן הוא מבצע שאילתת DNS מול שרת ה DNS שמוגדר במחשב
- שרת ה DNS מבחינת המחשב יכול להיות או מקומי ברשת (אם זה הראוטר, או שרת DNS אחר שיושב ברשת המקומית), או שרת מחוץ לרשת המקומית, למשל בספק האינטרנט.
- אם השרת מקומי ברשת (ההחלטה נעשית על ידי פעולות לוגיות כגון XOR על ה IP שלך, על ה netmask שמוגדר במערכת, ועל IP היעד), אזי תתבצע שאילתת "who has" בפרוטוקול ARP על ה IP של שרת ה DNS, בשידור לכל הרשת (Ethernet Broadcast, שזה בעצם לשלוח לכתובת ה MAC המיוחדת FF:FF:FF:FF:FF:FF), כדי לגלות את כתובת ה MAC של כרטיס הרשת של שרת ה DNS.
- אם השרת איננו מקומי, אזי המערכת יודעת שצריך לצאת דרך נתב כלשהו כדי להגיע אל הרשת שבה נמצא שרת ה DNS. כדי לדעת דרך איזה נתב צריכים לצאת, מסתכלים בטבלת הניתוב (routing table), שמכילה רשימה של רשתות יעד וה netmask שלהן, והמערכת מחפשת את הטווח המצומצם ביותר שעונה על ה IP שאליו מנסים להתחבר (ואם יש יותר מרשומה אחת כזו, ההחלטה תיפול על פי ערך ה Metric שהוגדר על הרשומות). ברשת ביתית טיפוסית, יש רק ערך אחד בטבלה הזו, והוא ה default gateway (עבור רשת 0.0.0.0 עם netmask גם 0.0.0.0). ניתן לראות בפקודה route print בחלונות או סתם route בלינוקס. (ת'אכלס יהיו שם עוד ערכים, הערכים הנוספים האלה משמשים בין השאר כדי לדעת לאן "לנתב" תעבורה מקומית, ותעבורה מסוג מיוחד כגון Multicast, אבל זה שוב יוצא מהסקופ של ההודעה הזו, שגם ככה ארוכה...). אחרי שהמערכת מחליטה דרך איזה נתב לצאת, היא צריכה לברר מה הכתובת של כרטיס הרשת שלו (MAC), בדיוק באותה הצורה שכתבתי לגבי שרת ה DNS המקומי. (סעיף 2.1.1)
- אחרי שסיימנו את שלב 2.1, אנחנו יודעים לאיזה MAC נצטרך לפנות כדי לשלוח את שאילתת ה DNS שלנו, שתתבצע בפרוטוקול הפשוט יחסית, UDP. זה לא משנה אם השרת מקומי או לא מהבחינה הזו, וזה לא ממש מעניין אותנו. אם זה מחוץ לרשת המקומית, ונשלח את זה לנתב שלנו, הוא כבר ידע להעביר את זה הלאה, ומבחינתנו לא ממש משנה איך זה קורה. בהערת אגב, המיפוי הזה, בין כתובת IP, ל MAC התואם לה, יישמר בזכרון המחשב, במה שנקרא ARP Cache, כדי שלא נצטרך לברר את זה שוב ושוב בכל פעם. זה לא נשמר לתמיד (כי כתובות יכולות להשתנות). ניתן להציג את מה שקיים כעת ב ARP Cache באמצעות הפקודה arp -a.
- המחשב שולח פאקט UDP עם שאילתת ה DNS הנ"ל אל עבר ה MAC המדובר, כמובן עטופה בכל כותרי ה IP וה Ethernet...
- אם הכל עבד כשורה, שרת ה DNS יחזיר לנו פאקט UDP בחזרה, עם התשובה לשאילתא שלנו - מיפוי בין www.google.com לכתובת IP
- יש לדפדפן את כתובת ה IP של www.google.com, ולכן הוא יכול לנסות ליצור איתה קשר
- הדפדפן ישלח פאקט בפרוטוקול TCP (שכמובן עטוף ב IP שעטוף ב Ethernet), אל ה IP של www.google.com (וכאן שוב יתחיל ההליך שיבדוק האם הכתובת היא מקומית או לא, דרך איזה gateway לצאת בהתאם ל routing table, בדיוק כמו קודם, רק שעכשיו ה default gateway עדיין יהיה ב ARP Cache ולכן לא יהיה פאקט ARP נוסף...). TCP יותר מסובך מ UDP. לא שולחים את המידע ישר בפאקט. ישנו הליך קודם לכן שנקרא TCP Three-Way-Handshake (לחיצת יד תלת-שלבית)
- הפאקט הראשון של TCP יהיה עם הדגל SYN (שזה קיצור של Synchronize) דולק, ויוגדר עם יעד של פורט 80, שהוא הפורט הסטנדרטי של HTTP (אם לא נאמר אחרת לדפדפן, זה מה שיהיה).
- השרת של גוגל (אם הכל תקין), יחזיר למחשב הגולש פאקט בכיוון ההפוך (הצמדים Source-IP:Source Port ו Destination-IP:Destination Port מתחלפים), עם הדגל SYN והדגל ACK (שזה Acknowledge) דולקים.
- הדפדפן יאשר לשרת של גוגל שהוא קיבל את האישור שלו על ידי שליחה של פאקט עם הדגל ACK בלבד דולק
- ה TCP Socket כעת פתוח, ושני הצדדים יכולים לשלוח מידע אחד לשני. TCP ידאג באמצעות מנגנוניו השונים שהמידע יגיע בצורה אמינה, לפי הסדר שהוא נשלח (גם אם הסדר התבלבל במעבר דרך רשת האינטרנט, שבה לא כל פאקט עובר בהכרח באותו מסלול של ראוטרים), וידאג לשידור מחדש של מידע שהלך לאיבוד ברשת (כי IP איננו פרוטוקול אמין)
אני מקווה שלא פספסתי שום שלב, ושעכשיו זה יותר מובן. לצערי, עדיין אין לי תשובה מוחלטת למה התכוון שואל השאלה, משום שהוא היה יכול להתכוון לכל אחד מהשלבים האלה, ובכלל לא בטוח שהוא בעצמו מכיר את כל השלבים. אינני יודע מה הרמה שלו (אני לא בא לזלזל; פשוט התשובה תלויה בידע שלו, או, בחלק מהידע שלו שהועבר בשיעור אם היה כזה דבר, או במה שהוא מצפה שאנשים ימצאו ברשת, שנוטה, הרבה פעמים, לעשות oversimplify לדברים)
כך או כך... בהצלחה...
|
|