**Sidus andmevoog** (ingl *network bonding*) on riistvaralise seadme võrku ühendamine kahe või enama võrguliidesega, mis kombineeritakse üheks liideseks. Võrguliideste kombineerimise tulemusena parandatakse andmesidevoo jõudlust ning redantsust suurendades võrgu läbilaskevõimet ja ribalaiust. Redantsuse suurendamine aitab kaitsta virtualiseeritud keskkonda teenuse kadumise eest ühe füüsilise ühenduse rikke tõttu. Kui üks liides on välja lülitatud või lahti ühendatud, töötab teine liides. Seda kasutatakse eelkõige olukordades, kus on vaja veatolerantsust, koondamist või koormuse tasakaalustamist võrkudes. 

Linuxis kasutatakse mitme võrguliidese ühendamiseks üheks liideseks spetsiaalset tuumamoodulit nimega bonding. Kaks või enam võrguliidest saab ühendada üheks loogiliseks "ühendatud" liideseks. Ühendatud liideste käitumine sõltub kasutatavast ühendamismeetodist.

Sidusa andmesidevoo graafik

Sidusa andmesidevoo arhitektuur
-------------------------------

Võrguarhitektid võivad andmevoo sidumist rakendada ükskõik millisel OSI-mudeli kolmel alumisel kihil. Näiteks sidumise 1. kihi (füüsilisel tasandil) hõlmavad toiteliini (nt IEEE 1901) või traadita (nt IEEE 802.11) võrguseadmeid, mis kombineerivad mitu sagedusalasid. OSI 2. kihi (andmesidekihi, nt pakettide järjestus LANides või mitmikühendust PPP WANides, Ethernet MAC-aadress) sidumine toimub tavaliselt kommutaatorite portide kaudu, mis võivad olla kas füüsilised või virtuaalsed. OSI-mudeli 3. kihi (võrgukihi) agregeerimine võib kasutada round-robin planeerimist, paketi päise väljadest arvutatud hash-väärtusi või nende kahe meetodi kombinatsiooni.

Sõltumata sellest, millisel kihil andmevoo sidumine toimub, on võimalik tasakaalustada võrgukoormust kõigi ühenduste vahel. Selleks, et vältida ebakorrapärast kättetoimetamist, saavad seda võimalust kasutada ainult limiteeritud rakendused. Enamik meetodeid pakub ka tõrgeteta toimimist.

Ühendamine võib toimuda erinevalt, näiteks nii, et mitu liidest jagavad ühte loogilist aadressi (nt IP) või ühte füüsilist aadressi (nt MAC-aadress) või võimaldatakse igal liidesel omada ka oma aadressi. Kui seadmed jagavad ühte loogilist aadressi, siis selle eelduseks on, et ühenduse mõlemad otsad kasutavad sama koondamismeetodit – sellel on omakorda eeliseid jõudluse osas.

Kanalite sidumine erineb koormuse tasakaalustamisest selle poolest, et koormuse tasakaalustamine jagab liikluse võrguliideste vahel võrgupesa (4. kiht) kaupa, samas kui kanalite ühendamine tähendab liikluse jagamist füüsiliste liideste vahel madalamal tasemel, kas paketi (3. kiht) või andmeside (2. kiht) kaupa. 

### Sidusa andmesidevoo ühendamisrežiimid

Sidusale andmevoole pakub Linux mitut meetodit seadmete ühendamiseks üheks loogiliseks ühendatud liideseks, mis koosneb kahest või enamast (NIC) orjast. Enamiku kaasaegsete Linuxi distributsioonide puhul on Linuxi kernel integreeritud Linuxi ühendamise draiveri laaditava kernelmoodulina ja kasutaja taseme juhtprogramm on eelinstalleeritud. Donald Becker programmeeris algse Linuxi bonding draiveri. See võeti kasutusele koos Linuxi kerneli 2.0 Beowulfi klastriplaastritega.

Linuxi bonding-draiveri režiimid (võrguliidese koondamisrežiimid) esitatakse laadimise ajal parameetritena kerneli bonding-moodulile. Neid võib anda käsurea argumentidena käskudele *insmod* või *modprobe*, kuid tavaliselt määratakse need kindlaks Linuxi distributsioonispetsiifilises konfiguratsioonifailis. Üksiku loogilise ühendatud liidese käitumine sõltub selle määratud ühendamisajuri režiimist. Vaikimisi parameeter on balance-rr. 

```
**mode=0 (balance-rr)**
```

