ISCSI

**iSCSI** (lühend ingliskeelsest nimetusest* *'Internet Small Computer System Interface**') on üks internetiprotokollistikul põhinev versioon salvestivõrgust (SAN-ist), mis võimaldab võrgu abil mäluseadmeid jagada. iSCSI töötasid välja IBM ja CISCO ning standardiseeris Internet Engineering Task Force (IETF).

Erinevalt füüsilistest SCSI standarditest on SCSI käskude edastamisel võrgupakettide abil võimalik andmeid vahetada pika vahemaa tagant. iSCSI protokoll on SAN-tehnoloogia kiiruse ja võimekuse arendamisel üks tähtsamaid suundi. Tänu TCP/IP võrkude laiale levikule saab iSCSI standardit kasutada andmevahetuseks kohtvõrgu (LAN-i), laivõrgu (WAN-i) või interneti abil.

## Eellugu
Keskselt hallatavate mäluseadmete nõudluse kasvades ja serveritega mitte otseühenduses olevate mäluseadmetega suhtlemise tarviduse kasvades loodi eri meetodeid antud vajadustele vastamiseks. Levinuim tehnoloogia selles vallas enne iSCSI-tehnoloogiat oli kiudkanal (ingl. Fibre Channel) ehk FC, mis oli teistest tol ajal levinud tehnoloogiatest kiirem, kuid ka keerulisem ja kallim. Lisaks oli FC-l puudujääke aadressihalduses ja turvalisuses. Puudustele vaatamata sai kiudkanalist standard, mis on levinud paljudes ettevõtetes. Kiudkanali kallidus ja keerulisus olid üheks peamiseks takistuseks SAN-i eeliste ning võimaluste tõhusamal ärakasutamisel. FC loojate esmane lubadus oli võimaldada 1 Gb/s andmeedastuskiirust. Kui Ethernet saavutas samuti kiiruse 1 Gbit/s, oli aina reaalsem meetod ühendada seadmed omavahel Etherneti abil ja edastada SCSI pakette internetipakette kasutades. Sellest tulenevalt alustati iSCSI standardi loomist.

## Ajalugu
* 1998 – IBM-i uuringugrupp lõi töötava iSCSI lahenduse. 
* Märts 2000 – algset iSCSI varianti esitleti IETF-ile. Peaautoriks Julian Satran, IBM-i Haifa uurimislabor. 
* September 2000 – demonstratsioon CERN-is ja Network Worldis.
* Juuni 2001 – esimene iSCSI kasutamine tööstuses. 
* August 2001 – Linuxile loodi alglaadimisvõimalus üle iSCSI (iBoot). 
* Veebruar 2002 – Windowsile loodi alglaadimisvõimalus üle iSCSI.
* August 2002 – iSCSI spetsifikatsioon läbib IP Storage Working Groupi viimase läbivaatuse.

## Tööpõhimõte
iSCSI on oma olemuselt standard, mis võimaldab kahel osapoolel vahetada SCSI käske TCP/IP võrgu kaudu. Võrgu vahendusel emuleeritakse füüsilise SCSI liideste olemasolu, luues selle abil SAN. Erinevalt paljudest teistest salvestivõrgu protokollidest ei vaja iSCSI spetsiaalseid kaableid, kuna kasutab andmevahetuseks tavalist TCP/IP-võrku. Selle tulemusena on iSCSI odavamaks ja lihtsamaks alternatiiviks näiteks samuti populaarsele FC tehnoloogiale.

### Algataja
iSCSI algatajaks (ingl. *iSCSI initiator*) kutsutakse klienti iSCSI salvestivõrgus. iSCSI algatajal on võimalik ühenduda serveriga (iSCSI-objektiga), millele ta saadab IP-pakettide abil SCSI käske.

On olemas järgnevad iSCSI algataja tüübid:
# iSCSI riistvarapõhine algataja (ingl. *iSCSI Hardware Initiator*): PCI-X või PCIe kaart, mis hõlmab iSCSI funktsionaalsust. Sellist kaarti nimetatakse iSCSI HBA-ks ehk iSCSI peremeesseadme siini adapteriks (ingl. *Host Bus Adapter*). Serveri operatsioonisüsteemis paistab selline seade olevat RAID kontroller või kiudkanali HBA. iSCSI HBA abil on võimalik läbi iSCSI teostada serveri või personaalarvutite alglaadimist.  
# iSCSI tarkvarapõhine algataja (ingl. *iSCSI Software Initiator*) on tarkvaraliselt teostatud iSCSI algataja, kus kõiki arvutusi sooritab peremeesseadme protsessor, mitte teised riistvarakomponendid. Tänu kaasaegsete protsessorite suurele jõudlusele ei ole sellise lahenduse kasutamine enam probleem. iSCSI-objektidega suhtlemiseks saab kasutada tavalisi võrgukaarte.

