16
1 1 ETF, Katedra za računarsku tehniku i informatiku Računarske mreže 1 8. deo: Transportni sloj Predavač: dr Slavko Gajin, [email protected] Autor: dr Slavko Gajin 2008. god 2 ETF, Katedra za računarsku tehniku i informatiku Transportni sloj Transportni sloj (Layer 4) u TCP/IP modelu predstavlja vezu između aplikacija i mreže (po vertikali) komunikacija na 4. nivou između dva udaljena hosta (po horizontali) - podrazumeva se mogućnost komunikacije sa-kraja-na-kraj koja se ostvaruje na mrežnom nivou Zadatak transportnog sloja je održavanje višestrukih komunikacija između aplikacija na obe strane Osnovne funkcije segmentacija i reasembliranje segmentacija niza podataka na aplikativnom nivou na manje delove (segmente) – na strani pošiljaoca intergrisanje segmenata u originalni niz podataka na aplikativnom nivou (reasembliranje) – na prijemnoj strani multipleksiranje komunikacija identifikovanje aplikacija koje šalju podatke – na strani pošiljaoca prosleđivanje podataka označenim aplikacijam – na prijemnoj strani

RM1.08. Transportni Sloj

Embed Size (px)

DESCRIPTION

transportn

Citation preview

Page 1: RM1.08. Transportni Sloj

1

1ETF, Katedra za računarsku tehniku i informatiku

Računarske mreže 1

8. deo: Transportni sloj

Predavač: dr Slavko Gajin, [email protected]

Autor: dr Slavko Gajin

2008. god

2ETF, Katedra za računarsku tehniku i informatiku

Transportni sloj• Transportni sloj (Layer 4)

– u TCP/IP modelu predstavlja vezu između aplikacija i mreže (po vertikali)– komunikacija na 4. nivou između dva udaljena hosta (po horizontali) - podrazumeva se

mogućnost komunikacije sa-kraja-na-kraj koja se ostvaruje na mrežnom nivou• Zadatak transportnog sloja je održavanje višestrukih komunikacija između

aplikacija na obe strane

• Osnovne funkcije– segmentacija i reasembliranje

• segmentacija niza podataka na aplikativnom nivou na manje delove (segmente) – na strani pošiljaoca

• intergrisanje segmenata u originalni niz podataka na aplikativnom nivou (reasembliranje) – na prijemnoj strani

– multipleksiranje komunikacija• identifikovanje aplikacija koje šalju podatke

– na strani pošiljaoca• prosleđivanje podataka označenim

aplikacijam – na prijemnoj strani

Page 2: RM1.08. Transportni Sloj

2

3ETF, Katedra za računarsku tehniku i informatiku

Transportni sloj• Dodatne funkcije

– Connection oriented - uspostavljanje i održavanje komunikacione sesije– Reliable delivery - pouzdan prenos

• izgubljeni ili oštećeni segmenti se detektuju i ponovo šalju, tako da je zagarantovan pouzdan prenos svih podatak u celini

– Ordered data reconstruction - održavanje redosleda segmenata • po različitim putevima segmenti mogu stići u promenjenom redosledu, ali prijemna strana

rekonstruiše originalni redosled– Flow control - kontrola toka

• upravljanje prenosom podataka u zavisnosti od mogućnosti i trenutnog opterećenja mreže (smanjenje brzine u slučaju zagušenja)

• Mehanizam pouzdanog prenosa i redosleda segmenata– sequence nunber – rastući redosled segmenata– funkcije:

• praćenje poslatih paketa• potvrda primljenih paketa (acknowledgement)• retransmisija ne potvrđenih segmenata

– posledica – dodatno opterećivanje (overhead) transportnog sloja, koje utiče na performanse

4ETF, Katedra za računarsku tehniku i informatiku

Pouzdan prenos ?• Različite aplikacije imaju različite potrebe

– Za neke aplikacije pouzdan prenos je prioritet – npr. prenos datoteka (FTP), email, HTTP itd.

– Za neke aplikacije pouzdan prenos ne samo da nije potreban, već može i da degradira performanse zbog dodatnoh overhead-a – npr. IP telefonija, streaming audio/video itd.

Page 3: RM1.08. Transportni Sloj

3

5ETF, Katedra za računarsku tehniku i informatiku

