Stor IT Back - Ihr Speicherspezialist
SMB / CIFS Protokoll V1.6 (c) Stor IT Back 2024
Das SMB-Protokoll (Server Message Block) ist eine Netzwerkdateifreigabe, genauer gesagt ein Protokoll.
Die eigentliche Funktion von SMB ist die Dateifreigabe, es umfasst noch zusätzliche Funktionen wie Drucken im Netzwerk, Authentifizierung, Sperren von Dateien und
das Suchen von SMB-Servern im Netzwerk.
Jedes Windows Client- und Server-Betriebssystem beherscht SMB in verschiedenen Versionen und wird zum Datei-Austausch genutzt. Aber auch Linux-Distributionen und andere
Betriebssysteme nutzen SMB bzw. CIFS. So können auch Dateien einfach zwischen Windows und Linux ausgetauscht werden. Auf der Seite von Linux übernimmt Samba die Funktion.
Vergleichbar ist SMB bzw. CIFS mit NFS aus der Unix- und Linux-Welt.
Wo liegt der Unterschied zwischen SMB und CIFS? Sind das eigentlich zwei unterschiedliche Begriffe für die gleiche Sache? Oder ist das eine von Microsoft
und das andere von einem anderen Hersteller, also eine reine Patentfrage des Begriffes? Und welche Funktion bringt SMB bzw. CIFS?
Die erste Entwicklung stammt von IBM aus den Achtziger Jahren und wurde SMB genannt. SMB steht hierbei für Server Message Block. Es handelt sich hierbei
um ein Filesharing-Protokoll. Es sollten Dateien einfach und komfortable über ein lokales Netzwerk geschrieben und gelesen werden, dies war und ist die Funktion. Die Freigaben auf dem Host
wurden als Shares bezeichnet. Auf den Clients ist es dann der CIFS Mount oder SMB Mount.
CIFS (Common Internet File System) ist eine Implementierung durch die Firma Microsoft, entwickelt für das Windows Betriebssystem. Es ist also eine Form von SMB, eine
spezielle Implementierung.
Die beiden Begriffe bedeuten also etwas vereinfacht die gleiche Sache. Ein Client der CIFS spricht kann auf einen Server mit SMB zugreifen und umgekehrt, die Version muss kompatibel sein.
Welcher Begriff ist den jetzt der richtige? Der heute passende Begriff ist SMB, moderne Systeme setzen nicht mehr CIFS, sondern SMB ein. Selbst bei Microsoft wird seit
Windows Vista SMB 2 und seit Windows 8 bzw. Windows Server 2012 SMB 3 eingesetzt. SMB 2 und SMB 3 nutzen also deutliche Verbesserungen gegenüber von CIFS.
Was ist denn jetzt aber Samba? Samba ist eine Implementierung von SMB auf Unix bzw. Linux Rechnern. Samba wurde entwickelt, um Linux Clients einen Zugriff auf Windows Server
zu ermöglichen bzw. Windows Clients den Zugriff auf Linux Server.
Unter Linux bzw. Unix Rechnern wird sonst nur das NFS Netzwerkdateisystem (Network File System) genutzt. Das ist allerdings ein vollständig anderes Protokoll als SMB oder
CIFS. Eine NFS Client kann also nicht mit einem SMB Server Daten austauschen.
Das SMB Protokoll implementiert ein Netzwerkdateisystem (File-Server-Protokoll), welches vom Filesystem des Servers relativ
unabhängig ist. Microsoft stellt SMB bzw. früher CIFS auf Basis des NTFS zur Verfügung, mit Samba wird SMB auf Linux und Unix
Servern mit zum Beispiel EXT3, EXT4, ZFS oder XFS aufgebaut. Eine ältere Entwicklung des SMB bzw. CIFS Protokoll war das
LAN-Manager-Produkt auf Basis des NetBIOS-Protokoll.
In der Praxis wird das SMB-Protokoll für die Freigabe von Dateien von einem zentralen
Server an verschiedene Clients genutzt. Dies sind häufig Office-Daten, Bilder und Zeichnungen oder Videos. Seit SMB 3.0
können die Freigaben auch für Virtualisierung (Hyper-V) und Microsoft SQL Server genutzt werden.
Wie bei NFS können bei SMB auch Dateien gemeinsam genutzt werden, es können Dateien gleichzeitig gelesen werden. Auf eine
Datei kann meist nur ein Client schreibend zugreifen, aber verschiedene Clients können auf verschiedene Dateien auf
einer Freigabe schreibend zugreifen. Dies ist ein großer Unterschied zu iSCSI-Freigaben oder anderen Block-Devices.
Das SMB Protokoll wurde 1983 bei IBM vorgestellt. Verschiedene Firmen arbeiteten dann an der
Weiterentwicklung des Protokolls, unter anderem Microsoft, IBM, SCO und das Samba-Team. Microsoft entwickelte
in dieser Zeit sicherlich die meisten Erweiterungen, allerdings bis 2007 als Closed Source. Danach
hat Microsoft wichtige Verfahren offen gelegt.
Mit Windows NT 4.0 hat Microsoft das Ur-SMB veröffentlicht, damals als CIFS bezeichnet. Mit Windows 2000 kam dann die
SMB Version 1.0 raus, bei Windows Server 2008 dann die SMB Version 2 und mit Windows Server 2012 die neuste SMB 3 Version.
SMB-Version | Windows Version | Samba Version | Features |
CIFS | Windows NT 4.0 | Samba 1 | |
SMB1 / SMB 1.0 | Windows 2000 | Samba 2 | SMB über TCP/IP |
SMB2 / SMB 2.0 | Windows Vista / Server 2008 | Samba 3.5 | Performancesteigerung, weniger Befehle |
SMB2 / SMB 2.1 | Windows 7 / Server 2008 R2 | neuer Locking-Mechanismus | |
SMB3 / SMB 3.0 | Windows 8 / Server 2012 | Samba 4.0 | für Hyper-V, Verschlüsselung |
SMB3 / SMB 3.0.2 | Windows 8.1 / Server 2012 R2 | ||
SMB3 / SMB 3.1.1 | Windows 10 / Server 2016 | Samba 4.3 | Verschlüsselung, Integritätsprüfung |
SMB Transparent Failover:
Ist eine Freigabe auf einem Clusterdateiserver vorhanden, so wird beim Ausfall eines Nodes (oder der Wartung) die
Freigabe transparent auf einem anderen Node weiter bedient, ohne die Anwendungen zu unterbrechen, die Dateien in
diesen Freigaben speichern. Neben einem Fileserver-Cluster auf Basis von Windows Server 2012 werden auch Clients in
der Version Windows 8 bzw. Server 2012 benötigt.
SMB Scale Out:
Werden in einem Fileserver-Cluster Clustervolumes der Version 2 (Cluster Shared Volumes CSV) genutzt, so kann ein direkter Zugriff
von Clients auf alle Cluster-Nodes über SMB 3.0 erfolgen. Dies bedeutet eine bessere Laster-Verteilung, sowohl für die
Cluster-Nodes wie auch für die Clients.
SMB Multichannel:
Mit dem Multichannel werden verschiedene Netzwerkverbindungen zwischen Client und Server zusammengefasst. Die Daten laufen
über die verschiedenen Pfade und bieten einen Lastausgleich. Sollte ein Pfad ausfallen, so werden transparent die übrigen Pfade
genutzt. Dieses Verfahren ist ähnlich dem Multipathing bei iSCSI oder Fibre Channel.
SMB Direct:
SMB Direct unterstützt Netzwerkkarten mit RDMA Features. RDMA (Remote Direct Memory Access) ermöglicht den direkten Zugriff der
Netzwerkkarte auf den Speicher einer Applikation. Damit müssen die Daten nicht zwischen Applikationsspeicher und
Netzwerk-Puffer hin und her kopiert werden. Dies spart einmal CPU-Zeit und verringert die Latenzzeit einer IO-Operation. Bei
SMB 3.0 bedeutet dies einen performanteren Zugriff auf die Daten, was sich speziell bei Hyper-V und Microsoft SQL Server
positiv auswirkt.
Leistungsindikatoren für Serveranwendungen:
Die neuen SMB-Leistungsindikatoren liefern detaillierte, nach Freigabe unterteilte Daten über Durchsatz, Latenz und I/O pro Sekunde.
Dies ermöglicht die Leistung von SMB 3.0-Dateifreigaben zu analysieren, in denen ihre Daten gespeichert sind.
Diese Indikatoren sind speziell für Serveranwendungen wie Hyper-V und SQL Server konzipiert, die Dateien in Remote-Dateifreigaben speichern.
SMB Verschlüsselung:
Dies ist eine End-to-End Verschlüsselung vom SMB 3.0 Client zum Server. Es schützt den Datenstrom vor Lauschangriffen
auf nicht vertrauenswürdigen Verbindungen. So kann zum Beispiel eine Filialanbindung über das Internet ohne zusätzliche
Hard- oder Software realisiert werden. Die Verschlüsselung wird auf Freigabebasis oder für einen gesamten Server konfiguriert.
SMB Directory Leasing:
Das Directory Leasing verbessert die Antwortzeiten von Anwendungen in Filialen mit langsamer Anbindung.
Durch die Verwendung von Verzeichnis-Leases werden Roundtrips vom Client zum Server reduziert,
da Metadaten von einem Verzeichniscache mit längerer Lebensdauer abgerufen werden. Die Cache-Kohärenz
bleibt erhalten, da Clients benachrichtigt werden, wenn sich Verzeichnisinformationen auf dem Server ändern.
Der BranchCache ist eine Optimierung bei Wide Area Network (WAN) Übertragungen von Dateien zwischen Windows Systemen. Dieses Feature ist seit Windows Server 2008 R2 und Windows 7
verfügbar. Dabei werden Dateien auf den lokalen Systemen zwischengespeichert, die sonst über WAN Verbindungen vom Server geholt werden müssten. Also eine Optimierung
bei der Anbindung von verteilten Büros und remoten Clients über langsame Verbindungen.
Dabei gibt es zwei verschiedene Modelle: Einmal der Distributed Cache und zum anderen der Hosted Cache. Beim Hosted Cache wird in den verteilten Büros
jeweils ein Server benötigt, der die Daten speichert und den Clients zur Verfügung stellt. Der Vorteil dieser Lösung ist es, dass der Server Cache für
alle Clients im Büro das Caching übernimmt.
Beim Distributed Cache übernimmt dies jeder Client selbst. Benötigen also zwei Clients in einem entfernten Büro die gleiche Datei und der erste Client ist offline, dann müssen die
beiden Clients jeweils unabhängig die Datei cachen, aber auch vom zentralen Server holen. Weiterhin funktioniert das Distributed Caching nur in einem Subnet im
entfernten Büro. Sind dort verschiedene Subnets installiert, dann muss der Hosted Cache genutzt werden.
Der BranchCache kann nicht nur bei File Servern (SMB/CIFS), sondern auch bei Webservern und Applikationsservern genutzt werden. Es muss auf den Servern
der Background Intelligent Transfer Service (BITS) aktiviert sein. Ein Beispiel hierfür ist der WSUS Dienst (Microsoft Windows Server Update Services).
Die vollständige Unterstützung von BranchCache in Clients ist in der Enterprise Versionen vorhanden, also zum Beispiel Windows 10 Enterprise oder Windows 8.1 Enterprise. Nicht
aber in den Pro Versionen, dort ist nur der BITS Support verfügbar.
Die Konsistenz der Daten ist natürlich weiterhin gewährleistet. Ändert ein User im verteilten Büro eine Datei, so wird diese direkt auf den zentralen Server
über die WAN Verbindung geschrieben. Sollte jetzt ein anderer User die gleiche Datei anfordern, dann wird erst die Änderung vom zentralen Server zum
Cache geladen und dann erst zum User ausgeliefert. Die funktioniert sowohl beim Hosted Cache, wie auch bei Distributed Cache.
Viele Anwender in Unternehmen nutzen SMB täglich und meist auch ohne größere Probleme. Selbst in einem reinen Windows Netzwerk sind
verschiedene SMB Versionen im Einsatz und auch das meist reibungslos. Aber wo können im Zusammenspiel zwischen Server und Client Probleme
auftreten?
Eine Klippe sind die verschiedenen Protokoll aber schon, Microsoft hat innerhalb von Updates in Windows 10 zum Beispiel das SMB 1.0 abgeschaltet. Greift
der Windows 10 Client auf einen Windows 2016 oder 2019 Server zu, dann kommt es zu keinen Problemen. Beide nutzen das 3.x Protokoll und alles läuft.
Nutzen die Clients aber SMB 1 Shares, zum Beispiel von älteren NAS Systemen, dann ist der Zugriff nicht mehr möglich, da der Client die
Version 1.0 nicht mehr unterstützt. Das lässt sich aber in den Windows Features von Windows 10 einfach wieder aktivieren:
Die Screenshots zeigen die Einstellmöglichkeiten von SMB 1.0 bei den unterschiedlichen Update-Versionen von Windows 10. Wenn der Windows 10
Client nicht mehr auf das NAS zugreifen kann, dann müssen einfach nur die entsprechenden Features im Windows 10 aktiviert werden.
Aber das SMB Protokoll wird nicht nur bei Windows Clients genutzt. Auch ein Linux Client kann auf SMB Shares zugreifen. Selbst auf einen Samba Server
(der ja auch auf einem Linux läuft), kann der Linux Client per SMB zugreifen. Aber warum denn das, ist doch doppelte Umsetzung? Wenn die Zugriffsrechte
im Samba für Windows Clients gesetzt werden, dann kann der Linux Client ohne weitere Definitionen auf das Rechtesystem von Samba zugreifen.
Ein Linux Client verhält sich dann also genauso wie ein Windows Client.
Aber eines ist dabei wichtig: Normalerweise wird ein SMB Share mit mount -f cifs user=test1,domain=DOM //192.168.1.1/datenremote /datenlokal gemountet. Jetzt
wird ein Linux Client aber Unix-Berechtigungen auch bei dem SMB Share nutzen (wollen). Dies kann im Falle eines Samba Servers zu Problemen führen. Soll nur die
Samba-Berechtigungen genutzt werden, dann muss der Share mit mount -f cifs user=test1,domain=DOM,nounix //192.168.1.1/datenremote /datenlokal.
Hier mal ein Aufzug der man-Pages von mount-cifs:
nounix Disable the CIFS Unix Extensions for this mount. This can be useful in order to turn off multiple settings at once. This includes POSIX acls, POSIX locks, POSIX paths, symlink support and retrieving uids/gids/mode from the server. This can also be useful to work around a bug in a server that supports Unix Extensions.
Wird das nicht mit nounix gemountet, dann unterscheiden sich die Berechtigungen von Dateien unter Umständen von denen der Windows Clients. Ein Windows Client kann dann unter Umständen nicht auf die Dateien zugreifen.