### Objekt
iSCSI SAN-is asuvat serverit nimetatakse iSCSI-objektiks. Selline objekt võib omakorda sisaldada eri loogilisi üksusi (LU-sid).

On olemas kahte tüüpi iSCSI-objekte:
* riistvarana ehk iSCSI-kettamassiivina
* tarkvarana ehk iSCSI-objekti tarkvara installatsioonina tavalises serveris. Nii Linuxil kui ka Windowsil on vastav tarkvara olemas.
iSCSI serverites kasutatakse iSCSI-objekte erinevalt: Mõnedes iSCSI kettamassiivides on täpselt üks iSCSI-objekt (kettamassiiv ise), aga teistel ISCSI kettamassiividel on mitu iSCSI-objekti. Kas siis üks iSCSI-objekt iga füüsilise mäluseadme kohta, üks iSCSI-objekt iga loogilise üksuse (LU) kohta või mõlema kombinatsioon.

### iSCSI Discovery
iSCSI Discovery protsessi eesmärk on võimaldada algatajal leida objekte, millele tal ligipääs on, ning vähemalt üks aadress, mille kaudu on võimalik objektile ligi pääseda.

iSCSI Discovery protsessi võib kirjeldada kahe põhilise päringuga:
* Milliste iSCSI-objektidega peab algataja proovima ühendust saada? 
* Kus on konkreetne iSCSI-objekt nimega "xxxxxx"? 
iSCSI algataja võib iSCSI-objekte leida mitmel eri viisil: 
# Seadistades algatajas objektide aadressid. 
# Pärast algatajas vaikimisi objekti aadressi seadistamist teeb algataja päringu iSCSI nimede kohta, kasutades selleks spetsiaalset SendTargets käsku.
# Kasutades teenuseotsingu protokolli (SLP-d) multicast päringut, millele objektid võivad vastata.
# Saates päringu andmeladustusserveris asuvasse nimeserverisse, et tagastada nimistu objektidest, millele ta võib ligi pääseda.

### iSCSI Login ja Negotiations
Enne, kui iSCSI algatajad saavad saata objektidele SCSI käske, peab kõigepealt looma iSCSI seansi. Seanss koosneb antud juhul ühest või mitmest TCP-ühendusest. Algataja loob kõigi vajalike objektidega TCP-ühendused ja pärast seda alustatakse sisselogimisprotseduuriga. iSCSI sisselogimismehhanismi kasutatakse TCP-ühenduste loomiseks algataja ja objekti vahel. See teeb kindlaks ühenduse osapooled, paneb paika seansiparameetrid ja teeb vastava ühenduses osaks iSCSI-seansist.

Algataja alustab sisselogimisprotsessi, luues TCP-pordiga ühenduse samal ajal, kui objekt seda porti sissetulevate ühenduste osas kuulab. Ühel iSCSI-objektil võib sama algatajaga olla mitu erinevat TCP-ühendust, mida võib ükshaaval seansist kustutada. Sisselogimisprotsessi ühe osana võivad osapooled nõuda üksteiselt autentimist ja turbeprotokolli kasutamist ülejäänud seansi vältel. Pärast sisselogimisprotsessi lõppu on iSCSI seanss täieliku funktsionaalsuse faasis – algataja võib saata SCSI käske ja andmeid erinevatele loogilistele üksustele objektseadmes.

## Adresseerimine
Peamine adresseeritav üksus iSCSI puhul võib olla algataja, objekt või mõlemad korraga. iSCSI nime konstrueerimise nõuded on kirjas RFC3720 standardis. Nii algatajatel kui ka objektidel on vaja eristumiseks nime, et iSCSI mäluressursse saaks hallata olenemata asukohast. iSCSI nimi on unikaalne tunnus, et sooritada andmepakettide autentimist ja eristada iSCSI mäluressursse. Et kindlustada kadudeta iSCSI pakettide liikumist, on iSCSI nimed seotud kindlate seadmete, mitte võrgukaartidega.

