日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > windows >内容正文

windows

SMB小传 —— SMB网络文件系统协议介绍

發(fā)布時(shí)間:2023/12/29 windows 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SMB小传 —— SMB网络文件系统协议介绍 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

SMB網(wǎng)絡(luò)文件系統(tǒng)協(xié)議, 全名服務(wù)器消息塊(Server Message Block),曾用名CIFS(通用互聯(lián)網(wǎng)文件系統(tǒng) Common Internet File System), 公元1983年誕生于IBM[1],幼年得到英特爾和微軟的照料,最終在微軟的培養(yǎng)下成長(zhǎng)為當(dāng)今世上網(wǎng)絡(luò)文件系統(tǒng)協(xié)議兩極之一的存在。本文就來(lái)聊聊SMB的生平二三事。

一、未曾停下的演進(jìn)

作為一個(gè)誕生在谷歌、亞馬遜、雅虎、甚至思科都不曾存在的互聯(lián)網(wǎng)“遠(yuǎn)古”時(shí)代[2]的網(wǎng)絡(luò)協(xié)議,SMB的早期版本(SMB 1.0/CIFS,以下簡(jiǎn)稱SMB1)在不停地修修補(bǔ)補(bǔ)中卻也漸漸無(wú)法適應(yīng)現(xiàn)代的網(wǎng)絡(luò)環(huán)境了。如今的互聯(lián)網(wǎng)已經(jīng)不再簡(jiǎn)單不再純粹,互聯(lián)網(wǎng)上存儲(chǔ)著海量的數(shù)據(jù)并還在快速生產(chǎn)新數(shù)據(jù),運(yùn)行著各式各樣的網(wǎng)絡(luò)應(yīng)用,也同樣充斥著的無(wú)處不在的惡意攻擊。

SMB1協(xié)議有太多的缺點(diǎn),除了近期在2017年因?yàn)閃annaCry病毒事件而再次暴露出來(lái)的巨大安全漏洞之外,便是SMB1協(xié)議特性導(dǎo)致了其對(duì)于網(wǎng)絡(luò)資源的巨大耗費(fèi)以及在遠(yuǎn)距通信場(chǎng)景下極差的性能。SMB1顯著的性能問(wèn)題還使得CIFS加速器成為了WAN加速類產(chǎn)品[3]的必備組件,思科、riverbed等公司都研發(fā)過(guò)此類功能,當(dāng)然這些都是題外話了。對(duì)于SMB1的種種不足和為什么要停止使用SMB1,微軟SMB項(xiàng)目的負(fù)責(zé)人Ned Pyle已經(jīng)有了清晰的訴說(shuō)[4, 5],本文便不再贅述了。

下面(表-1),本文列表總結(jié)了SMB協(xié)議各個(gè)版本的發(fā)布時(shí)間以及各版本所帶來(lái)的重要協(xié)議特性。可以看到,從1983年到2007年這整整24年中,SMB作為一個(gè)網(wǎng)絡(luò)文件系統(tǒng)的基本功能已經(jīng)比較完整了,各種文件系統(tǒng)操作、用戶認(rèn)證、消息簽名、客戶端緩存等等的功能都有,更是取消了對(duì)NetBIOS協(xié)議層的依賴從而直接使用445端口運(yùn)行在TCP/IP之上。至于為何SMB在1996年一度改名為CIFS呢?那都是源于微軟面對(duì)Sun公司的NFS(Network File System)協(xié)議面向Web服務(wù)的擴(kuò)張(WebNFS),而進(jìn)行的一次失敗的IETF網(wǎng)絡(luò)文件系統(tǒng)標(biāo)準(zhǔn)化嘗試[6],對(duì)此本文不多作細(xì)說(shuō)。不過(guò)這一次改名導(dǎo)致了人們現(xiàn)在有時(shí)也會(huì)以CIFS來(lái)稱呼SMB協(xié)議,而在Linux平臺(tái)的SMB客戶端甚至一直保持了CIFS的命名。

