A blog by Jose Barreto, a member of the File Server team at Microsoft.
All messages posted to this blog are provided "AS IS" with no warranties, and confer no rights.
Information on unreleased products are subject to change without notice.
Dates related to unreleased products are estimates and are subject to change without notice.
The content of this site are personal opinions and might not represent the Microsoft Corporation view.
The information contained in this blog represents my view on the issues discussed as of the date of publication.
You should not consider older, out-of-date posts to reflect my current thoughts and opinions.
© Copyright 2004-2012 by Jose Barreto. All rights reserved.
Follow @josebarreto on Twitter for updates on new blog posts.
Note: This blog post is a Windows Server 2012 R2 update on a previous version focused on Windows Server 2012.
With the release of Windows 8.1 and Windows Server 2012 R2, I am frequently asked about how older versions of Windows will behave when connecting to or from these new versions. Upgrading to a new version of SMB is something that happened a few times over the years and we established a process in the protocol itself by which clients and servers negotiate the highest version that both support.
There are several different versions of SMB used by Windows operating systems:
Windows NT is no longer supported, so CIFS is definitely out. Windows Server 2003 R2 with a current service pack is under Extended Support, so SMB1 is still around for a little while. SMB 2.x in Windows Server 2008 and Windows Server 2008 R2 are under Mainstream Support until 2015. You can find the most current information on the support lifecycle page for Windows Server. The information is subject to the Microsoft Policy Disclaimer and Change Notice. You can use the support pages to also find support policy information for Windows XP, Windows Vista, Windows 7 and Windows 8.
In Windows 8.1 and Windows Server 2012 R2, we introduced the option to completely disable CIFS/SMB1 support, including the actual removal of the related binaries. While this is not the default configuration, we recommend disabling this older version of the protocol in scenarios where it’s not useful, like Hyper-V over SMB. You can find details about this new option in item 7 of this blog post: What’s new in SMB PowerShell in Windows Server 2012 R2.
3. Negotiated Versions
Here’s a table to help you understand what version you will end up using, depending on what Windows version is running as the SMB client and what version of Windows is running as the SMB server:
* WS = Windows Server
4. Using PowerShell to check the SMB version
In Windows 8 or Windows Server 2012, there is a new PowerShell cmdlet that can easily tell you what version of SMB the client has negotiated with the File Server. You simply access a remote file server (or create a new mapping to it) and use Get-SmbConnection. Here’s an example:
PS C:\> Get-SmbConnection ServerName ShareName UserName Credential Dialect NumOpens ---------- --------- -------- ---------- ------- -------- FileServer1 IPC$ DomainName\UserN... DomainName.Testi... 3.00 0 FileServer1 FileShare DomainName\UserN... DomainName.Testi... 3.00 14 FileServ2 FS2 DomainName\UserN... DomainName.Testi... 3.02 3 VNX3 Share1 DomainName\UserN... DomainName.Testi... 3.00 6 Filer2 Library DomainName\UserN... DomainName.Testi... 3.00 8 DomainCtrl1 netlogon DomainName\Compu... DomainName.Testi... 2.10 1
In the example above, a server called “FileServer1” was able to negotiate up to version 3.0. FileServ2 can use version 3.02. That means that both the client and the server support the latest version of the SMB protocol. You can also see that another server called “DomainCtrl1” was only able to negotiate up to version 2.1. You can probably guess that it’s a domain controller running Windows Server 2008 R2. Some of the servers on the list are not running Windows, showing the dialect that these non-Windows SMB implementations negotiated with this specific Windows client.
If you just want to find the version of SMB running on your own computer, you can use a loopback share combined with the Get-SmbConnection cmdlet. Here’s an example:
PS C:\> dir \\localhost\c$ Directory: \\localhost\c$ Mode LastWriteTime Length Name ---- ------------- ------ ---- d---- 5/19/2012 1:54 AM PerfLogs d-r-- 6/1/2012 11:58 PM Program Files d-r-- 6/1/2012 11:58 PM Program Files (x86) d-r-- 5/24/2012 3:56 PM Users d---- 6/5/2012 3:00 PM Windows PS C:\> Get-SmbConnection -ServerName localhost ServerName ShareName UserName Credential Dialect NumOpens ---------- --------- -------- ---------- ------- -------- localhost c$ DomainName\UserN... DomainName.Testi... 3.02 0
You have about 10 seconds after you issue the “dir” command to run the “Get-SmbConnection” cmdlet. The SMB client will tear down the connections if there is no activity between the client and the server. It might help to know that you can use the alias “gsmbc” instead of the full cmdlet name.
5. Features and Capabilities
Here’s a very short summary of what changed with each version of SMB:
You can get additional details on the SMB 2.0 improvements listed above at http://blogs.technet.com/b/josebda/archive/2008/12/09/smb2-a-complete-redesign-of-the-main-remote-file-protocol-for-windows.aspx
You can get additional details on the SMB 3.0 improvements listed above at http://blogs.technet.com/b/josebda/archive/2012/05/03/updated-links-on-windows-server-2012-file-server-and-smb-3-0.aspx
You can get additional details on the SMB 3.02 improvements in Windows Server 2012 R2 at http://technet.microsoft.com/en-us/library/hh831474.aspx
We strongly encourage you to update to the latest version of SMB, which will give you the most scalability, the best performance, the highest availability and the most secure SMB implementation.
Keep in mind that Windows Server 2012 Hyper-V and Windows Server 2012 R2 Hyper-V only support SMB 3.0 for remote file storage. This is due mainly to the availability features (SMB Transparent Failover, SMB Witness and SMB Multichannel), which did not exist in previous versions of SMB. The additional scalability and performance is also very welcome in this virtualization scenario. The Hyper-V Best Practices Analyzer (BPA) will warn you if an older version is detected.
We’re excited about SMB3, but we are also always concerned about keeping as much backwards compatibility as possible. Both SMB 3.0 and SMB 3.02 bring several key new capabilities and we encourage you to learn more about them. We hope you will be convinced to start planning your upgrades as early as possible.
Note 1: Protocol Documentation
If you consider yourself an SMB geek and you actually want to understand the SMB NEGOTIATE command in greater detail, you can read the [MS-SMB2-Preview] protocol documentation (which covers SMB 2.0, 2.1, 3.0 and 3.02), currently available from http://msdn.microsoft.com/en-us/library/ee941641.aspx. In regards to protocol version negotiation, you should pay attention to the following sections of the document:
Section 1.7 includes this nice state diagram describing the inner workings of protocol negotiation:
Note 2: Third-party implementations
There are several implementations of the SMB protocol from someone other than Microsoft. If you use one of those implementations of SMB, you should ask whoever is providing the implementation which version of SMB they implement for each version of their product. Here are a few of these implementations of SMB:
Please note that is not a complete list of implementations and the list is bound to become obsolete the minute I post it. Please refer to the specific implementers for up-to-date information on their specific implementations and which version and optional portions of the protocol they offer.
You also want to review the SNIA Tutorial SMB Remote File Protocol (including SMB 3.0). The SNIA Data Storage Innovation Conference (DSI’14) in April 22-24 2014 is offering an updated version of this tutorial.
wow.. You are working on this since SMB 2.0.. :)
It's amazing the improvements made since there. I really enjoy each one
So, what does it mean, when it return SMB Dialect = 1.5?
We get this from a Windows Server 2003 SP2 DFS server, that has folder targets to an EMC NAS.
What is 1.5? Is it DFS specific or NAS specific?
Dialect 1.5 is a valid SMB 1 dialect and many implementations (including older versions of Windows) use it.
You see, we released many Windows versions that supported SMB1 over the years, but I did not spend any time on the blog to detail the many 1.x dialects...
Great Post! But how do you check this on a windows 7 and 2008r2 session since only 8 and 2012 have get-smbconnection cmdlet?
For Windows versions previous to Windows 8, you need to use packet capture program like Network Monitor, Message Analyzer or Wireshark to look into the packets and figure out the dialect. I recommend Message Analyzer, which is a free download from Microsoft.
No easier way I know of, unless someone wrote a specific tool for it.