iSCSI standardis on nimed ja aadressid rangelt eristatud:
* iSCSI nimi on asukohast sõltumatu ja püsiv iSCSI osapoole tunnus, mis on tema eluea jooksul alati sama.
* iSCSI aadress määratleb peale iSCSI nime veel ka tema asukoha. Vastav aadress koosneb domeeninimest või IP-aadressist, TCP-pordi numbrist (ainult objekti puhul) ja iSCSI osapoole nimest. Ühel iSCSI osapoolel võib olla ükskõik mitu aadressi, mis võivad pidevalt muutuda, eriti kui nad on määratud DHCP abil.

### iSCSI aadress
Igal iSCSI osapoolel on üks või mitu aadressi, mille abil on määratud viide konkreetsele seadmele. iSCSI aadress koosneb iSCSI nimest ja transpordiaadressist.

Transpordiaadress on kujul:

`<domeeninimi>[:<port>] `

Kus  võib olla üks kolmest:
# IPv4 aadress, kus neli numbrit vahemikus 0–255 on eraldatud omavahel punktidega.
# IPv6 aadress, kus numbrid kuueteistkümnendsüsteemis on eraldatud üksteisest koolonitega ja kogu aadress on ümbritsetud "[" ja "]" poolt.
# Täispikk domeeninimi ehk peremeesseadme nimi eeldusel, et see ei ole IPv4 ega IPv6 aadress.
iSCSI-objektide puhul ei ole  aadressis kohustuslik ning sel puhul on vaikimisi pordiks 3260. Algatajate puhul on  aadressist välja jäetud.

### iSCSI nimi
iSCSI nimesid kasutatakse, et: 
* Teha kindlaks algataja ja objekt, mille poole võib pöörduda rohkem kui ühe IP-aadressi ja TCP pordi kaudu.
* Eristada algatajaid, objekte või mõlemaid, mille poole võib pöörduda IP-aadressi või TCP pordi kaudu.
* Tunda ära eri viiteid samadele algatajatele või objektidele, mille poole võib pöörduda eri IP-aadressi või TCP pordi kaudu.
* Algatajad ning objektid tunneksid üksteist ära olenemata IP-aadressi ja TCP portide kaardistamisest vahendavas tulemüüris.
* Neid saaks kasutada kolmanda osapoole käskudes sümboolse aadressina. 
iSCSI standardis on määratud kaks peamist nimetamise standardit

#### "iqn." ehk iSCSI kvalifitseeritud nimevorming
See vorming loodi selleks, et anda firmadele võimalus järjestikele alluvatele osakondadele vastavalt oma seadmeid nimetada. iSCSI kvalifitseeritud nimekuju on defineeritud RFC3720 standardi järgi ja sisaldab: 
* sõnet "iqn";
* kuupäeva kujul aasta-kuu, mis näitab aega, millal firma registreeris domeeni või alamdomeeni, mida kasutatakse vastutava nimetaja sõnes;
* firmapõhise vastutava nimetaja sõnet, mis koosneb paikapidavast domeeni või alamdomeeni nimest tagurpidi kujul; 
* valikulist osa, mis algab ":"-ga ja millele järgneb firma valikupõhine sõne. See osa peab tegema iga määratud iSCSI nime unikaalseks.
Näide iSCSI kvalifitseeritud nimekujust:

`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Firmapõhine&nbsp;&nbsp;&nbsp;Vastutava nimetaja alamgrupp`

`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vastutav&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ja/või sõne, mis on defineeritud  `

`Tüüp&nbsp;Kuup.&nbsp;&nbsp;&nbsp;nimetaja&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;firma või firmapõhise vastutava nimetaja poolt`

`+--++-----+ +---------+ +--------------------------------+  `

`|&nbsp;&nbsp;||&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|`

`iqn.2001-04.com.example:diskarrays-sn-a8675309 `

Kusjuures on näha, et firmapõhine vastutav nimetaja (inglise Organizational Naming Authoroty) "com.example" on tagurpidi domeeninimi. See, et iSCSI nimedes kasutatakse domeeninime, ei tee neist veel aadresse, vaid neid kasutatakse ainult unikaalsete seadmete omavaheliseks eristamiseks.

#### "eui." nimevorming
See nimevorming võimaldab seadmete vastutaval nimetajal kasutada IEEE EUI-64 identifikaatoreid iSCSI nimede määramisel.

Näide iSCSI nimest eui. vormingus:

`Tüüp EUI-64 identifikaator(ASCII-kodeeritud, kuueteistkümnendsüsteemis)`

`+--+ +--------------+       `

`|&nbsp;&nbsp;| |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|`