TCP i UDPDve vrste protokola 4. nivoa u TCP/IP modelu• UDP – User Datagram Protocol

– samo osnovne funkcije– connection-less protokol - jednostavan, nema garancije pouzdanosti prenosa i

redosleda - best-effort princip – VoIP, IP telefonija, Video streaming, DNS, TFTP, SNMP....

• TCP – Transition Control Protocol– osnovne i dodatne funkcije

• connection oriented protokol• pouzdan prenos• održavanje redosleda• kontrola toka

– primeri: FTP, HTTP, HTTPS, email...

6ETF, Katedra za računarsku tehniku i informatiku

Portovi – identifikacija aplikacija na hostu• Multipleksiranje komunikacija

– polje protocol u zaglavlju na 2. nivou identifikuje protokole 3. nivoa– polje protocol u zaglavlju na 3. nivou identifikuje protokole 4. nivoa– na 4. nivou se koristi polje port – celobrojna vrednost, dva bajta

• Port - identifikacija aplikacija na matičnom hostu gde se izvršavaju– aplikacije na jednom hostu imaju različite portove

• Transportni sloj na osnovu broja porta prosleđuje podatke do odgovarajuće aplikacije

Page 4: RM1.08. Transportni Sloj

4

7ETF, Katedra za računarsku tehniku i informatiku

Portovi – identifikacija aplikacija na hostu• IANA – dodeljuje fiksne portove za pojedinačne aplikacije• Vrste portova (opsezi brojeva za portove različitih namene)

– 0-1023 - Well-known ports – serverske aplikacije – 1024-49151 - Registered Ports – za klijentske i serverske aplikacije– 49152-65535 – Private and/or Dynamic Ports – dinamički se dodeljuju klijentskim

aplikacijama• Primeri protova

– TCP• 21 FTP (File Trasport Protocol)• 23 Telnet• 25 SMTP (Simple Mail Transport Protocol - slanje email-a)• 110 POP3 (prijem email-a)• 80 HTTP (web)• 443 HTTPS (secure HTTP) ...

– UDP• 53 DNS (Domain Name System)• 69 TFTP (Trivial File Trasport Protocol)• 161 SNMP (Simple Network Management Protocol)• 5004 RTP (Real Time Protocol) ...

8ETF, Katedra za računarsku tehniku i informatiku

Socket – identifikacija aplikacija na mreži• Socket (soket) – jedinstveno identifikovanje aplikacije (procesa) na mreži• Soket se sastoji od:

– IP adrese– transportnog protokola (TCP ili UDP)– broj porta

• Serverske aplikacije– soket: IP adresa servera + unapred poznat TCU ili UDP port

(Well-known ili Registered opsezi)– raspoložive na mreži za pristup od strane proizvoljnih klijenata

• Klijentske aplikacije– soket: IP adresa klijenta + dinamički dodeljen TCU ili UDP port

(Registered ili Private and/or Dynamic opstezi)– pojedinačni procesi na strani korisnika koji iniciraju konekciju sa serverskim

aplikacijama

Page 5: RM1.08. Transportni Sloj

5

9ETF, Katedra za računarsku tehniku i informatiku

Klijent – Server komunikacija • Uspostavljanje Klijent-Server veze

– Serverske aplikacije se izvršavaju (čekaju) na poznatim portovima na određenim serverima (IP adresama)

– Klijentske aplikacije pozivaju serverske aplikacije preko poznatih soketa (poznati portovi na poznatim IP adresama) – odredišni soketi

– Klijentske aplikacije tom prilikom uzimaju slučajno izabrane slobodne lokalne portove– izvorišni soketi

– Serverske aplikacije vraćaju odgovore na klijentski soket – IP adresa klijenta i slučajno izabrani port

10ETF, Katedra za računarsku tehniku i informatiku

Klijent – Server komunikacija• Komunikacija između aplikacija – horizontalno između aplikativnih slojeva• Serverske aplikacije imaju iste portove, ali prate komunikacije sa pojedinačnim

klijentima na osnovu jedinstvenih klijentksih soketa• Različite komunikacije:

– jedna klijentska aplikacija sa više serverskih aplikacija– jedna serverska aplikacija sa više klijentskih aplikacija– više nezavisnih komunikacija između istorodnih klijentskih aplikacija (različiti procesi,

različiti portovi) i iste serverske aplikacije (ista IP adresa i isti porovi)

