Hálózat, IP-címek

A tegnapihoz tartozok még egy magyarázattal. A hálózati szereplőknek egyedi címük van, úgynevezett IP címük. Ez a korábban említett IP protokoll a TCP/IP-ből, az ISO-OSI modell harmadik, hálózati rétegéből.

A világot korábban az IPV4 szerint osztották fel. Az egyetemek többek között úgynevezett autonóm zónákat kaptak. A BME például a 152.66.XXX.XXX úgynevezett B osztályú hálózatot. Azért B osztályú, mert az az első két szám kitöltött, és 256×256 számítógépnek van rata hely. 4 oktet. 4 byte-os cím. Vannak A osztályú, illetve C osztályú hálózatok is ezen terminológia szerint. 🙂

https://hu.wikipedia.org/wiki/IP-cím

http://www.vlsm-calc.net/ipclasses.php

Egy idő után azonban kifogytak ezek az IPV4-es címek, ezért van mára IPV6. Ez jóval több számítógép világhálóra (Internetre) kötését teszi lehetővé. Az IPV6 címek 128 bit hosszúak. Ez sose fog kifogyni, pláne, hogy jelenleg is ún alhálózatokba vannak szervezve a gépek, ahol az egyes végpontoknak pl. egy kábel-hálózatnál csak belső IP-címük van – ezért nem lehet az otthoni gépből többek között webszervert csinálni. Elvileg az adatátviteli technológia szimmetrikus is lehetne, de erősen a letöltési sávszélesség nagyobb az otthoni gépünkön. A sok-sok web, játék és egyéb szervert az úgynevezett “gerinchálózatra” kötik, “szerverfarmokon”. Jelenleg egyébként a két címzési mód keverve van jelen a világban. 🙂

https://hu.wikipedia.org/wiki/IPv6

Ezek után nézzük meg a Debian 10-es Linux-unk hálózati interface konfigurációját. Az ifconfig paranccsal írhatjuk ki a hálózati interfészeinket root-ként (rendszergazdaként). Régebben a hálózatot manuálisan kellett beállítani, ma már pl. az otthoni wifi hálózatot teljesen automatikusan konfigurálja a rendszer. 🙂

root@gergo1:~# ifconfig
lo: flags=73 mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1000 (Local Loopback)
RX packets 27044 bytes 2149063 (2.0 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 27044 bytes 2149063 (2.0 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
wlp2s0: flags=4163 mtu 1500
inet 192.168.0.173 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe80::60da:3b20:dfeb:9fe0 prefixlen 64 scopeid 0x20
ether 5c:e0:c5:5d:e2:01 txqueuelen 1000 (Ethernet)
RX packets 1241841 bytes 1315097554 (1.2 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 593763 bytes 132026415 (125.9 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

Jól látható a wlp2s0 interface konfigurációja, a “lo” – localhost, konfigurációja után. A belső hálózati IP-címünk a 192.168.0.173. 🙂

Telnet, HTTP 80-as port

Fel kellett installálnom a szokásos apt-get install paranccsal a telnet csomagot. Úgy látszik már annyira kiment a divatból ez az ódon parancs, hogy fenn sincs a distribution-ban alapból. 🙂

Régebben két Linux (UNIX) gép között leginkább csak a telnet parancs volt. Ez kódolatlan plain text (sima szöveges) adatátvitel két hálózati szereplő között. Hja, “biztonság”, hol volt akkor még. Védett és zárt egyetemi hálózatokon keresztül két professzor “talkolt” a cső két végén. 🙂

Nézem, hogy van nálam fenn webszerver (apache). Akkor próbáljuk ki a telnet parancsot! Első paramétere a hoszt, második a portszám, ez 0 – 65535-ig (2^16-1) lehet egy egész szám. (Linux-on – ahogy minden más hálózatba kötött gépen – a szolgáltatások portokon csücsülnek.)

gvamosi@gergo1:~$ telnet localhost 80
Trying ::1…
Connected to localhost.
Escape character is '^]'.
GET /info.php

A HTTP protokoll a 80-as porton kommunikál. Ez az egész világon így van alapból. Végső soron a HTTPS 443-as port is ugyanez, csak az még be van “csomagolva” egy secure (biztonságos) layer-be (rétegbe). 🙂 Miután beírtuk a terminálba, hogy GET /info.php, jön a php info oldal a www root-ból (/var/www/html).

gvamosi@gergo1:~$ ls -l /var/www/html
total 16
-rw-r--r-- 1 root root 10701 Aug 28 2017 index.html
-rw-r--r-- 1 root root 20 Aug 28 2017 info.php

A www root lekérdezése egész egyszerűen a “GET /” kéréssel lehetséges. Az escape karakter a “ctrl+]” billentyű-kombóval érhető el. Kérdem én: magyar billentyűzeten ez hogyan lehetséges? Persze nálam többnyire angol van. Az escape beírása után pl. quit paranccsal juthatunk vissza a command shell-ünkbe. Ennyi az egész! 🙂 Jól látható az egész TCP/IP protokoll csővezeték volta, és a HTTP egyszerűsége. Végsősoron minden protokoll hasonlóképpen működik, többek között az SMTP is hasonlóan vezérelhető plain text parancsokkal.

Linux parancsok II. – és a pipeline

Linux illetve UNIX-ok alatt van egy nagyon izgalmas eszköz a fejlesztő vagy rendszergazda kezében. Ez a “|” pipe jel. 🙂

https://www.guru99.com/linux-pipe-grep.html

A “|” pipe jel segítségével az egyik parancs kimenetét a következő parancs bemenetére köthetjük, így létrehozva egy pipeline-t, azaz egy csővezetéket. Értsd: egy parancs STDOUT-ját a következő parancs STDIN-jére lehet kötni. Természetesen több tagon keresztül lehet “vezetni” az adatfolyamot.

Nézzük meg a Linux/UNIX világ két legkedveltebb pager-ét, a more-t és a less-t.

gvamosi@gergo1:~$ ls -lR / | more

gvamosi@gergo1:~$ ls -lR / | less

A közös bennük, hogy az ls -lR miatt várhatóan jó hosszú listába engednek betekintést nyújtani, hiszen erre vannak kitalálva. A more csak előre “lép”, és minden UNIX rendszeren telepítve van, a less oda-vissza hagyja magát scrollozni, és implementációfüggő. 🙂

Bonyolítsuk meg a grep, azaz az egrep (reguláris kifejezések megengedettek, leírása később) funkcióval, és a hiba STDERR kimenetet irányítsuk át a null device-ba, azaz a “semmibe”.

gvamosi@gergo1:~$ ls -lR / 2> /dev/null | egrep "/home/gvamosi:$"
/home/gvamosi:

Ez a parancs egyszer ki fogja írni a “/home/gvamosi:” sztringet, mivel a gvamosi felhasználó által bebarangolható könyvtárak és fájlok között a saját home könyvtára egyszer szerepel. A grep parancs egyébként sor szinten keres szövegben adott mintát (szöveg vagy reguláris kifejezés). 🙂

Hogy miért írok a parancssori csővezetékről, azaz a pipeline-ról? A válasz abban rejlik, hogy ez mindenhol visszaköszön az infotudományban. Akár a TCP/IP adatátviteli protokoll stack, tehát az internetet felépítő protokollstruktúra – hiszen tekinthetjük a hálózatot csővezetéknek, akár egy modern és friss terminológia, a “Pipeline as Code” Jenkins alatt. 🙂

https://hu.wikipedia.org/wiki/TCP/IP

https://jenkins.io/doc/book/pipeline-as-code/