`eui.02004567A425678D `

### iSCSI alias
Alias iSCSI alias on UTF-8 kodeeringus sõne, mida võib kasutada kirjeldava nimena algataja ja objekti puhul. Aliase seadmisel ei rakendata samasuguseid nõudeid kui iSCSI nime puhul. Aliast sisaldavate sõnede vahetamine algataja ja objekti vahel toimub sisselogimise hetkel. Vastavat sõne võib kasutada kasutajaliideses seadmete paremaks eristamiseks. Aliasepõhiselt ei tohi kindlaks teha, eristada ega autentida algatajaid ja objekte. Alias on muudetava pikkusega sõne, mille pikkus on 0–255 tähemärgi vahel. Tema eesmärk on teha inimestel nii algatajad kui ka objektid omavahel kergesti eristavaks.

Näide aliaste kasutamisest:

`+--Ühendatud antud objektidega---------------------------------    `

`|    `

`|&nbsp;&nbsp;Alias&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Objekti nimi    `

`|    `

`|&nbsp;&nbsp;Oracle 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iqn.1995-04.com.example:sn.5551212.target.450    `

`|&nbsp;&nbsp;Local Disk&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iqn.1995-04.com.example:sn.5551212.target.489    `

`|&nbsp;&nbsp;Exchange 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iqn.1995-04.com.example:sn.8675309    `

`|    `

`+--------------------------------------------------------------`

## iSCSI käsud ja vastused
iSCSI saadab SCSI käske, andmeid ja infot hetkestaatuse kohta läbi TCP-ühenduse iSCSI protokolli andmeühikutena (PDU). iSCSI protokolli andmeühikuid on mitmeid eri tüüpe ning nad on eristatavad individuaalsete operatsioonikoodide kaudu. Operatsioonikoodid jaotatakse kahte kategooriasse: algataja operatsioonikoodid ja objekti operatsioonikoodid, mida kutsutakse vastusteks. Mõned protokolli andmeühikud kannavad edasi SCSI käske, andmeid ja staatusi, teisi seevastu kasutatakse iSCSI seadmete kontrollimiseks.

SCSI funktsioone toetavad operatsioonikoodid ehk käsud:
* 0x01 SCSI käsk (hõlmab SCSI käsku kirjeldavat osa)
* 0x02 SCSI ülesandehalduskäsk
* 0x05 SCSI andmed (Kirjutamisoperatsioonide jaoks) 
SCSI funktsioone toetavad algataja operatsioonikoodid ehk käsud:
* 0x00 NOP-out käsk
* 0x03 sisselogimiskäsk
* 0x04 tekstkäsk
* 0x06 väljalogimiskäsk 
* 0x10 SACK-päring 
SCSI funktsioone toetavad objekti operatsioonikoodid ehk vastused: 
* 0x41 SCSI vastus (sisaldab SCSI hetkestaatust ja muud informatsiooni)
* 0x42 SCSI ülesandehaldusvastus •	0x45 SCSI andmed (lugemisoperatsioonideks) 
* 0x50 "Edastuseks valmis" käsk (R2T)
iSCSI funktsioone toetavad objekti operatsioonikoodid ehk vastused:
* 0x40 NOP-in käsk •	0x43 Vastus sisselogimisele 
* 0x44 tekstvastus
* 0x46 väljalogimisvastus 
* 0x51 asünkroonne vastus
* 0x6F keeldumine

## Turvalisus
iSCSI puhul on algatajate ja objektide vahelise ühenduse turvalisemaks muutmiseks mitu moodust.

### CHAP-autentimine
CHAP ehk väljakutse ja kätlusega autentimisprotokoll (inglise Challenge Handshake Authentication Protocol) on kõige elementaarsem turvalisuse tase. CHAP-protokolli kasutatakse osapoolte autentimiseks ja see põhineb osapooltevahelisel jagatud võtmel.

On kahesugust CHAP-autentimist:
* ühepoolne CHAP-autentimine. Sellise seadistuse puhul autendib ainult objekt temaga ühenduva algataja. Võti on seatud ainult objektipoolselt. Kõik algatajad, kes tahavad temaga ühendust luua, peavad seansi alustamisel sisselogimisprotsessis kasutama seda sama võtit;
* kahepoolne CHAP-autentimine. Selle seadistuse korral autendib üksteist kumbki osapool. Nii algatajal kui ka objektil on oma isiklik võti, mida kumbki kontrollib. Ükskõik millise iSCSI konfiguratsiooni korral on soovitatav kasutada minimaalselt ühepoolset CHAP autentimist.