隨著互聯(lián)網(wǎng)產(chǎn)業(yè)的快速發(fā)展,SMB堪憂的安全性和愈發(fā)跟不上時(shí)代的性能使得微軟不得不對(duì)SMB協(xié)議進(jìn)行大刀闊斧的修訂,并在2007年發(fā)布了SMB 2.0。仔細(xì)觀察就會(huì)發(fā)現(xiàn),SMB 2.X和SMB 3.X帶來(lái)的眾多新特性基本都是是圍繞著增加安全性和提升性能這兩個(gè)主題來(lái)設(shè)計(jì)的。

SMB版本

年代

相應(yīng)操作系統(tǒng)版本

重要協(xié)議特性

SMB 3.1.1

2015

Windows 10

Windows Server 2016

- 傳輸加密算法協(xié)商
- 預(yù)認(rèn)證完整性檢查(pre-authentication integrity)

SMB 3.0.2

2013

Windows 8.1

Windows Server 2012 R2

- 客戶端直讀直寫請(qǐng)求
- SMB Direct(RDMA)性能改進(jìn)

SMB 3.0

2012

Windows 8

Windows Server 2012

- 目錄級(jí)元數(shù)據(jù)客戶端緩存(directory lease)
-?持久句柄(persistent handle)
-?基于AES-CCM算法的數(shù)據(jù)傳輸加密
-?消息簽名(message signing)改用AES-CMAC算法
-?SMB Direct(RDMA)支持
-?多通道(multi-channel)

SMB 2.1

2009

Windows 7

Windows Server 2008 R2

-?基于Lease的文件數(shù)據(jù)客戶端緩存
-?多協(xié)議版本支持協(xié)商(multi-protocol negotiate)
-?彈性句柄(resilient handle)

SMB 2.0.2

2008

Windows Vista SP1

Windows Server 2008

-?SMB指令數(shù)量減至19個(gè)
-?基于信用點(diǎn)(credit)的流控機(jī)制
-?改進(jìn)復(fù)合請(qǐng)求機(jī)制(request compounding)
-?耐用句柄(durable handle)
-?消息簽名(message signing)改用SHA-256算法
- 支持軟鏈接(symbolic link)
-?提升最大數(shù)據(jù)塊尺寸(maximum block size)

SMB 2.0

2007

Windows Vista

======================== 時(shí)代的分割線 ========================

SMB 1.0/CIFS

2000

Windows 2000

-?包含100+指令的指令集
-?打開(kāi)(open)、讀(read)、修改(modify)、關(guān)閉(close)等文件操作
-?取消(cancel)操作
-?直接運(yùn)行于TCP/IP協(xié)議之上(Direct hosting of SMB over TCP/IP)
-?查詢、設(shè)定文件和卷屬性(attributes)
-?基于NTLM、Kerbeors等協(xié)議的用戶認(rèn)證
-?基于MD5算法的消息簽名(message signing)
-?基于機(jī)會(huì)鎖(opportunistic lock / oplock)的文件數(shù)據(jù)客戶端緩存

CIFS

1996

Windows NT 4.0

早期SMB

1983

MS-DOS

OS/2

表-1 SMB協(xié)議版本歷史與重要特性[7]

然而,如果用戶們想要真正用上新版SMB協(xié)議帶來(lái)的新特性,就必須保證SMB客戶端和SMB服務(wù)端都能夠支持帶有該特性的協(xié)議版本。更因?yàn)槲④洸⒉恢С窒蚺f版Windows系統(tǒng)移植新版的SMB客戶端或服務(wù)端程序,用戶只能更新操作系統(tǒng)之后才能夠體驗(yàn)更新的SMB特性。在表-2中,我們列出了不同Windows系統(tǒng)組合之間所能夠支持的最高的SMB版本以供參考。

