ISCSI
Internet Small Computer System Interface (iSCSI) is een netwerkprotocol ontwikkeld door de Internet Engineering Task Force (IETF). Het wordt gebruikt om SCSI-commando’s te verzenden over TCP/IP netwerken, dit kan een Local area network, een Wide area network of het internet zijn. De bedoeling van dit protocol is om verbindingen op te stellen tussen opslagapparaten, servers en clients. Wanneer een opslagfaciliteit niet rechtstreeks verbonden is met de server, zal iSCSI dit wel zo doen lijken. Dit protocol wordt gebruikt met Storage Area Network (SAN). Een alternatief protocol dat gebruikt wordt bij SAN’s is Fibre Channel. Een nadeel hiervan is dat de transmissies dan over glasvezel moeten gebeuren terwijl iSCSI gebruikt kan worden over bestaande netwerkinfrastructuur. Bekende bedrijven zoals Microsoft, IBM, Cisco en Intel maken gebruik van de iSCSI-standaard.

SCSI

Small Computer System Interface is een Client-servermodel. De client zal hier de term ‘initiator’ worden toegewezen en de server ‘target’. Een initiator zal een SCSI commando versturen naar een I/O-apparaat, logical unit(LU) genoemd,  van een server om een service aan te vragen. Omdat een target meerdere LU’s kan hebben, zal naar elke LU verwezen worden via een logical unit number(LUN). SCSI-commando’s worden verstuurd in een command descriptor block (CDB) datastructuur.

Basisprincipes

