Webfejlesztő és Junior Frontend
Hálózatok A hálózatok jellemzői, működésük Hálózatok
• Az infokommunikációs hálózatok már nagyon régóta dinamikusan fejlődő ágazatot jelentenek az elektronika és informatika terén. • Kezdetben a hálózatok elsődleges célja az emberi kapcsolattartás (távíró, telefon) gyorsítása, könnyítése volt, ami manapság is igaz, azonban ez kiegészült a különböző rendszerek összekapcsolásával kiaknázható lehetőségekkel. • A következőekben az informatikában is felhasznált hálózatok tulajdonságaival fogunk megismerkedni. 3
Hálózatok
• Az informatikában hálózatnak nevezzük eszközök azon csoportját, melyek egy megadott, előre definiált (tehát minden eszköz által ismert) kommunikációs szabvány alapján, információk megosztására képesek egymással. • A hálózatba kapcsolt eszközök természetesen továbbra is önálló feldolgozással rendelkez(het)nek. 4
Hálózatok III
• A mai informatikában használt hálózatok alapvető céljai: • Kommunikáció • Mind a mai napig elmondható, hogy a hálózatok globális kiépítése az emberi kommunikáció és információszolgáltatás alappillére. • Erőforrás-megosztás • A hálózatba kapcsolt eszközök használhatják más, ugyancsak a hálózatra kapcsolt gépek számítókapacitását, vagy adatállományát. • Teljesítmény-elosztás • A hálózatba kapcsolt eszközök egy-egy feladatot feloszthatnak egymás között, így idő spórolható meg. • Megbízhatóság • Minél több eszköz dolgozik egy-egy problémán, annál kisebb gondot okoz egy-egy eszköz kiesése. 5
Hálózatok IV
• A hálózatok természetesen nagyon sokrétűek lehetnek mind kialakítás, mind kommunikáció alapján. • A hálózatokat pontosan emiatt különböző szempontok szerint lehet csoportosítani: • Kiterjedés alapján • A hálózatban résztvevő eszközök milyen távolságra vannak egymástól. • Hálózati architektúra alapján • Az adatok milyen formában közlekednek a csatornán. • Topológia alapján • Az egyes eszközök milyen módon vannak egymáshoz csatlakoztatva. 6
Hálózatok kiterjedése I
b • A hálózatok legelterjedtebb csoportosítási lehetősége a kiterjedés alapján való csoportosítás. • Ez alapján négy kategóriába sorolhatjuk a hálózatokat: • PAN (Personal Area Network) • Ide tartozik minden olyan hálózat, ami maximum 10 méteren belüli, 1-2 eszköz közti kommunikációt tesz lehetővé. • LAN (Local Area Network) • Ide tartozik minden olyan hálózat, ami egy épületben, vagy pár kilométeren belüli eszközök közti kommunikációt tesz lehetővé. • MAN (Metropolitan Area Network) • Ide tartozik minden olyan hálózat, ami egy városban, vagy pár száz kilométeren belüli eszközök közti kommunikációt tesz lehetővé. 7
Hálózatok kiterjedése II
• WAN (Wide Area Network) • Ide tartozik minden olyan hálózat, ami az előzőeknél nagyobb területen lévő eszközök közti kommunikációt tesz lehetővé. • Természetesen a legismertebb ilyen hálózat az internet, de nem egyenlő a két fogalom. • Pl.: Az Észak-Koreában használt belső hálózat is WAN-nak minősül, mivel lényegesen nagyobb a kiterjedése, mint a MAN által definiált méret. 8
Hálózati architektúra
• Ez a csoportosítási lehetőség alapvetően az alapján csoportosítja a hálózatokat, hogy az adatok milyen módon közlekednek a csatornákon. • Alapvetően kétféle architektúrát használunk: • Vonalkapcsolt architektúra • Dedikált csatornán való küldés esetén. • Csomagkapcsolt architektúra • Közös csatornán való küldés esetén. 9
Vonalkapcsolt architektúra
• A vonalkapcsolt hálózatok működési elve, hogy az adó és a vevő közti csatorna dedikáltan csak az adott kapcsolat számára van fenntartva. • A technika előnye, hogy nem lehetséges ütközés több adó esetén, hiszen egyszerre csak két eszköz kommunikál egymással, amikor az egyik ad, a másik vesz és fordítva. • Hátránya, hogy a hálózat kiépítése nagyon bonyolult lehet, főleg nagy kiterjedés és sok eszköz esetén. 10
Csomagkapcsolt architektúra
• A csomagkapcsolt hálózatok működési elve, hogy nincs minden egyes, a hálózatban résztvevő eszköznek dedikált csatornája a másik eszközhöz, azonban az adatokat csomagokba szervezzük és ezeket küldjük a hálózaton. • A csomagok mérete relatíve kicsi és minden csomagban benne van, hogy kinek szól, adott esetben az is, hogy a teljes adatból ez hányadik egység, stb. • Így a csatornán egyszerre több adó is megjelenhet, hiszen a csomagokban egyértelműen ki van töltve, hogy kinek szólnak. 11
Topológiák I.
• Egy hálózat topológiája megadja, hogy az adott hálózat egyes eszközei milyen fizikai kialakítású rendszer segítségével csatlakoznak egymáshoz. • A topológia természetesen nem pontos térképet vázol fel, csak egy elvi felépítést ábrázol. • Az egyes topológiákat két külön csoportra bonthatjuk kiépítésük, illetve az üzenetek továbbításának szempontja szerint: • Üzenetszórásos topológiák • Pont-pont (PP) kapcsolatú topológiák 12
Topológiák II.
• Az üzenetszórásos topológiák alapelve, hogy az információkat alapvetően mindenki megkapja, láthatja, mivel csak egy központi kommunikációs csatorna van kiépítve, amit mindenki használ. • Ide tartozó topológiák: • Sín / busz topológia • Minden eszköz egy központi csatornára csatlakozik. • Központi gyűrű • Az egyes eszközök egymáshoz csatlakozva gyűrűben működnek. 13
Sín topológia
• A sín topológia régebben igen elterjedt hálózati topológiának számított, mert működése biztosított volt akkor is, ha egy-egy eszköz kiesett a hálózatból. • Előnye, hogy olcsó. • Hátránya, hogy a gerincvezeték kialakítása nem egyszerű minden esetben. 14
Központi gyűrű topológia
• Ugyancsak régebben aktívan használt, manapság már kevésbé felhasznált topológia. • Működési elvének alapja az, hogy a két végén összekapcsolt sín topológiát hozunk létre. • Ugyanazok az előnyei és hátrányai, mint a sín topológiának. • Megvalósítása: 15
Topológiák III.
• Az üzenetszórásos topológiák mellett a pont-pont topológiák, mint a manapság legelterjedtebb topológiák szerepelnek még. • A pont-pont topológiák arra törekednek, hogy a hálózati eszközök között direkt kapcsolat kiépítésével jöjjön létre a hálózat. • Ide tartozó topológiák: • Csillag topológia • Az eszközök egy központi eszközhöz csatlakoznak. • Gyűrű topológia • Az eszközök egymáshoz csatlakozva gyűrűt alkotnak. • Teljes topológia • Minden eszközhöz minden eszköz csatlakozik. 16
Csillag topológia
• A csillag topológia alapja, hogy az eszközök pont-pont kapcsolatban állnak egy központi eszközzel, ami továbbítja az üzeneteket a megadott céleszköz felé. • Előnye, hogy a rendszer könnyen kialakítható, bővíthető és biztonságos. • Hátránya, hogy drága, illetve a központi eszköz meghibásodása a teljes hálózat leállásához vezet. 17
Gyűrű topológia
• A központi gyűrűvel szemben, a gyűrű topológiában habár gyűrűt alkotnak a gépek, mégsem egy gerincvezetékre csatlakoznak, hanem egymáshoz. • Előnye, hogy könnyen kialakítható, bővíthető • Hátránya, hogy csak egy eszköz kiesését tűri el, több eszköz kiesése esetén egy egész szegmens elérése is megszűnhet. 18
Teljes topológia
• A teljes topológia a lehető legbiztonságosabb topológia, amelyben minden eszköz minden, a hálózatban található többi eszközzel pont-pont kapcsolatban van. • Előnye, hogy ez a hálózat akárhány eszköz kiesését kibírja. • Hátránya, hogy nagyon drága, és a kialakítása is bonyolult. 19
Topológiák IV.
• Az üzenetszórásos és a pont-pont topológiák esetén nagyon fontos az üzenetek küldésének logikája, mivel az üzenetek nem csúszhatnak egymásra. • Az üzenetszórásos megoldásnál a központi gerincvezeték a kritikus pont. • A pont-pont kapcsolat esetén a két vevő közti csatorna telítése lehet a probléma. • A sín és központi gyűrű topológiákon alkalmazott közeg- hozzáférési módszerekkel azonban ez kiküszöbölhető. 20
Közeg-hozzáférési módszerek I.
• A közeg-hozzáférési módszerek azt szabályozzák, hogy egy központi gerincvezetéken kommunikáló eszközök milyen módon, elosztásban küldjék az üzeneteket, elkerülve a káoszt. • A közeg-hozzáférési módszerek csoportjai: • Véletlen • Az eszközök üzenetküldése nincs szabályozva, tehát bárki bármikor küldhet üzenetet. • Osztott • Az eszközök csak egy bizonyos feltétel teljesülése esetén küldhetnek (és fogadhatnak) üzeneteket. • Központosított • Az eszközök egy „felügyelő” eszköz döntése alapján küldhetnek (és fogadhatnak) üzeneteket. 21
Közeg-hozzáférési módszerek II.
• A véletlen közeg-hozzáférési módszerek: • ALOHA • Valójában azt írja le, hogy nincs szabály, bárki bármikor küldhet és fogadhat üzeneteket, azonban a sikertelenség észlelhető. • Réselt ALOHA • Egy szinkronizált ALOHA, melynek lényege, hogy minden adó egy bizonyos ütemezést követ (réselés), és csak akkor kezdenek el adni, amikor egy időszeleten belül vagyunk véletlenszerűen. • CSMA/CD (Carrier Sense Multiple Access with Collision Detection) • Többszörös hozzáférés-érzékelő és ütközésdetektáló rendszer. • Az adó az adás megkezdése előtt kihallgat a hálózatra, hogy ott éppen valaki ad-e, ha igen, akkor vár egy kis időt, majd újra próbálkozik. • Az Ethernet specifikáció ezt használja. 22
Közeg-hozzáférési módszerek III.
• Réselt gyűrű • A technika a gyűrű topológiára lett kidolgozva, lényege, hogy a réselt ALOHA-hoz hasonlóan réseket hozunk létre, melyek valójában időkeretek, és ezekben a keretekben megadott hosszúságú üzenet küldhető át. • A rés maga tartalmaz egy foglaltságjelző bitet, melyből a többi adó tudja, hogy már nem kezdhet ebben a résben adásba. • Regiszter beszúrásos gyűrű • Ez a technika is a gyűrű topológiára lett kidolgozva, lényege, hogy egy host, amikor adatot kap a hálózaton, először egy tárolóban (regiszterben) eltároljuk azt, majd az általa küldeni kívánt adatokat továbbítjuk. • Ha éppen senki nem ad, bárki nekikezdhet az adásnak. 23
Közeg-hozzáférési módszerek IV.
• Osztott vezérlésű közeg-hozzáférési módszerek: • Vezérjeles gyűrű (Token ring) • A gyűrű topológiában adott egy speciális host, aki generál egy ún. tokent. Ez a token elindul körben a hálózatban, és aki éppen megkapja, azt arra hatalmazza fel, hogy küldjön a hálózaton. • A token mögött található az adat, illetve oda helyezheti el a host, amennyiben a token üres. • Amennyiben a token elvész, a speciális host újragenerálja azt. • Vezérjeles sín (Token bus) • A vezérjeles gyűrű sín topológiára kialakítva. 24
Közeg-hozzáférési módszerek V.
• CSMA/CA (Carrier Sense Multiple Access with Collision Avoidance) • A CSMA/CD-vel szemben amennyiben az adó nem talál adást a csatornába a kezdeti belehallgatás során, akkor is vár egy kicsit, majd újra belehallgat, és ha még mindig nem ad senki, csak akkor kezd neki az adásnak. • A központosított közeg-hozzáférési módszerek (PP): • Lekérdezéses elvű • Alapvetően csillag topológiás hálózatoknál használatos. • Működési elve, hogy a központban található eszköz (mester) lekérdezi az egyes másodlagos host-okat (szolga), hogy szeretnének-e küldeni, amennyiben igen, az adatot átadják a mesternek, aki továbbadja a cél szolgának. 25
Közeg-hozzáférési módszerek VI.
• TDMA (Time Division Multiple Access) • Egy időosztásos rendszer, a lényege, hogy központi időosztáshoz igazodva minden host kap egy időszeletet, amikor adhat, amennyiben ekkor éppen nincs küldenivalója, az adott időszelet kihasználatlan marad.
26
Az OSI és TCP/IP modell A kommunikációs eszközök működése Kis Balázs 27 Az OSI- és TCP/IP-modell • Az előzőekben átnéztük a hálózatok csoportosítását és felépítését. • A következőekben azonban közelebbről fogjuk tanulmányozni, hogy az egyes hálózati eszközök működése hogyan néz ki. • A hálózati eszközöknek szabványos módon kell működniük ahhoz, hogy a kommunikáció során a két vagy több kommunikáló fél megértse egymást. • Ez régebben gyártóspecifikus volt, mára azonban szabványosították főként az internet hatására. 28
OSI-modell I.
• Az első szabványosítási kísérlet a hálózati kommunikációra az OSI (Open System Interconnection) modell volt. • A modell végül sosem lett szabványosítva, de mivel a ma használt csomagalapú, hálózati és átviteli architektúrák mindegyike erre épül, így ismerete elengedhetetlen. • Az OSI-modell értelmében egy hálózati eszköznek hét, egymásra épülő, de elkülönített réteg összehangolt felhasználásával kell tudni használnia a hálózatot. 29
OSI-modell II.
• Az OSI-modell 7 rétege: • Alkalmazási réteg (Application Layer) • Prezentációs / megjelenítési réteg (Presentation Layer) • Viszony réteg (Session Layer) • Átviteli réteg (Transport Layer) • Hálózati réteg (Network Layer) • Adatkapcsolati réteg (Data Link Layer) • Fizikai réteg (Physical Layer) • Egy érkező adat esetén alulról felfele kell haladni, egy küldendő adat esetén fentről lefele. 30
Fizikai réteg
• A fizikai réteg feladata, hogy érkező adatok esetén azt dekódolni tudja, küldendő adatok esetén pedig az adatot az adott hálózati környezetnek megfelelően tudja kiküldeni, átkonvertálni. • Tehát összességében a feladata, hogy biztosítsa a fizikai kapcsolódást a hálózathoz. • A fizikai réteg tehát a hálózaton kapott binárisan feldolgozható adatokkal dolgozik. • A fizikai közeg lehet optikai megoldás, réz- vagy fémkábeles megoldás, de akár vezeték nélküli is. 31
Adatkapcsolati réteg I.
• Feladata, hogy az adatokat keretekre (frame) bontsa olyan módon, hogy az adott hálózati környezetben azok átküldhetők, továbbíthatók legyenek, illetve érkező adat esetén ezeket a kereteket rakja össze. • A keretek mérete hálózatonként eltérő lehet, de egy adott csomagkapcsolt hálózati architektúrában minden esetben korlátozott. • További nagyon fontos tényező, hogy az adatkapcsolati réteg feladata, hogy a fizikai címzést megvalósítsa, azaz hogy egy eszköz egyedi azonosítását a hálózaton megoldja. 32
Adatkapcsolati réteg II.
• A csomagkapcsolt hálózatok esetén nagyon fontos tényező az MTU (Maximum Transmission Unit), ami megadja, hogy az adott hálózaton egy csomagnak mekkora lehet a maximális mérete. • A küldendő adatot tehát az MTU-nak megfelelő méretben lehet elküldeni. • Tipikus MTU méretek: • Ethernet hálózatok: 1492 byte • Token ring: 17800 byte 33
Adatkapcsolati réteg III.
• A MAC (Media Access Control) cím, egy fizikai cím, melynek feladata, hogy az adott hálózati eszközt egyedileg lehessen azonosítani a hálózaton. • A MAC-cím formája minden esetben azonos (12 db hexadecimális számból áll), azonban két egyforma MAC- cím elvileg „nem létezhet” a világon. • A MAC-cím első része a gyártó azonosítója, amelyből így meghatározható, hogy egy adott eszközt ki gyártott. 34
Hálózati réteg I.
• Feladata, hogy az adatokat csomagokra (packet) bontsa, vagy az érkező kereteket (az adatkapcsolati réteg felől) csomaggá alakítsa. • A hálózati réteg valósítja meg a logikai címzést, ami azt jelenti, hogy a hálózaton mindenkinek lehet egy logikai, egyedi azonosítója amin keresztül elérhető a hálózaton. • Ezt manapság az IP-cím teszi lehetővé. • A hálózati réteg ezzel együtt tudja biztosítani a csomag továbbítását a következő hálózati eszközig. • Az első olyan réteg, aminek működését nem befolyásolja a hálózati architektúra. 35
Hálózati réteg II.
• Az adatok továbbküldésének biztosítása nagyon fontos része a hálózati eszközöknek, mivel így érhető el a csomagkapcsolt hálózati architektúra. • Mivel a hálózati réteg az első, ami a logikai címzést fel tudja dolgozni, így amikor egy eszköz információt küld egy másik eszköznek egy harmadikon keresztül, eddig a rétegig kell eljusson a továbbítandó információ. • Amikor egy eszköz a kommunikációban csak azért szerepel, hogy átfussanak rajta a csomagok, azt az eszközt hopnak hívjuk. 36
Hálózati réteg III.
• A hopok megjelenése a hálózatban: 37 Feladat V. • Nézzük meg, hogy a gépünk jelenleg milyen fizikai és logikai hálózati azonosítóval bír. • Derítsük ki az alábbi oldal alapján, hogy milyen hálózati eszköz van a gépünkben. • https://macvendors.com • Telepítsük a WireShark programot, és nézzük meg, milyen hálózati kommunikációt folytat a gépünk. 38
Átviteli réteg I.
• Feladata, hogy biztosítsa az átvitelt a két kommunikáló fél között a teljes útvonalon, függetlenül minden alatta elhelyezkedő réteg munkájától. • Ez több dolgot is jelent: • az egyes kommunikáló alkalmazások elől el kell rejtse az alatta található rétegeket, • mivel a hálózaton nem biztos, hogy a csomagok sorban érkeznek meg, így ezeket is sorba kell rendeznie, • kiegyenlíti a kommunikáló felek közti hálózati sávszélességből adódó különbségeket, • a megbízhatóságot növeli a folyamatosan alkalmazott ellenőrzőösszegekkel. 39
Átviteli réteg II.
• Az átviteli réteg további fontos feladata, hogy az adatokat szegmensekre bontsa, vagy szegmensekbe konvertálja. • Az egyes szegmensek egy-egy alkalmazásnak szánt adatok lesznek. 40
Viszony réteg
• Feladata, hogy egyfajta munkameneti azonosítást tegyen lehetővé a kommunikáló eszközök között. • Magyar nevét is a „valamihez fűződő viszony” alapján kapta. • A munkameneti azonosítás fontos tényező hálózaton, mert segítségével lehet beazonosítani egy-egy kommunikáló eszközt a hálózaton anélkül, hogy az minden egyes alkalommal azonosítaná magát. 41
Megjelenítési réteg
• Feladatát tekintve egy konverziós réteg, mely arról gondoskodik, hogy egy érkező adatot az adatnak megfelelően tudjuk megjeleníteni, illetve arról is, hogy a küldendő adatot átkonvertálja bináris formára. • Továbbá fontos feladata, hogy ha lehetőség van az adatok tömörítésére, azt is végezze el. • Természetesen minden adatnak különböző lehet a megjelenése: • szöveges adatok – karakterkódolás, • bináris adatok – az adatnak megfelelő feldolgozás (kép, hang, fájl, stb.) 42
Alkalmazási réteg
• Ezen a rétegen futnak az alkalmazások, amelyek kihasználják más eszközök szolgáltatásait, vagy szolgáltatást nyújtanak más eszközöknek a hálózaton keresztül. • Példák alkalmazás rétegbeli protokollokra: • HTTP • FTP • POP • IMAP 43
OSI-modell III.
• Mivel az OSI-modell sosem szabványosodott, így természetesen jelenleg nem ezt használjuk a különböző hálózati eszközökben. • Az OSI-modell egy egyszerűsített, és ily módon a gyártóknak lényegesen nagyobb szabadságot nyújtó változatát alkalmazzuk jelenleg, a TCP/IP (Transmission Control Protocol / Internet Protocol) protokollt. • A következőekben ennek a működését fogjuk átnézni. 44
TCP/IP
• A TCP/IP-protokoll 4 rétegből áll: • Alkalmazás réteg (Application Layer) • Átviteli / TCP réteg (Transport Layer) • Hálózati / IP réteg (Network Layer) • Interfész réteg (Network Interface Layer) • A rétegek működése hasonlóképpen működik, mint az OSI- modell esetén, tehát minden réteg a felette álló réteget szolgálja ki, vagy az attól érkező információt konvertálva adja tovább az alatta lévő rétegnek. 45
Interfész réteg
• Az interfész réteg az OSI-modell fizikai és adatkapcsolati rétegét olvasztja össze. • Feladata, hogy biztosítsa a hálózati kapcsolódást, a hálózati kompatibilitást és azonosíthatóságot. • Néhány, a TCP/IP-szabvánnyal kompatibilis átviteli szabvány: • Ethernet (IEEE 802.3 u, z) • Token Ring (IEEE 802.5) • Modem • ISDN • ADSL • WiFi / WLAN (IEEE 802.11 a, b, g, n, ac) 46
Ethernet I.
• Az Ethernet átviteli szabvány a manapság LAN-kiterjedésű kábeles hálózatokban a legelterjedtebb. • Az Ethernet a CSMA/CD közeg-hozzáférési technikát használja. • Az 1970-es években dolgozták ki, de csak az 1980-as években szabványosították. • Nevét az éter-ről (ether) kapta, az 1900-as években azt hitték, hogy ez az anyag tölti ki a világűrt. • Az Ethernet esetén a kábel, amely összeköti a gépeket, jelképezi az étert. 47
Ethernet II.
• Az Ethernet fejlődése során igen sok kábel- és sebességszabványt támogatott: • 10Base… • 5 – vastag koaxiális kábelek • 2 – vékony koaxiális kábelek • T – csavart érpárú kábelek • F – optikai kábel • 100Base… (802.3u) • T4 / TX – csavart érpárú kábel • FX – optikai kábel • 1000Base… (802.3z) • T / CX – csavart érpárú kábel • SX / LX – optikai kábel 48
Modem
• A modem átviteli technika egy rövidítésből kapta a nevét: • MOdulátor – DEModulátor • Ez le is írja a működését, hiszen a technika lényege, hogy a telefonhálózaton alapvetően analóg jelátvitelre van lehetőség, így a digitális hálózati jelátvitelre a kliens oldalon digitális → analóg átalakítással moduláljuk a jelet, majd a telefonközpontban egy analóg → digitális átalakítással demodulálják azt. • Maximum 56 Kbit/s-os átviteli sebesség érhető el vele. • További fontos jellemzője, hogy egyszerre nem lehet a telefonvonalat is és a hálózatot is elérni. 49
ISDN
• Az ISDN (Integrated Services Digital Network) az első olyan megoldás volt a hálózat kiépítésére, melyen keresztül digitális jelátvitel lehetséges. • Az ISDN megjelenésével lehetőség nyílt a telefon és a hálózati elérés egyidejű kihasználására. • Mára szinte teljesen kihalt technika, mivel 64 kbit/s-os, illetve két vonalon 128 kbit/s-os átviteli sebessége nem mondható elegendőnek. 50
ADSL
• Az ADSL (Asymmetric Digital Subscriber Line) a manapság legelterjedtebb hálózatterjesztési technika telefonvonalon keresztül. • Az ADSL működési elve, hogy a telefonkábelen nem csak 8000 Hz-ig lehet jelet átvinni, így ha elég magas átviteli frekvencián küldjük az információt, akkor az ember számára az érzékelhetetlen lesz telefonálás közben, ráadásul igen nagy sávszélesség érhető el a magasabb frekvenciatartományokban. • Az ADSL-nek több szabványa is létezik: • ADSL maximum 8 Mbit/s letöltés • ADSL2 maximum 12 Mbit/s letöltés • ADSL2+ maximum 24 Mbit/s letöltés 51
Wi-Fi / WLAN
• A Wi-Fi / WLAN átviteli technika a legelterjedtebb a LAN kiterjedésű hálózatokban. • A Wi-Fi egy frekvenciaszórásos hálózat, melyben az egyes hostok a szóró egység (router, AP) jelzésére ugrálnak a frekvenciákon a megadott logika szerint. • Okai: • biztonság, • Zavarmentesség. • A Wi-Fi elterjedtebb szabványai: • 802.11 a – 5 GHz-es katonai hálózat (54 Mbit/s) • 802.11 b – 2.4 GHz-es hálózat (11 Mbit/s) • 802.11 g – 2.4 GHz-es hálózat (54 Mbit/s) • 802.11 n – 2.4 / 5 GHz-es hálózat (600 Mbit/s) • 802.11 ac – 5 GHz-es hálózat (1300 Mbit/s) 52
Hálózati réteg
• A hálózati, vagy IP réteg a TCP/IP szabványban a logikai címzést lehetővé tévő réteg. • Egy az egyben megfeleltethető az OSI-modell hálózati rétegével. • A TCP/IP szabványban a hálózati réteget azért is nevezzük IP rétegnek, mert az Internet Protocol által leírt logikai címzési szabványt használja. • IPv4 • IPv6 53 IPv4 I. • Az IPv4 az Internet Protocol 4. verziójú, egyben legelterjedtebb címzési technikája. • Felépítését tekintve egy cím 32 biten, 4 bájton ábrázolható, az egyes bájtokat decimális felírásban ponttal választjuk el benne. • 0.0.0.0 – 255.255.255.255 • Az IPv4 manapság még elterjedt logikai címzési lehetőség, azonban technikai korlátai miatt, mára lecserélés alatt van. 54
IPv4 II.
• Az IPv4 címek minden esetben 2 részre bonthatók: • NetID • HostID • A NetID az alhálózat azonosítója, ami megadja, hogy az adott gép melyik alhálózatba tartozik. • A HostID az eszköz azonosítója, ami megadja, hogy az adott alhálózatban az adott gépnek mi az egyedi azonosítója. • Régebben az egyes IP címeket osztályokba is sorolták. 55
IPv4 III.
• Annak megadására, hogy az adott IP címben melyik bitek jelzik az alhálózatot és melyik bitek jelzik az eszköz azonosítóját egy speciális felírású, ugyancsak 32 bites maszkot alkalmazunk. • Ez az alhálózati maszk. • Az alhálózati maszk amennyiben egy adott biten 1-est vesz fel, az azt jelenti, hogy a hozzá tartozó IP címben az adott bit alhálózatot jelöl, míg ha 0-t akkor az eszköz azonosítót jelöl. • Pl.: 255.255.255.0 – 11111111.11111111.11111111.00000000 azt jelenti, hogy az első 24 bit az alhálózatot jelöli, míg az utolsó 8 bit az eszközt az adott alhálózaton belül. 56
IPv4 IV.
• További nagyon fontos jellemzője az egyes alhálózatoknak, hogy minden alhálózat 2 speciális címmel rendelkezik. • Minden alhálózat első címe az alhálózati azonosító, mely az alhálózatot azonosítja. • Minden alhálózat utolsó címe a broadcast cím, melyet megcímezve az alhálózat összes gépe megkapja az üzenetet. • Tehát ha adott egy IP cím pl.: 10.0.0.50, aminek az alhálózati maszkja 255.0.0.0, akkor a 10.0.0.0 lesz az alhálózati azonosító, és 10.255.255.255 lesz a broadcast cím. • Ez a két speciális cím nem osztható ki. 57
IPv4 V.
• Az IP cím osztályok: • A osztály • 1.0.0.0 – 127.255.255.255-ig • Alhálózati maszkja: 255.0.0.0 • Speciális címtartományok: • 10.0.0.0 – 10.255.255.255 – A osztályú lokális hálózat címzésére • 127.0.0.1 – Egy számítógép önmagának visszacímzésére használt cím (loopback) • B osztály • 128.0.0.0 – 191.255.255.255-ig • Alhálózati maszkja: 255.255.0.0 • Speciális címtartományok: • 172.16.0.0 – 172.31.255.255 – B osztályú lokális hálózat címzésére 58
IPv4 VI.
• C osztály • 192.0.0.0 – 223.255.255.255 • Alhálózati maszk: 255.255.255.0 • Speciális címtartományok: • 192.168.0.0 – 192.168.255.255 – C osztály lokális hálózat címzésére • D osztály (speciális) • 224.0.0.0 - 239.255.255.255 • Multicasting-ra fenntartva • E osztály (speciális) • 240.0.0.0 - 255.255.255.255 • Speciális címek az internet és speciális épületek címzésére (pl. atomerőművek) 59
IPv4 VII.
• Manapság már nem jellemző az IP címek osztályokba sorolása, habár elég sok helyen érzékelhető mind a mai napig ennek a besorolásnak a hatása. • Mivel így az alhálózati maszkok megadása is szükséges, hiszen előfordulhat, hogy a 40.234.21.123-as címnek az alhálózati maszkja 255.255.0.0, így megjelenik a CIDR. • A CIDR (Classless Inter-Domain Routing) segítségével nem kell osztályokba sorolni a címeket, mely egyszerűsíti a címfelhasználást. • Notációja az IP cím után egy per jellel megadható, hogy az adott IP címben hány biten szerepel a netID. • Az előző esetben: 40.234.21.123/16 60
Feladat VI.
• Határozzuk meg az alábbi IP címekhez tartozó alhálózati azonosítót, a broadcast címet és a kiosztható címek tartományát az adott hálózatban: • 50.0.0.70 • A osztályú cím • 192.168.20.150 • C osztályú cím • 60.32.0.52/16 • 200.91.68.42/7 61
Hálózati réteg és IPv4
• További nagyon fontos része a TCP/IP szabványnak, hogy a hálózati réteg milyen protokollokat támogat IPv4-et alkalmazva: • ARP / RARP • ICMP • IGMP • Ezek a protokollok különböző célokból a TCP/IP hálózati rétegében elérhetőek IPv4 esetén. 62
ARP / RARP
• Az ARP (Address Resolution Protocol) és a RARP (Reverse Address Resolution Protocol) protokollok címforgatás céljából szükségesek. • Az ARP protokoll segítségével egy meglévő IP címhez tartozó MAC címet tudunk lekérdezni. • A RARP protokoll segítségével egy meglévő MAC címhez tartozó IP címet tudunk lekérdezni. • Ezek a protokollok csak lokális hálózaton használhatók. 63
ICMP
• Az ICMP (Internet Control Message Protocol) egy diagnosztikai protokoll, melynek segítségével a hálózati eszközök működése ellenőrizhető. • Az ICMP által specifikált speciális csomagok közül a két legismertebb: • Traceroot (tracert) • Felderíti, hogy a csomag milyen hop-okon megy keresztül. • Ping • Felderíti, hogy a célállomás elérhető-e 64
IGMP
• Az IGMP (Internet Group Messaging Protocol) egy csoport összefogását segítő protokoll, melynek segítségével különböző hálózati programok tudnak csoportokat létrehozni. • A multicasting kihasználáshoz szükséges protokoll. • Jellemző felhasználása: VoIP, Video stream, Multiplayer gaming. 65
Feladat VII.
• Ping-eljük meg a www.ruander.hu szervert, illetve traceroot segítségével ellenőrizzük az útvonalat is. • Nézzük meg, hogy milyen IP címekhez milyen MAC címek tartoznak az alhálózatunkban. 66
IPv6 I.
• Az IPv6 az új generációs IP címek verziója. • Az IPv6-os címek 128 bitesek, melynek köszönhetően 79228162514264337593543950336-szor annyi címet lehet kiosztani vele, mint az IPv4-el, azaz ~3,4*1038 címet. • Bevezetése azért egyre sürgetőbb, mert a legnagyobb WAN hálózaton, az interneten egyszerre kommunikáló, működő gépek száma már meghaladja a 4 milliárdot, így nem lehet mindenkinek IP címet osztani kizárólag IPv4 címtartományban. 67
IPv6 II.
• Az IPv6 címek felépítése 8 tagból áll, minden tagot kettőspont választ el, és minden tag egyenként egy 4 karakter hosszú hexadecimális számot tartalmaz. • pl.: Facebook IPv6-os címe: 2a03:2880:f10c:83:face:b00c::25de • Az IPv6-os címek esetén további egyszerűsítési lehetőség, hogy a tagok csupa 0 részét el lehet hagyni amennyiben nem előzi meg azt bármilyen 0-nál nagyobb helyi érték. • Pl.: • …xxxx::xxxx… = …xxxx:0000:xxxx… • …xxxx:x:xxxx… = …xxxx:000x:xxxx… 68
IPv6 III.
• Az IPv6 további jellemzője az egyszerűsítés is. • Míg az IPv4 esetén több különböző diagnosztikai, felismerő protokoll volt jelen. (A fejlődése során kialakultak) • Addig az IPv6-nál az ARP, RARP, ICMP protokollokat egy közös protokollba, az ND-be (Neighbor Discovery) tömörítették. • Az így létrejött protokoll összességében jobban összeszedett és nem kell különböző protokollokat betartsanak a gyártók. 69
DHCP I.
• A DHCP (Dynamic Host Configuration Protocol) egy protokoll, melynek segítségével elérhető, hogy ne kelljen minden egyes hálózaton lévő eszközt külön konfigurálni, hogy milyen IP címmel kommunikáljanak, a DHCP automatikus IP cím kiosztást tud megvalósítani. • A hálózaton lévő DHCP szerver (ami általában az útvonalválasztó / router is egyben) tudja szolgáltatni a címeket, ezzel gyors konfigurálási lehetőséget nyújtva az eszközöknek és biztonságos is, mivel nem lehetséges IP cím ütközés a hálózaton. 70
DHCP II.
• A DHCP cím kérési mechanizmusa 5 lépésből áll (DORA[A]): • Discover • A hálózatra csatolt eszköz broadcast üzentben elküldi a hálózatra, hogy szeretne IP címet kapni. • Ekkor a host IP címe még 0.0.0.0 • Offer • A DHCP szerver amelyik megkapja ezt a kérést, küld egy ajánlatot az eszköznek, hogy melyik IP-t tudná neki szolgáltatni. • A szerver unicast üzenetben küldi az ajánlatot, de a válaszban az eszköz MAC címe benne van, hogy esetleges több egyidejű kérés esetén se legyen ütközés az eszközök között. 71
DHCP III.
• Request • Az eszköz, amelyik megkapja az ajánlatot igényt formál az ajánlatban lévő IP címre. • Erre azért van szükség, mert előfordulhat, hogy egy hálózaton egy időben több DHCP szerver is fut, de mivel a Discover üzenetet mindegyik megkapta, így mindegyik küld egy Offer-t is, azonban az eszköznek csak az egyik IP fog kelleni, méghozzá a leggyorsabban megérkezett Offer-t küldő szerveré. • Acknowledge • A szerver visszaküldi, hogy elfogadja a kérést és bejegyzi magának, hogy kiosztotta a címet. • Acknowledge (az eszköz felől, nem kötelező) • Az eszköz is válaszolhat, hogy rendben van a cím amit kapott. 72
DHCP IV.
73
DHCP V.
• A DHCP-n kiosztott címeken felül további információk is kerülhetnek kiosztásra: • Kötelezően kiosztott plusz információ: • Lease time • Megadja, hogy az eszköz mennyi időre kapta meg a címet. • Alhálózati maszk • Opcionálisan kiosztott plusz információk: • Alapértelmezett átjáró • Megadja, hogy melyik eszközön keresztül éri el a külső hálózatot az eszköz. • Domain szerverek • Megadja, hogy az eszköz mely domain szervereket használja. • Tartomány • Megadja, hogy milyen tartományba került az eszköz. 74
Átviteli réteg
• A TCP/IP protokoll 3. rétege az átviteli réteg, mely az OSI- modell 4. rétegének feleltethető meg. • Feladatát tekintve is azonos a réteg feladata. • Az átviteli réteget TCP rétegnek is nevezzük, mivel az elsődleges protokoll amit alkalmaz a TCP. • Természetesen több protokoll is fut ezen a rétegen, a másik legismertebb és legfontosabb az UDP (User Datagram Protocol) • Ezekkel a protokollokkal fogunk a következőekben megismerkedni. 75
TCP I.
• A TCP (Transmission Control Protocol) felelős azért, hogy az egyes alkalmazások egymás mellett tudjanak kommunikálni a hálózaton anélkül, hogy egymást zavarnák. • A TCP egy biztonságos protokoll, mivel az átvitelt olyan módon szabályozza, hogy minden egyes kiküldött szegmensre választ vár, és csak akkor küldi a következőt, ha az előzőre megérkezett a visszaigazolás. • A TCP 65535 úgynevezett portot szolgáltat, melyeken keresztül a programok kommunikálhatnak. 76
TCP II.
• Természetesen az egyes eszközök tudnak egymással kommunikálni, de a legfontosabb lépés a kommunikáció előtt a kapcsolat felépítése. • TCP/IP hálózatokon ezt egy „három lépéses kézfogás” segítségével lehet megoldani: • Szegmensek sorrendje: SYN, SYN/ACK, ACK • Ezzel a technikával a csatlakozni kívánó eszköz elküld egy szinkronizációs üzenetet a másik eszköznek, aki ennek hatására ugyancsak visszaküld egy szinkronizációs üzenetet és egyben elfogadja a kapott üzenetet, melyet a kezdeményező eszköz elfogad. • A három lépéses kézfogás nagyon fontos lépés, mivel ezzel tudják szinkronizálni a küldés sebességét, és az útvonal felépítését az eszközök egymással. 77
TCP III.
• A TCP portjai szabadon felhasználhatók, azonban vannak ún. dedikált portok, melyek fent vannak tartva bizonyos szolgáltatások használatához. • Általánosan elmondható, hogy az első 3000 port valamilyen szolgáltatás dedikált portja. • Ismertebb portok: • HTTP – 80 • FTP – 20/21 • POP – 110 • IMAP – 143 • SMTP - 25 • Telnet – 23 • SSH - 22 78
UDP
• A TCP párja az UDP (User Datagram Protocol), melynek szegmens felépítése szinte teljesen egyforma a TCP szegmensével. • A protokoll működése ugyancsak 65535 porton keresztül működik, melyek különállóak a TCP portjaitól. • Az UDP abban különbözik a TCP-től, hogy míg a TCP szigorúan sorrendi küldést valósít meg, addig az UDP nem. Nem vár visszaigazolást minden egyes szegmens megérkezéséről. • Ezáltal kevésé biztonságos, ugyanakkor jóval gyorsabb. 79
TCP vs. UDP
80
Alkalmazás réteg
• A TCP/IP alkalmazás rétege olvasztja egybe az OSI-modell viszony, megjelenítési és alkalmazási rétegét. • Az alkalmazás réteg ad helyet olyan protokolloknak melyeket az egyes hálózaton kommunikáló alkalmazások kihasználhatnak. • Ismertebb protokollok: • DNS • HTTP / HTTPS • FTP / SFTP • SMTP • IMAP • SSH 81
DNS I.
• A DNS (Domain Name System) protokoll egyike a felhasználók által felhasznált, azonban nem igazán ismert protokollnak. • A domain nevek, avagy tartományi nevek olyan azonosítók, melyek segítségével elkerülhető, hogy publikusan elérhető szerverek IP címeit kelljen megjegyezni, ehelyett sokkal könnyebben neveket használunk. www.ruander.hu Szerver / aldomain Domain TLD 82
DNS II.
• A DNS megjelenésével természetesen nem változik a TCP/IP alapelve, azaz, hogy minden egyes hálózati eszköz a logikai címe alapján érhető el. • A tartományi neveket DNS szervereken keresztül „fel kell oldani”, azaz meg kell határozni, hogy egy adott domain-hoz milyen IP cím tartozik. • A DNS feloldási kísérlet sorrendje: • DNS cache • HOSTS fájl • DNS szerver • DNS szerverek… 83
HTTP / HTTPS I.
• A HTTP (Hyper Text Transfer Protocol) az egyik legszélesebb körben ismert hálózati, alkalmazás rétegbeli protokoll. • Felhasználása a különböző WEB-en található tartalmak letöltésére, feltöltésére szokott történni. • Egyes elosztott rendszer technikák is erre a protokollra épülnek. • A HTTP-n 4 féle akció metodika elérhető: • GET • Lekérdezés akció. • POST • Küldés akció. • PUT • Fájl feltöltés akció. • DELETE • Törlés akció. 84
HTTP / HTTPS II.
• A HTTP általában a 80-as TCP porton keresztül elérhető. • Teszteléshez jellemző még a 8080-as port alkalmazása is. • A HTTPS (Hyper Text Transfer Protocol Secure) a normál HTTP egy titkosított változata. • A HTTPS-en kommunikáló felek csatorna titkosítják digitális aláírással a kommunikációt, így amennyiben lehallgatják a kommunikációt „sem lehet visszafejteni azt”. • Manapság egyre inkább a HTTPS kezd alapértelmezett protokollá válni a HTTP-vel szemben. • A HTTPS a 443-as TCP porton keresztül elérhető. 85
FTP / SFTP I.
• Az FTP (File Transfer Protocol), illetve annak titkosított váétozata az SFTP (Secure File Transfer Protocol) egy kifejezetten fájl fel és letöltésre kifejlesztett TCP átvitel alapú protokoll. • A TCP átvitel miatt sebessége korlátozott. • Elsődleges protokoll szervereken való fájlok elhelyezésénél, illetve letöltésénél. • Főként fejlesztők, adminisztrátorok részére. • Használata azért is jellemző, mert könnyen konfigurálható és rendszer szintű jogosultságokkal és megkötésekkel lehet kontrollálni a hozzáféréseket. 86
FTP / SFTP II.
• Az FTP és SFTP-n alapvetően két kapcsolódásra képes egy szerver- kliens páros: • Aktív • Ebben az esetben a kliens és a szerver egy kiépített kapcsolaton keresztül duplex kommunikációt folytat. • Passzív • Ebben az esetben a kliens és a szerver egy előre ki nem épített csatornán kommunikál. • Ilyenkor a kliens kéréseire reagál a szerver. • A két működési mód azért szükséges, mert nem minden eszköz lát ki egyenesen a hálózatra. • Az útvonalválasztók miatt. 87
SSH
• Az SSH (Secure SHell) egy távoli konzol elérési technika. • Jelenleg az egyik legelterjedtebb távoli szerver konzol alapú elérési lehetősége. • Előnye elődjéhez a TELNET-hez képest, hogy a kapcsolat titkosított, így a terminál átvétele nem lehetséges a kommunikáció lehallgatásával. • Általánosan UNIX / LINUX rendszerek eléréséhez használjuk. 88
URL
• Az URL (Uniform Resource Locator) az alkalmazás rétegen található protokollokat futtató szerverek könnyű elérése érdekében jött létre. • Segítségével egy egységes cím megadásával a kliens alkalmazás teljesen pontos leírást kap arról, hogy az adott erőforrás a hálózaton milyen módon érhető el. http://www.ruander.hu:80/index.php Protokoll Szerver elérése (domain / IP) Port (opcionális) Útvonal


              JavaScript nyelvi alapjai VI.
                    • createElement(”Tag”);
                    • Segítségével létrehozható egy megadott nevű tag.
                    • Pl.:
                    • var tag = document.createElement(”p”);
                    • createTextNode(”Szöveg”);
                    • Létrehoz egy element szintű szöveget.
                    • Pl.:
                    • var szoveg = document.createTextNode(”Helló Világ!”);
                    • Természetesen a document objektumnak számos további
              függvénylehetősége is van még, amikkel mi nem fogunk
              foglalkozni.
                    • További függvények:
              • http://www.w3schools.com/jsref/dom_obj_document.asp 21
              JavaScript nyelvi alapjai VII.
                    • A visszakapott, kinyert szerkezeti elemek (Tag-ek) tulajdonságai:
                    • A JavaScript eléri az összes a HTML-ben használt attribútumot, illetve
                      tartalmat a következőképpen:
                    • element.InnerHTML;
                    • Az aktuális elem belső szerkezeti részét (a kezdő és záró tag közti részt) lehet vele
                      kiolvasni, vagy módosítani.
                    • element.attributes;
                    • A megadott elem összes tulajdonságát lehet vele lekérdezni.
                    • element.setAttribute(”attribute”,”value”);
                    • A megadott elem, megadott attribútumának lehet vele értéket adni.
                    • element.getAttribute(”attribute”);
                    • A megadott elem, megadott attribútum értékének kiolvasása. 22
              JavaScript nyelvi alapjai VIII.
                    • element.appendChild(tag);
                    • Belefűz egy létrehozott tag-et egy már létező, meglévő tag-be.
                    • Pl.:
                      var pelem = document.createElement(”p”);
                      var pszoveg = document.createTextNode(”Szöveg”);
                      pelem.appendChild(pszoveg);
                    • element.removeChild(tag);
                    • Kitöröl egy megadott elemet a megadott tag alól.
                    • element.replaceChild(mire, mit);
                    • Kicseréli az adott elemet, egy másikra, a megadott elemen belül.
                    • Természetesen az egyes elemeknek is további beállításai lehetségesek.
                    • További függvények:
              JavaScript nyelvi alapjai IX.
                    • Metódusok, funkciók:
                    • Mivel a JavaScript gyengén típusos nyelv, így a funkciók, metódusok
                      létrehozása és működése eltér az eddig megszokottaktól:
                    • Akár metódust, akár funkciót szeretnénk létrehozni a function kulcsszó
                      segítségével tudjuk megoldani:
                    • function ()
                      { …
                        }
                    • A funkció és metódus közti különbséget nem kell kód szinten jelölni, csak az
                      dönti el, hogy van-e visszatérés az adott ágon, vagy nincs.
                    • Lehetséges olyan funkció írása, aminek bizonyos esetben van visszatérése, és bizonyos
                      esetben nincs, illetve a visszatérés típusdefiníciója nélkül bármilyen típussal visszatérhet
                      egy-egy függvény.
                     
              JavaScript nyelvi alapjai X.
                    • Események:
                    • Mivel a JavaScript eseményvezérlet, így a felhasználói
                      műveleteket események segítségével tudjuk elérni, azokra azokon
                      keresztül tudunk reagálni.
                    • Új események definiálására is van lehetőség (mint ahogy C# alatt
                      is) azonban ezzel nem fogunk foglalkozni.
                    • Az eseményekre való feliratkozás a HTML-ben történik a megadott
                      komponens, megadott eseményén.
                    • Általában funkciót írunk az eseményekhez.
              JavaScript nyelvi alapjai XI.
                    • Általános HTML-ben kiváltható események:
                    • A feliratkozás általános formája:
                    • 
                      onchange Az elem megváltozott.
                      onclick A felhasználó az elemre kattintott.
                      onmouseover A felhasználó az elem felé navigált (egérrel).
                      onmouseout A felhasználó elnavigált az elemről (egérrel).
                      onkeydown A felhasználó leütött egy billentyűt.
                      onload A böngésző befejezte az oldal betöltését.
              A window objektum
                    • Segítségével a különböző ablakok megjelenését tudjuk
                      szabályozni.
                    • Fontosabb függvényei:
                    • open(”url”,[”név”], [”paraméterek”]);
                    • Új lapot nyit, a megadott url-el.
                    • Az ablaknak név is adható, melyen keresztül elérhetővé válik, így további
                      komponenseket rakhatunk bele, vagy módosíthatunk benne.
                    • close();
                    • Bezárja az adott lapot.
                    • Csak window objektumnál működik. 29
              A window object időzítési lehetőségei:
                    • window.setInterval(”funkció”, milliszekundumok);
                    • Mint egy időzítő, az adott funkció x milliszekundumonként le lesz
                    futtatva.
                    • window.setTimeout(”funkció”, milliszekundumok);
                    • Egyszeri időzítés, az adott funkció, egyszer lesz lefuttatva x
                    milliszekundum után.
              JavaScript nyelvi alapjai XV.
                    • A window object dialógusai:
                    • window.alert(”Szöveg”);
                    • Egy szimpla figyelemfelhívás dialógus ablak, egy oké gombbal ellátva.
                    • window.confirm(”Kérdés”);
                    • Egy döntési ablak, Ok és Mégsem gombokkal ellátva.
                    • window.prompt(”Kérdés”, [”Alapértelmezett válasz”]);
                    • Egy InputBox, adatot lehet vele bekérni.
              Alprogramok tovább vezetése I.
                    • Az előzőekben már láthattuk, hogy a JS alapvetően is a
                    procedurális logikára épül.
                    • A procedurális logikában azonban vannak további
                    részegységek melyek elengedhetetlenek annak mélységi
                    felhasználásához:
                    • Névtelen funkciók
                    • Opcionális paraméterek
                    • Események kezelése programkódból
                    2
              Névtelen funkciók I.
                    • A névtelen, vagy anonymous funkciók használata a
                    JavaScript-ben egy teljesen általános megoldás.
                    • A JS alapvetően a programkód hordozását nem teszi
                    lehetővé, így abban az esetben ha egy megadott helyen
                    dinamikus programkód átadásra van szükség, ott helyben
                    is definiálhatjuk az alprogramot ami a funkcionalitást
                    fogja adni.
                    3
              Névtelen funkciók II.
                    • A névtelen funkciók, ahogy nevükben is benne van olyan
                    funkciók melyeket prompt definiálva használunk és
                    ezáltal nem szükséges elnevezni őket.
                    • A felépítése két féleképpen is lehetséges:
                    • Normál felírásban:
                    • function() {…}
                    • Lambda kifejezés logikával:
                    • () => {…}
                    4
              Eseménykezelés programkódból I.
                    • A névtelen funkciók azért is fontosak, mert az eddigi HTML
                    alapú eseményekezelést fel tudjuk váltani jóval egyszerűbb,
                    programkód szintű megoldásra.
                    • Az eddigi megoldásunk keretében egy tetszőleges HTML DOM
                    elem on… attribútumán keresztül tudtunk feliratkozni egy
                    eseményre egy általunk előre megírt funkcióval.
                    • A kód szintű megoldás keretében a DOM elemet JS-ben
                    elkapjuk és úgy iratkozunk fel rá.
                    5
              Eseménykezelés programkódból II.
                    • Az eseménykezelés kontrollálása programkódból
                    alapvetően két dolog miatt hasznos:
                    • Egyrészt nem vagyunk a HTML szerkezetre utalva, a
                    programkód elkülönülhet a HTML részektől.
                    • Másrészt a programkód szinten lehet vezérelni, hogy mikor
                    melyik esemény milyen formában legyen lekezelve.
                    • Az eseménykezelés alapvető működése természetesen
                    ettől nem változik és nem zárja ki ez a megoldás a HTML
                    alaú felhasználást sem.
                    6
              Eseménykezelés programkódból III.
                    • A feliratkozás formája:
                    • A kifejtett újabb megoldás:
                    • var = document.GetElementById();
                    .addEventListener(””, function()
                    {
                    //esemény lekezelése
                    }, false); //Nem adunk meg extra paramétereket alapértelmezetten
                    • Az attribútum alapú megoldás:
                    • var = document.GetElementById();
                    .on = function() {/*esemény lekezelése*/};
                    7
              Eseménykezelés programkódból IV.
                    • Az előző két példa technikailag megegyezik eredmény
                    szempontjából, az addEventListener alapú megoldás az
                    újabb és „szebb megoldás”.
                    • A második megoldás valójában abból adódóan működik,
                    hogy JS alól a DOM elem összes attribútuma elérhető,
                    így ha az onclick pl. bejegyezhető DOM szinten akkor JS
                    szinten is attribútumként.
              Opcionális paraméterek I.
                    • Az alprogramok további fontos tényezője a
                    paraméterezés.
                    • Az alprogramok esetében a paraméterek megadása
                    fontos, hiszen ezen keresztül tudunk adatokat átadni a
                    futáshoz.
                    • Előfordul azonban, hogy bizonyos paraméterek nem
                    kötelezően kitöltendők, így időt is spórolhatunk és futást
                    is stabilizálhatunk - (helytelen funkció paraméterezések)
                    10
              Opcionális paraméterek II.
                    • Az opcionális paraméterek alkalmazása JS-ben hasonlóan
                    a többi nyelvhez igen egyszerűen kivitelezhető,
                    mindössze értéket kell adni a paraméternek a listában:
                    • function ( = <érték>,…) {…}
                    • Természetesen a paraméterezésben továbbra is lehetnek
                    fix paraméterek az opcionálisok előtt, utánuk már fix
                    paraméternek nem lenne értelme, hiszen a sorrend
                    összekuszálódna.
                    11
              Opcionális paraméterek III.
                    • Példa:
                    • function osszead(a, b = 42)
                    {
                    return a + b;
                    }
                    • A JS alapvetően megengedő, így ha egy paraméter nem
                    opcionális, de nem adjuk meg sem lesz belőle hiba!
                    • Mindössze undefined lesz az értéke.
                    
              Opcionális paraméterek IV.
                    • A funkción belül az arguments jelölővel lekérdezhetjük az
                    összes beérkező paramétert, így programozottan is tudjuk
                    kezelni a paramétereket.
                    • function osszead(a, b = 42)
                    {
                    a = (arguments.length == 0) ? 1 : a; //a értéke eddig
                    undefined, mivel nem érkezett paraméter, ha így van akkor 1-re
                    állítjuk.
                    return a + b;
                    }
              A Prototípus-orientált programozás IV.
                    • A prototípus létrehozása egyszerű, egy speciális funkciót
                    hozunk létre:
                    • function ()
                    {
                    this. = ;…
                    }
                    • Ezzel létrehoztunk egy új prototípust, mellyel tudunk
                    létrehozni tetszőleges adatokat.
                    19
              A Prototípus-orientált programozás V.
                    • Például:
                    • function Auto(rendszam, marka, tipus)
                    {
                    this.rendszam = rendszam;
                    this.marka = marka;
                    this.tipus = tipus;
                    }
                    • A létrehozás:
                    • var auto1 = new Auto(”ABC-123”, ”AUDI”, ”A4”);
                    var auto2 = new Auto(”ABC-321”, ”Suzuki”, ”Swift”);
                    20
              A Prototípus-orientált programozás VI.
                    • Természetesen lehetnek fixen megadott elemek is a
                    prototípusban:
                    • function Auto(rendszam, tipus)
                    { this.rendszam = rendszam;
                    this.marka = ”Suzuki”;
                    this.tipus = tipus;
                    }
                    • var auto1 = new Auto(”ABC-321”, ”Swift”);
                    var auto2 = new Auto(”ABC-132”, ”SX4”);
                    • Minden autó Suzuki tehát ebben az esetben.
                    21
              A Prototípus-orientált programozás VII.
                    • A prototípusokhoz lehet funkciókkal is bővíteni:
                    • function Auto(rendszam, tipus)
                    { this.rendszam = rendszam;
                    this.marka = ”Suzuki”;
                    this.tipus = tipus;
                    }
                    • Auto.prototype.teljesNev = function()
                    { return this.marka + ” ” + this.tipus;
                    }
                    • A prototype segítségével férünk hozzá egy meglévő prototípus szerkezetéhez
              A Prototípus-orientált programozás VIII.
                    • Prototípusokat természetesen létre lehet hozni prompt
                      megoldás keretében is, ilyenkor maga az objektum jön
                      közvetlenül létre, melyet azonnal fel is töltünk adattal:
                    • var auto1 =
                    {
                      rendszam : ”ABC-123”,
                      marka : ”AUDI”,
                      tipus: ”A4”
                    };
              A Prototípus-orientált programozás IX.
                    • Ugyan ritka, de ilyenkor természetesen ugyan úgy lehet funkciókat
                      is társítani a rendszerhez:
                    • var auto1 =
                      { rendszam : ”ABC-123”,
                        marka : ”AUDI”,
                        tipus: ”A4”,
                        teljesNev: function()
                      { return this.marka + ” ” + this.tipus;
                      }
                    };
              A Prototípus-orientált programozás X.
                    • Az utóbbi eset azért ritka, mert a prompt létrehozott
                      anonym prototípusok általában azért jönnek létre, hogy
                      adatokat strukturáltan hordozzunk bennük.
                    • A prototípusok anonym létrehozásának felépítése a JSON
                      leíró nyelv logikájának megfelelően működik.
                    • A JSON (JavaScript Object Notation) – JavaScript objektum
                      jelölő.
              JavaScript adatszerkezetei I.
                      • A JavaScript ugyan gyengén típusos nyelv, ugyanakkor
                      működéséhez elengedhetetlen néhány komplexebb
                      adatszerkezet, melyek beépítetten rendelkezésre állnak
                      benne:
                      • Tömb
                      • Halmaz
                      • Szótár
                      • Ezeket fogjuk megnézni a következőkben.
              JavaScript tömb I.
                      • A JS-ben a tömb adatszerkezet, mint a legtöbb
                      programozási környezetben egy indexelhető és bejárható
                      adatszerkezet.
                      • Természetesen gyengén típusos nyelv lévén a tömböknek
                      nincs konkrét mérete és típuskötése sem.
                      • A tömb létrehozása egyszerű, mindössze [] közé kell
                      felsoroljuk az adatokat, illetve implicit módon a rendszer
                      létre is hozza nekünk, ha indexelünk egy változót.
              JavaScript tömb II.
                      • Példa – indexelt létrehozás:
                      • var tomb = [];
                      tomb[0] = <érték1>;
                      tomb[1] = <érték2>;
                      tomb[2] = <érték3>;
                      • Példa – előre feltöltött megoldás:
                      • var tomb = [<érték1>, <érték2>, <érték3>];
                      • A tömbök tehát tetszőleges típusúak lehetnek és szabadon
                      bővíthetők.
              JavaScript tömb III.
                      • A tömbök-nek a hosszát a length tulajdonságon keresztül kérdezhetjük le.
                      • Bejárásuk pedig több formában is lehetséges:
                      • For ciklus:
                      • for(var i = 0; i < tomb.length; i++)
                      { //tomb[i] felhasználása
                      }
                      • Illetve létezik beépített funkcionális forEach
                      • tomb.forEach(function(value)
                      { //value feldolgozása
                      });
                      • Mindkettőt szabadon használhatjuk.
              JavaScript tömb IV.
                      • Tömbből a delete parancs segítségével tudunk törölni.
                      • Fontos, hogy a delete törli az adott elemet a tömbben,
                      de a tömb nem változik meg indexelése szempontjából,
                      így az indexek megmaradnak, csak lyukacsos marad a
                      tömb.
                      • delete [];
                      34
              JavaScript – Halmaz I.
                      • A halmaz, mint matematikában itt is egyedi elemek
                      tárolója.
                      • Nem lehet benne duplikált elem, melyet kifejezetten
                      akkor szoktunk alkalmazni, ha egy olyan adatszerkezetet
                      szeretnénk kialakítani, amiben az egyes elemek csak
                      akkor jelenhetnek meg, ha nem egyformák.
                      • Felhasználása ritka ugyanakkor hasznos lehet.
                      35
              JavaScript – Halmaz II.
                      • Használata:
                      • var halmaz = new Set();
                      halmaz.add(); // Hozzáad egy elemet a halmazhoz
                      halmaz.delete(); //Törli az adott elemet a halmazból
                      halmaz.has(); //Megadja, hogy ilyen elem van-e már a
                      halmazban
                      halmaz.clear(); //Törli az összes elemet halmazból
                      halmaz.size  megadja, hogy hány elem van a halmazban
              JavaScript – Szótár I.
                      • A szótár egy másodlagos indexelési lehetőséget biztosító
                      adatszerkezet.
                      • A Szótár valójában kulcs-érték párosokat tárol, melyeket fel
                      tudunk használni.
                      • Segítségével egy bármilyen adat egy tetszőleges másik típusú
                      adattal jelölhető mint kulcs, ezáltal könnyebb később megtalálni.
                      • A kulcsok közti kereséssel pedig az adatokat visszakaphatjuk.
                      38
              JavaScript – Szótár II.
                      • Használata:
                      • var szotar = new Map();
                      szotar.set(,<érték>); // Hozzáad egy kulcs-érték
                      párost a szótárhoz
                      szotar.delete(); //Törli az adott elemet a szótárból
                      szotar.has(); //Megadja, hogy ilyen kulcs van-e már a
                      szótárban
                      szotar.clear(); //Törli az összes elemet szótárból
                      szotar.size  megadja, hogy hány elem van a szótárban
            


              Reguláris kifejezések II.
                      • A reguláris kifejezéseket alapvetően 3 dologra használjuk:
                      • Szöveg mintaillesztése
                      • Meg tudjuk állapítani, hogy egy szöveg megfelel-e egy adott
                        mintának, vagy van-e benne olyan rész ami megfelel annak.
                      • Szöveg keresése
                      • Meg tudjuk keresni azt a szöveget, vagy azon részeket amik
                        megfelel egy mintának.
                      • Szöveg bontása
                      • Szöveg bontása a minta szerinti tördelőpontoknál.
              Reguláris kifejezések III.
                      • A reguláris kifejezések általános formális leírást tesznek
                        lehetővé a legtöbb programozási környezetben, ennek
                        megfelelően szinten minden programnyelv rendelkezik
                        reguláris kifejezés értelmező részegységgel, így a
                        JavaScript is.
                      • Az egyes programnyelvek tekintetében a felírásban
                        lehetnek eltérések, de a főbb funkciók és leírások
                        azonosak.
              Reguláris kifejezések IV.
                      • A reguláris kifejezések alap formátuma JS-ben:
                      • .search(minta);
                      • Megadja, hogy a minta hol található meg a szövegben, ha megtalálható
                        egyáltalán benne.
                      • .replace(minta, ””);
                      • Megadja a minta szerint, hogy mit kell ki cserélni a szövegben és mire.
                      • .test(””);
                      • Megadja, hogy az adott szöveg megfelel-e a mintának.
                      • A JavaScript a reguláris mintákat függvényként kezeli, így nem
                        szövegesen kell kezelni a mintákat.
              Reguláris kifejezések V.
                      • A kifejezések megírása:
                      • A kifejezéseket minden esetben /…/ (per jelek között) kell megírni.
                        Pl.: /[abc]+/
                      • Kifejezés módosítói:
                      • i  kis-nagy betűk figyelmen kívül hagyása (case insensitive)
                      • g  globális találatok, ne álljon meg az első találat után
                      • m  több soros keresés, keressen tovább az enter után is
                        (multiline)
                      • Felhasználási példa: /…/ig
              Reguláris kifejezések VI.
                      • Reguláris opciók:
                      • [] / []
                      • A jelölt helyen a megadott karakterek szerepelhetnek
                      • Példa:
                      • [abc]  a jelölt helyen a, b, vagy c lehet
                      • [a-z]  a jelölt helyen a-z-ig bármi lehet
                      • ( | )
                      • A jelölt helyen az egyik, vagy a másik formula is lehet.
                      • Példa: /(a | b)/g  a, vagy b karakterek keresése
              Reguláris kifejezések VII.
                      • Jelölő karakterek:
                      • \d  egy bármilyen szám karakter keresése
                      • \s  egy szóköz keresése
                      • \b  valaminek azzal kell kezdődnie, hogy (Begining with)
                      • \u  megadott Unicode karakter keresése
                      • .  a jelölt helyen egy bármilyen karakter lehet, kivéve
                        sortörés.
                      • Példa:
                      • /\d/g –y megadja milyen számok vannak a szövegben egyesével.
                        Reguláris kifejezések VIII.
                      • A formulákban mennyiségi megadások:
                      • +  a jelölt helyen legalább 1, de azt követően több ugyan olyan
                        formátumnak megfelelő karakter is lehet
                      • *  a jelölt helyen több ugyan olyan formátumnak megfelelő
                        karakter is lehet, akár 0 is.
                      • ?  a jelölt helyen legfeljebb egy karakter fele meg a formulának.
                      • Példa:
                      • „1200 Ft.” | a formula: /\d/g  1,2,0,0
                      • „1200 Ft.” | a formula: /\d+/g  1200
              Reguláris kifejezések VIII.
                      • Speciális jelölők:
                      • ^  a megadott formula csak a szöveg elejétől értelmezhető,
                        belsőleg nem.
                      • Példa: „Az összeg: 1200 Ft.” | a formula: /^\d+/  nem ad vissza semmit.
                      • $  a minta végén a szövegnek is véget kell érnie.
                      • Példa: „Az összeg: 1200 Ft.” | a formula: /\d+$/  nem ad vissza semmit.
                      • (?=)  opciós csoport, az adott helyen lehet ilyen is, de
                        nem lesz elkapva, tehát olyan csoport ami kitöltheti a formulák
                        közti helyet.
                      • Példa: „a 12 EMBER”  /[a-z]+(?=\d+)[A-Z]+/
              XML feldolgozás I.
                      • JavaScript-ben is fontos, hogy egy távoli kommunikáció (AJAX
                      hívás) során visszatérő strukturált adatot megfelelően fel
                      tudjon dolgozni.
                      • Az XML a világ egyik legelterjedtebb adatleíró nyelve, melyen
                      keresztül a kommunikáció lehetséges két végpont között.
                      • Így egyértelmű, hogy a JS-nek a HTML alapjául is szolgáló
                      XML-hez kell rendelkezzen beépített feldolgozóval.
             XML feldolgozás II.
                      • Az XML feldolgozása valójában nem is annyira nagy
                      kihívás a JS-nek, hiszen a HTML is egyfajta XML, így a
                      megoldás is annak megfelelően fog alakulni.
                      • A JS beépített XML feldolgozója a DOMParser, ami
                      lényegében teljese mértékben azonos funkcionalitással
                      rendelkezik mint a HTML feldolgozója (az is egyfajta
                      DOMParser)
            XML feldolgozás III.
                      • Az XML feldolgozása igen
                      egyszerű tehát, ha adott egy
                      szöveges állomány amiben a
                      megkapott XML formátumú adat
                      szerepel.
                      • A feldolgozás után indulhat az
                      XML szétszedése.
                      • Példa:
                      var xml = "";
                      var feldolgozo = new DOMParser();
                      xmlDoc =
                      feldolgozo.parseFromString(xml,
                      "text/xml");
            XML feldolgozás IV.
                      • A feldolgozás után kezdődhet az adatok
                      szétszedése.
                      • Alapvetően a logika szinte azonos a
                      document prototype használatával,
                      mindösszesen itt az id és class nem
                      alapértelmezett szűrők a felhasználás
                      során.
                      • A childNodes segítségével lekérdezhetjük
                      egy elem alá tartozó node-okat
                      • A nodeValue pedig az adott node belső,
                      szöveges értékét adja vissza.
            JSON feldolgozás I.
                      • A JSON (JavaScript Object Notation) egy hasonló
                      feladatra kialakított leíró nyelv mint az XML.
                      • Szerkezetét tekintve az XML-el szemben terse
                      leírónyelvnek minősül, ami azt jelenti, hogy a tömörítő
                      nyelvek családjába tartozik (csak úgy mint programozási
                      nyelvek tekintetében a C alapú nyelvek)
                      • A JSON elterjedésének fő oka a szerkezeti egyszerűsége.
            JSON feldolgozás II.
                      • A JSON alapvetően 3 szerkezeti elemre épül:
                      • Az object
                      • Jelölése: {…}
                      • Olyan komplex objektum mely más komplex és nem komplex adatokat
                      tartalmazhat.
                      • A tömb:
                      • Jelölése: […, …, …]
                      • Tömbösített adatok tárolására kialakított elem.
                      • Az attribútum:
                      • Jelölése: : <érték>
                      • Valójában maga a változó / adattároló megjelenítése a nyelvben.
            JSON feldolgozás III.
                      • Minden JSON fájl kapcsoszárójelek közötti adatokat
                      fognak tárolni. ({…})
                      • Ennek oka, hogy a JSON legfelsőbb szintje egy objektum kell
                      legyen, ami akár egy hipotetikus objektum is lehet, de abba
                      kell beletartozzon minden – hasonlóan az XML root node-
                      jához.
                      • A JSON fájlt, ugyan úgy mint az XML fájlt, szimpla text-
                      ként értelmezzük.
            JSON feldolgozás IV.
                      • A JSON felépítésében tehát a cél,
                      hogy a natív elemeket szimpla
                      értékként, a belső objektumokat
                      JSON object-ként és a belső
                      tömböket JSON array-ként
                      tároljuk.
                      • Így egy teljes objektum tárolható.
                      {
                      "type": "basket",
                      "beans": 47,
                      "apples": 7,
                      "oranges": 23,
                      "brand": "ConvertSimple",
                      "ratio": 33.9,
                      "fees": {
                      "cleaning": "$4.50",
                      "baking": "$27.30",
                      "commission": "$93.10"
                      },
                      "descriptors": ["clean", "fresh", "juicy",
                      "delicious"]
                      }
            JSON feldolgozás V.
                      • JavaScript-ben a JSON felhasználása alapvetően egy igen
                      egyszerű folyamat, hiszen a nyelvhez készült kifejezetten.
                      • Mivel alapvetően objektumok szerializációjára használjuk,
                      így a nyelv automatikusan le tudja generálni az
                      objektumok belső szerkezeti felépítményét JSON-ben és
                      vissza is tudja építeni azt.
                      • A prototípusok szerkezete pedig így könnyen menthető,
                      továbbítható stb. szövegesen.
            JSON feldolgozás VI.
                      • A JSON-t természetesen manuálisan is fel lehet dolgozni
                      ha szükséges, akár az XML-t habár beépített feldolgozó
                      alapvetően nincs rá – küldő megoldás viszont létezik és
                      létre is hozható.
                      • Azonban az esetek nagy részében erre nincs szükség,
                      hiszen a belső adatok előállítása és kimentése 1-1
                      függvénnyel megoldható a JSON segítségével.
            JSON feldolgozás VII.
                      • A JavaScript JSON prototípusa:
                      • JSON.parse("JSON");
                      • Egy megadott JSON anyagot konvertál belső objektumokká
                      • JSON.stringify();
                      • Egy megadott objektumot alakít JSON formátumúvá.
                      • Ezzel a két függvénnyel lehet ide-oda konvertálni a JS
                      belső objektumait.
            Aszinkron JavaScript II.
                      • Az aszinkron megoldásokhoz fontos megkötések:
                      • A végrehajtási sor alapvetően nem teljesen szekvenciális. Ezt már
                      eddig is tapasztalhattuk, hiszen az alprogramok megírási helye
                      nem befolyásolja azok lefutását, tehát a szekvenciális lefutás csak
                      a hívási sorban jelentkezik, nem a programkódban.
                      • A másik fontos megkötés, hogy a programkódnak hordozhatónak
                      kell lennie. A hordozhatóság legkisebb egységének pedig az
                      alprogramnak kell lennie.
                      • Ez sem újdonság az eddigiekhez képest, hiszen az eseményvezérlés és az
                      anonim függvények is Callback logika mentén működtek.
            Aszinkron JavaScript III.
                      • A JavaScript-ben jelenleg két alapvető párhuzamosítási
                      általános megoldás található meg:
                      • Promise (ígéret)
                      • Async/Await – nyelvi szintre emelt Promise
                      • Ezzel a kettővel lehet párhuzamosan végrehajtatni
                      általános kódokat – tehát nem timeout, vagy hasonló
                      specifikus megoldások esetében szoktuk használni.
            Aszinkron JavaScript IV.
                      • A Promise, avagy ígéret a nevét onnan kapta, hogy egy
                      olyan aszinkronos futtatóról van szó, mely Callback
                      függvények segítségével jelzi vissza, hogy valami sikeres,
                      avagy sem, így biztosan kapunk választ.
                      • Valójában egy köztes réteg, ami eltakarja az aszinkron
                      megoldás hátterét és összekapcsolja a szinkronos kódot az
                      aszinkronossal.
                      • Egy igen jól felhasználható eszköz párhuzamosításra.
            Aszinkron JavaScript V.
                      • A Promise egy prototype, melyet létre
                      tudunk hozni és meg tudjuk adni
                      benne a párhuzamosan futtatandó
                      kódot.
                      • A Promise-nak létrehozáskor egy
                      speciális függvényre van szükséges,
                      ami két funkciót vár:
                      • Az egyik akkor fut le a végeredményt
                      hordozva, ha minden rendben volt
                      • A másik pedig ha hiba lépett fel.
                      • Példa:
                      var prom = new Promise(function(megoldva,
                      hiba)
                      { megoldva(); //amikor sikerült
                      hiba(); //amikor nem sikerült
                      });
                      //…
                      prom.then(
                      function(eredmeny) { /*…*/ },
                      function(hibaEredmeny) { /*…*/ }
                      );
            Aszinkron JavaScript VI.
                      • A promise-t használhatjuk
                      szekvenciális aszinkron
                      ütemezőnek is, mivel minden
                      then(…) alprogramnak is Promise a
                      visszatérése.
                      • Így többször is futtathatjuk akár
                      más visszajelzésekkel az aszinkron
                      programot.
                      • Példa:
                      var prom = new Promise(function(megoldva,
                      hiba)
                      {
                      megoldva(); //amikor sikerült
                      hiba(); //amikor nem sikerült
                      });
                      //…
                      prom
                      .then(megoldva1Func, hiba1Func)
                      .then(megoldva2Func, hiba2Func)
                      .then(megoldva3Func, hiba3Func)
                      .then(megoldva4Func, hiba4Func);
            Aszinkron JavaScript VII.
                      • A Promise objektum a then-en
                      kívül még két másik alprogrammal
                      is rendelkezik:
                      • catch  elkapja általánosan a
                      hibákat.
                      • finally  lekezeli, hogy mi történjen
                      ha akár hiba, akár minden rendben
                      végbement.
                      • Példa:
                      var prom = new Promise(function(megoldva,
                      hiba)
                      {
                      megoldva(); //amikor sikerült
                      hiba(); //amikor nem sikerült
                      });
                      //…
                      prom
                      .then(megoldva1Func)
                      .then(megoldva2Func)
                      .then(megoldva3Func)
                      .then(megoldva4Func)
                      .catch(hibaGlobalFunc)
                      .finally(vegezetulGlobalFunc);
            Aszinkron JavaScript VIII.
                      • A Promise-nak van egy pár „flow control” funkciója is:
                      • Promise.all()  bevárja a tömbként átadott
                      Promise objektumokat és egy tömbként adja vissza azok
                      eredményét.
                      • Promise.any() bevárja az első lefutó Promise-t
                      a megadottak közül és annak eredményét adja vissza.
                      • Promise.race()  bevárja az első lefutó, vagy
                      hibára futó Promise-t a megadottak közül és annak eredményét,
                      vagy hibáját adja vissza.
            Aszinkron JavaScript IX.
                      • Természetesen az előző funkciókat is futtatni kell, a then-
                      el, hiszen egy keret Promise-ba rakjuk a többi Promise-t:
                      Aszinkron JavaScript X.
                      • A Promise-nak idő közben lett egy nyelvi szintű
                      alternatívája az async-await.
                      • Az async-await teljes mértékben ugyan úgy működik
                      mint a Promise (hiszen valójában az is), a különbség,
                      hogy nyelvi szinten került implementációra.
                      • Ennek megfelelően az async-await valójában nem új, csak
                      másabb megoldás az eddigiekhez képest.
            Aszinkron JavaScript XI.
                      • A felhasználása igen egyszerű, egy
                      async függvény mindig Promise
                      objektummal tér vissza, amit
                      szekvenciális oldalon bevárhatunk.
                      • Ennek megfelelően ez inkább csak
                      egy egyszerűsítés, mint sem egy
                      önálló működésű párhuzamosítás.
                      • Példa:
                      async function funkcio()
                      {
                      return "Helló világ!";
                      }
                      //Ezt bevárhatjuk akár úgy is, mint egy
                      Promise‐t:
                      funkcio.then(…);
                      //De nyelvi szinten is:
                      var eredmeny = await funkcio();
            


              A git felhasználása II.
                      • A git telepítése után, az első dolgunk, hogy meg kell
                      adni, hogy az adott user (aki használja a git-et) globálisan
                      kicsoda.
                      • Alapvetően a lépés kihagyható, de ebben az esetben
                      külön gondoskodni kellene róla minden egyes
                      alkalommal, hogy megadjuk, hogy ki hozta létre az adott
                      verziót, ami körülményes és nem is túl kifizetődő
                      hosszútávon.
              A git felhasználása III.
                      • A git felhasználó megadása:
                      • git config --global user.name ”felhasználó”
                      • git config --global user.email ”email cím”
                      • Ezek után vissza is lehet nézni a konfigurációt:
                      • git config --global --list
                      • Itt látszódnia kell a felhasználónknak miután létrehoztuk.
                      • Ezek után már elkezdhetjük a felhazsnálást.
              A git felhasználása IV.
                      • Amikor egy git-elt verziókezelést szeretnénk végrehajtani,
                      az első lépés, hogy létre kell hozni a verziókezelési alapot.
                      • Ez lesz a master repo, amely a kezdeti állapottól adja a
                      főszálat, mely a fő verziókezelési vonalat mutatja.
                      • A repo a repository-nk lesz, mely azt vezeti, hogy melyik
                      verzió mit változatott az előzőhöz képest. Természetesen az
                      első repo a legnagyobb, a többi ennek a módosulata lesz.
                      • A létrehozásnál az alap fájloknak már érdemes léteznie.
              A git felhasználása V.
                      • A master létrehozása:
                      • Be kell navigáljunk a mappába a cd parancs segítségével.
                      • Pl.: cd ”útvonal”
                      • Majd inicializáljuk a repository-nkat
                      • git init
                      • Ez automatikusan létrehozza az adott szinten a git repository-nakt.
                      • A létrehozás után a mappában jelenleg található mappák
                      és fájlok automatikusan nem feltétlen kerülnek bele a
                      repo-ba.
              A git felhasználása VI.
                      • Az, hogy jelenleg az adott repo pontosan mit tartalmaz
                      és hogy áll lekérdezhető:
                      • git status
                      • Ez megadja az adott repo-ra vetítve (az adott mappában
                      lévő repo-t figyelembe véve), hogy áll az adott repo.
                      • Itt azt is láthatjuk, hogy mely fájlok, hogy állnak
                      (kihagyva, friss, vagy láthatóan módosult)
              A git felhasználása VII.
                      • Ha valami hiányzik a repo-ból és szeretnénk hozzáadni, akkor
                      azt manuálisan kell megtegyük:
                      • git add 
                      • Ha mindent szeretnénk hozzáadni: git add -A
                      • Ezek után a git status már jelezni is fogja, hogy mit lát ezek
                      után a mappában.
                      • Természetesen előfordulhat, hogy valamire még sincs szükség
                      a repo-ban (pl. egy almappa, vagy egy fájl valahol)
              A git felhasználása VIII.
                      • Ha valamit szeretnénk kivenni a repoból:
                      • git rm --cached 
                      • git reset 
                      • A git reset kiveszi az indexből, de nem távolítja el a repo-ból – tehát
                      innentől nem veszi figyelembe a rendszer, a git rm viszont kitörli a
                      repo-ból.
                      • Mindezek mellett megadható az is, hogy valamit eleve ne
                      vegyen figyelembe a git a jövőben.
              A git felhasználása IX.
                      • A kivétel létrehozása:
                      • Az adott mappában, ahonnan
                      valamilyen szabályt szeretnénk
                      érvényesíteni (pl. az exe fájlok ne
                      kerüljenek a repo-ba innentől lefele)
                      létrehozunk egy .gitignore fájlt.
                      • A .gitignore fájlba megadható, hogy
                      mit és hol ne vegyen figyelme az adott
                      szinten és alatta a git.
                      • Ami elé „!” jelet teszünk az pont az
                      ellentétje, tehát azt ne zárja ki.
                      • Példa a fájl tartalmára:
                      *.exe
                      /debug
                      /config/*.log
                      !/config/main.log
              A git felhasználása X.
                      • Ha már hozzáadtuk a „figyelési listához” a fjálokat amiket
                      most már szeretnénk kivenni, akkor az indexből először is
                      törölni kell őket:
                      • git rm --cached 
                      • Többet nem is fogja feldobni a git, hogy ezek esetleg
                      hozzáadhatók lennének a repo-hoz.
                      • Amíg viszont nem töröljük a gitignore-t nem fogja a rendszer
                      érvényesíteni.
              A git felhasználása XI.
                      • Miután összeállt a végleges fájl/mappa lista amit
                      szeretnénk a repo-ba elrakni akkor létre kell hozni a repo
                      (első) zárását.
                      • git commit –m ””
                      • Ezzel létrejön egy verzió (első esetben az alap verzió).
                      • Innentől természetesen monitorozni lehet, hogy mi lett a
                      végeredmény a status lekérdezésével.
              Git visszavonás I.
                      • Természetesen a verziókezelés mit sem érne, ha nem tudnánk
                      egy előző verzióra visszaállni, vagy kivenni az előzményekből.
                      • A kivételhez, ahol csak valamit ki akarunk hagyni,
                      természetesen a git commit id-ját tudni kell.
                      • Ehhez tudnunk kell a git commit-okat amik eddig megtörténtek:
                      • git log –oneline
                      • Itt látnunk kell az eddigi commit-okat és minden commit az
                      első része maga az ID.
              Git visszavonás II.
                      • A kihagyandó elemet ezek után egyszerűen ki lehet venni:
                      • git revert 
                      • git revert  --no-edit
                      • Így nem kérdez rá a git, hogy egy újabb commit szöveget adj meg.
                      • Ez tehát azt a commit-ot, ami abban a commit-ban történt,
                      eltűntettük, de minden utána lévő commit megmarad.
                      • Természetesen teljesen visszatérhetünk előző változatokhoz,
                      ebben az esetben vagy elemenként visszalépdelünk, vagy
                      eleve visszalépünk valahova.
              Git visszavonás III.
                      • Az commit-onként való lépdelés logikája, ha valamilyen
                      megoldást keresünk, valami egy ideje nem működött pl. és mi
                      azt keressük, hogy ez mióta áll fent.
                      • Amennyiben viszont, csak vissza akarunk lépni egy előző
                      változatra úgy, hogy az összes előző változatot ki akarjuk
                      hagyni, mert pontosan tudjuk, hogy az utolsó N commit-ot
                      kell elhagyjuk:
                      • git reset --soft HEAD~
                      • Ahol a  helyére kell egy számot megadni, hogy az utolsó hány
                      commit legyen visszavonva.
              Git visszavonás IV.
                      • Minden esetre a visszavonással minden esetben vigyázzunk,
                      mert a visszavonás az esetek nagy részében már nem
                      visszavonható!
                      • A legjobb megoldás, hogy egy repo másolatban állunk vissza
                      egy előző változatra és amennyiben úgy találjuk, hogy minden
                      jó a visszaállás után utána törölhetjük a rossz irányba elszaladt
                      repo-nkat.
                      • Illetve fontos, hogy a visszavonás előtt ne legyen módosítás az
                      indexben (git status legyen üres a várakozások tekintetében).
              Git mellékágai I.
                      • A verziókezelés további fontos része a próbálkozás.
                      • Most már oda-vissza tudunk lépdelni a verziókban, de
                      vannak esetek amikor csoportok együtt működése, vagy
                      próbálkozások során előfordulhat olyan, hogy egy
                      mellékágat kell kezeljünk.
                      • A mellékágakkal két feladatunk lehet alapvetően:
                      • Leválasztani
                      • Összefűzni
              Git mellékágai II.
                      • A leválasztás (branching) egy elágazás, melynek
                      keretében egy adott pontról kiindulva tudunk új ágat
                      indítani.
                      • Ebben az ágban bármit csinálunk nem módosítja a
                      kiinduló ágat, így ebben szabadon próbálkozhatunk,
                      szabadon beemelhetünk csapatmunkában elvégzett
                      részeket mindenféle kockázat nélkül.
              Git mellékágai III.
                      • Az ág elindítása egyszerű:
                      • git branch  
                      • Ezzel létrejön egy új branch amelyikből megadjuk, amin
                      tudunk dolgozni attól a ponttól kiindulva.
                      • A létrehozás után természetesen át is kell állni az ágra.
                      • Az ágak között a git checkout segítségével mozoghatunk:
                      • git checkout 
                      • Természetesen a „main” név használatával tudunk a főszálra visszaállni.
              Git mellékágai IV.
                      • A git checkout –b opcióval akár átlépéssel egybekötött
                      átlépést is tudunk tenni:
                      • git checkout –b  
                      • A checkout parancs az adott mappában lévő repo-t arra a
                      branch-re állítja be amit kiválasztunk, így ezzel vigyázni
                      kell mielőtt ide-oda lépdelünk.
                      • Természetesen branch-ből is indítható további branch,
                      tehát nem csak a főág ágaztatható le.
              Git mellékágai V.
                      • Természetesen amikor egy ágban elérünk egy véglegesnek
                      mondható verziót, akkor összeolvaszthatjuk a nyitóággal:
                      • git merge 
                      • A forrás ágon kell álljunk és abba fogja beolvasztani a másik
                      ágat.
                      • Pl.:
                      • git checkout main  átállunk a főágra
                      • git merge mellekag  behúzzuk a mellékágat
              Git mellékágai V.
                      • Az összevonás során egyetlen probléma léphet fel, ha
                      conflict van a két ág között.
                      • A conflict akkor jöhet létre, ha a két ágon közben egymásnak
                      ellentmondó commit-ok mentek le egyező fájlokra
                      vonatkozóan.
                      • Ilyenkor a merge során fel fogja dobni, hogy ezeket látja
                      a két fájlban melyik maradjon meg.
              A Git online eszközei V.
                      • Amikor szeretnénk egy Git commit-ot feltölteni a
                      szerverre azt a push parancs segítségével lehet
                      megoldani.
                      • git push  
                      • A lokális ág megadása nem kötelező, ha a master-t szeretnénk
                      feltölteni.
                      • Amennyiben a célágra mindenképpen szeretnénk feltölteni a
                      commit-ot, akkor is ha bármilyen ütközés lenne:
                      • git push  --force
              A GitHub használata
                      Lehetőség és opciók a GitHub-on
                      Kis Balázs 14
                      A GitHub használata I.
                      • A GitHub a világ egyik legnépszerűbb Git alapú verziókezelő és
                      táv kód menedzsment eszköze.
                      • 2008-as indulását követően gyorsan terjedni kezdett, mivel a
                      nyílt forráskódú projekteknek nyújtott tárolási és verziókezelési
                      szolgáltatásokat.
                      • 2018-ban a Microsoft felvásárolta a GitHub-ot és még
                      népszerűbbé tette azáltal, hogy már zárt projekteket is
                      ingyenesen lehet rajta létrehozni.
                      • Mára több mint 84 millió fejlesztő, több mint 200 millió repo-ja
                      van rajta.
              A GitHub használata II.
                      • A GitHub a szimpla online Git repo tároláson kívül
                      rengeteg opcióval rendelkezik.
                      • A népszerűbbek:
                      • Dokumentáció létrehozása
                      • Projekt fejlesztői oldalának létrehozásával
                      • Probléma kezelési megoldásokkal
                      • Analitikai elemzésekkel
              A GitHub használata III.
                      • A GitHub-on Markdown leíró segítségével lehet
                      dokumentációt létrehozni.
                      • A Markdown egy dokumentum leíró nyelv (célja hasonló mint
                      a HTML-nek volt eredetileg), amely kifejezetten formázott
                      dokumentumok szövegesen jelölt változatát hozza létre.
                      • A projekt fejlesztői oldalát is létrehozhatjuk, ahol
                      alapvető dolgokat, telepítés, felépítés menetét, esetleg
                      tutorial-okat is publikálhatunk.
              A GitHub használata IV.
                      • A probléma kezelés (Issue Handling) is egy fontos része a
                      GitHub-nak.
                      • Lehet felvenni hibajegyet, vagy módosítási igényt, melyről a
                      fejlesztő csapat értesítést kap, majd ezt egy fórum jelleggel át
                      lehet beszélni és lehet jelölni is végül, hogy valami
                      implementálásra, javításra került, vagy nem.
                      • És végül az analitikai elemzések, melyek a kódbázist, a kód
                      tisztaságát, a fejlesztés gördülékenységét és egyéb infókat
                      tudnak elemezni.
              A GitHub használata V.
                      • A GitHub-on alapvetően ma már két fajta repo-t lehet
                      létrehozni:
                      • Privát színterű (Private repository)
                      • Ma már akármennyit létrehozhatunk ebből, de 1GB-nál nagyobb
                      méretű nem lehet ingyenes módban a repo.
                      • Publikus színterű (Public repository)
                      • Ennek nincs kifejezetten korlátja, ellenben ez mindenkinek elérhető,
                      hozzáférhető a teljes forráskód és verziók.