Windows版本 Windows 10 WS 2016 Windows 8.1 WS 2012 R2 Windows 8 WS 2012 Windows 7 WS 2008 R2 Windows Vista WS 2008 更早版本
Windows 10 WS 2016 SMB 3.1.1 SMB 3.0.2 SMB 3.0 SMB 2.1 SMB 2.0.2 SMB 1
Windows 8.1 WS 2012 R2 SMB 3.0.2 SMB 3.0.2 SMB 3.0 SMB 2.1 SMB 2.0.2 SMB 1
Windows 8 WS 2012 SMB 3.0 SMB 3.0 SMB 3.0 SMB 2.1 SMB 2.0.2 SMB 1
Windows 7 WS 2008 R2 SMB 2.1 SMB 2.1 SMB 2.1 SMB 2.1 SMB 2.0.2 SMB 1
Windows Vista WS 2008 SMB 2.0.2 SMB 2.0.2 SMB 2.0.2 SMB 2.0.2 SMB 2.0.2 SMB 1
更早版本 SMB 1 SMB 1 SMB 1 SMB 1 SMB 1 SMB 1

表-2 SMB協(xié)議版本歷史與重要特性 (* WS = Windows Server)

二、一次完整的SMB會(huì)話

簡(jiǎn)單地聊完SMB的演進(jìn)之后,本小節(jié)再來(lái)簡(jiǎn)述一下SMB的網(wǎng)絡(luò)報(bào)文格式以及一個(gè)典型SMB會(huì)話的各個(gè)生命階段。本節(jié)講述關(guān)于SMB2和SMB3相關(guān)的協(xié)議內(nèi)容,對(duì)于已經(jīng)被摒棄的SMB1協(xié)議便略去不提了。

SMB報(bào)文格式

圖-1詳細(xì)展示了SMB2和SMB3的報(bào)文頭部結(jié)構(gòu),對(duì)這些技術(shù)細(xì)節(jié)不感興趣的讀者可跳過(guò)本節(jié)。至于每個(gè)單獨(dú)的SMB指令的報(bào)文格式便不在本文中展開(kāi)了,有興趣的讀者可自行翻閱MS-SMB2協(xié)議文檔。細(xì)心的讀者可能會(huì)好奇,為什么SMB3沒(méi)有獨(dú)立的協(xié)議文檔呢?一則SMB2和SMB3在報(bào)文格式上并沒(méi)有太大差異,并不需要單獨(dú)開(kāi)一篇文檔;二則,其實(shí)SMB 3.0在WIndows 8測(cè)試版階段還是命名為SMB 2.2的,但微軟工程師們經(jīng)過(guò)再三考慮,認(rèn)為以SMB3新增的代碼之多、新特性之豐富,一個(gè)單獨(dú)的主版本號(hào)才是理所應(yīng)當(dāng)?shù)腫8]。

圖-1 SMB報(bào)文格式

SMB會(huì)話的生命階段

如圖-2所示,一個(gè)普通的SMB會(huì)話從開(kāi)始到結(jié)束一般會(huì)經(jīng)過(guò)以下六個(gè)生命階段:

