|
25-06-2014, 14:49
|
|
|
|
חבר מתאריך: 07.12.09
הודעות: 7,072
|
|
טוב אין לי כוח לעבוד, אז בוא אני אעשה לך קצת סדר... אפילו יש לי את הרוב כתוב...
קודם כל, כשאתה כותב FSM אני מניח שאתה מתכוון ל Finite State Machine ? ולא ל Flying spaghetti monster? כי זה לא מובן מאליו...
אני אגש לנושא משני כיוונים, נתחיל מהשימוש, ואז איך זה עובד...
בד"כ כשכותבים TcpClient מתכוונים לאיזושהי ספרייה שנותנת ממשק מופשט מאוד בשביל לעבוד עם TCP. אין שם שום דבר מעניין באמת. בתור התחלה, זה התיעוד, ופה לייד זה המימוש של המחלקה TcpClient של .Net , ובנוסף זה המימוש של TcpListner וזה התיעוד שלו. שתי המחלקות האלה נותנות אבני בניין פשוטות בשביל לבנות תקשורת מבוססת TCP ב .Net. שים לב שיש לך דוגמאות לשימוש בשני התיעודים. יש עוד מחלקה שנקראת UdpClient , היא בעצם המקבילה של שני הנ"ל בשביל UDP. כדאי שלפחות תסתכל על התיעודים פה, בשביל להבין מה בתכלס עושים עם כל זה...
כשאתה מסתכל על הקוד של כל "השמחה" שהזכרתי למעלה אתה רואה שהם כמעט לא עושים שום דבר מעניין חוץ מלהתעסק עם מחלקה אחרת שנקראת Socket, זאת מחלקה נחמדה של בערך 10,000 שורות שממשת את את רוב התשתית ש .Net צריך בשביל תקשורת. כל זה לא ממש מעניין אותך כי בגדול מה שהם עושים זה עוטפים משהו שנקרא WinSock (למרות שלא רק...).
עד כאן .Net...
התשתית הכי בסיסית לתקשורת ב Windows נקראת WinSock התיעוד שלה נמצא פה והפונקציות עצמן נמצאות פה. עכשיו, אם תסתכל על הפונקציות תראה שבתכלס זה מאוד מזכיר את ה UdpClient של .Net (בעיקר כי הוא היותר כללי מבין המחלקות למעלה) , ומבחינה רעיונית הפונקציונליות שלהם זהה, לתפוס כתובת, להאזין להודעה, ולשלוח הודעה. זאת דוגמה למימוש של Client מבוסס על WinSock, וזאת דוגמה ל Server. שים לב שהדוגמאות האלה מאוד פשטניות ולא מתאימות למימוש אמתי, מסתובבות באינטרנט דוגמאות הרבה יותר טובות. ויש את האתר הזה שאומנם הוא ישן ולא הכי מעודכן, אבל אני ממליץ בחום לפחות לעבור על כולו אם יש לך כוונה להשתמש ב Winsock. זאת רשימה של כל הטכנולוגיות\ תשתיות לתקשורת שיש ב Windows עצמו, שים לב, שחוץ מאולי WinHttp, אין שם משהו באמת כללי לאפליקציות חוץ WinSock .
למעשה, WinSock הוא וריאציה של Berkeley Sockets שזה פחות או יותר הסטנדרט לספריות תקשורת בתוכנה עד עצם היום הזה. ואפשר למצוא מימוש של Berkeley Sockets איפשהו באזור של "sys/socket.h" ברוב מערכות ה nix* .
עכשיו הצד השני...
WinSock זה למעשה הממשק שאפליקציות אמורות להשתמש בו בשביל תקשורת ב Windows. מתחת לזה יושב המימוש של כל שרותי הרשת של Windows. המימוש הזה נקרא TCP/IP Protocol Stack (הנה הסבר קצר על מה זה Protocol Stack)
נהוג לחלק תשתיות תקשורת לשכבות, וההגדרות הנפוצות הן, ההגדרה הישנה של ה IETF (אלה שעשו סטנדרטיזציה לאינטרנט), והמודל של OSI. המודל של OSI מחלק מערכת תקשורת ל7 שכבות בצורה הבאה:
1. Physical
המימוש הפיזי שמאפשר תקשורת בין קצוות שונים במערכת ( כבלים, כרטיס רשת, סיב אופטי, כרטיס רשת אלחוטי, וכו), כל הרכיבים ואיך הם מדברים ביניהם (ברמה של אותות חשמליים, סנכרון וכד')
2. Data Link
כל מה שמגדיר איך תחנות על אותו תווך מדברות אחת עם השנייה (לדוגמה Ethernet, FDDI וכד' )
3. Network
מה שמגדיר את המבנה של כלל הרשת, ואיך קצוות שמחוברים לאזורים פיזיים שונים ברשת יכולים לדבר אחד עם השני ( IP, ICMP, IPX )
4. Transport
מגדיר "שפות" ו"צורות תקשורת" משותפות שתחנות יכולות להשתמש בהן בשביל ליצור תקשורת מקצה לקצה, ולדבר (TCP , UDP, RUDP)
5. Session
מגדיר דרכים לניהול שיחה, עם הקשר, ומצב בהתבסס על שפה משותפת.
6. Presentation
מגדיר דרך משותפת לייצג מידע שמאפשרת לשתי תחנות לדבר ( ASCII , MPEG , MIME )
7. Application
מגדיר את תוכן השיחה והפעולות האפשריות במסגרת השיחה ( HTTP, FTP, BitTorrent )
המודל של IETF , זהה בגדול למודל של OSI , חוץ מזה שIETF מאחדים בין שכבות 1-2 ובין שכבות 4-7, ונשארים עם 4 שכבות...
בסופו של דבר במערכת תקשורת, יש מימוש נפרד (בד"כ) לכל אחת מהשכבות האלה, לפרוטוקולים שנמצאים באותה שכבה, וכל שכבה מדברת עם המקבילות לה.
המימוש של ה TCP/IP Stack של Windows , כמו רוב הדברים אצל מיקרוסופט, הוא מטבעו סגור, אין פה עניין של "חסיון" הרוב מתועד בסטנדרטים פתוחים, אלא שזאת תוכנה מסחרית והם לא משתפים את המימוש.
אם אתה ממש אמיץ, אז המימוש של ה TCP/IP Stack של לינוקס נמצא פה לדוגמה זה המימוש של ipv4 tcp . יש גם כמה ספרים שנכנסים לעומק ומתארים את המימוש של לינוקס, אתה מוזמן לחפש.
אם אתה רוצה משהו יותר "סביר" אז פה וגם פה יש לך שני מימושים ל TCP/IP Stack מינימליסטי וקריא למדי, לא יודע איך הם מבחינת פיצ'רים...
הדברים שציינת ( Reno Techo) הם בסהכ congestion-avoidance algorithm
אין שם איזה גאונות נסתרת מעבר למה שמתואר ב RFC, למיטב זיכרוני Windows משתמש בשעטנז בין New Reno ל Vegas לפחות מאז ויסטה...
|
|