溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

linux I/O棧 之 SCSI TARGET (2) iscsi target-<1>協(xié)議

發(fā)布時間:2020-06-30 17:53:36 來源:網(wǎng)絡 閱讀:2429 作者:慢慢存儲路 欄目:軟件技術

      1、iSCSI  概念

    

    我把iscsi target作為TARGET的第一篇來講,主要因為很多人知道I/O導出協(xié)議,也都是第一個想到iscsi。

    iscsi是什么。首先,我們來講講它的概念。

    

SCSI,小型計算機系統(tǒng)接口,是基于client-server模型設計的存儲接口,SCSI的client(initiator)將命令發(fā)送給server(target),server處理命令后回應result給client。由于要傳送命令必然要用到相應的傳輸協(xié)議保障,iSCSI就是其中的一種傳輸協(xié)議,除此之外還有FC和SAS等。

iSCSI是SCSI over IP縮寫,它使用TCP/IP協(xié)議來傳遞SCSI命令與響應,其借用現(xiàn)有成熟廉價的以太網(wǎng)來實現(xiàn)SCSI通訊,成本低,管理和使用非常方便。

iSCSI有initiator和target兩個部分,分別對應于SCSI的initiator和target,iSCSI的initiator與target使用TCP進行傳輸協(xié)議實現(xiàn)了SCSI的initiator與target之間的數(shù)據(jù)傳輸。


2、iSCSI 協(xié)議基本概念

SCSI target中包含許多LU(邏輯單元),每一個SCSI命令都有其目標LU,這些LU負責對針對其的SCSI命令進行處理與響應。iSCSI的命令單元是PDU,在iSCSI initiator端,PDU包含SCSI initiator下發(fā)給其的LUN(邏輯單元號碼)及SCSI命令(CDB),PDU被作為TCP的playload傳遞到iSCSI target端后由SCSI target core根據(jù)LUN將SCSI命令投放到目標LU中,LU在處理命令后把響應結(jié)果遞交給SCSI target,SCSI target再將其遞交給iSCSI target,iSCSI target把result封裝成iSCSI PDU,再使用TCP回傳給iSCSI initiator,iSCSI initiator再將結(jié)果遞交給上層。

linux I/O棧 之 SCSI TARGET (2)  iscsi target-<1>協(xié)議

        3、iSCSI 子系統(tǒng)成員概念

        

iSCSI Device

利用iSCSI協(xié)議傳遞服務子系統(tǒng)的SCSI設備,典型的就是IP-SAN了。

iSCSI Node

iSCSI節(jié)點表示一個iSCSI啟動器或者iSCSI目標器。在一個網(wǎng)絡實體里,可能有一或者多個iSCSI節(jié)點??梢酝ㄟ^一個或者多個網(wǎng)絡端口訪問iSCSI節(jié)點。iSCSI節(jié)點的標識是iSCSI名稱。把iSCSI名稱和地址分開來后,允許多個iSCSI節(jié)點使用同一個地址,或者一個iSCSI節(jié)點使用多個地址,它是組成IP-SAN fabric的基本單元。

Network Entity

     網(wǎng)絡實體。它表示一個可以通過IP網(wǎng)絡訪問的設備或者網(wǎng)關。一個網(wǎng)絡實體必須有一或者多個網(wǎng)絡端口,包含在該網(wǎng)絡實體內(nèi)的iSCSI節(jié)點可以用這些端口來訪問IP網(wǎng)絡。

Network Portal

網(wǎng)絡端口。網(wǎng)絡實體的一個組成部分,它有一個TCP/IP地址。網(wǎng)絡端口在initiator用IP地址標識,在target用IP地址+偵聽的TCP端口標識。

Session

連接initiator和target的一組TCP連接構(gòu)成一個session(可以簡單理解為I_T nexus)??梢韵騭ession添加TCP連接,也可以把TCP連接從session刪除。通過一個session的所有連接,initiator只看到同一個target。

Connection

    一對TCP連接。Initiator和target之間可以使用一或者多個TCP連接通信。

CID(Connection ID)

一個session里的每個connection用CID進行標識,該標識在session范圍內(nèi)是唯一。CID由initiator產(chǎn)生,在login請求和使用logout關閉連接時傳遞給target。

Portal Groups

