Transmission Control Protocol je veľmi dôležitý protokol v transportnej vrstve pre OSI alebo TCP/IP model. TCP má mnoho výhod, napríklad:
- TCP vykoná opätovný prenos, ak nejaké odoslané dáta nie sú potvrdené prijímačom do určitého času.
- TCP vytvorí nejaké spojenie pred odoslaním údajov. Toto spojenie nazývame trojstranné podanie ruky.
- TCP má mechanizmus kontroly preťaženia.
- TCP dokáže zistiť chybu pomocou niektorých metód.
Naučme sa hlavne na TCP 3-way handshake. Dozvieme sa tiež o dôležitých poliach v programe Wireshark pre trojstranné podanie ruky.
3-smerné podanie ruky
Existujú tri výmeny snímok, ktoré sa uskutočňujú v 3-smernom podaní ruky:
Prvý rámec vždy odošle klient na server. Pochopme to z jednoduchého diagramu:
'KLIENTSKY SERVER'
Frame1: Klient odošle SYN rámec na server -----------------------------------><------------------------------------------- Server odošle rámec SYN+ACK pre klienta: Rám2
Rámec 3: Klient odošle ACK rámec na server ----------------------------------->
Tieto tri snímky môžeme vidieť vo Wiresharku. Filter „tcp“ možno použiť v programe Wireshark na zobrazenie všetkých rámcov TCP. Tu je snímka obrazovky pre tri snímky:
Poďme teraz podrobne pochopiť všetky tri rámce:
SYN
Tento rámec obsahuje veľa informácií o schopnostiach klienta informovať server. Nasledujúca snímka obrazovky zobrazuje všetky dôležité polia rámca SYN:
Tu sú dôležité polia pre rámec SYN:
Zdrojový port: 50602Cieľový prístav: 80
Poradové číslo: 0
Číslo potvrdenia: 0
Dĺžka hlavičky: 32 bajtov
Príznaky: 0x002 (SYN):
Potvrdenie: Nie je nastavené
Stlačiť: Nie je nastavené
Resetovať: Nie je nastavené
Syn: Set ----> Tento bit je nastavený, pretože toto je rámec SYN.
Fin: Nie je nastavené
Okno: 65535
Naliehavý ukazovateľ: 0
TCP Option - Maximálna veľkosť segmentu: 1460 bajtov
TCP Option - Mierka okna: 3 (vynásobte 8)
TCP Option - SACK povolený
VIEW+ACK
Tento rámec obsahuje veľa informácií o schopnostiach servera informovať klienta. Nasledujúca snímka obrazovky zobrazuje všetky dôležité polia rámca SYN+ACK:
Tento rámec tiež potvrdzuje rámec SYN, ktorý odosiela klient.
Tu sú dôležité polia pre rámec SYN+ACK:
Zdrojový port: 80Cieľový prístav: 50602
Poradové číslo: 0
Číslo potvrdenia: 1
Dĺžka hlavičky: 32 bajtov (8)
Príznaky: 0x012 (SYN, ACK)
Potvrdenie: Set
Stlačiť: Nie je nastavené
Resetovať: Nie je nastavené
Jeho: Set
Fin: Nie je nastavené
Okno: 29200
Naliehavý ukazovateľ: 0
TCP Option - Maximálna veľkosť segmentu: 1412 bajtov
TCP Option - SACK povolený
Možnosť TCP – mierka okna: 7 (vynásobte číslom 128)
Vidíme, že v tomto rámci sú nastavené bity „Acknowledge“ a „SYN“. Je to preto, že tento rám je SYN+ACK.
ACK
Tento rámec je posledným rámcom 3-cestného podania ruky a zároveň potvrdením SYN+ACK klientom. Nasledujúca snímka obrazovky zobrazuje všetky dôležité polia rámca ACK:
Tu sú dôležité polia pre ACK rámec:
Zdrojový port: 50602Cieľový prístav: 80
Poradové číslo: 1
Číslo potvrdenia: 1
Dĺžka hlavičky: 20 bajtov (5)
Príznaky: 0x010 (ACK)
Naliehavé: Nie je nastavené
Potvrdenie: Set
Stlačiť: Nie je nastavené
Resetovať: Nie je nastavené
Syn: Nie je nastavené
Fin: Nie je nastavené
Okno: 32768
Tu je nastavený iba bit „Acknowledge“, pretože ide o ACK rámec.
Vysvetlenie niektorých dôležitých spoločných polí
Port 80 : V tomto návode sme si všimli jeden pevný port 80. Je to preto, že ide o zachytávanie HTTP a port 80 je pevný (na strane servera) pre komunikáciu HTTP.
Poradové číslo : Poradové číslo tohto rámca. Sync je prvá snímka, takže máme 0 ako poradové číslo.
Príznaky TCP:
Poďakovanie – Tento bit je nastavený, ak je rámec ACK. Príklad: SYN+ACK, ACK rám.
SYN – Tento bit je nastavený, ak je rámec SYN. Príklad: SYN.
okno : Toto pole zdieľa maximálnu veľkosť okna odosielateľa v režime príjmu. Príklad: V rámci SYN máme veľkosť okna 65535 bajtov. To znamená, že prijímač môže kedykoľvek prijať maximálne dáta TCP 65535 bajtov.
SACK Povolené : Tento bit je nastavený, ak odosielanie podporuje SACK [selektívne potvrdenie].
Maximálna veľkosť segmentu : Môžeme to nazvať aj MSS. Toto definuje maximálny dátový rámec, ktorý môže odosielateľ prijať. Príklad: MSS dostaneme ako 1460 bajtov v rámci SYN.
Záver
Dozvedeli sme sa o TCP 3-way handshake a všetkých užitočných poliach pre rámce SYN, SYN+ACK a ACK. Ak sa chcete dozvedieť viac o TCP, môžete sledovať tento odkaz RFC https://tools.ietf.org/html/rfc793 .