Hálózatos alapok - port, socket, connection különbség

Eddig nem nagyon néztem utána ezeknek a hálózatos alap dolgoknak, de most, hogy fejlesztem az üzenet küldős alkalmazásomat aszinkron javascript-hez kénytelen vagyok utánajárni a szakszavaknak és a meglévő üzenetküldős technológiáknak, hogy ne legyen teljesen légbőlkapott a dolog. Ami számomra meglepetés volt, hogy mennyi embernek okoz gondot különbséget tenni eközött a 3 fogalom között: port, socket, connection. (Nincs értelme lefordítani a szavakat magyarra, mert az csak még nagyobb zavart okozna a fejekben.)


Stackoverflow-on találtam egy kérdést egy rakás hibás válasszal. Nekem is át kellett rágnom magam az összes válaszon meg utána beleolvasni egy-két manual-ba a témában, hogy nagyjából lejöjjön mit is takarnak ezek a fogalmak. Az angol nyelvű válaszom itt található, de természetesen leírom ide magyarul is.

Találtam egy fantasztikus analógiát az egyik válaszban, sajnos a gondolatmenet hibás volt, de maga a telefon analógia, mint ötlet szerintem nagyon jó. Gondoltam felturbúzom kicsit, és megosztom az én verziómat, hátha valakinek segítek vele. Ezeket a fogalmakat párosítottam össze egymással:
  • IP cím, port ~ telefonszám
  • socket ~ telefon készülék
  • connection (kapcsolat) ~ telefon hívás
  • establishing connection (kapcsolat létrehozása) ~ telefonhívás indítása
  • process-ek, távoli alkalmazások, amik kommunikálnak ~ emberek, hívó felek
  • messages (üzenetek) ~ beszélgetés a hívó felek között
  • network ~ telefon hálózat
  • protocol ~ telefon, mint szabvány technológia
Nagyjából arról van szó, hogy amikor hálózatos programokat írunk, akkor több eltérő process-ben, esetleg eltérő gépen futó alkalmazás próbál meg kommunikálni egymással. Olyan ez, mint amikor emberek megpróbálják elérni egymást telefonon. Az embereknek ebben a kontextusban a process-ek vagy az egymással kommunikálni kívánó alkalmazások felelnek meg. A telefon készüléknek a socket-ek felelnek meg, amiken keresztül az alkalmazások kapcsolódnak egymáshoz. A telefonszámnak a network address felel meg, amit nagyjából az IP cím és port kombinációjával lehet leírni, de akár beszélhetnénk domain névről (amit a DNS szerver IP címre fordít) és port-ról is. Amikor tehát felhívunk valakit, akkor ebben a kontextusban két process egy-egy socket-jükön keresztül kapcsolatot épít fel egymás között. Ezután ha felvette a hívott fél: felépült a kapcsolat, akkor lehet beszélgetni: üzeneteket küldeni. Ennyire egyszerű az egész.

Nincsenek megjegyzések:

Megjegyzés küldése