網(wǎng)絡端口組。iSCSI session支持多連接,一些實現(xiàn)能把通過多個端口建立的多個連接捆綁到一個session。一個iSCSI網(wǎng)絡實體的多個網(wǎng)絡端口被定義為一個網(wǎng)絡端口組,把該組和一個session聯(lián)系起來,該session就可以捆綁通過該組內(nèi)多個端口建立的多個連接,再使它們一起協(xié)同工作以達到捆綁的目的。每一個該組的session并不需要包括該組的所有網(wǎng)絡端口。一個iSCSI節(jié)點可能有一或者多個網(wǎng)絡端口組,但是每一個iSCSI使用的網(wǎng)絡端口只能屬于iSCSI節(jié)點的一個組。

Portal Group Tag

網(wǎng)絡端口組標識。使用16比特的數(shù)標識一個網(wǎng)絡端口組。在一個iSCSI節(jié)點里,所有具有同樣組標志的端口構(gòu)成一個網(wǎng)絡端口組。


 I_T nexus

I_T nexus是指一個SCSI initiator的端口和一個SCSI target端口之間的關系。對于iSCSI,這個關系對應一個session,它指session的initiator端和iSCSI target網(wǎng)絡端口組之間的關系。I_T nexus的標識是一對端口名稱(iSCSI initiator名稱+i+ISID,iSCSI target名稱+t+網(wǎng)絡端口組標識)。

PDU (Protocol Data Unit): initiator和target之間通信時把信息分割為消息。這些消息稱為iSCSI PDU。

SSID (Session ID)

iSCSI initiator和iSCSI target之間的session用SSID進行標識,該標識由initiator部分的ISID和target部分的TPGT構(gòu)成。ISID由initiator在session建立的時候明確給出,TPGT隱含的由建立連接時選擇的網(wǎng)絡端口確定。當TargetName給定后,建立連接的過程中,target必須把TPGT關鍵字當作確認信息發(fā)送出去。

TSIH (Target Session Identifying Handle): Target分配給與特定名稱initiator建立的session的標識。但是0被保留著用于initiator告知target這是一個新session。在為一個session添加一個connect時,TSIH已經(jīng)隱含指明。


        4、iscsi網(wǎng)絡映射關系


在SCSI arch中,一個Device(SCSI initiator或者SCSI target)可以包含多個ports,一個SCSI initiator port和一個SCSI target port之間的聯(lián)結(jié)就是一個I_T nexus,一個SCSI initiator port和一個SCSI target port之間只允許建立一個I_T nexus。

I_T nexus對應與iSCSI中的一個session(normal),SCSI target port對應于iSCSI target中的一個portal group(具有相同tag的一組ports,iSCSI target在這些ports上進行監(jiān)聽等待iSCSI initiator的連接登陸login,所有這些ports一起支撐一個I_T nexus),SCSI initiator port對應于iSCSI initiator中的session(normal)的端口,如下圖所示。

linux I/O棧 之 SCSI TARGET (2)  iscsi target-<1>協(xié)議

一個iSCSI節(jié)點只能有且只有一個SCSI設備;只能通過正常運行的iSCSI session訪問SCSI設備;SCSI名稱也就是iSCSI節(jié)點的名稱。

SCSI initiator端口,它被映射到一定正常運行的iSCSI session的一端。在login過程中,一個iSCSI initiator節(jié)點和一個iSCSI target節(jié)點協(xié)商建立一個正常運行的session;當session成功建立后,一個隸屬于iSCSI initiator設備的SCSI initiator端口被創(chuàng)建(虛擬出一個port)。SCSI initiator端口的名稱和標識被定義為: iSCSI initiator name + i+ ISID標識。

對于iSCSI,SCSI initiator端口和SCSI target端口的定義是不一樣的。iSCSI target端口,映射為iSCSI target的一個網(wǎng)絡端口組中。

iSCSI target端口名稱和標識:都被定義為:iSCSI target name + t + iSCSI target PGT(port group tag)。


       5、iSCSI協(xié)議中的命名及標識和登錄過程

每個iSCSI initiator或者iSCSI target都有一個全球唯一的名稱,對于iSCSI initiator稱為initiator name,對于iSCSI target稱為target name。

iSCSI target中的port group使用port group tag來標識;

