Server Message Block

מתוך ויקיפדיה, האנציקלופדיה החופשית
קפיצה אל: ניווט, חיפוש

פרוטוקול SMB ‏(Server Message Block) פועל בשכבת היישום (השכבה העליונה של מודל OSI) ומשמש בעיקר כדי לספק גישה משותפת אל קבצים, מדפסות, יציאות טוריות, ותקשורת בין מחשבים ברשת. הפרוטוקול מספק גם תקשורת בין תהליכית עם מנגנון הרשאות המאפשר את ירושתן. רוב השימוש של SMB, הוא במחשבים המריצים חלונות, שבו הוא ידוע לעתים קרובות כ"שכנים ברשת".

חלקי הפרוטוקול[עריכת קוד מקור | עריכה]

כאשר דנים ב־SMB, יש להבדיל בין:

  • פרוטוקול SMB עצמו
  • שירותי SMB הפועלים מעל הפרוטוקול
  • NetBIOS
  • שירותי DCE/RPC בהם SMB משתמש בתור תקשורת בין תהליכית (באמצעות named pipes)
  • "שכנים ברשת" הפרוטוקולים אשר בעיקר (אך לא רק) הם שירותי Datagram ישירות על תעבורת NetBIOS

היסטוריה[עריכת קוד מקור | עריכה]

בארי פייגנבוים (Barry Feigenbaum) תכנן במקור את SMB ב־IBM במטרה לאפשר שימוש ב"פסיקה 33" (21h) של DOS על מנת לגשת לקובץ מערכת ברשת במקום לגשת לקובץ המקומי. מאז ביצעה מיקרוסופט שינויים ניכרים עד שהגיעה לגרסה שהיא כיום בשימוש הנפוץ ביותר. ב־1990 לערך מיקרוסופט מיזגה את פרוטוקול SMB עם מוצר LAN Manager שפותח על ידי 3Com, והמשיכה להוסיף תכונות לפרוטוקול בחלונות לקבוצות עבודה (בערך ב־1992) ובגרסאות מאוחרות יותר של חלונות.

התכנון המקורי של SMB נועד לפעול על גבי API של NetBIOS/NetBEUI (בדרך כלל מיושם עם NBF או מעל פרוטוקול IPX/SPX, או מעל TCP/IP). החל מגרסת חלונות 2000 ניתן גם להפעיל את SMB ישירות על גבי פרוטוקול TCP (השרת מאזין על פורט 445 למטרה זו).

בשנת 1996 שינתה מיקרוסופט את שמו של הפרוטוקול ל־CIFS ‏(Common Internet File System), והוסיפה עוד תכונות, כולל תמיכה בקישורים סימבוליים וקישורים קשיחים (ריבוי מיקומים לקובץ), הגדילה את גודל הקובץ המקסימלי, וכן הוסיפה ניסיון ראשוני לתמוך בקישוריות ישירה על יציאת TCP מספר 445 בלי כל התוספות של NetBIOS. מיקרוסופט הגישה גם כמה מפרטים חלקיים של הפרוטוקול בתור טיוטות לסטנדרט ל-IETF אך אלו פגו בינתיים.

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

עם חלונות Vista (ששוחררה בשנת 2006), הציגה מיקרוסופט את גרסה 2.0 של הפרוטוקול.

יישום[עריכת קוד מקור | עריכה]

גישה לשרת[עריכת קוד מקור | עריכה]

SMB עובד באמצעות גישת עמית לעמית, שבו הלקוח מגיש בקשות ספציפיות והשרת מגיב בהתאם. קטע אחד של פרוטוקול SMB עוסק בגישה למערכת הקבצים והוא אחראי לבקשות הלקוחות לשרת הקבצים; אך כמה חלקים אחרים של פרוטוקול SMB עוסקים בתקשורת בין תהליכית (IPC).

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

