iscsi架構分析

2021-08-09 16:23:19 字數 1836 閱讀 5507

iscsi協議是scsi協議在tcp/ip網路的具體實現。它將scsi的邏輯模型對映為tcp/ip通道上的具體實現。同時,也提供了相應的路徑管理相應的能力,比如target的發現、連線的建立、會話的管理等方面的工作。

scsi協議解決了裝置訪問邏輯層面的問題,將傳輸層面、介質層面的問題交給相應的實現協議處理。因此,scsi協議族中包括了許多具體鏈路上的實現。下圖展現在scsi協議的實現層次,sam、cam是對垂直層次關係的定義。從概念抽象的層次,scsi協議架構可以分為互聯、協議、命令三個層次。其中互聯層次定義了資料端對端的通訊。從iscsi協議的角度,tcp/ip可以理解為scsi的互聯層次,其解決的主要問題是點對點的資料互通。協議層是scsi協議模組在具體互聯協議中的實現定義。如,基於fc互聯通訊鏈路,定義了fcp協議;基於tcp/ip鏈路定義了iscsi。命令層詳細定義了不同裝置所需要的請求及響應。

圖中在協議(protocol)層中沒有將iscsi列入是因為iscsi協議與scsi協議的起草組織不同。

由於我們將iscsi協議理解為scsi協議層次的具體實現,也即scsi協議在tcp/ip傳輸網路的具體實現。因此,iscsi協議不僅可以提供基於塊裝置的訪問,也可以實現其他的裝置型別。在前幾年,也有廠商為虛擬帶庫提供iscsi介面。

下圖展示了iscsi實現的總體框架。 與scsi協議對應,iscsi採用c/s架構實現。客戶端與服務端遵循請求響應模型。

在協議上下文中,我們將客戶端稱為啟動端(initiator),將服務端稱為目標端(target)。如圖所示,兩種型的節點在iscsi拓撲裡,我們都稱為網路實體。網路實體指的是可以通過ip網路訪問的裝置或者閘道器。

通常情況下,iscsi的發起端會與作業系統的scsi子系統對接,而作業系統往往將scsi裝置抽象為乙個邏輯的裝置,展現給使用者使用。比如,我們在作業系統中看到的磁碟裝置。應用程充可以像訪問本地的磁碟裝置一樣,通過posix介面訪問發起端所呈現的裝置。作業系統的scsi子系統會將使用者的訪問翻譯成scsi指令傳遞到iscsi initiator模組。iscsi initator並不真正的執行指令,而是將這些指令封裝成pdu傳遞給target進行處理。

每個網路實體至少有乙個網路介面用於連線網路。網路埠(network portal)在邏輯上指的是具體ip位址,可以連線到網路並進行通訊的元件。對於initiator的網路實體可以用ip位址唯一標識;對於target網路實體可通過ip位址和埠號唯一確定。在實現層面,我們可以將網路埠理解為作業系統tcp/ip協議棧。網路實體與裝置的物理網口並非嚴格的一對一的關係。事實上,對於乙個物理網口,我們可以設定多個ip位址。對於乙個ip位址,同樣可以應用於多個物理埠。上述兩種情況都有其現實的意義。前者出現在儲存系統高可用應用場景中。設想兩個節點分別採用不同的ip位址提供服務且相互熱備,當乙個節點出現故障時,另乙個節點接管其ip位址及服務,這時乙個節點的網口對應著兩個不同的ip位址。後者出現在網路繫結的應用環境中。

在發起端和目標端進行實質性的資料傳輸之前,首先需要建立會話。

會話的建立確定了發起端和目標端的協作關係。iscsi提供了兩種會話型別:

- 一般操作會話:不受限制的操作。在此會話狀態下,發起端可以向目標端請求任何它已經支援的操作;

- 發現會話:此會話主要用於目標端的發現。在此會話狀態下,目標端只接受文字請求。其它請求將被拒絕。

當發起端和目標端建立第乙個tcp/ip連線時,會話被建立,當所發起端和目標端所有的連線失效時,會話被刪除,因此,會話在存活期間,網路至少有一條鏈結可供資料傳輸。

iSCSI 中 SCSI 讀寫請求處理分析

iscsi initiator 是通過 scsi command pdu 向 target 發出 scsi 請求,target 接收請求,執行 scsi 命令,然後返回資料以及 scsi 狀態。在 scsi 任務執行時,initiator target 之間會涉及大量資料 i o。rfc3720 中...

Pidgin架構分析

pidgin是乙個可以在windows linux bsd和unixes下執行的多協議即時通訊客戶端,可以讓你用你所有的即時通訊帳戶中一次登入。pidgin支援的通訊 aim bonjour gadu gadu google talk groupwise icq irc msn myspaceim ...

Spring Flex 架構分析

spring flex 架構分析 spring flex是spring和adobe共同研發的乙個開源專案,她整合了 spring的優秀特性和blaseds的工作機制,使用spring也可以很好的應用在ria應用程式開發中。spring flex整合後的服務端工作原理圖 1 2 暴露運程服務,支援如下...