session在iSCSI initiator端使用ISID(initiator session identifier)標識,在iSCSI target端使用TSIH(target session identifier handle)標識。

四、session和connection的狀態(tài)劃分及登陸登出。對于connection,有兩種狀態(tài),即login phase(登陸狀態(tài))和full function phase(全功能狀態(tài)),登陸狀態(tài)即iSCSI initiator與iSCSI target正處于登陸協(xié)商過程;全功能狀態(tài)即登陸過程已經(jīng)完成,該connection已經(jīng)能為上層SCSI提供服務。Session與connection一樣也有l(wèi)ogin phase和full function phase,當session中僅有的一個connection處于登陸狀態(tài)時,session處于登陸狀態(tài),當session至少有一個connection處于全功能狀態(tài)時session處于全功能狀態(tài)。

iSCSI initiator登陸到iSCSI target的過程分三個過程:

1)  首先是iSCSI initiator往iSCSI target發(fā)送initial login請求,請求中包括iSCSI initiator支持的協(xié)議版本、iSCSI initiator name和iSCSI target name、ISID和TSIH及CID;

2)  其次是安全協(xié)商,也就是chap認證之類,用于iSCSI initiator和iSCSI target互相之間的授權(quán)認證;

3)  最后是操作參數(shù)協(xié)商,用于協(xié)商在全功能時期的一些通訊參數(shù)。

有兩種登出方式,一種是iSCSI initiator主動發(fā)出logout請求,在收到iSCSI target的logout響應后完成登出;另一種就是iSCSI target發(fā)送包含“request logout”的Async協(xié)議數(shù)據(jù)包,啟動器再發(fā)送logout請求。

       linux I/O棧 之 SCSI TARGET (2)  iscsi target-<1>協(xié)議

       5  iSCSI PDU格式

        

1. 一個Basic Header Segment(BHS,48字節(jié));

2. 可選地n(任意)個Additional Header Segment(AHS,長度不固定,字節(jié)數(shù)為4的整數(shù)倍(不夠必須填補0),iSCSI target發(fā)往iSCSI initiator的PDU中不包含AHS);

3. 可選地一個Header Digest(頭校驗信息,4個字節(jié));

4. 可選地一個Data Segment(數(shù)據(jù)段,長度不固定,字節(jié)數(shù)為4的整數(shù)倍(不夠必須填補0));