Page 6: RM1.08. Transportni Sloj

6

11ETF, Katedra za računarsku tehniku i informatiku

Segmentacija aplikativnih podataka• Aplikativni podaci

– mogu biti u velikim blokovima - npr. prenos cele datoteke, real-time audio/video...– da ne bi zauzeli ceo komunikacioni kanal, podaci se dele u manje celine

• paketi - UDP datagremi i TCP segmenti– paketima se dodaju hederi i oni se prenose u nizu

• Paketi/Segmenti treba da se enkapsuliraju i prenose na nižim nivoima, koji imaju maksimalnu dozvoljenu veličinu – MTU (Max. Transmission Unit)

• Default veličina segmentaobično 512 ili 536 bajta u zavisnosti od implementacije

12ETF, Katedra za računarsku tehniku i informatiku

TCP – Transmission Control Protocol• TCP heder (Header)

– Source Port - izvorišni port – slučajno dodeljen broj veći od 1023, koji će da identifikuje aplikaciju inicijatora komunikacije (klijenta)

– Destination Port – odredišni port – poznati port koji identifikuje serversku aplikaciju – predstavlja protvrdu da su se svi prethodni okteti uspešno primili– Header Length – dužina hedera– Code bits (Flags) – flegovi koji označavaju posebne tipove paketa u održavanju sesije– Window – veličina dinamičkog TCP prozora – koliko okteta može biti poslato pre nego

što se dobije njihova potvrda (Ack)– Checksum – provera bitskih grešaka, 16 bita, komplement sume TCP hedera,

TCP podataka i TCP pseudo-hedera– TCP pseudo-heder – polja: src i dst IP adrese, protokol i dužina TCP segmenta

• donekle se krši princip slojeva, radi uključivanja podataka IP nivoa, koji nema proveru greške

Page 7: RM1.08. Transportni Sloj

7

13ETF, Katedra za računarsku tehniku i informatiku

TCP – Potvrda prenosa segmenata• Sequence Number (SEQ) – broj prvog bajta aplikativnih podatka u segmentu koji se šalje• Acknowledgement Number (ACK) – broj sledećeg bajta koji se očekuje da se primi• U fazi uspostavljanja sesije uzima se slučajno izabrana vrednost SEQ za početnu vrednost• Svaki pojedinačni bajt u nizu aplikativnih podataka ima svoju redni broj relativno u odnosu

na inicijalni SEQ• Prijem kontinualnog niza segmenata (svi bajtovi od početka aplikativnih podataka) se

potvrđuje sa vrednošću ACK za jedan većom od rednog broja poslednjeg primljenog bajta u nizu

– značenje – “ovo je sledeći bajt koji se očekuje za prijem, svi prethodni su uspešno primljeni”

14ETF, Katedra za računarsku tehniku i informatiku

Code bits – Kontrolni biti• Kontrolni biti (Code bits, Flags)

– nose informacije o kontrolnim podacima i aktiviraju pojedina polja• Najznačajniji flegovi

– SYN – sinhronizacija brojne sekvence (Sequence Number)– FIN – označava poslednji segment koji se šalje – završava se sesija– ACK – polje Acknowledgement Number je aktivno – potvrđuje se prijem do određenog

bajta u segmentu

Bitovi u polju CODE BITS

Sinhronizuje brojeve sekvenceSYN

Resetuj konekcijuRST

Poslednji segment u sekvenci za slanjeFIN

Segment zahteva pushPSH

Polje ACKNOWLEDGMENT NUMBER je validnoACK

Polje URGENT POINTER je validnoURG

ZnačenjeBit

Page 8: RM1.08. Transportni Sloj

8

15ETF, Katedra za računarsku tehniku i informatiku

TCP – Uspostavljanje sesije• TCP – connection oriented protocol

– dvosmerna komunikacija – dve odvojene komunikacione sesije, u oba smera po jedna– uspostavljanje, održavanje i raskidanje obe komunikacione sesije

• različite vrednosti SEQ i ACK

• Uspostavljanje TCP sesije u tri koraka - Three-way handshake– 1. korak

• inicijator slučajno bira vrednost za Sequence Number – SEQ (u primeru SEQ=100)• inicijator šalje paket sa SYN flagom i izabranom vrednošću Sequence Number