Mode=0 režiim põhineb Round Robin põhimõttel ja on vaikerežiim – pakutakse veatolerantsuse ja koormuse tasakaalustamise funktsioone ning edastab pakette Round robin'i meetodil (protsessid saavad järgemööda võrdselt aega ja kõik protsessid on võrdse prioriteediga). See režiim võib tekitada probleeme ülekoormuse kontrollimisega, kuna pakettide ümberjärjestamine võib põhjustada probleeme

```
**mode=1 (aktiivne varundamine)**
```

Mode=1 režiim põhineb aktiivse varundamise põhimõttel. Selles sagedusalas on aktiivne ainult üks ori ja teine *o*ori käivitatakse alles siis, kui esimese seadmega midagi juhtub. Selle seadmekombinatsiooni MAC-aadress on saadaval ainult võrguadapteri osas, et vältida segadust lülituses – samuti tagatakse sellega ka veatolerantsus.

```
**mode=2 (balance-xor)**
```

Mode=2 režiim seatakse XOR-režiimi (välistav või), mille tulemusena on algse seadme MAC-aadress XOR tehtega teise seadme MAC-aadressiga vastavusse pandud, et tagada koormuse tasakaalustamine ning veatolerantsus. Uuemad versioonid võimaldavad valida täiendavaid seadistusi IP-aadresside ja TCP/UDP-portide numbrite alusel. See valib sama võrgukoodi orja iga sihtkoha MAC-aadressi, IP-aadressi või IP-aadressi ja pordi kombinatsiooni jaoks. Üksikutel ühendustel on tagatud pakettide järjekorras edastamine ja nad edastavad andmeid ühe võrgukoodi kiirusega.

```
**mode=3 (eetrisse saatmine)**
```

Mode=3 režiim põhineb ringhäälingupoliitikal – seade edastab kõiki andmeid kõigis orjapoolsetes liidesetes, tagades veatolerantsuse.

```
**mode=4 (802.3ad)**
```

Mode=4 režiimi nimetatakse dünaamiliseks võrguühenduse agregeerimisliideseks. Selleks kasutatakse kommutaatorit, mis toetab IEEE 802.3ad standardit. Luuakse sidumisrühmi, mis kasutavad samu kiiruse ja dupleksseadistusi. Kasutab kõiki aktiivse agregaatorirühma orjapoolseid võrguliideseid vastavalt 802.3ad spetsifikatsioonile. See režiim sarnaneb eespool mainitud XOR-režiimiga ja toetab samu tasakaalustamispõhimõtteid. Ühendus luuakse dünaamiliselt kahe LACP-i toetava partneri vahel.

```
**mode=5 (balance-tlb)**
```

Mode=5 režiimi nimetatakse adaptiivseks saatekoormuse tasakaalustamiseks. Väljaminev liiklus jaotatakse vastavalt iga orja koormusele ja sissetulev liiklus võetakse vastu iga orja poolt. Kui sissetulev liiklus ebaõnnestub, asendatakse ebaõnnestunud server teise serveri MAC-aadressiga. See režiim ei nõua spetsiaalset kommutaatori tuge.

```
**mode=6 (balance-alb)**
```

Mode=5 režiimi nimetatakse adaptiivseks koormuse tasakaalustamiseks. IPv4-liikluse jaoks ja ei nõua spetsiaalset võrgukommutaatori tuge. Vastuvõtukoormuse tasakaalustamine saavutatakse ARP-läbirääkimiste abil. Sidumisdraiver jälgib kohaliku süsteemi saadetud ARP vastuseid nende väljumise teel ja kirjutab lähtekoha riistvara-aadressi üle ühe orja unikaalse riistvara-aadressiga ühtses loogilises sidumisliideses, nii et erinevad võrgupartnerid kasutavad oma võrgupakettide liikluses erinevaid MAC-aadresse. 

### Kommutaatori seadistused

**Kommutaator** on arvutivõrgu seade, mille abil luuakse ühendused kohtvõrgus. See võib olla spetsiaalne seade või ka muu seade (nt arvuti), millesse on teised seadmed külge ühendatud.

Aastaks 1995 oli enamik võrgukommutaatorite tootjaid lisanud andmesidevoo sidumise enda seadme laiendusena, et suurendada kommutaatorite vahelist ribalaiust. Tootjad töötasid välja omad meetodid, mis teiste tootjatega ei ühildunud. IEEE 802.3 töörühm kutsus 1997. aasta novembris toimunud koosolekul kokku uurimisrühma, et luua standardiseeritud ühenduskiht (st nii füüsilist kui ka andmesidekihti hõlmav).. Uurimisrühma töö tulemusena lisati kommutaatoritesse protokoll, mis aitas seadmetel omavahel koos töötada. 