5. 可選的一個Data Digest(數(shù)據(jù)校驗信息,4個字節(jié))。

        linux I/O棧 之 SCSI TARGET (2)  iscsi target-<1>協(xié)議

        5.1 BHS(Basic Header Segment格式

        linux I/O棧 之 SCSI TARGET (2)  iscsi target-<1>協(xié)議

            

1. I bit:1bit,標識本PDU為需要馬上發(fā)送;

2. Opcode操作碼:6bit,標識本PDU的類型;

   (1)由iSCSI initiator發(fā)往iSCSI target的請求PDU opcode 

        

        0x00 NOP-Out
        0x01 SCSI Command (encapsulates a SCSI Command Descriptor Block)
        0x02 SCSI Task Management function request
        0x03 Login Request
        0x04 Text Request
        0x05 SCSI Data-Out (for WRITE operations)
        0x06 Logout Request
        0x10 SNACK Request
        0x1c-0x1e Vendor specific codes


(2)由iSCSI target發(fā)往iSCSI initiator的相應PDU opcode 

        0x20 NOP-In
        0x21 SCSI Response - contains SCSI status and possibly sense information or other response information.
        0x22 SCSI Task Management function response
        0x23 Login Response
        0x24 Text Response
        0x25 SCSI Data-In - for READ operations.
        0x26 Logout Response
        0x31 Ready To Transfer (R2T) - sent by target when it is ready to receive data.
        0x32 Asynchronous Message - sent by target to indicate certain special conditions.
        0x3c-0x3e Vendor specific codes
        0x3f Reject

3. F bit:1bit,標識本PDU為一個PDU序列中的最后一個;

4. Total AHS Length:1byte,本PDU中所有AHS的長度,以4字節(jié)為單位,包括可能需要填補的0(padding);

5. Data Segment Length:3byte,本PDU中數(shù)據(jù)段的長度,以字節(jié)為單位,不包括可能需要填補的0(padding);

6. LUN:如果此(命令/響應/數(shù)據(jù))PDU與具體的LU相關聯(lián),則使用LUN(Logical Unit Number)標識該LU;

7. Initial Task Tag(ITT):在一個session中使用ITT標識iSCSI initiator發(fā)起的任何iSCSI任務,凡是與某iSCSI 任務相關聯(lián)的PDU,不管是由iSCSI initiator發(fā)出的還是由iSCSI target發(fā)出的,都攜帶該iSCSI 任務相應的ITT,這個ITT就是scsi cmd的命令標識符,它代表一個scsi cmd。

    

    6 pdu的傳輸

  6.1 SCSI read命令

    ① iSINI(iscsi initiator)發(fā)送 SCSI cmd pdu(OP=R,F=1)給iSTGT,①pdu seq結(jié)束

    ② iSTGT向ISINI發(fā)送data pdu和respone pdu。

      data pdu包含三次datain pdu,dataSN(seq number)在遞增,并且在最后一個標記F=1,pdu seq結(jié)束。

      response pdu會帶著ExpDataSN,它代表此次iSCSI taget已發(fā)送的DATA PDU的個數(shù)。

   linux I/O棧 之 SCSI TARGET (2)  iscsi target-<1>協(xié)議

        

            6.2   SCSI寫命令

              iscsi 寫命令的流程,包括立即數(shù)據(jù)和非立即數(shù)據(jù)的兩種情況。

              ① iSINI 發(fā)送scsi cmd pdu(op=w,F=0,I=1(immediate)),包含立即數(shù)據(jù)。

                 iSINI dataout pdu(DataSN=0,F=1) 值得是當前的dataout seq結(jié)束。

              ② 接下來的流程就是r2t(ready to transfer)和dataout的交互。


linux I/O棧 之 SCSI TARGET (2)  iscsi target-<1>協(xié)議



    7 iSCSI錯誤處理


錯誤修復范圍(class)within command

目標器:Write命令時目標器丟失dataout pdu(digest error or sequence error)。解決:使用recovery R2T。

啟動器:Read命令時啟動器丟失datain pdu或者r2t pdu(digest error or sequence error)。解決:使用snack。

within connection

啟動器:發(fā)出的命令沒有得到響應(ExpCmdSN)、丟失response pdu(digest error or sequence error)。解決:前者使用retry,后者使用snack。

目標器:發(fā)出response pdu沒有得到啟動器的確認(ExpStatSN)。解決:使用nop-in通知啟動器使啟動器發(fā)送snack要求重傳輸。

connection recovery

啟動器:檢測到tcp connection失敗或者接收到目標器異步消息(Asynchronous Message)通知其tcp connection失敗。解決:connection recovery(task reassign)。

目標器:檢測到tcp connetion失敗。解決:關閉connection,如果還有connection可用則通過異步消息通知啟動器tcp connection失敗。

session recovery

其它三種修復嘗試后,才考慮使用session修復。

Session修復對于啟動器:關閉所有的連接connection,中止所有未決命令以恰當?shù)慕Y(jié)果返回上層SCSI,重新建立一個新的session連接到目標器。

錯誤修復層次/級別(hierarchy/level)

錯誤修復層次/級別用于定義iSCSI initiator/iSCSI target修復錯誤的能力,分級如下:

0級,不管遇到什么錯誤僅能進行session recovery,修復能力很差。

1級,能在command、connection范圍內(nèi)進行修復,同時擁有session recovery能力,遇到錯誤先考慮within command修復,不行再考慮within connection修復,最后才會考慮session recovery。

2級,能在command、connection范圍內(nèi)進行修復,同時擁有connection recovery、session recovery能力,遇到錯誤先考慮within command修復,不行再考慮within connection修復,不行再考慮connection recovery,最后才會考慮session recovery。

task reassign

在iSCSI中,每個iSCSI命令(task)都與唯一的一個connection關聯(lián),有關該命令的所有pdu都需要在該connection上發(fā)送/接收,在進行connection recovery之后,iSCSI initiator可以考慮進行task reassign,就是把原connection上的task(iSCSI命令)重新關聯(lián)到另一個或者新的connection,這要通過在新connection上發(fā)送iSCSI任務管理命令――task reassign來完成。

retry

