SMB (פרוטוקול)

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 לשימוש עם מערכות ההפעלה שאינן של מיקרוסופט.

NQ הוא פתרון SMB / [http://www.cifs.com CIFS] שרת ולקוח אשר פותח על ידי [http://www.visualitynq.com Visuality Systems], חברה ישראלית אשר הוקמה בשנת 1998 על ידי סאם וידרמן, מנכ"ל חברת סימנס תקשורת בישראל לשעבר. משפחת ה-NQ מורכבת משני מוצרים; האחד פותח למערכות מוטמעות כגון מדפסות, מצלמות, מחשבי אוטומציה, מוצרים רפואיים, תעופה וחלל וכו' בעוד שהמוצר השני מותאם לשרתי אחסון. שני המוצרים תומכים בדיאלקטים המתקדמים של הפרוטוקול ומותאמים לספק שיתוף קבצים ומדפסות ווינדוסאי לכל מערכת הפעלה לא ווינדוסאית כגון Android, iOS, Integrity, VxWorks, לינוקס ולכל שאר מערכות ההפעלה האחרות.

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

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

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

==== SMB3 ====
הפרוטוקול, אשר תחילה נקרא SMB 2.2 הוצג עם שחרור מערכת ההפעלה ווינדוס 8 ו-ווינדוס סרבר 2012. פרוטוקול זה הביא עמו שינויים משמעותיים והביא עמו מאפיינים חדשים כמו SMB Direct (מעל RDMA) ו-SMB Multichannel (חיבורים מרובים לכל חיבור SMB). עם שחרור פרוטוקול זה הוצגו מספר שיפורי אבטחה משמעותיים כשהחשוב ביניהם הוא הצפנה מקצה לקצה ואלגוריתם חתימה חדש מבוסס על AES.

=== נקודות נוספות ===
* מנגנוני התקשורת הבין תהליכית (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.
* [http://www.visualitynq.com Visuality Systems] פיתחה אימפלימנטציית [http://www.cifs.com CIFS] / SMB למערכות מוטמעות ולשרתי אחסון המתאימה לכל מערכות ההפעלה ובשיתוף פעולה עם מיקרוסופט תומכת בדיאלקטים המתקדמים ביותר של הפרוטוקול.
* Samba TNG – וריאציה של סמבה.
* הגרעין של לינוקס כולל שני יישומים של לקוח 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 מציע יישום של לקוח SMB1 ב־Java
* חברת EBS מציעה את RTSMB שהוא יישום של CIFS/SMB עבור מערכות משובצות
* Thursby Software Systems מציעה יישום מסחרי של SMB/CIFS עבור Mac OS

== ראו גם ==
* NFS
* Ssh

==קישורים חיצוניים==

קטגוריה:מערכות קבצים
קטגוריה:תקנים בתקשורת מחשבים