TCP/IP

  • פותח הנושא mmuse
  • פורסם בתאריך

mmuse

New member
TCP/IP

יש איזשהו אתר שמסביר את ההבדלים בין שימוש בפרוטוקול TCP/IP ביוניקס לעומת חלונות? או שפשוט מראה פונק´ TCP/IP לחלונות... תודה.
 

voguemaster

New member
ההבדלים מינוריים...

למעשה, בד"כ נהוג לעבוד עם Berkley Sockets. לכל מערכת הפעלה יש אימפלמנטציה של SOCKETS. תחת יוניקס זה ברור, ותחת חלזונות זה נקרא WINSOCK. בכל אופן אני מציע להסתכל ב-PLATFORM SDK כדי ללמוד איך להשתמש ב-WINSOCK. זה רק REFERENCE כך שלא צריך להינעל על ה-SDK. למעשה רצוי ללמוד תכנות TCP ע"י ספרים שמיועדים לזה. ספר אחד כזה נקרא Unix Network Programming. ספר מעולה לכל הדיעות, מרשים ומעמיק. את מה שנלמד שם אומנם לומדים על יוניקס, אבל גם על חלזונות זה יעבוד, בהנחה שמאתחלים את הספריה וכוללים את קובץ הכותרת הנכון
 

GuardianAnge1

New member
אני ממליץ

על המדריך של Beej - אחד המדריכים לתיכנות רשת הכי טובים שקראתי! אגב, מה הכוונה ב-"תחת יוניקס זה ברור, ותחת חלזונות זה נקרא Winsock"? בשניהם מדובר במעטפת שמאפשרת לך שליחה/קבלת של פאקטים, רק שבחלונות המעטפת היא סגורה ובעלת קצת פחות אפשרויות (אם אפשר לקרוא לזה כך
) מאשר ביוניקס.
 

voguemaster

New member
המממ

כי ביוניקס, לא רק ה-TCP וה-UDP ושכבת ה-IP נמצאת בקרנל, אלא גם ה-API עצמו. אומנם זה לא לחלוטין מדויק, אבל זה קרוב. ע"י לקיחת משהו כמו SOCKET והפיכתו לאבסטרקט, בדיוק כמו file descriptor, הפונקציונליות של SOCKETS מתחברת יפה עם שאר המערכת, הכל קונסיסטנטי. בחלזונות זה לא כך, מה לעשות. ה-TCP ושכבת ה-IP יושבות להן בקרנל בעוד ש-DLL שכתבו במיוחד למטרה הזו מספק את הפונקציונליות בעזרת הקרנל. זה שונה מאוד: ביוניקס הכל משולב כבר, ובחלזונות זה לא natural, זאת תוספת מלאכותית...
מה לעשות, יוניקס מע´ הפעלה של רשת. בחלזונות צריך להתקין פרוטוקולים במיוחד...
 

GuardianAnge1

New member
אתה בטח מתכוון לזה

שביוניקס יש RAW SOCKETS, כלומר כתיבה "ישירה" לפרוטוקולים, ואילו בחלונות אין. לפי מה שאני יודע, מיקרוסופט מאפשרים RAW SOCKETS בחלונות XP.
 

אלדד27

New member
לפי מה שאני יודע,

אפשר גם אפשר לכתוב RAW SOCKETS גם ב - 95, אם אתה מתעקש. מתוך winsock.h :
/* * Types */ #define SOCK_STREAM 1 /* stream socket */ #define SOCK_DGRAM 2 /* datagram socket */ #define SOCK_RAW 3 /* raw-protocol interface */ #define SOCK_RDM 4 /* reliably-delivered message */ #define SOCK_SEQPACKET 5 /* sequenced packet stream */​
 

אלדד27

New member
עוד דבר קטן,

אם אי אפשר היה לכתוב לפאקטים ישר, לא היית יכול לכתוב תוכנית שיודעת להתחזות ל - IP אחר, וכידוע לכל האקר (אלי?), ב-WINDOWS אפשר גם אפשר להתחזות ל - IP אחר, ואפילו בקלות. יש אינספור utilities כאלו.
 

voguemaster

New member
לא יודע בקשר ל-RAW תחת 95

הבנתי שיש בעיות עם זה. בכל אופן, לא התכוונתי ל-RAW בהסבר שלי. דיברתי על כך שה-SOCKET משתלבת באופן טבעי והיא חלק אינטגרלי מהמערכת, בדיוק כמו file descriptor שאתה פותח בעזרת open (או אם תרצו, מצביע לקובץ עם fopen). בחלזונות זה לא ככה. האפשרות לתכנת ב-TCP/UDP לא קיימת אם לא מתקינים את הדרייבר הנחוץ (הספריה כבר קיימת אנחנו יודעים). ביוניקסים ה-TCP הוא תמיד חלק מהקרנל. למעשה, מע´ יוניקס ללא TCP/UDP סביר להניח שממש לא תעבוד כמו שצריך...
 

GuardianAnge1

New member
הרממ...

>למעשה, מע´ יוניקס ללא TCP/UDP סביר להניח שממש לא תעבוד כמו שצריך... אם ככה, זה חיסרון של יוניקס שזה מוטמע במערכת..
בכל מקרה, לגבי ה-RAW SOCKETS, הכוונה הייתה לשינוי פאקטים. ולא.. לא ניתן לעשות SPOOFING בגירסאות שלפני Windows XP. כל ה-Utilities שהזכרת עושים SPOOFING ל-idnet ששרתי ה-IRC מבקשים. מאמר בנושא ניצול RAW SOCKETS ב-Windows XP תוכלו למצוא באתר של גיבסון: http://grc.com/dos/intro.htm
 