當iSCSI initiator往iSCSI target發(fā)送了iSCSI cmd pdu但卻收不到iSCSI target的確認(通過ExpCmdSN或者datain/r2t pdu或者response pdu),此時iSCSI initiator需要重新發(fā)送該iSCSI cmd pdu(需要使用跟原來一樣的ITT及CmdSN)。

reject pdu

如果reject是針對cmd pdu,則意味著iSCSI target要丟棄該cmd;如果是針對非cmd pdu,則iSCSI target必須還要發(fā)送一個response pdu來完成該命令,同時iSCSI initiator可以選擇是否重傳輸被reject了的pdu。

Digest Error

對于header digest error,會接收并丟棄pdu中的數(shù)據(jù)或者直接關閉當前connection。

payload(data) digest error

iSCSI initiator直接丟棄該pdu,如果該pdu是datain pdu,則發(fā)送一個data SNACK請求重傳輸或者可以中止該任務(任務管理命令)從而完成該命令。如果該pdu是response pdu,則發(fā)送一個status SNACK請求重傳輸,或者進行connection修復(在新connection完成該命令),或者直接關閉該connection。如果該pdu是一個非請求pdu(如Async,Reject等)則無需進一步的處理。iSCSI target響應一個reject pdu,pdu中reason設為Data-Digest-Error,然后丟棄該pdu。如果該pdu是一個dataout pdu(r2t請求的或者非請求的),則發(fā)送r2t請求重傳輸,或者響應一個cmd response pdu 中止該任務(完成該命令)(Status字段為“CHECK CONDITION”,sense data為“protocol service CRC error”)。如果該pdu不是一個dataout pdu,則無需進一步的處理。

Sequense Error

當iSCSI initiator接收到一個R2TSN/DataSN亂序的r2t/datain pdu或者一個內(nèi)含ExpDataSN指示有r2t/datain pdu丟失的response pdu,意味著iSCSI initiator之前曾接收到過一個或多個Digest Error的r2t/datain pdu。

當iSCSI target接收到一個DataSN亂序的dataout pdu,則意味著iSCSI target之前至少接收到過一個Digest Error的dataout pdu,使用1.7.3介紹的方法進行處理。

當iSCSI initiator接收到一個StatSN亂序的response pdu時,意味著之前曾接收到過digest error的response pdu,所以使用1.7.3介紹的方法進行處理就行了。

format error

如果iSCSI initiator或者iSCSI target檢測到接收到的pdu格式錯誤(內(nèi)容非法或者內(nèi)容不一致),則會關閉當前session并重建一個session(session recovery)


  8  pdu分類和概述

        

    8.1只攜帶SCSI信息的PDU

   8.1.1 SCSI Command

iSCSI initiatoràiSCSI target。PDU中包含SCSI CDB(Command Description Block)和命令執(zhí)行需要的所有參數(shù)(如任務屬性,希望傳輸?shù)臄?shù)據(jù)的長度,LUN,ITT等);也包含iSCSI協(xié)議通訊需要用到的信息:

CmdSN(session范圍內(nèi)iSCSI命令的序號,與ExpCmdSN一起用于檢測iSCSI命令是否在傳輸過程中有丟失)。

ExpStatSN(期望iSCSI target發(fā)送的connection狀態(tài)序號,用于向iSCSI target確認該connection中所有StatSN小于ExpStatSN的狀態(tài)響應都已被iSCSI initiator接收到,與StatSN一起用于檢測含Status信息的iSCSI pdu是否在傳輸過程中有丟失);

8.1.2 SCSI Response

iSCSI targetàiSCSI initiator,用于iSCSI target反饋SCSI Command的執(zhí)行結(jié)果。PDU中包含SCSI命令執(zhí)行的結(jié)果,是沒有被執(zhí)行還是已經(jīng)被執(zhí)行但執(zhí)行中出現(xiàn)一些問題;如果命令中進行了數(shù)據(jù)傳輸,還包括數(shù)據(jù)傳輸?shù)钠钪礡esidual count(如iSCSI initiator起初表明要寫5k字節(jié),目標器接收到了5k+2字節(jié)等,Residual count就為2)。SCSI命令執(zhí)行結(jié)果字段:response和status,如果response為0(command completed)而status為2(check condition),將會有sense data(含有check condition的詳細信息)包含在pdu的data字段中。