Aktiivse varundamise, *balance-tlb* ja *balace-alb* režiimid ei nõua eraldi kommutaatori konfigureerimist, kuid 802.3ad režiim nõuab pesade seadistamist, üldjuhul spetsiifiline protsess sõltub kommutaatorist endast. 

Balance-rr, balance-xor ja broadcast-režiimide puhul tuleb kommutaatori pordid seadistada omavahel grupeerituks, mille seadistust kutsutakse kommutaatorite lõikes näiteks *etherchannel'*iks või *trunk group'*'i*k*s

### 802.1q VLAN

Virutaalse kohtvõrgu (VLAN) seadmeid on võimalik seadistada kasutades 802.1Q standardiga draiverit. See standard määrab VLAN-i märgistamise printsiibid ning sellega kaasnevad protsessid, seetõttu sellest seadistusest tulenevad paketid märgistatakse juba vaikimisi. 

Kuna selline protsess on ressursimahukas, siis lihtsustamiseks kasutatakse seadistusi, et määrata sidusa andmevoo seade/seadmed ainult allalaadimisvõimeliseks.

Sidusa andmevoo rakendused
--------------------------

### Tuumikvõrk

Andmevoo sidumine pakub odavat võimalust luua kiire tuumikvõrk, mis edastab palju rohkem andmeid, kui üks port või seade suudab edastada. Andmevoo sidumine võimaldab ka võrgu magistraalvõrgu kiirust järk-järgult suurendada, kui nõudlus võrgu järele suureneb, ilma et oleks vaja kõike välja vahetada ja uut riistvara kasutusele võtta.

Enamik tuumikvõrgu paigaldusi vajab rohkem kaableid või valguskaablipaare, kui esialgu vajalik, isegi kui neil ei ole otsest vajadust lisakaablite järele. Seda tehakse seetõttu, et tööjõukulud on suuremad kui kaabli maksumus ning lisakaabli paigaldamine vähendab tulevasi tööjõukulusid võrguvajaduste muutumisel.

### Pakettide järjestamine

Liikluse tasakaalustamiseks soovitakse sageli vältida pakettide ümberjärjestamist. Näiteks TCP standard kannatab täiendava koormuse all, kui ta tegeleb korrastamata pakettidega. Seda probleemi püütakse lahendada, kui konkreetse seansiga seotud paketid saadetakse üle sama ühenduse. Parim lahendus on, et sama andmesidevoog saadetakse alati sama ühenduse kaudu

See ei pruugi aga tagada ühtlast jaotust kõikide ühenduste vahel, kui omavahel suhtlevad ainult üks või väga vähesed serverite paarid, s.t kui hashid pakuvad liiga vähe varieeruvust. See piirab tegelikult kliendi ribalaiust kokkuvõttes selle ühe liikme maksimaalse ribalaiusega sidepartneri kohta. Äärmisel juhul on üks ühendus täielikult koormatud, samal ajal kui teised on täiesti kasutuseta. Seetõttu ei saavutata tegelikes rakendustes peaaegu kunagi ühtlast koormuse tasakaalustamist ja kõikide ühenduste täielikku kasutamist.

### Maksimaalne läbilaskevõime

Mitmeid ühendusi võib korraga kasutada maksimaalse läbilaskevõime optimeerimiseks mitme võrgu lülitite topoloogias, kui ühendused on konfigureeritud paralleelselt kahe või enama süsteemi vahelise isoleeritud võrgu osana.

Selles seadistuses peavad ühendused olema üksteisest isoleeritud. Üks põhjus sellise topoloogia kasutamiseks on see, et isoleeritud võrgu puhul, kus on palju hoste (näiteks suure jõudlusega klastri puhul), võib mitme väiksema lüliti kasutamine olla kuluefektiivsem kui üks suurem lüliti. Kui on vaja juurdepääsu väljaspool võrku, võib üksikutele hostidele paigaldada täiendava võrguseadme, mis on ühendatud välisvõrguga: see host toimib täiendavalt väravana. Näiteks arvutiklastri sõlme A võrguliidesed 1 kuni 3 on ühendatud eraldi võrgukommutaatorite 1 kuni 3 kaudu arvutiklastri sõlme B võrguliidestega 1 kuni 3; võrgukommutaatorite 1 kuni 3 vahel ei ole omavahelisi ühendusi. Linuxi ühendamise draiveri režiim, mida tavaliselt kasutatakse seda tüüpi konfiguratsioonides, on balance-rr – see režiim võimaldab üksikutel ühendustel kahe hosti vahel kasutada tõhusalt rohkem kui ühe liidese ribalaiust.