אלדד27

New member
אז ככה,

1. אני לא יודע לגבי UNIX בלי UDP/TCP, אבל אם זה באמת כמו שאלי אומר, אז אפשר לראות את זה כחיסרון, ואפשר לראות את זה כהחלטת DESIGN לגבי המערכת, שהיא לאו דווקא שגויה. 2. תודה על הידע ועל הלינק. ספץ גדול ב-RAW SOCKETS אני לא
 

voguemaster

New member
זה לא חיסרון ../images/Emo3.gif

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

GuardianAnge1

New member
אני דווקא חושב

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

voguemaster

New member
ובוא אני אספר לך משהו מדהים

TCP זו החלטת DESIGN שנובעת עוד מימי AT&T. המהנדסים שם בנו מערכת שאח"כ הפכה ליוניקס (הראשונה) ובגדול היא הייתה אמורה להיות מערכת שתמיד עובדת תחת רשת. עכשיו לדבר המדהים: הקרנל של לינוקס ומודולים לקרנל הזה. אם נדמה לך ש-DLL זה דבר מדהים, כלומר קומפוננטה נפרדת (רק ב-userspace ד"א), אולי תשמח לשמוע על KERNEL MODULES. ד"א, DLL זו לא המצאה של מיקרוסופט. בכל אופן, תפקידם של מודולים לקרנל הוא להרחיב את פונקציונליות הקרנל מעבר לזו שקומפלה לתוכו. אפקטיבית המודול הופך לחלק מהקרנל, מייצא SYMBOLS, פונקציות ומה לא, ועושה כל דבר שתרצה. בד"כ משתמשים בהם כדי לתת לקרנל פונקציונליות נופסת כמו שימוש בכרטיס רשת שלא מוכר לקרנל וכו´. לא רק זה, אלא שאפשר לחבר אותם ולנתק אותם מהקרנל בזמן ריצה, ללא כל הפרעה למערכת, כל עוד אף פרוסס לא משתמש במודול באותו הזמן. הרגע נתתי לך דוגמא לכך שאפשר להרחיב/להסיר פונקציונליות מהקרנל (גם כזו שתומכת בחומרה חדשה) ללא צורך בקימפול מחדש, ללא צורך באתחול וללא צורך להתעסק עם ספריות מיותרות. אחרי שגיליתי דבר כזה, אתה באמת מצפה ממני לא לצחוק על טכנולוגיות של מיקרוסופט ?? תהיה מציאותי!! האמת היא שמי שתיכנן את הקרנל של לינוקס בא בגישה של: המערכת צריכה לעבוד תמיד (בתחילת הדרך היא שומשה רק בשרתים), וצריך מנגנון להרחיב את הקרנל ולשפר אותו בזמן ריצה וללא קימפול מחדש. עכשיו נראה אותך מדבר על מודולריות
 

GuardianAnge1

New member
דבר ראשון

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

אלדד27

New member
הארות והערות

נכון, DLL היה עוד הרבה לפני WINDOWS. המצאה מבריקה שלא שייכת להם. בכל מקרה, coupling חזק של קומפוננטות הוא לא דבר חיובי בעיניי. אם זה MFC בחלונות, או TCP-UDP ביוניקס, זה היינו הך. לפעמים ה - coupling הזה דרוש כדי להעניק יכולות מיוחדות למערכת ההפעלה, שבלעדיו לא היו היכולות האלו באות לכדי מימוש. גם במקרה של MFC וגם במקרה של TCP/UDP, קשה לי לראות את היכולות האלו - אבל כאן פשוט קטונתי.
 

ezalcman

New member
בעיה של SOCKET ו FIREWALL

בניתי אפליקציה מבוססת על Winsock ואני מנסה ליצור קשר בין הWebServer שנמצא ב DMZ לבין ה File Server שנצא ברשת הפנימית אם אני פותח רק את ה Port של הSocket אני מקבל שגיאה 10060 זאת אומרת A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond. בקיצור לא מוצא את המחשב שבתוך הרשת הפנימית אם אני פותח לגמרי את הFirewall אני מקבל שגיאה 10061 שאומרת
No connection could be made because the target machine actively refused it.​
בתוך הרשת הפנימית יש Active Directory ובחוץ לא יש למשהוא רעיון מה אני צריך לעשות?
 

voguemaster

New member
לדעתי

במקרה הראשון ה-FW חסם לך את הגישה (הפיל את כל הפאקטות האלו) ואחרי זמן מסוים ה-TCP אצלך הניח שהמחשב המרוחק לא זמין בכלל.. במקרה השני, ה-FW לא הפריע אבל מסתבר שאין אף PROCESS שמאזין ל-PORT שאתה מנסה להתחבר דרכו. אם ה-TCP של הצד השני מסרב לקבל חיבור באופן אקטיבי, כנראה שאתה מתחבר לפורט סגור.
 

אלדד27

New member
מה לא הבנת?

בחלזונות יש coupling עם MFC. ביוניקס - עם השכבות של TCP ו - UDP. בכל מקרה, אני לא חושב שמשהו משתיהן עדיף, אבל לפעמים זה דרוש כדי להשיג איזושהי תכונה מסוימת שמאפיינת את מערכת ההפעלה ככלל.
 
למעלה