iSCSI協(xié)議通訊需要用到的字段:

ExpCmdSN

session范圍內(nèi)iSCSI target期望iSCSI initiator發(fā)送的命令序號,用于向iSCSI initiator確認所有CmdSN小于ExpCmdSN的命令都已被iSCSI target接收到。

MaxCmdSN

session中iSCSI initiator能夠發(fā)送的最大命令序號,用于構(gòu)建一個窗口緩沖區(qū),匹配iSCSI initiator和iSCSI target的命令發(fā)送速率和命令處理速率。

StatSN

connection范圍內(nèi)iSCSI響應pdu的狀態(tài)序號,用于狀態(tài)響應編號),

ExpDataSN(本命令中iSCSI target已發(fā)送Data PDU的個數(shù)。

Task Management Function Request

iSCSI initiatoràiSCSI target,用于iSCSI initiator控制管理(如中止)之前發(fā)往iSCSI target的多個任務。

Task Management Function Response

iSCSI targetàiSCSI initiator,用于iSCSI target反饋任務管理請求的執(zhí)行結(jié)果

SCSI Data Out和SCSI Data In

iSCSI initiator?àiSCSI target,用于傳輸SCSI數(shù)據(jù)。

PDU中除了包含SCSI數(shù)據(jù)外,還包含用于iSCSI協(xié)議通訊的信息:所攜帶數(shù)據(jù)在命令所要傳送的所有數(shù)據(jù)中的Buffer Offset和Data Segment Length。

DataSN

數(shù)據(jù)在一個Data PDU序列中的序號,用于檢測是否有Data PDU在傳輸中丟失。

Ready To Transfer(R2T)

iSCSI initiator?iSCSI target,用于iSCSI initiator往iSCSI target傳輸數(shù)據(jù)時,iSCSI target通知iSCSI initiator其已準備好接收數(shù)據(jù)了,收到此PDU后iSCSI initiator就可以往iSCSI target發(fā)送數(shù)據(jù)了。

Target Transfer Tag(TTT)

iSCSI initiator針對此PDU發(fā)送的Data Out PDU中包含一樣的TTT以標識此數(shù)據(jù)包與此R2T的關聯(lián)性。

R2TSN

是在一個iSCSI命令范圍內(nèi)R2T的序號,iSCSI initiator據(jù)此可以檢測到R2T pdu的丟失。


8.2攜帶SCSI信息和iSCSI信息的PDU

Asynchronous Message

異步消息是一種iSCSI target可以主動向iSCSI initiator發(fā)送的pdu,用于告知iSCSI initiator一些事件。異步消息pdu中可以是SCSI消息,也可以是iSCSI消息。

Pdu中有一個字段AsyncEvent用于指示具體的事件,如為0表示是SCSI異步事件,具體內(nèi)容放置在pdu的data部分(稱為sense data);如為1表示iSCSI target要求iSCSI initiator登出(logout);等等。


8.3只攜帶iSCSI信息的PDU

Text request和Text response

文本請求和文本響應用于實現(xiàn)參數(shù)(啟動器和目標器在通訊時要使用到,具體參見RFC3720第12章)的協(xié)商。Pdu中的data部分以形式“key=value”出現(xiàn)。

多個文本請求/響應pdu內(nèi)包含相同的ITT來標識這些請求/響應屬于同一個協(xié)商操作。此外,Pdu中的TTT使用不同的機制來標識是否繼續(xù)一個協(xié)商操作還是啟動一個新的協(xié)商操作。

login request和login response

登陸請求和響應用來實現(xiàn)iSCSI initiator登陸到iSCSI target。Pdu header內(nèi)含:

(1) 登陸階段信息T bit、C bit、CSG、NSG(登陸分兩個階段,安全協(xié)商階段和操作參數(shù)協(xié)商階段);

(2) ISID和TSIH(分別在iSCSI initiator和iSCSI target中唯一地標識session),指示本次登陸session的ID;

CID(在session中唯一的標識connection),指示本次登陸connection的ID;

(3) CmdSN、ExpStatSN(login request);

(4) StatSN、ExpCmdSN、MaxCmdSN(login response)。

Pdu 的data部分與文本請求/響應pdu一樣以形式“key=value”出現(xiàn),內(nèi)含登陸參數(shù),包括安全協(xié)商參數(shù)(參見RFC3720第11章)和操作參數(shù)(參見RFC3720第12章)。

一個session的第一個connection的登陸過程會確定/協(xié)商整個session范圍內(nèi)的一些參數(shù),如iSCSI協(xié)議版本號、session ID、session內(nèi)允許創(chuàng)建的connection個數(shù)。

logout request和logout response

(1)登出請求和響應用來實現(xiàn)iSCSI登出iSCSI target,登出request pdu中包含登出的原因:

a.關閉整個session;

b.關閉session中的某個connecton(可以是發(fā)送登出請求的connection本身由pdu header中的CID確定);

c.刪除session中的某個connecton以便進行修復,原connection中的未決iSCSI命令都將被轉(zhuǎn)移到另外的connection中進行傳輸處理,也就是所謂的connection recovery。

(2)登出response pdu header中包含response字段反饋登出請求的響應結(jié)果:

a.成功關閉session或者connection;

b.找不到connection;

c.iSCSI target不支持connection recovery;

d.關閉session/connection失敗或者修復connection失敗。

如果是connection修復響應pdu,pdu header中還包含兩個字段:

Time2Wait:如果iSCSI initiator要進行把任務(iSCSI命令)重新指派到別的connection(task reasign),至少要等待的時間,單位為秒;

Time2Retain:iSCSI target在Time2Wait之后會等待iSCSI initiator進行task reasign的時間,超過這個時間后將丟棄該任務(iSCSI命令)。

SNACK request

SNACK就是對SN的ack,就是對各種有序號的pdu包括包含Status/response信息的pdu、datain pdu、r2t pdu進行確認(對于無誤的情況)或者要求iSCSI target重傳輸(對于出錯的情況)。

具體而言在SNACK request pdu header中包含字段Type:

a.請求datain pdu或者r2t pdu的重傳輸

1.請求包含Status/Response信息的pdu的重傳輸

2.確認接收到datain pdu(針對A bit被置位的datain pdu)

3.在MaxRecvDataSegmentLength被改變后請求datain pdu的重傳輸

另外兩個字段BegRun和RunLength指示需要重傳輸?shù)膒dus的起始SN及pdu個數(shù)(重傳輸時)或者指示期待的下一個datain pdu的SN(確認接收時)。