– 2. korak• druga strana prepoznaje i prihvata inicijativu za uspostavljanje sesije, i o tome obaveštava

inicijatora - postavlja se ACK flag, a vrednost ACK polja se postavlja na SEQ+1 – sledeći bajt koji se očekuje za prijem

• u istom paketu se inicira sesija u suprotnom smeru, na isti način kao 1. korak (SEQ=300)– 3. korak

• inicijator prihvata sesiju u suprotnom smeru i obaveštava drugu stranu (ACK=101)

rezultat: uspostavljene sesije u oba smera

16ETF, Katedra za računarsku tehniku i informatiku

TCP – Raskidanje sesije• Raskidanje TCP sesije u dva koraka u oba smera – 2 x Two-way handshake

– 1. korak• kada jedna strana nema više paketa za slanje, šalje se FIN flag u poslednjem paketu

– 2. korak• druga strana potvrđuje prijem poslednjeg paketa slanjem ACK za taj paket• sesija u tom smeru je zatvorena

– 3. korak• druga strana nastavlja da šalje preostale pakete, dok ne dođe do poslednjeg paketa• u poslednjem paketu se postavlja FIN flag

– 4. korak • prva stran potvrđuje prijem poslednjeg paketa slanjem odgovarajuće ACK potvrde

rezultat: TCP sesija je prekinuta• U slučaju da druga stana nema paketa

za slanje, 2. i 3. korak se mogu objediniti- dobija se Three-way handshake

Page 9: RM1.08. Transportni Sloj

9

17ETF, Katedra za računarsku tehniku i informatiku

TCP – Pouzdan prenosPouzdan prenos (Reliable delivery)• Svaki poslati segment zahteva potvrdu (Ack) da je uspešno pristigao na strani

primaoca• Potvrda se čeka određeno vreme – timeout

– za svaki poslati segment startuje se poseban tajmer• Vreme tajmera nešto veće od vremena putovanja segmenta od izvorišta do

odredišta i nazad – RTT (Round Trip Time) RTT = a*OldRTT+(1-a)*NewRTTsample

• Timeout = b*RTT , b=2• Ako nema grešaka, primalac će da pošalje potvrdu za poslednji bajt poslednjeg

segmenta– potvrda da su svi segmenti uspešno primljeni

• Pošiljalac nastavlja sa slanjem novih segmenata– čeka se nova potvrda da su segmenti uspešno pristigli bez grešaka

18ETF, Katedra za računarsku tehniku i informatiku

TCP – Pouzdan prenosPouzdan prenos (Reliable delivery)• Svaki poslati segment zahteva potvrdu (Ack) da je uspešno pristigao na strani

primaoca• Potvrda se čeka određeno vreme – timeout

– za svaki poslati segment startuje se poseban tajmer• Vreme tajmera treba da bude veće od vremena putovanja segmenta od izvorišta

do odredišta i potvrda u suprotnom smeru – RTT (Round Trip Time)• RTT često varira tokom vremena• TCP dinamički prati RTT i određuje vrednost za timeout na sledeći način:

– RTT = a * OldRTT + (1-a) * NewRTTsampleNewRTTsample - poslednji izmereni RTTa – faktor od 0 do 1 – veća vrednost-sporije pormene, manja vrednost-brže promene

– Timeout = b * RTTb – faktor uvećanja (tipično b=2)

Page 10: RM1.08. Transportni Sloj

10

19ETF, Katedra za računarsku tehniku i informatiku

TCP – Oporavak od greškeOporavak od greške (Error Recovery)

Primalac je dobio poslednji segment, ali prepoznaje da je izostao jedan prethodni segment

– potvrđuje se prijem poslednjeg ispravnog segmenta u nizu– poslednji primljeni segment, koji je diskontinualan sa prethodno primljenim

segmentima se ne potvrđuje• Ako istekne tajmer nekog segmenata, a ne stigne njegova potvrda, sprovodi se

retransmisija samo tog segmenta, u nadi da su naredni segmenti uspešno pristigli

• Kada primalac dobije retransmitovani segment, popuniće “rupu” u nizi primljenih podataka i potvrdiće poslednji ispravan segment

20ETF, Katedra za računarsku tehniku i informatiku