שרתי SMB מאפשרים ללקוחות ברשת גישה למערכות קבצים שלהם ולמשאבים נוספים. מחשבי לקוח יכולים להשתמש בגישה המשותפת למערכות קבצים ולמדפסות בשרת, וב־SMB זאת הפונקציונליות העיקרית והנפוצה ביותר. עם זאת, שרת SMB איננו שימושי במיוחד ללא שרת המספק שירותי הזדהות ברשת ברמה של תחומי (Domain)‏ NT לפחות. הפרוטוקולים של תחומי NT מספקים שירותי MSRPC באופן כמעט בלעדי כ־IPC מסוג named pipe, וכמעט כל היישומים של שרתי SMB משתמשים בשירות זה על מנת לאמת את ההרשאות של הלקוח ביחס למשאבים אליהם הוא ניגש.

בעיות ביצועים[עריכת קוד מקור | עריכה]

טעות נפוצה היא לחשוב כי פרוטוקול SMB עושה שימוש בחלק גדול מרוחב הפס של הרשת משום שכל לקוח משדר את קיומו לרשת המשנה כולה, אולם בפועל הבעיה איננה ב־SMB עצמו אלא למעשה בפרוטוקול המיקום שהוא חלק מה־NetBIOS.‏ SMB עצמו לא משתמש בשידורי broadcast. כברירת מחדל, שרת חלונות ישתמש ב־NetBIOS כדי לפרסם ולאתר פונקציות ה־NetBIOS ממומשות על ידי שידור של השירותים הזמינים במחשב המארח לכל הרשת במרווחים קבועים. אמנם ברירת המחדל הזאת בדרך כלל סבירה ברשת עם פחות מ־20 מחשבים, אבל תעבורת הרשת מקשה יותר ויותר על הרשת כשמספר המחשבים גדל. יישום מוצלח יותר של ה-NBNS ‏(NetBIOS Name Server), למשל WINS בסביבת חלונות, יכול להקל על בעיה זו. מערכת WINS משתמשת במערכת הרבה יותר מתקדמת של רישום ובקשות מרכזי שירות, אך מסבך את העיצוב והתחזוקה של הרשת. מיקרוסופט ממליצה להשתמש ב־DNS דינמי בסביבות של Active Directory.

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

שינויים של מיקרוסופט[עריכת קוד מקור | עריכה]

במהלך הזמן הוסיפה מיקרוסופט מספר הרחבות למימוש שלה של הפרוטוקול. לדוגמה, היא הוסיפה תמיכה בגרסה 2 של NTLM (פרוטוקול האבטחה בברירת המחדל של NT) כי גרסה 1 של NTLM (כנגזר מהמפרט המקורי של SMB משתמש בסיסמאות "LAN Manager" של IBM) משתמש ב־DES בצורה לקויה. בנוסף, NT 4.0 הכניסה לשימוש פרוטוקולים להצפנה ברמה של 40 ביט מחוץ לארצות הברית, בגלל ההגבלות על ייצוא הצפנה של 128 סיביות.

SMB2[עריכת קוד מקור | עריכה]

ב־2006 מיקרוסופט שחררה את 2.0 של הפרוטוקול (קרויה לרוב SMB 2.0 או SMB2) עם חלונות Vista. גרסה זו מפחיתה את "הפטפוט" של הפרוטוקול על ידי צמצום מספר הפקודות ממעל מאה לתשע עשרה בלבד ונוספו מנגנונים לרצף פקודות שבו ניתן לשלוח בקשות נוספות לפני התגובה לבקשה הקודמת.

הגרסה גם מוסיפה את היכולת לדחוס פעולות מרובות לתוך בקשה אחת, דבר אשר מפחית באופן משמעותי את מספר סבבי התקשורת שהלקוח צריך לעשות בגישה לשרת, עובדה האמורה להביא לשיפור הביצועים כתוצאה מכך (גם ב־SMB1 יש גם מנגנון דחיסה - הידוע כ־AndX - לאיסוף פעולות מרובות, אך רק לעתים נדירות לקוחות מיקרוסופט משתמשים בו).

