Az eddigiekben azt vettük sorra, hogy egy üzenet hogyan darabolódik szét, hogyan jut el egy géptől egy másikig, majd ott hogyan áll ismét össze. Mindez még kevés ahhoz, hogy hasznos dolgot lehessen végezni. Szükség van valamilyen módszerre, amelynek segítségével egy másik számítógéppel kapcsolatba lehet lépni, oda be lehet jelentkezni, közölni lehet vele, hogy milyen adatokra van szükségünk, illetve amellyel az adatok átvitelét szabályozni tudjuk. (Más alkalmazás, pl. elektronikus levelezés, esetén is ezzel analóg protokollra van szükség.) Ezt a feladatot az alkalmazási réteg protokolljai végzik el, amelyek a TCP/IP tetején találhatóak. Ez annyit jelent, hogy üzenet küldésekor azt a TCP-nek továbbítják, amely gondoskodik róla, hogy eljusson a célállomáshoz. Mivel a TCP és az IP kezelik a hálózati vonatkozásokat, ezért az alkalmazási protokollok a hálózatot egyszerű byte-folyamnak tekintik, mint például egy terminál- vagy telefonvonalat.
Mielőtt az alkalmazói programokkal kapcsolatban további részletekbe bocsátkoznánk, meg kell vizsgálnunk, hogy hogyan lehet egy alkalmazást megtalálni. Tegyük fel, hogy egy állományt szeretnénk küldeni a hálózaton keresztül a 124.6.4.7 IP című gépnek. A folyamat elindításához azonban az Internet címnél többre lesz szükség. A célállomás oldalán az FTP kiszolgálóval fel kell venni a kapcsolatot. A hálózati programokat általában külön feladatok elvégzésére programozzák. A különböző feladatokat (állományátvitel, bejelentkezés távoli terminálról, levelezés stb...) a legtöbb rendszerben más-más programok végzik. Amikor a fenti példában a 124.6.4.7 című géppel kapcsolatot építünk ki, akkor azt is meg kell mondanunk, hogy az ottani FTP kiszolgálóval szeretnénk kommunikálni. Ennek megvalósítására minden kiszolgáló jól ismert socket-ekkel ( foglalatok, szolgálatelérési pontok) rendelkezik. Ennek magyarázataképpen tekintsük a következőket. Emlékezzünk vissza, hogy a TCP a különböző kommunikációk kézben tartására különböző portokat használ. A felhasználói programok többé-kevésbé véletlenszerűen választanak portot, de egyes portok eleve olyan programoknak felelnek meg, amelyek valamilyen kérés kiszolgálására várnak (ezek lennének a kiszolgálók). Állományátvitel esetén például egy ,,ftp'' nevű programot indítunk el, amely a kapcsolat felépítéséhez a saját oldalán véletlenszerűen kijelöl egy portot, mondjuk az 1234-t. A céloldalon viszont a 21-es portot jelöli meg, amely az FTP kiszolgáló hivatalos portjának felel meg. Vegyük észre, hogy itt két különböző programról van szó. Az egyik az ,,ftp'', amelyet a küldő oldalon indítottunk el, és amely a terminálról kapott parancsokat továbbítja a másik oldalhoz; a célállomáson lévő gépen viszont az FTP kiszolgálóhoz beszélünk. Ezt arra találták ki, hogy a hálózatról parancsokat fogadjon, nem úgy mint egy interaktív terminál. Semmi szükség arra, hogy az ,,ftp'' program jól ismert socket-et használjon. A kiszolgálókkal teljesen más az eset, hiszen a kapcsolatokban parancsokat kell tudniuk fogadni. A hivatalos portok és a hozzájuk rendelt számok az RFC 997-től kezdve az ,,Internet Numbers'' (Internet Számok) RFC dokumentumban olvashatók (az írás pillanatában a legutóbbi az RFC 1162). Ez a dokumentum régebben az ,,Assigned Numbers'' (Kiosztott Számok) nevet viselte.
A fentiek után nyilvánvaló, hogy egy kapcsolatot négy szám jellemez: a két Internet cím, és a két TCP port száma. Ez a négy szám minden egyes datagrammban megtalálható. (Az Internet címek az IP fejlécben, a TCP portok száma pedig a TCP fejlécben van.) Az egyediség megkövetelése miatt semelyik két kapcsolat esetén sem lehet ugyanaz mind a négy szám. Ugyanakkor elég, ha csak egy szám tér el a másik négytől. Semmi nem tiltja például azt, hogy ugyanazon a gépen lévő két különböző felhasználó állományokat vigyen át ugyanarra a távoli gépre. Ennek a megvalósítása például az alábbi paraméterekkel lehetséges:
Internet cím | TCP port száma | |
1. kapcsolat | 128.6.4.194, 128.6.4.7 | 1234, 21 |
2. kapcsolat | 128.6.4.194, 128.6.4.7 | 1235, 21 |
Mivel ugyanazokról a gépekről van szó, az Internet címek ugyanazok. Továbbá, mivel mind a két kapcsolatban állományátvitelről van szó, ezért a kapcsolatok egyik végén az FTP port jól ismert száma (21) található. Az egyetlen dolog, ami különbözik: a felhasználók által futtatott programok portszáma. Ez tökéletesen elegendő. A kapcsolatok felépítésében az az általános gyakorlat, hogy legalább az egyik oldal utasítja a hálózati szoftvert arra, hogy számára egyedi port-ot allokáljon. A legtöbb esetben ezt a felhasználó felőli oldal teszi meg, mivel a kiszolgálónak egy mindenki által jól ismert számot kell használnia.
Most, hogy már tudjuk hogyan kell kapcsolatot felépíteni, menjünk vissza az alkalmazói programokhoz. Ahogy már fentebb említettük: miután a TCP megnyitott egy kapcsolatot, rendelkezésünkre áll egy vonal, ami akár egy egyszerű drót is lehetne. A feladat rázós részeit a TCP és az IP kezelik. Ez persze még nem elég, ugyanis tudnunk kell, hogy mit küldhetünk át a vonalon. Valójában ez nem más mint a küldhető parancsok és azok formátumának leírása. Az átküldött rész lényegében adatok és parancsok egyvelege, amiket a szövegkörnyezet különböztet meg egymástól. Például a levelezést megvalósító protokoll működése az alábbi: a felhasználói oldal levelező programja kapcsolatot épít fel a célállomás levelezést kiszolgáló programjával. A küldő program megadja a forrásgép nevét, a küldő címét és a címzetteket. Ezek után egy parancsot küld, amelyben arról tájékoztat, hogy az üzenet szövege következik. Ettől a ponttól a kiszolgáló az adatokat nem parancsokként, hanem üzenetként értelmezi mindaddig, amíg egy speciális, az üzenet végét jelentő jellel (egy egyedül álló pont a sor elején) nem találkozik. Ez után a két oldal ismét parancsokkal kommunikál. Ez a legegyszerűbb módja az üzenetek küldésének, és a legtöbb alkalmazás így is működik.
Az állományok átvitele ennél valamivel bonyolultabb. Átvitel esetén két különböző kapcsolat épül fel. Az elején minden úgy megy mint a levelezéskor. A felhasználó programja olyan parancsokat küld, mint ,,jelentkeztess be ilyen és ilyen felhasználóként'', ,,ez a jelszóm'', ,,küldd el ezt és ezt az állományt''. Miután az adatkérésre a parancs elment, a tényleges adatok átvitelére egy második kapcsolat épül fel. Persze ezt meg lehetne oldani ugyanazon az egy kapcsolaton keresztül is, ahogy a levelezés teszi. Az ok, amiért ez mégsem így történik, abban rejlik, hogy az állományátvitel általában hosszú ideig tarthat. A tervezéskor úgy érezték, hogy jobb a felhasználónak meghagyni a menet közbeni parancskiadás lehetőségét (például megszakításhoz stb...Lehetséges az is, hogy két különböző géphez nyissunk meg kapcsolatot, és egy állományt az egyiktől a másikhoz küldjünk. Ebben az esetben az adatok nem keveredhetnek a parancsokkal.)
A távoli terminálhívások egy harmadik módszert használnak. A távoli bejelentkezéskor csupán egy kapcsolat épül fel. Normális esetben ezen csak adatok mennek keresztül. Amennyiben parancsot akarunk kiadni (pl. a terminál típusának a beállítására, vagy valamilyen üzemmód átállítására), akkor egy speciális karaktert kell küldeni, amely jelzi, hogy a következő karakter parancs. Ha ezt a speciális karaktert adatként akarjuk küldeni, akkor kettőt kell egymás után kiadni.
Ebben az ismertetőben az alkalmazási protokollokról részletesen nem szólunk. Ehelyett javasolható a megfelelő RFC dokumentumok tanulmányozása. Az alkalmazások viszont egy sor olyan konvención alapulnak, amelyeket érdemes részletesen érinteni. Az első ilyen a közös hálózati reprezentáció: a TCP/IP-t úgy tervezték, hogy minden számítógépen alkalmazható legyen. Sajnos nem minden számítógép tárolja ugyanúgy az adatokat. A karakterek (ASCII vs. EBCDIC), a sorvég-jelek kódolásában (kocsi-vissza, soremelés), és abban, hogy a terminálok a karaktereket egyenként vagy soronként küldjék, mind különbségek mutatkoznak. A különbözőképpen működő számítógépek kommunikációjának elősegítése miatt minden egyes alkalmazói protokoll szabványos reprezentációkat definiál. A TCP és az IP azonban nem törődik a reprezentációval: a TCP egyszerűen csak okteteket küld. Az oktetek értelmezését persze mind a két oldalnak ugyanúgy kell végeznie. Az alkalmazásokat leíró RFC dokumentumok minden egyes esetben az adott alkalmazás szabványos reprezentációját definiálják. Ez a legtöbbször ,,tiszta ASCII'' formátumnak felel meg: ASCII karakterek használata, sorvég-jelként kocsi-vissza utáni soremeléssel. A távoli bejelentkezés definiál egy ,,szabványos terminált'' is, amely egy visszhangos, félduplex működésű terminál. A legtöbb alkalmazásban azonban arra is lehetőség van, hogy két számítógép számukra megfelelőbb reprezentációban állapodjon meg. Például a PDP-10 számítógépekben egy szó 36 bites. Két ilyen gép között lehetséges 36 bites bináris állományok átvitele. Hasonlóan, ha két rendszer inkább teljes duplex kommunikációt preferál, akkor megegyezhetnek annak használatában. Azonban mindezektől függetlenül minden egyes alkalmazásnak van egy szabványos reprezentációja, amelyet minden gépnek támogatnia kell.