咱們以前引入了SAN的概念,SAN首先是個網絡,而不是存儲設備。這個網絡是專門來給主機鏈接存儲設備用的。html
咱們知道按照SCSI總線16個節點的限制,不可能接入不少的磁盤,要擴大SAN的規模,只使用SCSI總線是不行的,因此必須找到一種可尋址容量大、穩定性強、速度塊、傳輸距離遠的網絡結構。FC網絡就應運而生。前端
Fibre Channnel也就是網狀通道,FC協議從1988年出現,最開始做爲高速骨幹網技術。後端
任何互聯繫統都逃不過OSI模型,因此咱們能夠用OSI來將FC協議進行斷層分析。緩存
首先有較高的速度:1Gb/s,2Gb/s,4Gb/s,8Gb/s到16Gbps安全
爲了實現遠距離傳輸,傳輸介質起碼是光纖服務器
FC協議的幀頭有24字節,比以太網幀頭(14字節)還要長。網絡
好比下圖爲以太網的報文格式。架構
爲何FC協議須要這麼長的幀頭呢?由於24字節的幀頭不但包含了尋址功能,還包含了**傳輸功能保障。**也就是說網絡層和傳輸層的邏輯都用這24字節來傳輸。併發
這點就與TCP/IP+以太網不一樣,以太網基本上沒有傳輸功能保證功能,主要須要靠TCP來進行端到端的傳輸保障。ide
咱們能夠對比一下TCP/IP和FC協議的開銷:
基於以太網的TCP/IP網絡,開銷爲:
14字節(以太網幀頭) + 20字節(IP頭) + 20字節(TCP頭) =54字節,或者把TCP幀頭變爲UDP(8字節)一共是42字節
而FC協議就24字節,因此開銷比TCP/IP的要小。
FC網絡中的節點要通訊,無非也就是連、找、發三大要素。
連:經過FC交換機打統統路,主要的拓撲結構有FC-AL和Fabric兩種。
找:FC協議有一套於以太網不相同的編址方式,能夠儘量減小人爲的干預。
發:指的是與目標進行通訊
從這個方面基本上就能夠了解FC各節點交互的流程了。
與以太網相似,FC也有兩種拓撲:FC-AL和Fabric
仲裁環是應該 由全部設備串聯而成的閉合環路,每一個接口上都有一套旁路電路(Bypass Circuit),一旦檢測到本地設備故障,就會自動將這個接口短路。
一跳一跳的傳輸,並且任什麼時候候只能按照一個方向向下遊傳輸。
相對於仲裁環路來講轉發效率提高了不少,聯入矩陣全部節點能夠同時進行點對點通訊,加上包交換所帶來的併發和資源充分利用,可以使得交換架構得到的總帶寬爲全部端口帶寬之和。
而AL架構下,無論接入的節點有多少,帶寬爲恆定,即共享環路帶寬。
下圖爲交換矩陣的示意圖。
FC終端設備接入矩陣端點,一個設備發給另外一個設備數據幀被交換矩陣收到後,矩陣會撥動交叉處的開關,連通電路,傳輸數據。因此能夠把交換矩陣是一個大的電路開關矩陣,根據通訊的源和目的決定波動哪些開關。
FC交換拓撲尋址容量是2的24次方個地址,比以太網理論值(2的48次方)少,可是對於專用的存儲網足夠。
任何網絡都須要尋址機制,因此須要對FC網絡的每一個設備定義一個惟一的標識。
以太網交換設備的端口不須要有MAC地址,而FC交換機卻須要每一個端口**都有本身的WWPN。**這是由於FC要作的工做比以太網交換機多,許多FC的邏輯都集成在了FC交換機。 須要處理到FC協議的最上層。而以太網相對簡單,由於上層邏輯都被交給TCP/IP這樣的上層協議來實現了。
WWPN:長度是64位,比MAC地址多16位。長度太長,速度低,因此在WWPN上映射一層尋址機制,分配一個Fabric ID,嵌入鏈路幀裏面來作路由
這樣WWPN被映射到了Fabric ID,一個24位的Fabric ID又被分爲Domain ID、Area ID、Port ID三個亞尋址單元
高8位定義爲Domain區分符,用來區分網絡中的FC交換機自己。Domain ID是自主交換機分配的。那主交換機怎麼來的?它是根據WWNN號來進行選舉,WWNN最小者獲勝,成爲主交換機,它就有資格向其餘交換機分配Domain ID
中8位定義爲Area區分符,區分同一臺交換機的不一樣端口組。若是一塊芯片能夠管理一、二、三、4號FC端口,那麼芯片能夠屬於一個Area
低8位定義爲Port區分符,區分不一樣的Port
以下的講解主要是針對Fabric 交換架構網絡。
既然要把WWPN映射到Fabric ID上,就必定要有映射機制,那麼每一個端口如何得到Fabric ID的呢?過程比較相似於RARP協議。
當一個端口接到FC網絡的時候,會向註冊服務器發送一個註冊申請,而後這個註冊服務器會返回給它動態分配一個Fabric ID。固然此時註冊服務器會記錄這個映射關係。
**此後這個接口的幀不會攜帶WWPN,而是攜帶其被分配的ID做爲源地址。**這點就與以太網不一樣,咱們知道 以太網既攜帶MAC又攜帶IP,因此在效率上打了折扣。
不過還有一個問題,一個端口要與另外一個端口通訊,那麼怎麼知道要通訊目標的Fabric ID是多少呢?
每一個節點得到本身的Fabric ID以後,還會進行名稱註冊。一樣也是向名稱服務器發送註冊幀,主動告知本身的Fabric ID等信息。而後名稱服務器其餘節點的信息返回給它。這樣就知道了其餘節點地址呢。
若是FC網絡比較大,則可能不僅一臺FC交換機。也就是說有若干FC交換機互聯。與IP網絡不一樣的是,FC網絡不須要太多的人工介入,它們會自動協商本身的Domain ID(能夠回過去看看Fabric ID的結構),選舉出主交換機,由主交換機來爲其餘的交換機分配Domain ID。交換機之間會運行OSPF等路由協議,這樣能夠交互節點信息,尋址各個節點。
如今咱們能夠與IP網絡對比一下,IP網絡須要很強的人爲介入性,須要人來配置節點的IP地址、路由信息等,而FC網絡則能夠自動分配和管理地址。最根本緣由是由於FC協議一開始設計就是爲了高速、高效的網絡,而不是給Internet使用的。因此自動分配地址固然適合。
此時每一個節點已經得到了Fabric ID了,同時還從名稱服務器得知網絡上其餘節點的ID,萬事俱備,徹底能夠與其餘節點進行通訊了。
首先須要直接向目的端口發起一個N_PORT Login過程,目的協商一系列的參數
而後進行Process Login過程(相似TCP向端口發送握手包),即進行應用程序間的通訊。好比FC能夠承載SCSI協議,那麼此時Initiator端就須要向Target端發起請求了。
這些Login過程其實就是上三層的內容,屬於會話層。可是Login幀也必須經過下4層來封裝並傳輸到目的地,就像TCP握手同樣。
FC網絡中還有一中FC Control Service,若是節點向這個服務進行註冊了之後,一旦網絡狀態有變更,將會把最新的信息同步到這些節點。
上面提到的名稱服務器、註冊服務器其實通常都是運行在交換機內部的,而不是物理上的服務器。
FC協議的傳輸層的做用與TCP類似,也也進行Segment以及經過端口號區分上層應用。
對上層數據流進行Segment。 每一個Exchange(上層程序)發來的數據包,被FC傳輸層分割爲Information Unit,相似於TCP的Segment。 而後下層協議爲每一個Segment分配一個Sequence ID,再分割爲FC所適應的幀
區分上層程序。TCP是經過端口號,而FC協議是經過Exchange ID來區分。
要構建一個完整的FC網絡,除了須要FC交換機,還須要FC適配器(FC HBA,Host Bus Adapter)
HBA能夠指代任何一種設備,只要這個設備的做用是將一個外部功能接入主機總線,因此PCIE網卡、聲卡和顯卡均可以叫HBA。
下圖是用來接入FC網絡的各類線纜,有SC光纖,DB9銅線和RJ45/47線纜。能夠看出FC不必定是光纖
FC適配器有本身的CPU、RAM、ROM。是一個嵌入式設備。與RAID卡相似,只是不像RAID卡須要那麼多的RAM來作數據緩存。
在上面一章咱們把FC協議進行了簡單的介紹,如今是時候把SCSI遷移到FC上了。
回顧一下,爲何要這麼作,由於SCSI總線只能接16個節點,不利於擴展,同時傳輸的距離有限,並且不夠高效等。因此咱們能夠在主機與後端存儲之間使用FC協議,把基於並行SCSI總線的存儲網絡架構遷移到FC的網絡架構。
遷移的過程當中存在一個問題,咱們知道FC協議並無定義SCSI指令集這樣面向磁盤存儲數據的通用語言。那怎麼解決這個問題呢?
在【大話存儲】學習筆記(13章),協議融合中提到了協議融合,此時FC協議與SCSI協議有重疊,可是FC協議在某些方面能夠作得更好,因此能夠將SCSI語言承載於FC協議進行傳送。
將鏈接主機和磁盤陣列的通路從並行的SCSI總線替換爲串行傳輸的FC通路。可是盤陣後端鏈接磁盤的接口仍是SAS接口。
這樣單檯盤陣所能接入的磁盤容量沒有提高,但是前端的性能提高了,由於使用FC協議,能夠更爲的高速。
引入FC以後,帶來的好處爲
這樣就實現了多臺主機共享一個盤陣,提高了盤陣的利用率。
並且由於可使用光纖,因此傳輸距離加長了。
FC協議功能更爲豐富,能夠爲每臺主機劃分不一樣的LUN,保證了安全性。 既然全部的主機都掛在了盤陣上,怎麼保證每臺主機能獨享一塊LUN呢?能夠從FC交換機,磁盤陣列控制器入手。
在SCSI協議中有這樣一個過程,此時Initiator想要與Target要進行通訊,Initiator須要發一條Report LUN指令給Target,Target端在收到這條指令之後,須要返回本身的LUN信息。那麼磁盤控制器能夠 LUN的時候,根據發起端的身份,提供相應的LUN給它。若是強行訪問其餘的LUN,就會拒絕。這種方法就叫LUN masking
總的來講,能夠把LUN當作蛋糕,磁盤控制器就是主人,他能夠調查每一個主機的身份,根據不一樣的身份來分配蛋糕。
注意,這是SCSI指令集的功能,只要承載了SCSI指令集的協議就能夠實現這個功能。
ZONE
。 ZONE有軟ZONE和硬ZONE之分。
軟ZONE:在名稱服務器上作手腳,欺騙進行名稱註冊的節點,向他們通告其餘節點信息。
硬ZONE:把交換機某端口歸爲一個ZONE,底層徹底隔離。以下
若是盤陣有兩個控制器,每一個主機上都有兩塊FC適配卡,它們都鏈接到了FC交換機。
這樣會存在一個問題,由於主機有兩塊HBA卡,而每塊HBA能夠識別兩塊LUN,因此整個主機會識別出4塊磁盤,這就有問題了,由於這樣磁盤就有重複了,形成了混亂。
那麼你可能會說,爲啥要兩塊FC HBA卡呢?由於一塊HBA有單點故障,若是使用兩塊HBA卡,一旦一塊HBA卡出現了故障,另外一塊卡依然能夠維持主機到盤陣的通路。
那多路徑的問題怎麼解決:能夠在操做系統中安裝多路徑軟件,它能夠識別FC提交上來的LUN,向操做系統提交單份LUN。這個軟件還有個做用,若是某個控制器發生故障,經過這個軟件當即重定向到另外一個控制器。