22.1 Hálózati alapok

Az Internetre kötött számítógépek vagy a TCP (Transmission Controll Protocol) vagy az UDP (User Datagram Protocol) protokollt használják, amint azt az alábbi ábrán is látni lehet:

Protokols

Ha egy Java programot írunk, ami használja a hálózatot, a felhasználói réteget programozzuk. Általában nincs szükség a TCP vagy az UDP protokollok közvetlen használatára, ehelyett használhatjuk az osztályokat a java.net csomagból. Ezek az osztályok rendszerfüggetlen hálózati kommunikációt biztosítanak. Ha szeretnénk tudni, hogy a programunk pontosan melyik osztályokat kell, hogy használja, meg kell érteni az alapvető különbségeket a TCP és az UDP protokollok között.

22.1.1 TCP

Ha két program megbízhatóan akar egymással kommunikálni, létrehoznak egy kapcsolatot, és ezen keresztül küldik az adatokat, hasonlóan a telefon működéséhez. A TCP – akár egy telefontársaság – garantálja, hogy az adat, amit küldünk, helyes sorrendben (!) megérkezik a vevőhöz. Ha ez nem sikerül, hibajelzést küld vissza.

A TCP egy megbízható pont-pont csatornát ad azoknak az alkalmazásoknak, amelyek megbízható kapcsolatot kívánnak meg. Ilyen alkalmazások például: Hyper Text Transfer Protokoll (HTTP), File Transfer Protokoll (FTP) és a Telnet. A hálózaton átküldött és fogadott adatok sorrendje elengedhetetlen az alkalmazások helyes működéséhez. Mikor a HTTP-t egy URL-ből való olvasáshoz használjuk, az adatokat olyan sorrendben kell kiolvasnunk, ahogy azt küldték, különben könnyen lehetne az eredmény egy összekuszált HTML fájl, hibás ZIP fájl, vagy valami más érvénytelen információ.

Definíció: a TCP (Transmission Controll Protocol) egy kapcsolat alapú protokoll, ami az adatok megbízható folyamát adja két számítógép között.

22.1.2 UDP

Az UDP nem ad megbízható kapcsolatot egy hálózaton levő két számítógép között, mivel ez nem kapcsolat alapú, mint a TCP, inkább az adatok független csomagjait küldi az alkalmazások között. Ezeket a csomagokat adatcsomagoknak is hívjuk. A adatcsomagok küldése leginkább a levelek postán át való küldéséhez hasonlít: a szállítás nem garantált, a sorrend nem fontos, és mindegyik üzenet különbözik a másiktól.

Definíció: az UDP (User Datagram Protocol) egy olyan protokoll, ami az adatok olyan független csomagjait továbbítja egyik számítógépről a másikra, amiket adatcsomagoknak hívunk, és nincs garancia a megérkezésükre. Az UDP nem kapcsolat alapú, mit a TCP.

Számos alkalmazásnál a megbízhatóság garantálása kritikus, hogy az információ eljusson a hálózat egyik végéről a másikra. Mindemellett a kommunikáció egyéb formái nem kívánnak meg olyan szigorú normákat.

Nézzünk például egy óraszervert, ami a pontos időt küldi el a klienseknek, ha azok igénylik. Ha a kliens hiányol egy csomagot, nem szükséges újraküldeni azt, mert az idő pontatlan lesz, ha második próbálkozásra kapja meg. Mikor a kliens két kérést irányít a szerver felé, és a csomagokat rossz sorrendben kapja, a kliens észreveszi ezt, és újabb kérést küld. A megbízható TCP protokoll ebben az esetben nem szükséges, mivel az a teljesítmény rovására mehet, és esetleg csak akadályozza a szolgáltatást.

A ping parancs egy másik kitűnő példa olyan szolgáltatásra, ami nem igényel megbízható csatornát. A parancs teszteli egy hálózaton levő két számítógép közötti kapcsolatot. A parancsnak tudnia kell, hogy a csomag megérkezett-e, hogy megállapítsa, működik-e a kapcsolat. Egy megbízható csatornán ez a szolgáltatás se működik megfelelően.

Megjegyzés: Sok tűzfal és router úgy van konfigurálva, hogy ne engedje át az UDP csomagokat. Ha problémánk van egy, a tűzfalon kívül levő szolgáltatáshoz való kapcsolódással, vagy a kliens nem tud hozzád csatlakozni, engedélyezzük az UDP kapcsolatokat.

22.1.3 A portokról általánosságban

Ha nagyvonalakban akarunk beszélni, azt mondjuk, a számítógép egy egyszerű fizikai kapcsolaton keresztül kapcsolódik a hálózatra. Minden adat ezen a kapcsolaton keresztül érkezik, bár az adatok a számítógép különböző programjait használják. Honnan tudja a számítógép, hogy melyik alkalmazásnak melyik adatot kell továbbítani? A portok használata által.

Az adat, amit az interneten keresztül küldenek, el van látva címzési információval, ami azonosítja a célszámítógépet és a portját. A számítógép a 32 bites IP címmel van azonosítva, melyet arra használunk, hogy az adat a megfelelő számítógépre érkezzen meg. A portot egy 16 bites számmal azonosítjuk, amit a TCP vagy UDP arra használ, hogy az adat a megfelelő programhoz jusson.

A kapcsolat alapú kommunikációnál, mint amilyen a TCP, a szerver program leköt egy foglalatot egy jellemző portnak. Ennek eredményeképpen a szerver megkap minden adatot, ami ezen a porton keresztül érkezik. A kliens ezután kommunikálhat a szerverrel a megadott porton keresztül, amit az alábbi ábra illusztrál:

Server-Client TCP

Definíció: a TCP és az UDP protokollok portokat használnak, hogy a bejövő adatokat a számítógép megfelelő programjai felé irányítsák.

Az adatcsomag alapú kommunikációnál, mint amilyen az UDP, az adatcsomag csomagok tartalmazzák a célállomás portszámát, és az UDP irányítja a megfelelő helyre a csomagot.

Csomagok portra irányítása

A portok a 0 - 65535 intervallumba kell, hogy essenek, mivel 16 bites számként vannak ábrázolva. A 0 és 1023 közötti portok fent vannak tartva olyan ismert szolgáltatásoknak, mit például a HTTP vagy az FTP vagy más rendszerszolgáltatás. Ezeket a portokat jól ismert portoknak hívjuk. A saját programjainknak nem szabad lekötni őket.

22.1.4 Hálózati osztályok a JDK-ban

A java programok használhatják a java.net osztályain keresztül a TCP vagy UDP protokollokat, hogy kommunikáljanak az Interneten. Az URL, URLConnection, Socket és ServerSocket osztályok mindegyike a TCP-n keresztül kommunikál, míg a DatagramPacket, DatagramSocket és MulticastSocket osztályok az UDP protokollt használják.