1. SMB協(xié)議協(xié)商(Negotiate)
在一個(gè)SMB還沒(méi)有開(kāi)始的時(shí)候,由客戶端率先發(fā)出一個(gè)協(xié)商請(qǐng)求。在請(qǐng)求中,客戶端會(huì)列出所有它所支持協(xié)議版本以及所支持的一些特性(比如加密Encryption、持久句柄Persistent Handle、客戶端緩存Leasing等等)。而服務(wù)端在回復(fù)中則會(huì)指定一個(gè)SMB版本且列出客戶端與服務(wù)端共同支持的特性。 2. 建立SMB會(huì)話(Session Setup)
客戶端選擇一個(gè)服務(wù)端支持的協(xié)議來(lái)進(jìn)行用戶認(rèn)證,可以選擇的認(rèn)證協(xié)議一般包括NTLM、Kerberos等。按照選擇的認(rèn)證協(xié)議的不同,這個(gè)階段可能會(huì)進(jìn)行一次或多次SESSION_SETOP請(qǐng)求/回復(fù)的網(wǎng)絡(luò)包交換。至于NTLM或Kerberos認(rèn)證協(xié)議的細(xì)節(jié),我們會(huì)另文再敘。 3. 連接一個(gè)文件分享(Tree Connect)
在會(huì)話建立之后,客戶端會(huì)發(fā)出連接文件分享的請(qǐng)求。源于文件系統(tǒng)的樹(shù)形結(jié)構(gòu),該請(qǐng)求被命名為樹(shù)連接(Tree Connect)。以SMB協(xié)議的阿里云NAS為例,一般的SMB掛載命令為: net use z: \\XXX.nas.aliyuncs.com\myshare其中的“ \\XXX.nas.aliyuncs.com\myshare”便是我們將要連接的那個(gè)文件分享,也便是那棵“樹(shù)”。如果在“myshare”中創(chuàng)建有子目錄“abc”,那直接連接“abc”這棵子樹(shù)也是可以的: net use z: \\XXX.nas.aliyuncs.com\myshare\abc 4. 文件系統(tǒng)操作
在文件分享連接成功之后,用戶通過(guò)SMB客戶端進(jìn)行真正的對(duì)于目標(biāo)文件分享的業(yè)務(wù)操作。這個(gè)階段可以用到的指令有CREATE、CLOSE、FLUSH、READ、WRITE、SETINFO、GETINFO等等。 5. 斷開(kāi)文件分享連接(Tree Disconnect)
當(dāng)一個(gè)SMB會(huì)話被閑置一定時(shí)間之后,Windows會(huì)自動(dòng)斷開(kāi)文件分享連接并隨后中止SMB會(huì)話。這個(gè)閑置時(shí)間可以通過(guò)Windows注冊(cè)表進(jìn)行設(shè)定[9]。當(dāng)然,用戶也可以主動(dòng)發(fā)起斷開(kāi)連接請(qǐng)求。
6. 終止SMB會(huì)話(Logoff)
當(dāng)客戶端發(fā)出會(huì)話中止請(qǐng)求并得到服務(wù)端發(fā)回的中止成功的回復(fù)之后,這個(gè)SMB會(huì)話至此便正式結(jié)束了。

圖-2 SMB會(huì)話的六個(gè)階段

三、現(xiàn)狀與展望

聊過(guò)了SMB的過(guò)往歷史和一小部分技術(shù)細(xì)節(jié)之后,本文再來(lái)說(shuō)說(shuō)關(guān)于SMB的一些其他的故事,也對(duì)SMB協(xié)議的未來(lái)做一個(gè)淺薄的展望。

與開(kāi)源社區(qū)的恩怨情仇

雖然微軟長(zhǎng)久以來(lái)主導(dǎo)著SMB協(xié)議標(biāo)準(zhǔn)的訂立與發(fā)展,是SMB協(xié)議的實(shí)質(zhì)擁有者。不過(guò)我們無(wú)法忽視開(kāi)源社區(qū)對(duì)SMB發(fā)展的貢獻(xiàn)。最早發(fā)布于1992年的SAMBA則是開(kāi)源界對(duì)SMB協(xié)議支持最完整也是使用者最多的項(xiàng)目。SAMBA是一個(gè)松散的開(kāi)發(fā)者團(tuán)隊(duì),開(kāi)發(fā)SAMBA本身并不會(huì)獲得收入或盈利,所以這個(gè)團(tuán)隊(duì)的成員大多還有另一份謀以生計(jì)的正職工作[10]。在2018年6的微軟互操作研討會(huì)上[11],筆者便有幸遇到幾位SAMBA的開(kāi)發(fā)者,他們中有SAMBA主要維護(hù)者,來(lái)自谷歌的Jeremy Allison和當(dāng)時(shí)剛剛受聘于微軟的Linux CIFS客戶端開(kāi)發(fā)者Steve French。表-3和表-4列出了歷年來(lái)SAMBA對(duì)在Unix/Linux平臺(tái)上支持SMB協(xié)議作出的努力和成績(jī)。