SMB2 גם תומך במאגרים (buffer) גדולים יותר, אשר אמורים לספק ביצועים טובים יותר בזמן העברת קובץ גדולים ולמטב את השימוש ברשתות מהירות.

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

שיפורים אחרים כוללים בין השאר תמיכה בקישורים סימבוליים, זיכרון מטמון עבור מאפייני הקובץ, חתימת הודעה משופרת עם HMAC SHA-256, אלגוריתם Hashing טוב יותר, יכולת שדרוג טובה יותר על ידי הגדלת מספר המשתמשים, המשאבים המשותפים, וכמות הקבצים הפתוחים בכל שרת.

פרוטוקול SMB2 משתמש ב־32 או 64 סיביות עבור רבים מהם, וב־16 בתים עבור מצביעי הקובץ וזאת לעומת פרוטוקול SMB1 המשתמש לעתים קרובות בערכים בגודל 16 סיביות.

מחשבים עם חלונות מגרסת Vista ואילך משתמשים ב־SMB2 כאשר הם מתקשרים עם מחשבים אחרים התומכים בפרוטוקול זה. אולם SMB1 ממשיך להיות בשימוש עבור חיבורים עם הגרסאות הקודמות של חלונות, או עם Samba ‏(Samba 4 כולל תמיכה נסיונית עבור SMB2).

SMB2 מכיל שני יתרונות משמעותיים עבור מיקרוסופט:

  1. בעלות ברורה יותר על הפרוטוקול - SMB1 תוכנן במקור על ידי IBM והפך חלק במגוון רחב של מערכות ההפעלה שאינן חלונות, כגון Xenix, OS/2 ו־VMS (Pathworks). התקן X/Open הסדיר את הפרוטוקול חלקית ואף הייתה טיוטת תקן IETF שנזנחה
  2. הפסקת תאימות אחורה חלקה יחסית - קוד SMB1 של מיקרוסופט צריך לעבוד עם מגוון עצום של לקוחות ושרתי SMB. ישנם חלקי פרוטוקול רבים שהם אופציונליים (כמו שם קובץ קצר או ארוך). ב־SMB1 יש רמות רבות של פירוט מידע עבור פקודות (בחירה איזה חלק מהמבנה יחזור בתגובה על בקשה מסוימת) - למשל משום של־SMB1 התווסף Unicode במועד מאוחר יחסית. SMB2 מקטין משמעותית את בדיקות התאימות עבור מיקרוסופט (כרגע עדכון הפרוטוקל מערב רק לקוחות ושרתים אחרים של חלונות Vista). כתוצאה מהצמצום בכמות רמות המידע האפשריות בקוד SMB2 יש הרבה פחות מורכבות (לדוגמה, אין תמיכה במיקומים שאינם Unicode מכיוון ש־SMB2 דורש תמיכה ב־Unicode), עובדה שעשויה לסייע גם לכלים שאינם של מיקרוסופט לממש את הפרוטוקול.

נקודות נוספות[עריכת קוד מקור | עריכה]

  • מנגנוני התקשורת הבין תהליכית (IPC) של SMB היו בין מנגנוני ה־IPC הראשונים שאפשרו למתכנתים לרשת את האימות אשר בוצע על ידי הלקוח הראשון שהתחבר לשרת. חלק מהשירותים המשתמשים במנגנונים אלו כגון היישום של מיקרוסופט של DCE/RPC מעל SMB, הידוע כ־MSRPC מעל SMB, מאפשרים גם לתוכניות MSRPC בלקוח לבצע אימות, אשר דורס את ההרשאות המסופקות על ידי שרת ה־SMB, אבל רק עבור תוכנית MSRPC אשר עושה בהצלחה אימות נוסף.
  • לסימון החבילות יש השפעה משמעותית על העומס של SMB מעל TCP, משום שהחתימה נוספת בתחילת החבילה כך שאין דרך להימנע ממנה. עם זאת, שרתי חלונות משתמשים ב־SMB כדי להעביר את מדיניות המערכת בזמן הכניסה, כך שבדרך כלל סימון מנות מופעל (כדי למנוע שימוש בהתקפה על ידי גורם הנמצא על התווך התקשורתי). נראה כי העיצוב של גרסה 2 נועד בין השאר להקל על הגבלת תקשורת SMB לחבילת תקשורת בודדה.
  • הנעילה המתבצעת על ידי SMB היא נעילה אופטימית (כלומר ניתן לקרוא את הנתונים בזמן הכתיבה עליהם) וזאת על מנת לשפר את הביצועים.
  • SMB משמש כבסיס ליישום מבוזר של מערכות הקבצים של מיקרוסופט.