TCP - Rekonstrukcija redosleda segmenataRekonstrukcija redosleda segmenata (segmets reordering)• U slučaju više putanja između izvorišta i odredišta različiti segmenti uzimaju

različite putanje (Load Balancing)• Može da dođe do permutacije segmenata – promene redosleda prijema• Prijemna strana će da rekonstruiše originalni redosled na osnovu SEQ vrednosti

primljenih segmenata

Page 11: RM1.08. Transportni Sloj

11

21ETF, Katedra za računarsku tehniku i informatiku

TCP - Kontrola tokaKontrola toka (Flow control) – mehanizam TCP prozora (Window)• Polje Window u TCP zaglavlju

– označava ukupan broj bajtova koji se mogu poslati pre nego što se čeka na potvrdu• Kada se popuni prozor

– obustavlja se sa slanjem novih segmenata– čeka se potvrda prethodnih segmenata sa početka prozora– potvrđeni segmenti se oslobađaju i oslobađa se prostor u prozoru za slanje novih

segmenataWindow

DCBA

...1413121110987654321

Bajtovi koje se ne mogu odmah poslatiDBajtovi koji se odmah mogu poslatiCPoslati, ali još nepotvrđeni bajtoviBPoslati i potvrđeni bajtoviA

22ETF, Katedra za računarsku tehniku i informatiku

TCP - Kontrola toka• “Prozor” određene veličine se pomera po nizu aplikativnih podataka koji se šalju

– Zato se mehanizam prozora često naziva i Sliding Window

• Manji prozor– više čekanja, sporije slanje

• Veći prozor– manje čeka, brže slanje

...10987654321

Initial window

...10987654321

window slides →

Page 12: RM1.08. Transportni Sloj

12

23ETF, Katedra za računarsku tehniku i informatiku

TCP – Kontrola toka• TCP dinamički uspostavlja veličinu prozora

– Zato se mehanizam prozora često naziva i Dynamic Window• Inicijalno se obe strane dogovore o veličini prozora• U slučaju gubitka paketa ili greške

– vrši se oporavak od greške – retransmisija– ako je prijemna strana zagušena, može da zahteva smanjenje trenutne veličine

prozora zajedno sa ACK– znak pošiljaocu da uspori slanje segmenata

• U slučaju da nema grešaka – pošiljalac postepene povećava veličinu prozora

24ETF, Katedra za računarsku tehniku i informatiku

TCP – Kontrola zagušenja• Kontrola zagušenja (congestion control) -

TCP može da se dinamički prilagodi trenutnom opterećenju u mreži– pošiljalac prilagođava brzinu slanja u zavisnosti od propusnog opsega i potencijalnog

zagušenja na putu• Moderne implementacije TCP protokola obuhvataju sledeće algoritme kontrole

zagušenja:– Slow start– Congestion avoidance– Fast retransmit– Fast recovery

Page 13: RM1.08. Transportni Sloj

13

25ETF, Katedra za računarsku tehniku i informatiku

TCP – Slow start• Tokom uspostavljanja sesije primalac oglašava veličinu prozora, kojim kontroliše

prijem segmenata – Advertised Window (AW, awnd)• Da bi se izbeglo potencijalno zagušenje, pošiljalac ipak ne šalje sve segmente

na početku sesije• Uvodi se Congestion WIndow (CW, cwnd) – kontroliše ga pošiljalac • Veličina prozora na strani pošiljaoca:

– min(AW, CW)• Slow start

– inicijalna vrednost za CW je 1 segment– CW se povećava za svakom Ack za 1

• Ako se potvrđuje svaki segment, CW se u svakom koraku povećava za 2

– 1, 2, 4, 8 .... eksponencijalno• U praksi se tipično Ack šalje

za 2 segmenta, pa je rast nešno manjeali i dalje eksponencijalan (slow ?)

26ETF, Katedra za računarsku tehniku i informatiku

TCP - Congestion avoidance• Congestion avoidance – usporiti slanje kada dođe do gubitka paketa• Indikacija gubitka paketa na strani pošiljaoca: timeout segmenta ili dupli Ack• Uvodi se veličina Slow Start Threshold Size – ssthresh

– inicijalna vrednost za ssthresh je 65535– u slučaju timeout ili dupli Ack (zagušenje) ssthresh uzima vrednost polovine trenutno