### RADIUS-autentimine
RADIUS (lühend ingliskeelsest nimetusest Remote Autentication Dial-In User service) autentimine on üks standarditest, mida kasutatakse kasutajate autentimise ja valideerimise haldamiseks. Erinevalt CHAP-ist ei sooritata autentimisprotsessi iSCSI osapoolte vahel, vaid RADIUS serveri ja kliendi vahel. Kui kasutaja (iSCSI algataja) tahab ligi pääseda teise osapoole ressurssidele (iSCSI-objektile), siis peab ta saatma ühendusepäringu RADIUS serverile. Antud server on vastutav kasutajate autentimise ja klientidele seadistuste edastamise eest. Andmevahetuses kahe osapoole kasutatakse ühist salavõtit.

### IPsec-autenimine ja -krüpteerimine
IPsec ehk internetiprotokolli andmeturve (inglise Internet Protocol Secutrity) puhul teostatakse autentimist ja andmete krüpteerimist IP-paketi tasemel. IPsecit võib kasutada lisaks CHAP-ile või RADIUS-ele, et täiendavalt suurendada andmevahetuse turvalisust.

## iSCSI eelised
* iSCSI protokollil on salvestivõrku (SAN-i) kasutades mitmeid eeliseid FC ehk kiudkanali ees: 
* iSCSI kasutab üldlevinud võrgustandardeid: Ethernet ja TCP/IP. Erinevalt rohkem oskusi ja teadmisi vajavast FC-tehnoloogiast on enamus IT-administraatoreid TCP/IP-ga juba tuttavad.
* Üldised andmeladustuskulud on väiksemad: iSCSI salvestivõrku (SAN) on lihtsam paigaldada ja hooldada kui kiudkanalit kasutades. iSCSI vähendab vajadust andmehaldusadministraatori järgi. 
* Andmeedastus toimub üle tavalise IP-võrgu: iSCSI kaotab vahemaa ja kuludega seotud piirangud, mis on seotud FC ruuteritega.
* Tavaliste Etherneti kommutaatorite ja kaablite kasutamine lihtsustab nende haldust, kuna peaaegu kõigis firmades juba vastavad süsteemid olemas.
* iSCSI on kõige kulutõhusam andmehoiustamise lahendus SMB jaoks: iSCSI pakub lihtsat haldamist ja integratsiooni, mis põhineb juba olemasoleval infrastruktuuril ja kaotab vajaduse kallite seadmete järgi.
* iSCSI-st on saanud oma valdkonna standard, mida toetavad Microsoft, IBM, Cisco, Intel ja paljud teised.
 
## Alglaadimine võrgust
iSCSI abil on võimalik sooritada alglaadimist salvestivõrgus asuvalt kettalt, mis sisaldab alglaadimistarkvara. Seade, mis sooritab alglaadimist võrgust, ei pea kasutama tema enda ketastele installitud operatsioonisüsteemi. 
* iSCSI riistvarapõhist lahendust kasutades on võimalik seade vastavalt seadistada, et alglaadimisprotsess toimuks kasutades salvestivõrgus paiknevat ketast. Sellist lahendust kasutades ei pea arvutis olema ühtegi füüsilist ketast.
* Teine võimalus on kasutada iSCSI alglaadimistarkvara tabelit (iBFT-d) toetavat võrgukaarti, mille korral BIOS tuvastab iSCSI alglaadimistarkvara tabeli võrgukaardilt ja kasutab seal paiknevaid parameetreid, et luua ühendus iSCSI-objektiga. Sarnaselt iSCSI riistvarapõhise lahendusega ei pea ka sel juhul olema arvutis füüsilisi kettaid, kuna info, mille abil võrgust alglaadimist sooritada, paikneb võrgukaardil.
* Ilma iBFT toeta võrgukaardi korral on võimalik sooritada kettavaba alglaadimist võrgust püsimälu flashimist võimaldava võrgukaardi ja spetsiaalse tarkvara abil. Selleks populaarseim tarkvara on iPXE, mis võimaldab pärast võrgukaardi flashimist kasutada buudieelset täitmiskeskkonda (PXE), et luua ühendus iSCSI-objektiga, kus paikneb alglaadimistarkvara. Lisaks sellele on võimalik buudieelset täitmiskeskkonda (PXE-d) kasutada luues iPXE programmi sisaldava buuditava mäluseadme.

## Viited