現(xiàn)在的微軟每年都會(huì)和開(kāi)源社區(qū)的開(kāi)發(fā)者們一起參加各種研討會(huì),有微軟主辦的互操作研討會(huì)、全球網(wǎng)絡(luò)存儲(chǔ)工業(yè)協(xié)會(huì)(SNIA,Storage Networking Industry Association)舉辦的存儲(chǔ)開(kāi)發(fā)者大會(huì)等等。然而,早年的微軟和開(kāi)源社區(qū)之間的關(guān)系并沒(méi)有現(xiàn)在這般和諧,甚至整個(gè)開(kāi)源社區(qū)都曾將微軟視為頭號(hào)公敵。微軟和SAMBA之間也曾一度在歐洲對(duì)簿公堂[12]。但這些都在2010前后發(fā)生了轉(zhuǎn)變,微軟逐漸確立了其云優(yōu)先的公司路線,也逐漸以開(kāi)放的心態(tài)來(lái)對(duì)待開(kāi)源社區(qū),時(shí)至今日,微軟已經(jīng)成為了全球最大的開(kāi)源代碼貢獻(xiàn)者之一了[13]。從2011年起,微軟便遵循GPL開(kāi)源協(xié)議開(kāi)始向SAMBA項(xiàng)目貢獻(xiàn)代碼[14]。甚至其最近還收購(gòu)了全球最大的開(kāi)源代碼平臺(tái)Github。

SAMBA版本 發(fā)布日期 SMB協(xié)議支持版本
4.3.0 2015年9月 SMB 3.1.1
4.1.0 2013年10月 SMB 3
3.6.0 2011年8月 SMB 2
3.5.0 2010年3月 SMB 2(實(shí)驗(yàn)性支持)

表-3 SAMBA對(duì)SMB協(xié)議的支持(SMB服務(wù)端)[15]

Linux內(nèi)核版本 發(fā)布日期 Linux CIFS重要更新內(nèi)容
4.17 2018年6月 支持SMB 3.1.1
4.13 2017年9月 默認(rèn)SMB協(xié)議版本由SMB1改為SMB3
4.11 2017年4月 支持SMB DFS; 支持SMB3傳輸加密
3.12 2013年11月 支持SMB 3.0.2
3.8 2013年2月 支持SMB 2.0.2
3.7 2012年12月 支持SMB 2.1
2.5.42 2002年10月 以內(nèi)核模塊形式新增CIFS虛擬文件系統(tǒng)

表-4 Linux內(nèi)核對(duì)SMB協(xié)議的支持(SMB客戶端)[16]

兼收并蓄是未來(lái)

雖然很多人知道,Windows可以連接NFS協(xié)議的文件分享,Linux上也可以掛載SMB協(xié)議的網(wǎng)絡(luò)存儲(chǔ)。但是大家也都普遍認(rèn)為,這種“跨平臺(tái)”的網(wǎng)絡(luò)文件系統(tǒng)會(huì)有很多不可知的問(wèn)題,性能也不好。在過(guò)去的很長(zhǎng)的一段時(shí)間里,確實(shí)大致如此。

不過(guò)隨著近年來(lái)微軟和開(kāi)源社區(qū),特別是和SAMBA的緊密合作,Unix/Linux平臺(tái)上對(duì)SMB協(xié)議的支持已經(jīng)比較完整了,功能和性能上都有了長(zhǎng)足的進(jìn)步。特別是近期在Linux 4.18內(nèi)核版本中,CIFS客戶端增加了SMB 3.1.1版協(xié)議對(duì)POSIX extension的實(shí)驗(yàn)性支持[17]。一直以來(lái),Windows和POSIX的文件系統(tǒng)語(yǔ)義的兼容性問(wèn)題都在阻礙著用戶進(jìn)行跨平臺(tái)文件方位(Windows、Linux、MAC等)。而在云計(jì)算大發(fā)展的當(dāng)下,Linux系統(tǒng)和Windows系統(tǒng)分別統(tǒng)治消費(fèi)者市場(chǎng)[18]服務(wù)器市場(chǎng)[19],數(shù)據(jù)和文件的跨平臺(tái)訪問(wèn)會(huì)是一個(gè)可以預(yù)見(jiàn)的強(qiáng)大需求。隨著SMB POSIX extension的到來(lái),必將使SMB協(xié)議在跨平臺(tái)的網(wǎng)絡(luò)文件訪問(wèn)上得以大展身手。在今天,主要的云計(jì)算廠商幾乎都已經(jīng)推出了云上的文件存儲(chǔ)服務(wù),用戶一般可以使用SMB或者NFS協(xié)議來(lái)掛載訪問(wèn)這些云文件存儲(chǔ),本文也對(duì)各家廠商對(duì)SMB和NFS的協(xié)議支持情況做了個(gè)簡(jiǎn)單總結(jié)(見(jiàn)表-5)供讀者參考。