reject

reject pdu用于向iSCSI initiator提示一個iSCSI錯誤,表示拒絕之前的iSCSI initiator發(fā)送過來的某一個pdu。Pdu header中含一個指示拒絕原因的字段Reason:

a.pdu的數(shù)據(jù)字段校驗錯誤,需要iSCSI initiator的重傳輸

b.拒絕之前的一個SNACK pdu,需要重傳輸

c.協(xié)議錯誤

d.不支持該iSCSI命令

此外reject pdu還把被拒絕的pdu的header部分拷貝到reject pdu的data部分發(fā)送給iSCSI initiator。

nop in和nop out

nop in和nop out用于iSCSI initiator和iSCSI target周期性的檢測其對端是否還處于可操作狀態(tài),相當于TCP/IP協(xié)議中的“ping”。

由iSCSI initiator主動發(fā)起并要求iSCSI target響應的nop out pdu必須包含一個有效的ITT(非全1),此外的其它nop out pdu所包含的ITT必須為全1。

由iSCSI target主動發(fā)起并要求iSCSI initiator響應的nop in pdu必須包含一個有效的TTT(非全1),此外的其它nop in pdu所包含的TTT必須為全1。

由iSCSI initiator響應iSCSI target的nop in pdu(內(nèi)含非全1的TTT)而發(fā)送的nop out pdu必須包含與其響應的nop in pdu一樣的TTT,此外其它nop out pdu所包含的TTT都為全1。

由iSCSI target響應iSCSI initiator的nop out pdu(內(nèi)含非全1的ITT)而發(fā)送的nop in pdu必須包含與其響應的nop out pdu一樣的ITT,此外其它nop in pdu所包含的ITT必須為全1。

    


【本文只在51cto博客作者 “底層存儲技術” https://blog.51cto.com/12580077  個人發(fā)布,公眾號發(fā)布:存儲之谷】,如需轉(zhuǎn)載,請于本人聯(lián)系,謝謝。


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI