בעיות רשת מוזרות

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

בעיית רשת מוזרה מספר 1:

BattleField 2142, משחק רשת מרובה משתתפים עובד היטב, עד שיום בהיר אחד הוא מפסיק לראות שרתים ברשת.
פניתי לתמיכה של EA, שהציעו להסיר ולהתקין מחדש, תוך מחיקה של כל רמז לספריות נוספות שהמשחק שומר (במילים אחרון, אין להם מושג והם יורים באפלה).
עקבתי אחרי ההוראות, וכמובן שהבעיה לא נפתרה.
בצר לי, הורדתי את WireShark (לשעבר Ethereal), שהוא Network sniffer רב עוצמה, והפעלתי אותו לפני ההפעלה של המשחק.
wireshark
די בקלות זיהיתי את הבעיה: המשחק שולח בקשת DNS למציאת כתובת הIP של השרת שמחזיק את רשימת השרתים, מקבל שגיאה מהDNS ומתעלם ממנה ומפסיק לנסות בלי למסור הודעת שגיאה למשתמש.
ברגע שהחלפתי את שרת הDNS שלי הבעיה נפתרה.

בעית רשת מוזרה מספר 2:

Call of duty 2, עוד משחק רשת משובח, עובד היטב ברשת המשרדית, עד שיום בהיר אחד הוא מפסיק לראות שרתים אחרים.
במילים אחרות, עמרי לא יכול להצטרף לשרתי המשחק ברשת, ונאלץ לעבוד בעבודה.
לאחר הטחת האשמות סרק ברשת, בסוויץ' במערכת הפעלה ובאלוהים, הפעלתי את WireShark על שני מחשבים, אחד בו אין בעיה, וזה שלי.
לאחר שהפעלתי את המשחק בשניהם, בחנתי את תעבורת הרשת, וגיליתי את הדבר הבא:
המשחק שולח בBroadcast פקטת UDP לכל הרשת כשהוא מחפש שרתים, והשרתים אמורים לענות לו ולמסור לו מידע על עצמם. (כדי לשלוח Broadcast צריך לשלוח את הפקטה לכתובת 255.255.255.255).
עד פה הכל טוב, רק שראיתי משהו מוזר במחשב שלי. במקום לצאת מכתובת הIP הרגילה שלי הוא יצא מכתובת IP אחרת, שבכלל לא נראית כאילו היא ברשת הפנימית שלנו.
מסתבר שהכתובת הנ"ל (192.168.40.1) שייכת למתאם רשת וירטואלי של VMWare, ומסיבה עלומה המשחק שלח את חבילת הUDP כאשר הכתובת של המתאם היא כתובת המקור של החבילה. השרת ניסה לענות, אבל מכיוון שהכתובת לא ברשת לא קיבלתי את התשובה.
אחרי ביטול של מתאמי הרשת של VMWare הבעיה נפתרה.

בעיית רשת מוזרה מספר 3:

תוכנה שאנחנו מפתחים בעבודה מקבלת זרם של חבילות UDP משרת.
התוכנה עובדת טוב מול שרת אחד, ומאוד לאט מול שרת שני, שני השרתים מריצים את אותה תוכנה בדיוק.
הפעלה של WireShark על השרת והמכונה שמריצה את הלקוח מראה שהשרת שולח את החבילות בקצב הנכון, והחבילות מגיעות למכונת היעד באותו קצב, ובכל זאת לאפליקציית הלקוח החבילות מגיעות מאוד לאט.
הלקוח רץ על WTK, שהוא אמולטור של סביבות ג'אווה של פלאפונים. לWTK יש כלי Profiling פנימי, שמאפשר להגיד איפה האפליקציה משחיתה את זמנה.
הפעלתי את הפרופיילר, והסתבר שהיא משחיתה את מיטב זמנה בפונקציית מערכת בשם getHostByName.
תפקידה של הפונקציה הזו הוא בעצם לקבל כתובת שמית ולהמיר אותה לכתובת IP מספרית, במילים אחרות – לקרוא לDNS.
מסיבה לא ברורה הפונקציה לקחה הרבה זמן, ומסיבה לא ברורה היא נקראה עבוד כל חבילת UDP שהגיעה לאמולטור (באג באמולטור לדעתי, אבל שיהיה).
לחלונות יש קובץ בשם hosts בספריית החלונות, שדומה מאוד לאותו קובץ במערכות יוניקס (זה מראה על הקשר בין חלונות ליוניקסים), הקובץ משמש להוספה ידנית של רשומות לDNS המקומי.
ברגע שהוספתי את כתובת הIP של השרת לקובץ ההוסטים הבעיה נפתרה.

עד כאן פינתנו, בעיות רשת מוזרות.

Facebook Comments

17 תגובות בנושא “בעיות רשת מוזרות”

  1. מעניין ביותר.

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

    מעניין אם גם אני הייתי חושב על זה במקרה הצורך.

    לי יש סיפור דומה (במעט).

    אכתוב אותו בקיצור ככל שאוכל.

    עברתי בעבודה ממחשב אחד למחשב חדש. במחשב הישן היה דיסק קשיח של 40 גיגה, בחדש 80.

    התקנתי את החדש, חיברתי את הישן לשקע אחר ברשת, והעברתי חלקים ניכרים מהדיסק הקשיח של הישן לחדש. כולל המון קיצורי דרך שהיו לי בישן, שאני שומר בספרייה %UserProfile% כדי שאוכל להריצם מהתיבה Run.

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

    לא הבנתי מה קורה עם זה ומה אפשר לעשות, והלכתי לאכול צהריים. בדרך חזרה חשבתי "מה השתנה מאז יום X שבו זה עבד בסדר, להיום?". אז ניזכרתי שביום האתמול ניתקתי מהרשת את המחשב הישן כדי לפרמטו.

    כאן כבר הדברים יותר ברורים:
    הרצה של אטריל הראתה שהמחשב מתקשר עם המחשב הישן. כל פעם שאני לוחץ על שם של קובץ. חיפשתי את שם המחשב הישן ברגי'טסרי, וראיתי שיש הפנייה אליו כערך תלוי הקשר עבור כל קבצים (פרטי שמופיע כאשר לוחצים בלחיצה ימית על הקובץ). הפרטית התייחס לתוכנה IrfanView, כאשר המסלול שלה הוא:
    \\TheOldComputer\C$\Program Files\…

    !

    ברור שכאשר היסרתי את ערך הרג'יסטרי הזה הבעיה נפתרה.

    עכשיו, נסה לנחש: למה הגיע הערך הזה לשם מלכתחילה? מה מקור ההפניה הזו?

    רמז:
    זכור שאמרתי שהעתקתי קבצים מהמחשב הקודם, כולל קיצורי דרך.

    ויש גם מיני מסקנה, שמבוססת אצלי היטב על ניסיון העבר. אומר לך אותה אחרי שתשיב.

  2. יונתן, היה לי את אותו עניין עם קיצור דרך משולחן העבודה אל תיקייה במחשב אחר שמאז פורמט.

    כל פעם שהייתי צריך לטעון את שולחן העבודה, בBrowse כלשהו, עצירה של חצי דקה.

  3. אוקיי. נסה לנחש מה קרה שם בסיפור שלי. מזה אפשר להבין מה (כנראה) קרה גם אצלך.

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

  4. כשמעתיקים קיצורי דרך, חלונות לא מעתיק אותם כמו שהם אלא יוצר קיצור דרך חדש למטרה של קיצור הדרך המקורי.
    ביל גייטס מכה שנית. 🙂

  5. נכון כמעט לחלוטין:

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

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

    אז:
    הוא אכן מכניס את שם המחשב. מה שקרה זה שהמחשב הישן היה ברשת, וקובץ LNK היה על המחשב שלי. הקיצור הפנה לתוכנה IrfanView. כאשר הרצתי אותה, היא הופעלה (שכן אחרי שהפעלתי את הקישור חלונות לא מצאה אותה באופן מקומי), ראתה שהיא לא מותקנת על המחשב, ובאופן שגם הוא די טיפשי לדעתי הכניסה את כל התפריטים האלה בלי לשאול שום דבר. התפריטים ציינו נתיב UNC מלא למחשב הישן…

  6. ואיך שכחתי , המיני מסקנה:

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

  7. אישית אני מעדיף את Packetizer על Wireshark. זה גם פרוייקט קוד-פתוח, שמבוסס ברובו על WIRESHARK עצמו, אבל נותן ממשק ידידותי בהרבה. מומלץ בחום!

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

  9. יהונתן, לדעתי קיצורי דרך מקומיים לא כוללים את שם המחשב, אבל אני לא חותם על זה.

  10. עמרי, הם כן כוללים, בדקתי את זה:

    יצרתי קיצור דרך מקומי, והרצתי עליו את strings. רואים שם את שם המחשב.

    בנוסף, אם תיצור אחד, תשמור אותו בקובץ ZIP, ואז תעביר למחשב אחר ותפרוס שם, תראה שהוא מציין מסלול UNC מלא לתוכנה.

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

    כיום אני לא יוצר קיצורי דרך של חלונות בכלל: אני יוצר רק קבצי Batch קטנים שמשמשים כקיצורי דרך, ושם אותם בספרייה UserProfile (שהיא בד"כ הספרייה הנוכחית). כך אני יכול להריץ אותם מהתיבה Run מבלי שהם יהיו ב- Path (ולכן לא יורצו ע"י תוכניות אחרות).

    את קבצי ה- Batch האלה אני יוצר עם VIM בערך באותו פרק זמן שלוקח ליצור קיצור דרך רגיל.

  11. זכור לי סיפור-זוועות מהצבא על תקשורת איטית שאף אחד לא הצליח להבין למה עד שמישהו שם לב במקרה שיש לשני כרטיסי רשת אותה כתובת MAC…

  12. כל המיקרים האלה הם מיקרים שבאמת צריך להבין משהו כדי לפתור את הבעיה. מעיין אם יש טכנאים כלים כאלה שיכולים לבוא להציע משהו בסגנון "שלמו לי 2000 ש"ח אם אני פותר את הבעיה, או שום דבר אם אני לא פותר".

  13. להערכתי יש באג בפונקציה getHostByName לפי שמה היא זו זממירה את הכתובת השמית ל IP והגיוני שהיא תחפש את טבלת ההמרה בקובץ HOST של ווינדוס שכן שם מקומה של הטבלה.
    האם קיים שם ההוסט שמצאת בסניפר רשום בקובץ HOST?האם הוא רשום תקין?האם צמודה לו כתובת IP?
    יש סבירות שהבאג הוא באיזור בפונקציה שמטפל במקרה והערך המחופש לא קיים בטבלה.ושוב להערכתי.
    רספוטין

  14. נ.ב.
    אהבתי את דרך העבודה שלך.
    חלק מלהיות טכנאי טוב הוא להכיר את הכלים שיש בשוק שיכולים לתת לך פתרונות,אני חושב שיש לך את הידע.
    רספוטין

  15. בעיה:המחשב לא מצליח להתחבר לאינטרנט ולא מצליח לשלוח ping . בדיקה מעלה שלרשת המקומית המחשב כן מצליח להתחבר ומצליח להעביר ping למחשב שכן.
    מה עלולה להיות הבעיה?

  16. momi,
    זה יכול להיות כתוצאה מהגדרות לא תקינות (DNS לא נכון, default gateway לא נכון או פשוט שהמודם שלא לא מחובר).

סגור לתגובות.