Sidusa andmevoo piirangud
-------------------------

### Üksik ühendus

Režiimide balance-rr, balance-xor, eetrisse saatmise ja 802.3ad puhul peavad kõik linkide koondamise füüsilised pordid asuma samas loogilises kommutaatoris, mis jätab enamasti ühe veapunkti, kui füüsiline kommutaator läheb rivist välja. Režiime active-backup, balance-tlb ja balance-alb saab seadistada ka kahe või enama ühendusega, kuid pärast ümberlülitamist (nagu kõik teisedki režiimid) võivad mõnel juhul aktiivsed seansidd (ARP-probleemide tõttu) ebaõnnestuda ja need tuleb uuesti käivitada.

Siiski on peaaegu kõikidel tootjatel olemas patenteeritud laiendused, mis lahendavad osa sellest probleemist: nad koondavad mitu füüsilist ühendust ühte loogilisse ühendusse. SMLT-protokoll (*Split multi-link trunking*) võimaldab jagada mitu Ethernet-ühendust mitmete korpuse ühenduste vahel, mis takistab veapunktide tekkimist ja võimaldab lisaks sellele tasakaalustada koormust mitme agregaatorühenduse vahel. Need seadmed sünkroniseerivad olekuid ühendustevahelise *trunki* (IST) kaudu nii, et need tunduvad ühendavale (juurdepääsu)seadmele ühe seadmena (ühendusplokk) ja takistavad pakettide dubleerimist. SMLT pakub täiustatud vastupidavust katkestuse ja taastumise abil kõigi kiiruste (10 Mbit/s, 100 Mbit/s, 1000 Mbit/s ja 10 Gbit/s) puhul, toimides samal ajal läbipaistvalt lõppseadmete jaoks.

### Üksiku ühenduse kiirus

Enamik rakendustes kasutatavaid sidumisporte erineb samast füüsilisest porditüübist, näiteks erinevad kõik vaskpordid (10/100/1000BASE-T), kõik mitmemoodilised kiudoptilised pordid ja kõik ühemoodilised kiudoptilised pordid. IEEE standard nõuab siiski, et iga ühendus oleks täisdupleksne ja kõigil oleks ühesugune kiirus (10, 100, 1000 või 10 000 Mbit/s).

Paljud lülitid on PHY-sõltumatud, mis tähendab, et lülitil võib olla segu vask-, SX-, LX-, LX10- või muudest GBIC-ühendustest. Kuigi sama PHY säilitamine on tavapärane lähenemisviis, on võimalik koondada 1000BASE-SX kiudoptika ühele lingile ja 1000BASE-LX (pikem, mitmekesine tee) teisele lingile, kuid oluline on, et kiirus on mõlemal lingil 1 Gbit/s täisdupleks. Ühel liinil võib olla veidi pikem levimisaeg, kuid standard on välja töötatud nii, et see ei tekitaks probleeme. 

### Sidusa andmevoo mittevastavus

Sidusa andmevoo viga viitab sellele, et sidusustüüp ei vasta ühenduse mõlemas otsas. Mõned ühendused ei rakenda 802.1AX standardit, vaid toetavad ühenduse sidumise staatilist seadistamist. Seetõttu toimib sarnaselt staatiliselt konfigureeritud ühenduste vaheline sidumine, kuid ei toimi staatiliselt konfigureeritud ühendus ja LACP-konfiguratsiooniga seadme vahel.

Viited
------

1. 1 2 3 4 5  "Linuxi konfigureerimine sidusa andmeoo jaoks".
2. ↑  Manuel Guijarro, Ruben Gaspar. "Experience and Lessons learnt from running High Availability Databases on Network Attached Storage" (PDF). *CERN IT/DES*.
3. ↑  "Linux Ethernet Bonding Driver".
4. ↑  "Link Aggregation and Trunking" (PDF).
5. ↑  "Understanding NIC Bonding with Linux".
6. ↑  "Välistav disjunktsoon".
7. ↑  "Võrguühenduse agregeerimine".
8. ↑  "Network Bonding".
9. ↑  "Virtuaalne kohtvõrk".
10. ↑  "How Viprinet works".
11. ↑  "Backbone network".
12. ↑  "IEEE 802.3ad Link Aggregation (LAG)" (PDF).
13. ↑  "SD-WAN Bandwidth Bonding Technology SpeedFusion".
14. ↑  "Network bonding".
15. 1 2  "Distributed split multi-link trunking".
16. ↑  "InterSwitch Trunk".
17. ↑  "What Is LACP? How Does LACP Work?".