Sessies
De data die wordt verstuurd van initiator naar target en terug wordt opgedeeld in protocol data units (PDU's). Als een initiator en een target met elkaar communiceren kan dit gebeuren over meerdere TCP-connecties. De verzameling van zo’n connecties noemt men een sessie en wordt benoemd met een sessie-ID. Ook krijgt elke connectie een connectie-ID. Over alle connecties wordt de target op dezelfde wijze bekeken en de initiator is ook gelijk over alle connecties van een sessie.

Loginproces
Om een connectie tussen initiator en target te vestigen zal het loginproces moeten worden gestart. Dit proces wordt gestart als een initiator verbindt met een TCP-poort van de target. Dan kan er optioneel een authenticatie uitgevoerd worden en kan er een security association protocol ingesteld worden, zoals bijvoorbeeld IPsec. Als dan de juiste parameters zijn bevestigd eindigt de loginfase en begint de fase met volledige functionaliteit en mogen SCSI-commando’s verzonden worden.
Tijdens de loginfase mag enkel gebruikgemaakt worden van login requests en login responses. Als er buiten deze fase login PDU’s ontvangen worden door een target zal deze direct de connectie verbreken.

Connectie-aanhankelijkheid
Als een initiator over een bepaalde connectie een request stuurt naar een target zal het target de response of andere gerelateerde PDU’s over dezelfde connectie moeten terugsturen. Als de connectie wordt verbroken voordat het commando voltooid is, zal een andere connectie worden toegewezen aan het onvoltooide commando.

Naamgeving
Elke initiator of target heeft een unieke naam voor identificatie. Er zijn drie gebruikte formaten in iSCSI:

IQN
De iSCSI Qualified Name maakt gebruik van domeinnamen. Degene die de naam genereert, moet een geregistreerde domeinnaam bezitten. Dit om te voorkomen dat verschillende targets dezelfde naam hebben. De iSCSI Qualified Name bestaat uit volgende onderdelen: 
De string ‘iqn.’
Een datum (jjjj-mm) wanneer de domeinnaam nog in het bezit is van de target
Een punt ‘.’ 
De omgekeerde domeinnaam van diegene die de iSCSI naam aanmaakt.
Dan kan er nog optionele informatie volgen voorafgegaan door een dubbelpunt ‘:’.
Enkele voorbeelden:

                  Naming      String defined by
     Type Date    authority   "example.com" naming authority
     +--++-----+ +---------+ +--------------------------------+
     |  ||     | |         | |                                |
     iqn.2001-04.com.example:storage:diskarrays-sn-a8675309
     iqn.2001-04.com.example
     iqn.2001-04.com.example:storage.tape1.sys1.xyz
     iqn.2001-04.com.example:storage.disk2.sys1.xyz

IEEE EUI-64 
Dit formaat, opgesteld door IEEE, wordt gebruikt zodat er makkelijk kan worden omgezet naar een globale identifier voor gebruik in andere netwerkprotocollen. Dit formaat bestaat uit volgende onderdelen: *De string eui. *16 ASCII-gecodeerde hexadecimale cijfers. Een voorbeeld:

Type  EUI-64 identifier (ASCII-encoded hexadecimal)
        +--++--------------+
        |  ||              |
        eui.02004567A425678D

T11 Network Address Authority (NAA)
Dit is een formaat dat later nog werd toegevoegd voor compatibiliteit met glasvezel en serial attached SCSI (SAS). Dit formaat bestaat uit volgende delen: * De string naa. * ASCII-gecodeerde hexadecimale cijfers. Voorbeelden:

Type  NAA identifier (64-bit ASCII-encoded hexadecimal)

         +--++--------------+
         |  ||              |
         naa.52004567BA64678D

Type  NAA identifier (128-bit ASCII-encoded hexadecimal)

         +--++------------------------------+
         |  ||                              |
         naa.62004567BA64678D0123456789ABCDEF

Fouten behandelen en herstel
In verschillende implementaties kunnen verschillende technieken gebruikt worden om fouten te herstellen. Omdat er toch enige vorm van interoperabiliteit aanwezig moet zijn is er wel een algemeen model gespecificeerd. Er moet ook voor een goede distributie gezorgd worden, zodat target en initiator niet dezelfde PDU’s gaan herstellen. Een initiator zal gebruikmaken van R2T (ready-to-transfer) support en een target van de SNACK-support (bevestiging dat data gelezen werd). Ook kan de connectie aanhankelijkheid aangepast worden, indien er iets mis is met de connectie. Foutenherstel kan gebeuren in een commando of een connectie. Ook kan een sessie of een connectie zelf hersteld worden.

PDU-formaat
Het formaat van een protocol data unit (PDU) is verschillend voor andere commando’s. Wat ze wel gemeenschappelijk hebben is de basic header segment (BHS). Dit is een deel van de header die bestaat uit 48 bytes. Deze kan optioneel nog gevolgd worden door een additional header segment, een header-digest, een data segment en/of een data-digest.
Een BHS ziet er zo uit:

I: deze wordt bij requests op 1 gezet voor onmiddellijke levering
F: wanneer deze 1 bevat is deze PDU de laatste van een reeks PDU’s
TotalAHSLength: dit is de totale lengte van alle bijgevoegde AHS headersegmenten
DataSegmentLength: dit is de lengte van het datasegment
LUN: dit veld duidt aan op welke logical unit de opcode toepassing heeft
Initiator Task Tag: deze duidt het commando of een reeks gelinkte commando’s aan

Veel velden hangen af van de opcode die de PDU bevat. Opcodes kunnen zijn: login request, text request, SCSI task management function request, SCSI data-in (read operation), R2T (Ready to transfer) en nog veel meer.

Veiligheid
Indien er gebruikgemaakt wordt van authenticatie, dit is volledig vrij, kunnen volgende methodes van authenticatie gebruikt worden:
 Kerberos V5
 SPKM1, Simple Public-Key GSS-API Mechanism
 SPKM2, Simple Public-Key GSS-API Mechanism
 Secure Remote Password
 Challenge-Handshake Authentication Protocol
IPSec kan hierbij gebruikt worden voor data integriteit, authenticatie en confidentialiteit.

Externe links
 What is iSCSI?
 Microsoft Windows Server 2003 Storage Technologies and iSCSI (gearchiveerd)

Referenties

Netwerkprotocol