גרסאות ומימושים[עריכת קוד מקור | עריכה]

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

  • Samba, מממש הן את פרוטוקול SMB והן את ההרחבות של מיקרוסופט בתוכנה חופשית, כולל שרת SMB וכולל ממשק שורת פקודה עבור לקוח SMB.
  • Samba TNG - וריאציה של סמבה.
  • הגרעין של Linux כולל שני יישומים של לקוח SMB עבור שימוש כמערכת קבצים וירטואלית, מתן גישה לקבצים בשרת SMB באמצעות ה־API של מערכת הקבצים: smbfs ו־cifs. כמו כן ניתן להתחבר לכל ההיררכיה של קבוצות עבודה/שרתים/משאבים משותפים ("השכונה") באמצעות מודול הגרעין fuse ועמיתו fusesmb שרץ בסביבת המשתמש.
  • חברת ONStor מציעה יישום SMB התומך גם בפרוטוקול NFS כדי שמשתמשים יוכלו לגשת לנתונים דרך אותם פרוטוקולים.
  • במערכת ההפעלה NetWare גרסה 6 ומעלה יש יישום שרת CIFS המאפשר גישה לכרכי NetWare מלקוחות מיקרוסופט ברשת.
  • FreeBSD כוללת יישום לקוח SMB בשם smbfs כחלק ממערכת הקבצים הווירטואלית שלה.
  • מערכות NetBSD ו־Mac OS X כוללות לקוח SMB בשם smbfs, שבמקור נגזר מ־smbfs של FreeBSD .
  • ב־Solaris יש פרויקט בשם לקוח CIFS עבור סולאריס, המבוסס על smbfs של Mac OS X
  • Advanced Server for Unix (AS/U) שהיא הסבה של שירותי הרשת של חלונות NT גרסה 3.5 עבור Unix שנוצרה על ידי מיקרוסופט וניתנה ברישיון ל־AT&T כוללת לקוח ושרת של CIFS
  • באוקטובר 2007 נוספה תמיכה ב־CIFS בגרעין השרת של OpenSolaris .
  • חבילת תוכנה של Sun, אשר נודעה בשם PC-Netlink שהיא גרסה של Advanced Server for Unix
  • FreeNAS שהוא התקן NAS קטן, מריץ FreeBSD מריץ Samba ותומך ב־CIFS
  • חברת VERITAS פיתחה יישום של SMB.
  • לחברת SCO יש גרסה של Advanced Server for Unix.
  • SCO הוציאה גם את VisionFS שהיא יישום עצמאי של SMB
  • פלטפורמת Celerra של EMC מכילה שרת SMB
  • ב־NetApp filer יש שרת SMB
  • בהתקן ה-NAS של חברת Isilon יש שרת SMB
  • תוכנת Sharity של Objective Development מספק לקוח למערכת קבצים על בסיס SMB-לקוח עבור Unix.
  • מערכת ניהול התוכן של Alfresco כוללת את JLAN, יישום Java של שרת SMB
  • חברת JCIFS מציע יישום של לקוח SMB ב־Java
  • חברת EBS מציעה את RTSMB שהוא יישום של CIFS/SMB עבור מערכות משובצות
  • Visuality Systems NQ CIFS היא מערכת שרת ולקוח CIFS עבור מערכות משובצות
  • Thursby Software Systems מציעה יישום מסחרי של SMB/CIFS עבור Mac OS

ראו גם[עריכת קוד מקור | עריכה]