云廠商 產(chǎn)品 SMB?協(xié)議支持 NFS協(xié)議支持
阿里云 ?文件存儲(chǔ) NAS? SMB2,SMB3 NFS3,NFS4
?亞馬遜AWS ?EFS? X NFS4
?FSx for Windows File Server? SMB2, SMB3 X
微軟Azure ?File Storage? SMB3 X
谷歌GCP ?Filestore? X NFS3
騰訊云 ?文件存儲(chǔ) CFS? SMB1, SMB2, SMB3 NFS3, NFS4
華為云 ?彈性文件服務(wù) SFS? X (即將上線) NFS3
*表中資料收集自2018年11月29日

表-5 主要云廠商文件存儲(chǔ)產(chǎn)品對(duì)SMB和NFS協(xié)議的支持

四、寫在最后

隨著存儲(chǔ)行業(yè)的發(fā)展,云文件存儲(chǔ)也會(huì)向跨地域大集群的方向發(fā)展,如SMB、NFS之類的網(wǎng)絡(luò)文件系統(tǒng)協(xié)議為了不被淘汰出歷史舞臺(tái),也必然會(huì)做出更多的改變。SMB的故事還會(huì)繼續(xù),我們且繼續(xù)關(guān)注。

參考資料

[1] Myths about Samba http://www.groklaw.net/article.php?story=20050205010415933 [2] History of the Internet https://en.wikipedia.org/wiki/History_of_the_Internet [3] CIFS acceleration techniques https://www.snia.org/sites/default/orig/sdc_archives/2009_presentations/monday/MarkRabinovich-IgorGokhman-CIFS_Acceleration_Techniques.pdf [4] Stop Using SMB1 https://blogs.technet.microsoft.com/filecab/2016/09/16/stop-using-smb1/ [5] 禁用SMB1協(xié)議 https://www.anquanke.com/post/id/97002 [6] Common Internet File System Protocol (CIFS/1.0) https://tools.ietf.org/html/draft-heizer-cifs-v1-spec-00 [7] MS-SMB2 https://msdn.microsoft.com/en-us/library/cc246482.aspx [8] SMB 2.2 is now SMB 3.0 https://cloudblogs.microsoft.com/windowsserver/2012/04/19/smb-2-2-is-now-smb-3-0/ [9] SMB timeout https://blogs.msdn.microsoft.com/openspecification/2013/03/27/smb-2-x-and-smb-3-0-timeouts-in-windows/ [10] Samba team https://www.samba.org/samba/team/ [11] Redmond Interoperability Plugfest 2018 https://www.interopevents.com/redmond2018 [12] Samba and the PFIF https://www.samba.org/samba/PFIF/ [13] Microsoft open source https://opensource.microsoft.com/ [14] Microsoft contributes open source code to samba https://www.zdnet.com/article/microsoft-contributes-open-source-code-to-samba/ [15] SAMBA release History https://www.samba.org/samba/history/ [16] Linux CIFS Kernel https://wiki.samba.org/index.php/LinuxCIFSKernel [17] POSIX extension https://interopevents.com/uploads/2074091-4_40_1100_SMB3.11%20POSIX%20Extensions.pdf [18] Desktop OS market share https://www.statista.com/statistics/218089/global-market-share-of-windows-7/ [19] Server OS market share https://w3techs.com/technologies/overview/operating_system/all

總結(jié)

以上是生活随笔為你收集整理的SMB小传 —— SMB网络文件系统协议介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。