SCSI/ISCSI协议
SCSI即小型計算機接口(Small Computer System Interface),指的是一個龐大協議體系,到目前為止經歷了SCSI-1/SCSI-2/SCSI-3變遷。 SCSI協議定義了一套不同設備(磁盤,磁帶,處理器,光設備,網絡設備等)利用該框架進行信息交互的模型和必要指令集。
SCSI協議本質上同傳輸介質無關,SCSI可以在多種介質上實現,甚至是虛擬介質。例如基于光纖的FCP鏈路協議,基于SAS的鏈路協議,基于虛擬IP鏈路的ISCSI協議。通俗點說SCSI協議就是一個存儲設備與服務器之間接口傳遞的一個規范。?
存儲中SCSI/ISCSI的使用場景:?
1、SCSI的邏輯拓撲
邏輯單元(LUN):LUN是SCSI目標器中所描述的名字空間資源,一個目標器可以包括多個LUN,而且每個LUN的屬性可以有所區別,比如LUN#0可以是磁盤,LUN#1可以是其他設備。
啟動器(Initiator):本質上,SCSI是一個C/S架構,其中客戶端成為啟動器,負責向SCSI目標器發送請求指令,一般主機系統都充當了啟動器的角色。
目標器(Target):處理SCSI指令的服務端稱為目標器,它接收來自主機的指令并解析處理,比如磁盤陣列的角色就是目標器。 SCSI的Initiator與Target共同構成了一個典型的C/S模型,每個指令都是“請求/應答”這樣的模型來實現。
- Initiator主要任務:發出SCSI請求。
- Target主要任務:回答SCSI請求,通過LUN提供業務,并通過任務管理器提供任務管理功能。
SCSI啟動器模型?
主機的SCSI系統一般工作在“啟動器”模式下面,從SCSI的體系結構來說,分為了“架構層(中間層)”,“設備層”,“傳輸層”,故此一般的操作系統,都將SCSI分為三個層次,包括Windows, Linux, AIX, Solaris ,BSD。
- Windows下的啟動器架構:Windows將SCSI啟動器分為三個邏輯層次,其中ScsiPort負責實現SCSI的基本框架性處理流程,比如設備發現,名字空間掃描等。
- Linux下的啟動器架構:Linux將SCSI啟動器分為三個邏輯層次,其中scsi_mod中間層復雜處理SCSI設備無關和適配器無關的流程處理,比如一些異常,名字空間維護等。HBA驅動提供SCSI指令的打包解包傳輸等鏈路實現細節,設備驅動實現特定的SCSI設備驅動,比如著名的sd(SCSI磁盤)驅動,st(SCSI磁帶)驅動,sr(SCSI光盤設備)驅動等。
- AIX下的啟動器架構:AIX的結構也是分為三層,即:SCSI設備驅動,SCSI中間層,SCSI適配驅動。
SCSI目標層器模型
Target一般依據SCSI體系結構,分為三個層次,分別是鏈路端口層(Port Layer),中間層( Middle Layer),目標設備層(Device Layer)。其中最重要的是中間層,在中間層中將以SAM/SPC為規范,對LUN命名空間,鏈路端口,目標設備,任務,任務集,會話等進行管理維護。端口層的驅動都以注冊的形式動態載入,設備層的驅動也是動態載入。
- 目標器中PORT模型:PORT驅動將動態載入,PORT主要完成的任務是對鏈路上攜帶的SCSI指令的解包和封包,比如將指令打包為FPC或者ISCSI或者SAS等,或者將指令從FCP/ISCSI/SAS中解開。iSCSI/FCP/SAS等硬件的目標器模式驅動都屬于PORT范疇,PORT需要提供的方法函數可能包括,傳輸報文(xmit_response),準備好接受數據(xfer_data),管理指令處理完畢回調(mgmt_task_done),任務處理結束(cmd_done),端口控制(復位等control)等。
- 目標器中間層:中間層維護了“LUN空間”,“任務集”,“任務(命令)”等模型,對于LUN空間維護有兩種截然不同的實現方法,一種是所有的PORT都看見的是一個全局的LUN,并外一種是為每個PORT維護一個LUN空間,其中第一種方法實現較為簡單,這里的討論以第一種展開。
- 目標器中的Device模型:本質上Device是一個SCSI指令“分析器”,通過處理INQUIRY告訴Initiator當前LUN是什么設備,通過READ/WRITE處理IO。
2、SCSI協議和存儲系統
SCSI協議是主機與存儲磁盤通信的基本協議。DAS使用SCSI協議實現主機服務器與存儲設備的互聯。?
控制器首先向總線處理器發出請求使用總線的信號。該請求被接受之后,控制器高速緩存就開始執行發送操作。在這個過程中,控制器占用了總線,總線上所連接的其它設備都不能使用總線。當然,由于總線具備中斷功能,所以總線處理器可以隨時中斷這一傳輸過程并將總線控制權交給其它設備,以便執行更高優先級的操作。
SCSI 控制器相當于一個小型CPU,有自己的命令集和緩存。SCSI是一種特殊的總線結構,可以對計算機中的多個設備進行動態分工操作,對于系統同時要求的多個任務可以靈活機動的適當分配,動態完成。
3、SCSI尋址?
為了對連接在SCSI總線上的設備尋址,SCSI協議引入了SCSI設備ID和邏輯單元號LUN(Logical Unit Number)。在SCSI總線上的每個設備都必須有一個唯一的設備ID,當然服務器中的主機總線適配器也擁有自己的設備ID,固定為7。每條總線,包括總線適配器,最多允許有8個或者16個設備ID。設備ID一方面用以尋址,另一個作用是標識該設備在總線使用上的優先級。此外,在同一條總線上連接的不同的設備的設備ID必須不同,否則就會引起尋址和優先級的沖突。
每一個存儲設備可能包括若干個子設備,如虛擬磁盤、磁帶驅動器等。 因此SCSI協議引入了邏輯單元號LUN ID,以便于對存儲設備中的子設備進行尋址。
傳統的SCSI控制器連接單條總線,相應的只具有一個總線號。企業級的一個服務器則可能配置了多個SCSI控制器,從而就可能有多條SCSI總線。在引入存儲網絡之后,每個FC HBA(Host Bus Adapter)或iSCSI(Internet SCSI)網卡也都各連接著一條總線,因此必須對每一條總線分配一個總線號,在他們之間依靠不同的總線號加以區分。我們可以使用一個三元描述標識一個SCSI目標:總線號/目標設備ID/邏輯單元號LUN ID。
4、ISCSI協議
iSCSI協議最早由IBM、CISCO、HP發起,2004年起作為正式的IETF標準,現有的iSCSI協議依據SAM2(SCSI Architecture Model-2)。
iSCSI (Internet SCSI)把SCSI命令和塊狀數據封裝在TCP中在IP網絡中傳輸。 iSCSI作為SCSI的傳輸層協議,基本出發點是利用成熟的IP網絡技術來實現和延伸SAN。
4.1 ISCSI協議棧
iSCSI是互聯網小型計算機系統接口(Internet Small Computer System Interface)的簡稱,是一種在TCP/IP上進行數據塊傳輸的標準,可以理解為SCSI over IP。 iSCSI可構成基于IP的SAN,為用戶提供高速、低價、長距離的存儲解決方案。
iSCSI將SCSI命令封裝到TCP/IP數據包中,使I/O數據塊可通過IP網絡傳輸。
iSCSI (Internet SCSI)把SCSI命令和塊狀數據封裝在TCP中在IP網絡中傳輸。iSCSI作為SCSI的傳輸層協議,基本出發點是利用成熟的IP網絡技術來實現和延伸SAN。 iSCSI協議是SCSI遠程過程調用模型到TCP/IP協議的映射。SCSI協議層負責生成CDB,并將其送到iSCSI協議層,然后由 iSCSI協議層進一步封裝成PDU,經IP網絡進行傳送。
4.2 ISCSI系統模型
發起端(Initiator)
- SCSI層負責生成CDB(命令描述符塊),將CDB傳給iSCSI。
- iSCSI層負責生成iSCSI ?PDU(協議數據單元),并通過IP網絡將PDU發給target。
目標器(Target)
- iSCSI層收到PDU,將CDB傳給SCSI層。
- SCSI層負責解釋CDB的意義,必要時發送響應。
4.3 ISCSI體系架構
iSCSI節點將SCSI指令和數據封裝成iSCSI包,然后該數據封裝被傳送給TCP/IP層,再由TCP/IP協議將iSCSI包封裝成IP協議數據以適合在網絡中傳輸。
在支持iSCSI的系統中,用戶在一臺SCSI存儲設備上發出存數據或取數據的命令,操作系統對該請求進行處理,并將該請求轉換成一條或者多條SCSI指令,然后再傳給目標SCSI控制卡。iSCSI節點將指令和數據封裝(Encapsulation)起來,形成一個iSCSI包,然后該數據封裝被傳送給TCP/IP層,再由TCP/IP協議將iSCSI包封裝成IP協議數據以適合在網絡中傳輸。也可以對封裝的SCSI命令進行加密處理,然后在不安全的網絡上傳送。
數據包可以在局域網或Internet上傳送。在接收存儲控制器上,數據報重新被組合,然后存儲控制器讀取iSCSI包中的SCSI控制命令和數據發送到相應的磁盤驅動器上,磁盤驅動器再執行初始計算機或應用所需求的功能。如果發送的是數據請求,那么將數據從磁盤驅動器中取出進行封裝后發送給發出請求的計算機,而這整個過程對于用戶來說都是透明的。
盡管SCSI命令的執行和數據準備可以通過使用標準TCP/IP和現成的網絡控制卡的軟件來完成,但是在利用軟件完成封裝和解封裝的情況下,在主機處理器上實現這些功能需要很多的CPU運算周期來處理數據和SCSI命令。如果將這些事務交給專門的設備處理,則可以將對系統性能的影響減少到最小程度,因此,發展在iSCSI標準下并執行SCSI命令和完成數據準備的專用iSCSI適配器是有必要的。iSCSI 適配器結合了NIC(網絡接口控制器)和HBA(主機總線適配器)的功能。這種適配器以塊方式取得數據,利用 TCP/IP處理引擎在適配卡上完成數據分化和處理,然后通過IP網絡送出IP數據包。這些功能的完成使用戶可以在不降低服務器性能的基礎上創建一個基于IP的SAN。
?8b/10b編碼是將一組連續的8位數據分解成兩組數據,一組3位,一組5位,經過編碼后分別成為一組4位的代碼和一組6位的代碼,從而組成一組10位的數據發送出去。
總結
以上是生活随笔為你收集整理的SCSI/ISCSI协议的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何查找计算机SCI论文文献 - 易智编
- 下一篇: UVALive 5871 Arnooks