Professional Documents
Culture Documents
2018
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS
UNIVERSITY OF SZEGED
Department of Software Engineering
Számítógép-hálózatok 4. gyakorlat
TCP, UDP
Bordé Sándor
Szegedi Tudományegyetem
Tartalom
Bevezetés ......................................................................................................................... 3
Szállítási réteg ................................................................................................................ 3
Alapfogalmak .................................................................................................................. 3
Beágyazódások: üzenet, szegmens, csomag, keret ....................................................... 3
IP és a „best effort” ................................................................................................................. 4
Multiplexelés, socketek, portszámok ............................................................................... 4
UDP .................................................................................................................................... 5
TCP..................................................................................................................................... 5
Kapcsolat felépítése .............................................................................................................. 6
Visszaigazolás ......................................................................................................................... 7
Újraküldés (retransmission) .............................................................................................. 8
Folyam vezérlés (flow control), Torlódás-vezérlés (congestion control) ....................... 8
UDP vs. TCP ..................................................................................................................... 9
Alkalmazások és jellemző protokolljuk........................................................................... 9
Gyakorlati anyag ............................................................................................................ 9
Adatgyűjtés .............................................................................................................................. 9
Szűrés ...................................................................................................................................... 10
TCP kapcsolatot felépítő csomagok ................................................................................ 10
Portszám megállapítása ...........................................................................................................................11
Header főbb részeinek kiolvasása ......................................................................................................11
Kapcsolatot felépítő Flagek ....................................................................................................................11
Three-way handshake csomagok........................................................................................................11
Adatcsomag vizsgálata........................................................................................................ 12
Szegmens nyugta .................................................................................................................. 13
Újraküldés .............................................................................................................................. 14
Kapcsolat lezárása ............................................................................................................... 14
TCP stream összeállítása.................................................................................................... 14
UDP csomagok vizsgálata .................................................................................................. 15
Ismétlő kérdések ......................................................................................................... 15
Forrás.............................................................................................................................. 15
Bevezetés
Ezen a gyakorlaton egy szinttel lejjebb lépünk a hálózati hierarchiában és a szál-
lítási réteg két fő protokolljával, a TCP-vel és az UDP-vel fogunk megismerkedni.
Az itt olvasható elmélet nem teljeskörű ismertető, csak a lényeget tartalmazza,
ami szükséges a gyakorlati feladatok megoldásához. A teljes ismeret megszerzé-
séhez és jobb megértéshez el kell olvasni az ajánlott irodalom idevonatkozó feje-
zeteit.
Szállítási réteg
A szállítási réteg az alkalmazási és a hálózati réteg között helyezkedik el. A fő
feladata, hogy logikai kapcsolatot biztosítson hálózati alkalmazások között. Azaz,
az alkalmazások szemszögéből úgy tűnik, mintha a két alkalmazás közvetlen ösz-
szeköttetésben lenne, miközben a másik alkalmazás futhat egy világ másik felén
lévő gépen is. Ennek köszönhető, hogy a hálózatok anélkül kommunikálhatnak
egymással, hogy törődniük kellene az átviteli közegekkel.
Alapfogalmak
Mielőtt belevágnánk a szállítási réteg két legismertebb protokolljának a tárgyalá-
sába, vegyünk át néhány alapfogalmat, amik elkerülhetetlenek a fejezet megérté-
séhez.
IP és a „best effort”
Az IP a hálózati réteg (internetréteg) legelterjedtebb protokollja. Az IP felelős
azért, hogy a csomagok a hálózaton átjussanak egyik hosztról a másikra. Azon-
ban az IP-nek van két nagy hiányossága.
Egyrésztez a protokoll csak egy „legjobb szándékú” szolgáltatást tud nyújtani.
Ez annyit tesz, hogy nem ad garanciát a sikeres továbbításra, de azért megteszi a
tőle telhetőt. Nem garantálja, hogy a csomagok hibátlanul, helyes sorrendben
érkeznek meg, sőt, azt sem garantálja, hogy egyáltalán célba ér a csomag.Tehát
azt mondhatjuk, hogy az internetprotokoll egy megbízhatatlan szolgáltatást
nyújt.
80 HTTP 21 FTP
25 SMTP 110 POP3
UDP
Az IPelőző fejezetben leírt hátrányai közül az UDP csak egyet old meg ténylege-
sen (multiplexelés), illetve egyet részlegesen (hibadetektálás).
Egy UDP szegmens két portszámot (forrás és címzett portszáma) és két rövid
információt (hossz és ellenőrző összeg) tárol csak, ezt leszámítva olyan, mintha
közvetlenül a hálózati réteggel állnánk kapcsolatban. Ez kisebb csomagméretet
és gyorsabb küldést tesz lehetővé, viszont megoldatlanul hagyja az IP megbízha-
tatlanságából eredő problémákat: a csomagvesztést, a nem garantált sorrendet
TCP
A TCP protokoll képes arra, hogy helyrehozza az alsóbb rétegek megbízhatatlan-
ságából eredő hibákat és a felsőbb rétegek számára megbízható kapcsolatot
nyújtson, ehhez viszont valamennyi kompromisszumra lesz szükség.
Egyrészt, a TCP szegmensek sokkal több pluszinformációt tárolnak, mint az
UDP, így nagyobb lesz a csomagméret is. Az alábbi ábrán látható, hogy milyen
Kapcsolat felépítése
Egy TCP adattovábbításnak egy nem túl érdekes, ugyanakkor nagyon fontos ré-
sze a kapcsolat felépítése. Ez egy háromlépéses folyamat, melynek során adat
nélküli TCP szegmenseket küld egymásnak a két hoszt (kliens és szerver) és
megállapodnak az átvitel részleteiről. A három lépés miatt szokták ez a folyama-
tot „Three-way handhsakenek” is hívni.
1. lépés: A kapcsolat kezdeményezője (kliens) küld egy adat nélküli TCP
szegmenst. Ennek csak a SYN nevű header mezője van 1-re állítva.Ezt a cso-
magot szokták SYN csomagnak is nevezni. Emellett a küldő véletlenszerűen
választ egy kezdeti Sequence numbert, amit betesz ennek a csomagnak a meg-
felelő mezőjébe (legyen egy client_sn).
Visszaigazolás
A TCP protokoll úgy biztosítja az összes csomag megérkezését, hogy visszacsato-
lást (nyugtázást) küld a megérkezett szegmensekről. A visszacsatolást a TCP
csomag fejlécének Sequence number és Acknowledgement number mezőivel való-
sítja meg. A TCP úgy veszi, hogy az adat, amit küldeni szeretnénk, az egy rende-
zett bájtfolyam. Éppen ezért, a Sequence number mező azt jelzi, hogy ebben az
adott szegmensben a bájtfolyam hányadik bájtjától található adat. Tegyük fel,
hogy 5000 bájt hosszú adatot szeretnénk továbbítani, az MSS (Maximum
Segment Size) értéke pedig 1000 bájt. Ekkor a küldő 5 szegmensre fogja feldara-
bolni az adatot, az első szegmensnél a Sequence number 0 lesz, a másodiknál
1000 és így tovább.
Az Acknowledge number mezőben jelezzük azt, hogy rendben megérkezett-e a
küldött adat? A fogadó ebbe a mezőbe azt a bájtszámot írja, aminek következnie
kell. Pl. ha 500 bájtos szegmenseink vannak és 0-tól kezdődik a számozás, akkor
ha megérkezett az első szegmens, akkor a fogadó a válaszként küldött szegmens
acknowledgement mezőjébe az 500-at fogja írni, jelezve, hogy „Az 500 előtti ada-
tok mind megérkeztek, jöhet az 500.”.
Tegyük fel, hogy megkaptuk az első szegmenst (tehát a bájtokat 0-tól 499-ig),
majd ezután kapunk egyet, aminek a Sequence number értéke 1000. Ez azt jelenti,
hogy kimaradt egy szegmensünk, ami a 500-999 bájtokat tartalmazta. Ilyenkor
az Acknowledge number ismét 500 lesz, mert a TCP mindig csak a folytonos bájt-
folyamot nyugtázzuk le (ezt hívják kumulatív nyugtázásnak).
Azt, hogy mi történjen akkor, amikor előbb kapunk meg egy későbbi
szegmenst, a TCP hivatalos dokumentációja nem rögzíti, hanem az alkalmazás
készítőjére bízza. Egyik megközelítés, hogy az ilyen szegmenseket eldobjuk és
mindig csak annyit tartunk meg, amennyit lenyugtáztunk. Ez egyszerűsíti a foga-
dást, mert nem kell később sorba rendezni a fogadott szegmenseket, viszont pa-
zarolja a sávszélességet. Ezért a gyakorlatban az ilyen „lyukas” szegmenseket
inkább eltárolják és a később megérkező szegmensekkel betöltik ezeket a „lyu-
kakat”.
Újraküldés (retransmission)
Ahogy az elején említettük, a TCP megbízható kapcsolatot biztosít. Ez annyit tesz,
hogy ha egy alkalmazás kiolvas egy adatfolyamot a fogadó TCP bufferéből, akkor
az legyen hibátlan, hiánytalan és sorrendhelyes.
Gyakorlati anyag
A következő gyakorlati példán keresztül megnézzük, hogy a valóságban, hogy
néz ki egy egyszerű adatátvitel TCP segítségével.
Adatgyűjtés
A példához gyűjtsünk magunk számára adatokat. Első lépésként töltsük le az
alábbi linkről az ott található szöveges állományt (ez az Alice csodaországban c.
mű txt formátumban.)
http://gaia.cs.umass.edu/wireshark-labs/alice.txt
Ezután nyissuk meg az alábbi weboldalt a böngészőnkben:
http://gaia.cs.umass.edu/wireshark-labs/TCP-wireshark-file1.html
Szűrés
Hacsak nem kapcsoltunk ki minden, hálózatot használó programot a gépünkön,
akkor valószínűleg sok más egyéb csomag is bekerült a listába. Először szűrjük ki
a számunkra lényeges csomagokat az alábbi szűrőkifejezéssel:
tcp
Így csak a TCP protokollt használó csomagok maradnak bent a listában. Ez-
után, hogy biztos a jó streamet vizsgáljuk, keressük meg a fogadó ip címét, és
szűrjünk erre is. Mivel tudjuk, hogy mi a fogadó domain neve
(http://gaia.cs.umass.edu), valamint a 3. héten láttuk, hogy lehet rákeresni
hosztnévre, könnyedén megtalálhatjuk a szükséges IP címet. Egyszerre lehet két
szűrőt is használni a programozásból ismert ÉS művelettel:
tcp && ip.addr == 128.119.245.12
Ekkor csak olyan szegmenseket látunk a listában, amik TCP protokollt hasz-
náltak és vagy a megadott IP címre mentek, vagy onnan jöttek. Kezdhetjük a TCP
folyam vizsgálatát!
Adatcsomag vizsgálata
Miután felépült a kapcsolat a két fél között, megkezdődhet a továbbítás. Koráb-
ban láttuk, hogy először a kliens elküld egyszerre több szegmenst, amire aztán
megérkeznek a nyugtázó válaszok. Egy adatszegmenst kiválasztva az alábbi ada-
tokat tudhatjuk meg belőle.
A portszámokat már ismerjük, ugyan azok, mint a kapcsolat felépítésekor. A
Sequence number jelen esetben 1, ezzel jelöljük, hogy a küldeni kívánt adat első
bájtjától indulunk. (Korábban szóba került, hogy a TCP egy véletlen számot gene-
rál kezdő szegmensszámként, hogy kisebb legyen az ütközés a későbbiek során.
A Wireshark az egyszerűség miatt mindig átalakítja nekünk relatív számmá, azaz
az első szegmens 0, és a többit ehhez viszonyítja.)
Az Acknowledgement number 1, ami azt jelenti, hogy fogadtuk a szerver 0
Sequence numberrel rendelkező szegmensét (ez volt a SYNACK szegmens) és
jöhet az 1-es jelzésű. Mivel az ACK flag 1-re van állítva, így ez egy valós nyugta.
Végül a lista alján látható a TCP segment data, ami az adatot tartalmazza, ösz-
szesen 1452 bájtot (ennyit határozott meg a szerver, mint MSS). Ha rákattintunk
erre a sorra, alul kijelölődik a szegmensből az adatrész, látható hexadecimális és
szöveges alakban is.
Szegmens nyugta
A kommunikáció két irányú is lehetne, de jelen esetben csak mi küldünk a szer-
vernek adatot és ő nyugtáz nekünk, így a szerver felől érkező nyugtát fogjuk
megnézni.
Újraküldés
Ha valami probléma van átvitel közben, akkor retransmission fog történni (azaz
újraküld a küldő egy csomagot). Az ilyen eseteket az alábbi szűrőkkel választhat-
juk ki:
tcp.analysis.retransmission ||
tcp.analysis.fast_retransmission
Kapcsolat lezárása
Ha végeztünk a feltöltéssel, a szerver elküldi nekünk a korábban látott visszajel-
ző oldalt (amelyben leírja, hogy sikeres a feltöltés). Amint a szerver megkapja a
nyugtát tőlünk erre a weboldalra vonatkozóan, bontja a kapcsolatot. Ezt az elmé-
leti részben említett FINACK csomaggal teszi meg, ami így néz ki:
Ennek eddig csak egy mezője lehet ismeretlen: a Flag mező FIN nevű jelzője,
amivel jelzi a szerverünk a kapcsolat végét. Erre a kliens már csak egy ACK üze-
netet küld, nyugtázva a kapcsolat bontását. Mivel most a kommunikáció csak
egyirányú volt, így nincs szükség arra, hogy mi is visszaküldjünk egy FIN
szegmenst.
Ismétlő kérdések
1. Mi a kliens és a szerver portszáma? Mi a szerver IP címe?
2. Hogy tudod eldönteni, hogy egy szegmens a three-way handshakeben
SYN, ACK vagy SYNACK szerepet tölt be?
3. Találtál-e valahol retransmissiont? Ha igen, melyik sequence numberrel
rendelkező szegmenst kellett újraküldeni?
4. Válassz ki egy tetszőleges adatszegmenst, majd keresd meg az erre érkező
nyugtát. Honnan tudtad, hogy melyik tartozik hozzá?
5. Válassz ki egy tetszőleges UDP csomagot. Mekkora a csomag mérete?
Forrás
James F. Kurose, Keith W. Ross: Computer Networking, A Top-Down
Approach (Sixth Edition)