primenjenog prozora– dodatno u slučaju timeout-a cwnd se postavlja na 1– ako je cwnd < ssthresh

• slowstartcwnd se povećava eksponencijalno

• congestion avoidancecwnd se povećava linearno (najviše za jedan segment)

• Globalni efekat– učestale greške će prozor

brzo smanjiti na malu vrednost– ako nema grešaka prozor će

se postepeno povećavati

Page 14: RM1.08. Transportni Sloj

14

27ETF, Katedra za računarsku tehniku i informatiku

TCP – Fast retransmit• Kada pošiljalac primi dupli Ack za neki segment, ne zna se da li je segment

izgubljen ili je došlo do promene redosleda (reordering)• Tek kada se desi višestruki Ack za neki segment, smatra se da je segment zaista

izgubljen• Fast retransmit je tehnika koja sprovodi retransmisiju pre isteka timeout-a, u

slučaju da se dobio višestruki Ack za neki segment

28ETF, Katedra za računarsku tehniku i informatiku

TCP – Fast recovery• Ack se šalje samo kada pristigne neki segment, bilo za taj segment ili za neki

prethodni koji nedostaje• Višestruki Ack označava:

– da je jedan segment izgubljen– ali i da su drugi segmenti uspešno pristigli

• Fast recovery podrazumeva da se posle Fast retransmit procesa ne sprovodi slow start, već congestion avoidance algoritma

– prozor se smanjuje na pola i linearno povećava, a ne na 1 uz eksponencijalni rast• Fast retransmit se sprovodi u kombinaciji sa Fast recovery tehnikom• Različite implementacije TCP-a mogu da imaju različite optimizacije reagovanja

prozora na nestanak segmenta

Page 15: RM1.08. Transportni Sloj

15

29ETF, Katedra za računarsku tehniku i informatiku

UDP – User Datagram Protocol• UDP zaglavlje – samo 8 bajtova

– izvorišni i odredišni port– dužin paketa (datagrama)– checksum – provera greške, ali ne i korekcija

• Karakteristike UDP protokola– Connectionless

• ne uspostavlja konekciju pre slanja podataka• svaki datagram se nezavisno prenosi

– Unreliability – nepouzdan• izgubljeni ili oštećeni paketi (datagram) se ne mogu retransmitovati• nema kontrole i provere redosleda pristizanja paketa• ako je potrebno, aplikacija koja koristi UDP mora da implementira ove funkcije

– Low overhead• brz, jednostavan, ne zahteva velike mrežne i procesorske resurse

30ETF, Katedra za računarsku tehniku i informatiku

UDP – Primena • Mnoge aplikacije ne zahtevaju pouzdanost prenos i UDP funkcije su dovoljne

(npr. periodičan prenos manje količinu podataka)• Primeri

• DNS – Domain Name System• SNMP – Simple Network Management Protocol• DHCP – Dynamic Host Configuration Protocol • RIP – Routing Information Protocol • TFTP – Trivial File Transfer Protocol

• Nekim aplikacijama bi TCP predstavljao problem – veliko zaglavlje, a podaci se kontinualno prenose u malim količinama– kontrola greške, retransmisija, dinamički prozor mogu da uspore podatke i degradiraju

prenos• Real-Time saobraćaj• VoIP – Voice Over IP• Video Streaming

Page 16: RM1.08. Transportni Sloj

16

31ETF, Katedra za računarsku tehniku i informatiku

UDP saobraćajPrimer: VoIP, IP Telefonija, IP TV – interaktivan prenos zvuka i slike• zahtevi

– malo kašnjenje (delay) – do 200 ms za interaktivan razgovor– mala varijacija kašnjenja - džiter (jitter) +/- 30 ms– manji gubitak paketa se može tolerisati

• ako se izgubi neki paket, retransmisija bi narušila kašnjenje i džiter• povremeni gubitak nekog paketa nije primetna za učesnike u komunikaciji - kvalitet se ne

narušava značajno

32ETF, Katedra za računarsku tehniku i informatiku

Literatura• CCENT/CCNA ICND1,

official exam certification guide, Wendell Odom, Cisco Press, 2008

• CCNA curriculum, Cisco

• Douglas Comer – “Internetworking with TCP/IP”

• IBM - “TCP/IP Tutorial and Technical Overview”, www.ibm.com/redbooks

• www.wikipedia.org