| Razumijevanje TCP sekvence i potvrdnih brojeva |
|
|
|
| Autor Administrator |
| Utorak, 08 Juni 2010 09:45 |
|
Ako ste počeli sa čitanjem ovoga članka, velika je vjerovatnoća da ste već upoznati sa veoma poznatim izrazom "TCP three-way handshake," ili sa izrazima "SYN, SYN/ACK, ACK." Nažalost, na tom mjestu se završava TCP edukacija za većinu mrežnih administratora. Bez obzira na svoju starost, TCP je relativno kompleksan protokol i dobro ga je poznavati u tančine. Ovaj članak ima za cilj učiniti vas mnogo komfornijim u istraživanju TCP sekvenci i acknowledgment(potrvrdnih) brojeva uz pomoć Wireshark paket analizatora. Prije nego što počnemo, otvorite ovaj primjer u Wireshark-u i pratite zajedno sa primjerom. Naš primjer sadrži jedan HTTP zahtjev prema web serveru, u kojem korisnički web browser potražuje jednu sliku(image file), a server uzvraća sa HTTP/1.1 200 (OK) odgovorom u kojem je uključena tražena slika. Uradite right-click na bilo koji od TCP paketa unutar ovogo primjera i odaberite Follow TCP Stream za otvaranje sirovog sadržaja TCP stream-a u odvojenom prozoru radi inspekcije. Korisnički saobraćaj je obiljećen crvenom bojom, dok je saobraćaj sa servera obilježen plavom bojom.
Three-Way HandshakeTCP koristi brojne oznake, ili 1-bitno boolean polje u svom zaglavlju radi kontrolisanja stanja konekcije. Ono što nas najviše interesuje je ovo troje:
Kao što ćemo vidjeti, paket može imati višestruke oznake. Odaberite paket #1 u wireshark-u i otvorite "TCP layer analysis" u središnjem dijelu, zatim proširite "Flags" polje unutar TCP zaglavlja. Tu možemo vidjeti sve TCP oznake. Primjećujete da je SYN oznaka podešena na 1.
Sada uradite ovo isto sa paketom #2. Primjećujete da ovaj paket ima podešene dvije oznake: ACK da potvrdi primitak korisničkog SYN paketa, i SYN kao indikaciju da server također želi uspostaviti TCP konekciju.
Paket #3, koji pripada korisniku također ima podešen samo ACK oznaku. Ova tri paketa upotpunjuju početni "TCP three-way handshake". Sekvence i Potvrdni brojeviKorisnici sa obje strane TCP sesije održavaju 32-bitni sekventni broj koji im koristi za praćenje količine poslatih podataka. Ovaj sekventni broj je sastavni dio svakog odaslanog paketa, i on biva potvrđen od strane suprotnog korisnika uz pomoć potvrdnog broja(ACK). Potvrdni broj obavještava korisnika da su podaci koje je on poslao uspješno primljeni od strane suprotnog korisnika. Prilikom iniciranja TCP sesije od strane korisnika, njegov početni sekventni broj se odabire nasumično(random); on može imati vrijednost između 0 i 4,294,967,295. Međuti, paket analizatori poput wireshark-a će uglavnom prikazati relativni sekventni i potvrdni broj na mjestu pravih brojeva. Vrijednosti ovih brojeva su relativne u odnosu na početni sekventi broj tog streama. Ovo je jako korisno, pošto je mnogo lakše pratiti relativno male i predvidive brojeve za razliku od pravih brojeva koji se šalju kroz žicu. Na primjer, početni relativni sekventni broj prikazan u paketu #1 iznosi 0, dok nam na drugoj strani dekodirani ASCII u trećem redu pokazuje vrijednost pravog sekventnog broja koja iznosi 0xf61c6cbe(hex), ili decimalno 4129057982.
Prikazivanje relativnih sekventnih brojeva se, ako to želite može onemogučiti: Edit > Preferences... unčekirajte Relative sequence numbers and window scaling pod TCP protocol preferences. Međutim, mi ćemo u ostatku ovoga članka koristiti samo relativne sekventne i potvrdne brojeve. Za bolje razumijevanje načina korištenja sekventnih i potvrdnih brojeva unutar trajanja jedne TCP sesije, možemo se poslužiti wireshark-ovom ugrađenom mogučnošću generisanja grafičih tabela sa statistikama. Otiđite na Statistics > Flow Graph..., odaberite TCP flow i kliknite OK. Wireshark će automatski kreirati grafički sažetak TCP toka.
Svaki red predstavlja jedan TCP paket. Lijeva kolona ukazuje na pravac paketa, TCP port, dužinu segmenta i podešenu oznaku(flag). Desna kolona nam pokazuje relativne sekventne i potvrdne brojeve u decimalnom formatu. Odabiranje reda u ovoj koloni također naglašava odgovarajući paket unutar glavnog prozora. Iskoristićemo ovu tabelu za bolje shvatanje naćina na koji sekventni i potvrdni brojevi funkcionišu. Paket #1Obje strane TCP sesije startaju sa relativnim sekventnim brojem 0. Također, i potvrdni broj je 0, pošto još nemamo komplementarnu stranu konverzacije koja bi potvrdila(ACK). (Note: Verzija wiresharak koju koristimo u ovoj demonstraciji, 1.2.7, prikazuje potvrdni broj kao nasumični(random) broj. Najvjerovatnije je riječ o bugu unutar software-a; početni potvrdni broj sesije uvijek mora biti 0, kao što možete vidjeti u inspekciji hex dump-a. Paket #2Server odgovora korisniku sa sekventnim brojem 0, pošto se radi o prvom paketu u ovoj TCP sesiji, i sa relativnim potvrdnim brojem 1. Potvrdni broj 1 nam ukazuje na primitak korisničke SYN oznake u paketu #1. Primjećujete da se potvrdni broj uvećao za 1 iako klient još nije poslao nikakve podatke. Ovo se dešava zato što prisustvo SYN ili FIN oznake u primljenim paketima uzrokuje povećanje potvrdog broja za 1 u sekvenci. Paket #3Kao i u paketu #2, korisnik odgovara na serverov sekventni broj 0 sa potvrdnim brojem 1. Korisnik također ukljućuje i svoj vlastiti sekventni broj 1. U ovom momentu, sekventni broj oba korisnika je 1. Početno uvećanje od 1 na korisničkim sekventnim brojevima se dešava tokom uspostave svih TCP sesija. Paket #4Ovo je prvi paket unutar streama koji nosi stvarne podatke (u ovom slučaju, korisnički HTTP zahtjev). Sekventni broj i dalje ostaje 1, budući da nije došlo do prenosa podataka od zadnjeg paketa. Potvrdni broj također ostaje 1, jer nikakvi podaci nisu primljeni od servera. Primjetite da je sadržaj paketa težak 725 byta. Packet #5Ovaj paket je poslat od strane servera sa zadatkom da potvrdi podatke koji su poslati od strane korisnika u paketu #4, dok će gornji slojevi procesuirati HTTP zahtjev. primjećujete da se potvrdni broj povisio za 725 (težina sadržaja paketa #4). Sekventni broj servera ostaje 1. Paket #6Ovaj paket označava poćetak serverovog HTTP odgovora. Njegov sekventni broj je i daljel 1, pošto nijedan prijašnji paket nije nosio stvarne podatke. Ovaj paket nosi podatke težine 1448 byta. Paket #7Sekventni broj klienta je uvećan na 726 zbog zadnjeg poslanog paketa. Zbog primitka 1448 byta podataka od strane servera, korisnik povećava svoj potvrdni broj sa 1 na 1449. U većini slučajeva u našem primjeru , ovaj ciklus će se ponavljati. Korisnički sekventni broj će zadržati vrijednost od 726, zato što ne postoji potreba za prenosom podataka nakon prvog odgovora od 725 byta. Na drugoj strani, sekventni broj servera nastavlja sa rastom radi slanja segemenata unutar HTTP odgovora. EpilogPaket #38Nakon potvrde posljednjeg segmenta podataka sa servera, korisnik će procesuirati HTTP odgovor kao cjelinu i zaključuje kako nema potrebe za daljnom komunikacijom. Paket #38 biva poslat od strane korisnika sa podešenom FIN oznakom. Njegov potvrdni broj ostaje isti kao i kod prethodnog paketa(#37). Paket #39Server potvrđuje korisnikovu želju da prekine konekciju tako što povećava potvrdni broj za 1 (nešto slično što je urađeno u paketu #2 da bi se potvrdila SYN oznaka) i postavlja FIN oznaku također. Paket #40Korisnik šalje svoj posljednji sekventni broj 727, potvrđuje serverov FIN paket tako što povećava svoj potvdni broj na 22952. U ovom momentu, oba korisnika su prekinula sesiju.
Set as favorite
Bookmark
Email This
Hits: 16709 Komentari (5)...
ETO NAM SAD NASE BH VOJSKE,POSLATA U SVIJET DA OTIMA NAFTU ZA AMERIKU .ONI KOI SE VRATE IDU U PENZIJU NA TERET BH GRADJANA S 30 GODINA STAROSTI. PUNA JE MOJA BIH PARAZITA KOI BI I KOI ZIVE NA GRBACI NARODA.
...
That's well known that money makes people disembarrass. But what to do when someone does not have money? The one way is to get the loan or small business loan.
Napišite komentar |
| Ažurirano Četvrtak, 10 Juni 2010 14:26 |










