This shows you the differences between two versions of the page.
uso:laboratoare:laborator-05:connection [2021/11/02 08:49] andrei.david0207 [Conectarea la rețea și la Internet] |
uso:laboratoare:laborator-05:connection [2022/11/04 15:46] (current) sergiu.weisz [Configurarea nivelului Internet] |
||
---|---|---|---|
Line 2: | Line 2: | ||
<note> | <note> | ||
- | Pentru a parcurge această secțiune este recomandat să descărcați ultima versiune a respository-ului laboratorului. Pentru a descărca ultima versiune a repository-ului rulați comanda ''%%git pull%%'' în directorul ''%%~/uso-lab%%''. | + | Pentru a parcurge această secțiune este recomandat să descărcați ultima versiune a respository-ului laboratorului. Pentru a descărca ultima versiune a repository-ului rulați comanda ''%%git pull%%'' în directorul ''%%~/uso-lab/labs/03-user/lab-container/%%''. |
- | Infrastructura laboratorului este bazată pe containere docker ale căror imagini vor fi generate pe propriul calculator. Dacă nu aveți deja instalat Docker Engine pe sistem, rulați comanda ''%%~/uso-lab/labs/03-user/lab-container/lab_prepare.sh install%%'' pentru a vă instala aplicația. | + | Infrastructura laboratorului este bazată pe containere docker ale căror imagini vor fi generate pe propriul calculator. Dacă nu aveți deja instalat Docker Engine pe sistem, scriptul ''%%~/uso-lab/labs/03-user/lab-container/lab_prepare.sh install fizic%%'' vă va instala aplicația. |
- | După ce ați terminat de lucrat vă recomandăm să opriți containerele rulând comanda ''%%./lab_prepare.sh delete%%'' în directorul ''%%~/uso-lab/labs/03-user/lab-container%%''. | + | După ce ați terminat de lucrat vă recomandăm să opriți containerele rulând comanda ''%%./lab_prepare.sh delete%%'' în directorul ''%%~/uso-lab/labs/03-user/lab-container/%%''. |
</note> | </note> | ||
- | În cadrul acestei secțiuni vom învăța cum să reparăm problemele de conectivitate la rețea (sau, informal, rezolvarea problemei "nu-mi merge Internetul"). Pentru a face asta este necesar să parcurgem toate nivelurile de rețea prin care trec datele pentru a fi trimise în Internet. | + | În cadrul acestei secțiuni vom învăța cum să reparăm problemele de conectivitate la rețea sau în alte cuvinte, problema "nu-mi merge Internetul". Pentru a face asta este necesar să parcurgem toate nivelurile de rețea prin care trec datele pentru a fi trimise în Internet. |
- | În continuare vom prezenta pașii pe care îi urmăm ca să verificăm funcționalitatea nivelului de rețea și cum putem să îl configurăm sumar. | + | In continuare vom prezenta pașii pe care îi urmăm ca să verificăm funcționalitatea conexiunii la Internet și cum putem să facem niște configurații sumare. |
===== Interacţiunea cu nivelul fizic ===== | ===== Interacţiunea cu nivelul fizic ===== | ||
- | Primul nivel cu care interacționăm este nivelul fizic, care are rolul de a trimite date sub formă de semnale prin mediul de transmisie. De exemplu, semnalele electrice sunt transmise prin fir de cupru, pulsurile luminoase prin | + | Primul nivel cu care interacționăm este nivelul fizic, care are rolul de a trimite date sub formă de semnale prin mediul de transmisie. De exemplu, semnalele electrice sunt transmise prin fir de cupru, pulsurile luminoase prin fibră optică și undele radio prin wireless. |
- | fibră optică și undele radio prin wireless. | + | |
Așa arată un cablu de cupru de tip UTP (Unshielded Twisted Pair): | Așa arată un cablu de cupru de tip UTP (Unshielded Twisted Pair): | ||
Line 22: | Line 21: | ||
{{:uso:laboratoare:laborator-03:utp.png?500|Cablu UTP}} | {{:uso:laboratoare:laborator-03:utp.png?500|Cablu UTP}} | ||
- | O altă componentă a nivelului fizic este placa de rețea a sistemului (în engleză, NIC - *Network Interface Card*), care va trimite datele prin mediul de transmisie. | + | O altă componentă a nivelului fizic este placa de rețea a sistemului (in engleză, NIC - //Network Interface Card//), care va trimite datele prin mediul de transmisie. |
- | Majoritatea timpului problemele de conexiune la Internet vin de la faptul că nu este conectat cablul de Internet la placa de rețea, sau de la faptul că avem conexiune slabă la rețeaua wireless. | + | Majoritatea timpului problemele de conexiune la Internet vin de la faptul că nu este conectat cablul de Internet la placa de rețea sau de la faptul că avem conexiune slabă la rețeaua wireless. |
La nivel fizic, putem verifica conexiunea și funcționalitatea unei plăci de rețea uitându-ne la ledurile care reprezintă conexiunea la mediul fizic. Observăm în GIF-ul de mai jos cum arată ledurile unei plăci de rețea funcționale. Dacă acestea nu sunt aprinse, atunci nu vom avea conectivitate la rețea. | La nivel fizic, putem verifica conexiunea și funcționalitatea unei plăci de rețea uitându-ne la ledurile care reprezintă conexiunea la mediul fizic. Observăm în GIF-ul de mai jos cum arată ledurile unei plăci de rețea funcționale. Dacă acestea nu sunt aprinse, atunci nu vom avea conectivitate la rețea. | ||
Line 33: | Line 32: | ||
<note> | <note> | ||
- | În general, în Linux fiecare placă de rețea are asociată câte o interfață de rețea. | + | Pentru rularea acestui demo rulați în directorul ''%%~/uso-lab/labs/03-user/lab-container/%%'' comanda ''%%./lab_prepare.sh install fizic%%''. Pentru a ne conecta la infrastructura pentru această secțiune vom folosi comanda ''%%./lab_prepare.sh connect fizic%%'' |
- | </note> | + | |
- | + | ||
- | <note> | + | |
- | Pentru rularea acestui demo rulați în directorul ''%%~/uso-lab/labs/03-user/lab-container%%'' comanda ''%%./lab_prepare.sh install fizic%%''. Pentru a ne conecta la infrastructura pentru această secțiune vom folosi comanda ''%%./lab_prepare.sh connect fizic%%'' | + | |
</note> | </note> | ||
Line 43: | Line 38: | ||
<note> | <note> | ||
- | Există interfețe care nu corespund niciunei plăci de rețea fizice. De exemplu ``loopback`` este o interfață virtuală, de auto-adresare, care se adresează sistemului însuși. Este numită ``lo`` in Linux. | + | Există interfețe care nu corespund niciunei plăci de rețea fizice. De exemplu ''%%loopback%%'' este o interfață virtuală, de auto-adresare, care se adresează sistemului însuși. Este numită ''%%lo%%'' in Linux. |
</note> | </note> | ||
Line 52: | Line 47: | ||
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 | 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 | ||
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 | link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 | ||
- | 293: eth0@if294: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default | + | 99: eth0@if100: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default |
link/ether 02:42:0a:0a:0a:01 brd ff:ff:ff:ff:ff:ff link-netnsid 0 | link/ether 02:42:0a:0a:0a:01 brd ff:ff:ff:ff:ff:ff link-netnsid 0 | ||
- | 297: eth1@if298: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default | + | 113: eth1@if114: <BROADCAST,MULTICAST> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default |
link/ether 02:42:0b:0b:0b:01 brd ff:ff:ff:ff:ff:ff link-netnsid 0 | link/ether 02:42:0b:0b:0b:01 brd ff:ff:ff:ff:ff:ff link-netnsid 0 | ||
- | 299: eth2@if300: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default | + | 115: eth2@if116: <BROADCAST,MULTICAST> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default |
link/ether 02:42:0c:0c:0c:01 brd ff:ff:ff:ff:ff:ff link-netnsid 0 | link/ether 02:42:0c:0c:0c:01 brd ff:ff:ff:ff:ff:ff link-netnsid 0 | ||
</code> | </code> | ||
+ | Starea fiecărei interfețe de rețea este reprezentată de numărul interfeței și numele ei, împreună cu parametrii săi de rulare. Majoritatea informațiilor afișate de comanda de mai sus nu sunt relevante pentru noi. O opțiune relevantă este valoarea ''%%state%%'', urmată de starea interfeței de rețea, care poate să fie ''%%UP%%'', ''%%DOWN%%'' sau ''%%UNKNOWN%%''. | ||
+ | <note> | ||
- | Starea fiecărei interfețe de rețea este reprezentată de numărul interfeței și numele ei, împreună cu parametrii săi de rulare. Majoritatea informațiilor afișate de comanda de mai sus nu sunt relevante pentru noi. O opțiune relevantă este valoarea ``state``, urmată de starea interfeței de rețea, care poate să fie ``UP``, ``DOWN`` sau ``UNKNOWN``. | ||
- | |||
- | <note> | ||
Formatul pentru numele interfețelor diferă de la o distribuție la alta. În cadrul infrastructurii de laborator folosim containere de tip Docker în cadrul cărora numele interfețelor este de forma ''%%ethX%%'', unde X este un număr. În funcție de distribuția pe care rulăm numele interfețelor poate să se fie într-un format diferit. | Formatul pentru numele interfețelor diferă de la o distribuție la alta. În cadrul infrastructurii de laborator folosim containere de tip Docker în cadrul cărora numele interfețelor este de forma ''%%ethX%%'', unde X este un număr. În funcție de distribuția pe care rulăm numele interfețelor poate să se fie într-un format diferit. | ||
</note> | </note> | ||
Line 73: | Line 67: | ||
<code > | <code > | ||
- | root@uso:~# ip link set up dev eth1 | + | root@uso:~# ip link set dev eth1 up |
</code> | </code> | ||
Mereu, după ce rulăm o comandă, trebuie să verificăm dacă s-a efectuat cu succes, folosind o metodă de verificare. În cazul de față vom folosi tot comanda ''%%ip link show%%'': | Mereu, după ce rulăm o comandă, trebuie să verificăm dacă s-a efectuat cu succes, folosind o metodă de verificare. În cazul de față vom folosi tot comanda ''%%ip link show%%'': | ||
Line 81: | Line 75: | ||
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 | 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 | ||
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 | link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 | ||
- | 293: eth0@if294: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default | + | 99: eth0@if100: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default |
link/ether 02:42:0a:0a:0a:01 brd ff:ff:ff:ff:ff:ff link-netnsid 0 | link/ether 02:42:0a:0a:0a:01 brd ff:ff:ff:ff:ff:ff link-netnsid 0 | ||
- | 297: eth1@if298: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default | + | 113: eth1@if114: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default |
link/ether 02:42:0b:0b:0b:01 brd ff:ff:ff:ff:ff:ff link-netnsid 0 | link/ether 02:42:0b:0b:0b:01 brd ff:ff:ff:ff:ff:ff link-netnsid 0 | ||
- | 299: eth2@if300: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default | + | 115: eth2@if116: <BROADCAST,MULTICAST> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default |
link/ether 02:42:0c:0c:0c:01 brd ff:ff:ff:ff:ff:ff link-netnsid 0 | link/ether 02:42:0c:0c:0c:01 brd ff:ff:ff:ff:ff:ff link-netnsid 0 | ||
</code> | </code> | ||
Line 91: | Line 85: | ||
Porniți interfața de rețea ''%%eth2%%''. | Porniți interfața de rețea ''%%eth2%%''. | ||
- | |||
- | <note> | ||
- | Ieșiți din docker-ul ''%%fizic%%'' folosind comanda ''%%exit%%''. | ||
- | </note> | ||
===== Configurarea nivelului Internet ===== | ===== Configurarea nivelului Internet ===== | ||
==== Identificarea adresei de Internet ==== | ==== Identificarea adresei de Internet ==== | ||
+ | |||
+ | Pentru a ne deconecta de la infrastructura anterioara folosim comanda ''%%exit%%''. | ||
<note> | <note> | ||
- | Pentru rularea acestui demo rulați în directorul ''%%~/uso-lab/labs/03-user/lab-container%%'' comanda ''%%./lab_prepare.sh install internet%%''. Pentru a ne conecta la infrastructura pentru această secțiune vom folosi comanda ''%%./lab_prepare.sh connect internet%%'' | + | Pentru rularea acestui demo rulați în directorul ''%%~/uso-lab/labs/03-user/lab-container/%%'' comanda ''%%./lab_prepare.sh install internet%%''. Pentru a ne conecta la infrastructura pentru această secțiune vom folosi comanda ''%%./lab_prepare.sh connect internet%%'' |
</note> | </note> | ||
- | Internetul este o interconectare de dispozitive, numite stații și organizate în | + | Internetul este o interconectare de dispozitive, numite stații și organizate în rețele, care se extinde pe toată Planeta. Datele trimise în Internet trebuie redirecționate de la un nod la altul, așa incât să ajungă rapid de la o stație la altă stație. |
- | rețele, care se extinde pe toată Planeta. Datele trimise în Internet trebuie | + | |
- | redirecționate de la un nod la altul, așa incât să ajungă rapid de la o | + | |
- | stație la altă stație. | + | |
{{:uso:laboratoare:laborator-05:lan.png?500|LAN (Local Area Network)}} | {{:uso:laboratoare:laborator-05:lan.png?500|LAN (Local Area Network)}} | ||
- | Deci, pentru ca o stație să comunice cu o altă stație din Internet, trebuie | + | Deci, pentru ca o stație să comunice cu o altă stație din Internet, trebuie ca cele doua stații să fie conectate la Internet. |
- | ca cele doua stații să fie conectate la Internet. | + | |
<note> | <note> | ||
- | Mai exact, stațiile trebuie sa aiba un punct de ieșire din rețeaua locală, conectat la restul | + | Mai exact, stațiile trebuie sa aiba un punct de ieșire din rețeaua locală, conectat la restul rețelelor din Internet, care se numește //default gateway// și de care vom aminti mai târziu. |
- | rețelelor din Internet, care se numește default gateway și de care vom menționa mai târziu. | + | |
</note> | </note> | ||
- | Mai apoi, cele două stații trebuie să se poată adresa una alteia. Adică fiecare stație | + | Mai apoi, cele două stații trebuie să se poată adresa una alteia. Adică fiecare stație are nevoie de un identificator, o adresă. Cum fiecare casă din lume are o adresă cu care poate fi identificată unic, așa și fiecare stație are o adresă unică in Internet numită adresa IP (//Internet Protocol//). |
- | are nevoie de un identificator, o adresă. Cum fiecare casă din lume are o adresă cu | + | |
- | care poate fi identificată unic, așa și fiecare stație are o adresă unică in Internet | + | |
- | numită adresa IP (//Internet Protocol//). | + | |
Fiecare interfață de rețea este o cale diferită către Internet, deci fiecare are nevoie de a avea configurată câte o adresă IP. | Fiecare interfață de rețea este o cale diferită către Internet, deci fiecare are nevoie de a avea configurată câte o adresă IP. | ||
Line 169: | Line 155: | ||
mv: cannot move '/etc/resolv.conf.dhclient-new.35' to '/etc/resolv.conf': Device or resource busy | mv: cannot move '/etc/resolv.conf.dhclient-new.35' to '/etc/resolv.conf': Device or resource busy | ||
</code> | </code> | ||
+ | <note> | ||
- | <note warning> | + | Linia ''%%mv: cannot move '/etc/resolv.conf.dhclient-new.35' to '/etc/resolv.conf': Device or resource busy%%'' apare mereu în containerele docker atunci când încercăm să obținem o adresă IP folosind comanda ''%%dhclient%%''. Nu este o problemă dacă aceasta apare. |
- | Linia ''%%mv: cannot move '/etc/resolv.conf.dhclient-new.35' to '/etc/resolv.conf': Device or resource busy%%'' apare mereu în containerele docker atunci când încercăm să obținem o adresă IP folosind comanda ''%%dhclient%%''. **NU** este o problemă dacă aceasta apare. | + | |
</note> | </note> | ||
Mai sus am rulat comanda pentru a obține o adresă IP pentru interfața ''%%eth1%%''. | Mai sus am rulat comanda pentru a obține o adresă IP pentru interfața ''%%eth1%%''. | ||
+ | <note> | ||
Comanda ''%%dhclient%%'' este bazată pe protocolul DHCP (//Dynamic Host Configuration Protocol//). Acesta presupune că există un server pe rețea care cunoaște ce IP-uri sunt folosite pe rețea și care poate să ofere adrese IP calculatoarelor care fac cereri pe rețea. ''%%dhclient%%'' face o cerere de rezervare a unei adrese IP către serverul DHCP de pe rețea. | Comanda ''%%dhclient%%'' este bazată pe protocolul DHCP (//Dynamic Host Configuration Protocol//). Acesta presupune că există un server pe rețea care cunoaște ce IP-uri sunt folosite pe rețea și care poate să ofere adrese IP calculatoarelor care fac cereri pe rețea. ''%%dhclient%%'' face o cerere de rezervare a unei adrese IP către serverul DHCP de pe rețea. | ||
+ | </note> | ||
=== Recapitulare - Afișarea adreselor IP configurate pe interfețele de rețea === | === Recapitulare - Afișarea adreselor IP configurate pe interfețele de rețea === | ||
Line 190: | Line 176: | ||
=== Ștergerea unei configurații de rețea de pe o interfață === | === Ștergerea unei configurații de rețea de pe o interfață === | ||
- | Pentru a șterge o adresă IP de pe o interfața folosim comanda ''%%ip address flush%%'' în felul următor: | + | Pentru șterge o adresă IP de pe o interfața folosim comanda ''%%ip address flush%%'' în felul următor: |
<code > | <code > | ||
Line 198: | Line 184: | ||
link/ether 02:42:0b:0b:0b:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0 | link/ether 02:42:0b:0b:0b:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0 | ||
</code> | </code> | ||
+ | <note> | ||
- | <note> | + | Putem să afișăm configurația unei singure interfețe de rețea folosind numele interfeței ca parametru pentru comanda ''%%ip address show%%''. |
- | Putem să afișăm configurația unei singure interfețe de rețea folosind numele interfeței ca parametru pentru comanda ''%%ip address show%%'' | + | |
</note> | </note> | ||
Line 208: | Line 194: | ||
==== Verificarea conectivității la o altă stație ==== | ==== Verificarea conectivității la o altă stație ==== | ||
+ | |||
<note> | <note> | ||
Pentru rularea acestui demo, comenzile vor fi rulate în cadrul mașinii virtuale USO. | Pentru rularea acestui demo, comenzile vor fi rulate în cadrul mașinii virtuale USO. | ||
+ | Pentru a verifica conexiunea dintre două stații folosim comanda ''%%ping%%''. Această comandă trimite mesaje către o stație și așteaptă un răspuns de la ea. | ||
</note> | </note> | ||
- | |||
- | Pentru a verifica conexiunea dintre două stații folosim comanda ''%%ping%%''. Această comandă trimite mesaje către o stație și așteaptă un răspuns de la ea. | ||
- | |||
Atunci când testăm conexiunea la internet, vrem să verificăm câteva aspecte, odată ce am obținut o adresă IP de la serverul DHCP: | Atunci când testăm conexiunea la internet, vrem să verificăm câteva aspecte, odată ce am obținut o adresă IP de la serverul DHCP: | ||
Line 224: | Line 209: | ||
<code > | <code > | ||
- | student@uso:~# ping -c 4 8.8.8.8 | + | student@uso:~$ ping -c 4 8.8.8.8 |
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. | PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. | ||
64 bytes from 8.8.8.8: icmp_seq=1 ttl=61 time=23.0 ms | 64 bytes from 8.8.8.8: icmp_seq=1 ttl=61 time=23.0 ms | ||
Line 240: | Line 225: | ||
<code > | <code > | ||
- | student@uso:~# ping 10.10.10.10 | + | student@uso:~$ ping 10.10.10.10 |
PING 10.10.10.10 (10.10.10.10) 56(84) bytes of data. | PING 10.10.10.10 (10.10.10.10) 56(84) bytes of data. | ||
From 10.10.10.3 icmp_seq=1 Destination Host Unreachable | From 10.10.10.3 icmp_seq=1 Destination Host Unreachable | ||
Line 261: | Line 246: | ||
<code > | <code > | ||
- | student@uso:~# ip route show | + | student@uso:~$ ip route show |
- | default via 10.0.2.2 dev enp0s3 proto dhcp metric 100 | + | default via 192.168.40.2 dev eth0 proto dhcp src 192.168.40.128 metric 100 |
- | 10.0.2.0/24 dev enp0s3 proto kernel scope link src 10.0.2.15 metric 100 | + | 10.10.10.0/24 dev br1 proto kernel scope link src 10.10.10.253 |
- | 169.254.0.0/16 dev enp0s3 scope link metric 1000 | + | 11.11.11.0/24 dev br2 proto kernel scope link src 11.11.11.253 |
- | 192.168.56.0/24 dev enp0s8 proto kernel scope link src 192.168.56.4 metric 101 | + | 12.12.12.0/24 dev br3 proto kernel scope link src 12.12.12.253 |
+ | 172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown | ||
+ | 192.168.40.0/24 dev eth0 proto kernel scope link src 192.168.40.128 metric 100 | ||
+ | 192.168.40.2 dev eth0 proto dhcp scope link src 192.168.40.128 metric 100 | ||
+ | 192.168.202.0/24 dev eth1 proto kernel scope link src 192.168.202.128 metric 100 | ||
+ | 192.168.202.1 dev eth1 proto dhcp scope link src 192.168.202.128 metric 100 | ||
</code> | </code> | ||
- | + | Observăm că adresa IP a default gateway-ului este ''%%192.168.40.2%%'', deoarece acesta se află pe linia care conține șirul de caractere ''%%default%%''. | |
- | Observăm că adresa IP a default gateway-ului este ''%%10.0.2.2%%'', deoarece acesta se află pe linia care conține șirul de caractere ''%%default%%''. | + | |
=== Recapitulare - Afișarea adresei IP configurată pe o interfață === | === Recapitulare - Afișarea adresei IP configurată pe o interfață === | ||
- | Aflați adresa de rețea de pe interfața ''%%enp0s3%%''. | + | Aflați adresa de rețea de pe interfața ''%%eth1%%''. |
- | + | ||
- | <note> | + | |
- | Adresa IP a gateway-ului și adresa IP a interfeței ''%%enp0s3%%'' sunt foarte similare. Acest lucru se întâmplă deoarece stațiile se află în aceeași rețea. | + | |
- | </note> | + | |
=== Exercițiu - Verificarea conectivității cu gateway-ul === | === Exercițiu - Verificarea conectivității cu gateway-ul === | ||
Line 282: | Line 267: | ||
Verificați conexiunea cu gateway-ul folosind comanda ''%%ping%%''. | Verificați conexiunea cu gateway-ul folosind comanda ''%%ping%%''. | ||
- | Pentru verificarea conexiunii la Internet este bine să verificăm cu o adresă consacrată, în care avem încredere că nu va avea probleme tehnice. Un astfel de exemplu este serverul oferit de Google de la adresa IP ''%%1.1.1.1%%''. | + | <note> |
+ | Pentru verificarea conexiunii la Internet este bine să verificăm cu o adresă consacrată, în care avem încredere că nu va avea probleme tehnice. Un astfel de exemplu este serverul oferit de Cloudflare de la adresa IP ''%%1.1.1.1%%''. | ||
+ | </note> | ||
=== Exercițiu - Verificarea conectivității la Internet === | === Exercițiu - Verificarea conectivității la Internet === | ||
Verificați conexiunea la serverul ''%%8.8.8.8%%'' oferit de Google folosind comanda ''%%ping%%''. | Verificați conexiunea la serverul ''%%8.8.8.8%%'' oferit de Google folosind comanda ''%%ping%%''. | ||
+ | ==== Investigarea serviciului DNS ==== | ||
+ | |||
+ | După cum ați observat, până acum am lucrat numai cu adrese IP, dar noi lucrăm în viața de zi cu zi cu numele site-urilor, deoarece ne este mai ușor să reținem nume decât adrese IP. | ||
+ | |||
+ | Pentru a rezolva această necesitate folosim serviciul DNS (Domain Name Server). Acesta este oferit de un server către care noi trimitem cereri de //lookup// pentru o adresa //hostname// cum ar fi ''%%www.google.com%%''. Serverul DNS va răspunde cu adresa IP asociată cu adresa cerută. | ||
+ | |||
+ | Ne dorim să avem un serviciu DNS funcțional în permanență pe sistemul pe care lucrăm. | ||
+ | |||
+ | În mod implicit serviciul DNS este configurat prin DHCP. | ||
+ | |||
+ | === Identificarea serviciului DNS folosit implicit === | ||
+ | |||
+ | Serviciul DNS poate fi configurat în multe moduri care depind de platforma pe care o folosim. Pentru mașina virtuala folosită de noi ne putem folosi de utilitarul ''%%nmcli%%'' pentru a identifica serverul DNS folosit. Comanda ''%%grep%%'' identifică din rezultatul unei comenzi doar linia care conține șirul de caractere ''%%DNS%%''. | ||
+ | |||
+ | <code > | ||
+ | student@uso:~$ nmcli dev show | grep DNS | ||
+ | IP4.DNS[1]: 10.0.2.3 | ||
+ | </code> | ||
+ | Exista o posibilitate ca pe noua masina virtuala de laborator sa se gaseasca serverul DNS curent cu comanda: | ||
+ | <code> | ||
+ | student@uso:~$ resolvectl status | grep 'Current DNS' | ||
+ | Current DNS Server: 1.1.1.1 | ||
+ | </code> | ||
+ | |||
+ | Conform cu outputul comenzii, serverul DNS către care sunt trimise comenzi este ''%%1.1.1.1%%''. | ||
+ | |||
+ | === Efectuarea cererilor DNS === | ||
+ | |||
+ | Pentru a verifica funcționalitatea serviciului DNS, putem să facem o cerere DNS folosind comanda ''%%host%%'' în felul următor: | ||
+ | |||
+ | <code > | ||
+ | student@uso:~$ host elf.cs.pub.ro | ||
+ | elf.cs.pub.ro has address 141.85.227.116 | ||
+ | elf.cs.pub.ro mail is handled by 10 elf.cs.pub.ro. | ||
+ | </code> | ||
+ | Rezultatul rulării comenzii ''%%host%%'' este o lista cu servicii și adrese care pot fi identificate prin numele ''%%elf.cs.pub.ro%%''. Pe linia care conține șirul de caractere ''%%address%%'' se află adresa IPv4 asociată numelui. Observăm că serverul ''%%elf.cs.pub.ro%%'' găzduiește și un server de mail. Acest lucru este evidențiat de linia care conține parametrul ''%%mail%%''. | ||
+ | |||
+ | === Exemplu - Efectuarea cererilor DNS în mod implicit === | ||
+ | |||
+ | Cererile DNS nu trebuie să fie făcute direct de noi atunci când încercăm să accesăm o resursă din Internet folosind un nume, deoarece aplicațiile fac cereri în mod implicit. | ||
+ | |||
+ | <code > | ||
+ | student@uso:~$ ping google.com | ||
+ | PING google.com (216.58.214.238) 56(84) bytes of data. | ||
+ | 64 bytes from bud02s24-in-f14.1e100.net (216.58.214.238): icmp_seq=1 ttl=63 time=19.5 ms | ||
+ | 64 bytes from bud02s24-in-f14.1e100.net (216.58.214.238): icmp_seq=2 ttl=63 time=21.6 ms | ||
+ | 64 bytes from bud02s24-in-f14.1e100.net (216.58.214.238): icmp_seq=3 ttl=63 time=21.3 ms | ||
+ | 64 bytes from bud02s24-in-f14.1e100.net (216.58.214.238): icmp_seq=4 ttl=63 time=19.4 ms | ||
+ | ^C | ||
+ | --- google.com ping statistics --- | ||
+ | 4 packets transmitted, 4 received, 0% packet loss, time 3006ms | ||
+ | rtt min/avg/max/mdev = 19.377/20.426/21.588/1.009 ms | ||
+ | </code> | ||
+ | Observați că utilitarul ''%%ping%%'' a aflat de unul singur care este adresa IP asociată numelui ''%%google.com%%'' și a făcut cererea în fundal și a verificat conexiunea cu serverul de la adresa IP ''%%216.58.214.238%%''. | ||
+ | |||
+ | === Reconfigurarea temporară a serviciului DNS === | ||
+ | |||
+ | În caz că vrem să schimbăm temporar serverul DNS pe care îl folosim trebuie să modificăm fișierul ''%%/etc/resolv.conf%%''. Acest fișier specifică DNS-ul care va fi folosit pentru cereri pe linia care conține cuvântul nameserver, după cum puteți vedea mai jos. | ||
+ | |||
+ | <code > | ||
+ | student@uso:~$ cat /etc/resolv.conf | ||
+ | student@uso:~$ cat /etc/resolv.conf | ||
+ | <...> | ||
+ | nameserver 127.0.0.53 | ||
+ | options edns0 | ||
+ | </code> | ||
+ | Dacă schimbăm adresa serverului DNS cu altă adresă, cum ar fi cea a serverului DNS oferit de Google, putem să vedem o schimbare în răspunsurile de la serverul DNS pentru unele site-uri. | ||
+ | |||
+ | <code > | ||
+ | student@uso:~$ host google.com | ||
+ | google.com has address 172.217.20.14 | ||
+ | google.com has IPv6 address 2a00:1450:400d:803::200e | ||
+ | <...> | ||
+ | student@uso:~$ echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf | ||
+ | student@uso:~$ cat /etc/resolv.conf | ||
+ | nameserver 8.8.8.8 | ||
+ | student@uso:~$ host google.com | ||
+ | google.com has address 172.217.18.78 | ||
+ | google.com has IPv6 address 2a00:1450:400d:809::200e | ||
+ | <...> | ||
+ | </code> | ||
+ | <note> | ||
+ | Atenție: | ||
+ | |||
+ | Acestea sunt modificări temporare folosite pentru depanarea problemelor cu serviciul DNS. | ||
+ | </note> | ||
+ | |||
+ | === Exercițiu - Schimbarea serverului DNS folosit === | ||
+ | |||
+ | * Realizați modificările necesare astfel încât cererile de tip DNS să fie trimise către serverul de DNS oferit de CloudFlare de la adresa ''%%1.1.1.1%%''; | ||
+ | * Afișați cu ce adresă răspunde noul server DNS pentru numele ''%%google.com%%''. | ||
+ | |||
+ | ===== Configurarea nivelului Transport ===== | ||
+ | |||
+ | Atunci când folosim Internetul, ce facem de fapt este că ne conectăm la aplicații care rulează pe servere în Internet și noi pornim la rândul nostru aplicații pe calculatorul nostru care așteaptă conexiuni din Internet. | ||
+ | |||
+ | Pentru a distinge aplicațiile și destinația mesajelor, folosim conceptul de porturi. Astfel, fiecare aplicație deschide un port pentru a comunica cu exteriorul. | ||
+ | |||
+ | Portul este o adresă locală unei stații. Dacă adresa IP identifică stația, portul identifică aplicația de rețea de pe stație. Astfel putem avea mai multe aplicații rețea pe o stație. | ||
+ | |||
+ | Există două tipuri de porturi care pot fi deschise, în funcție de protocolul folosit: | ||
+ | |||
+ | * porturi TCP (//Transmission Control Protocol//), folosite de aplicații care depind de trimiterea corectă și în ordine a informației, cum ar fi servere web; | ||
+ | * porturi UDP (//User Datagram Protocol//), folosite de aplicații care trebuie să trimită informație repede și care sunt rezistente la greșeli de trimitere ale pachetelor, cum ar fi aplicații de video streaming | ||
+ | |||
+ | ==== Conectivitatea între aplicații de rețea folosind porturi ==== | ||
+ | |||
+ | Pentru afișarea porturilor deschise, pe care comunică o aplicație, folosim comanda ''%%netstat%%'': | ||
+ | |||
+ | <code > | ||
+ | student@uso:~$ sudo netstat -tlpn | ||
+ | Active Internet connections (only servers) | ||
+ | Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name | ||
+ | tcp 0 0 127.0.0.1:5939 0.0.0.0:* LISTEN 794/teamviewerd | ||
+ | tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 530/systemd-resolve | ||
+ | tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 693/sshd: /usr/sbin | ||
+ | tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 572/cupsd | ||
+ | tcp 0 0 127.0.0.1:6010 0.0.0.0:* LISTEN 2630/sshd: student@ | ||
+ | tcp6 0 0 :::22 :::* LISTEN 693/sshd: /usr/sbin | ||
+ | tcp6 0 0 ::1:631 :::* LISTEN 572/cupsd | ||
+ | tcp6 0 0 ::1:6010 :::* LISTEN 2630/sshd: student@ | ||
+ | </code> | ||
+ | Pentru comanda de mai sus folosim următoarele opțiuni pentru filtrarea afișării: | ||
+ | |||
+ | * ''%%-t%%'' afișează doar porturile TCP deschise | ||
+ | * ''%%-l%%'' afișează doar porturile deschise care ascultă mesaje, nu și cele deschide pentru trimiterea mesajelor | ||
+ | * ''%%-p%%'' afișează programul care a deschis portul((Am folosit comanda ''%%sudo%%'' pentru a permite afișarea numelor programelor care ascultă pe portul deschis. Comanda ''%%netstat%%'' trebuie executată de un utilizatot privilegiat pentru această funcționalitate oferită de opțiunea ''%%-p%%''.)) | ||
+ | * ''%%-n%%'' afișează IP-ul pe care se ascultă după conexiuni | ||
+ | |||
+ | === Exercițiu - afișarea porturilor UDP deschise === | ||
+ | |||
+ | Afișați porturile UDP deschise pe stația pe care lucrați. | ||
+ | |||
+ | <note> | ||
+ | ''%%Hint%%'' | ||
+ | Având în vedere că opțiunea ''%%-t%%'' se referă la porturile TCP, care credeți ca va fi opțiunea necesară pentru identificarea porturilor UDP? | ||
+ | </note> | ||
+ | |||
+ | ==== Conectarea TCP la o aplicație ==== | ||
+ | |||
+ | Vrem să observăm cum răspunde serverul HTTP la mesaje. De regulă un server HTTP răspunde printr-un mesaj în format HTML. | ||
+ | |||
+ | Pentru a trimite mesaje, indiferent de tipul aplicației care primește mesajul folosim comanda ''%%nc%%'' în felul următor | ||
+ | |||
+ | <code > | ||
+ | student@uso:~$ nc google.com 80 | ||
+ | test | ||
+ | HTTP/1.0 400 Bad Request | ||
+ | Content-Type: text/html; charset=UTF-8 | ||
+ | Referrer-Policy: no-referrer | ||
+ | Content-Length: 1555 | ||
+ | Date: Tue, 20 Oct 2020 19:48:04 GMT | ||
+ | |||
+ | <!DOCTYPE html> | ||
+ | <html lang=en> | ||
+ | <meta charset=utf-8> | ||
+ | <meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width"> | ||
+ | <title>Error 400 (Bad Request)!!1</title> | ||
+ | <style> | ||
+ | *{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}* > body{background:url(//www.google.com/images/errors/robot.png) 100% 5px no-repeat;padding-right:205px}p{margin:11px 0 22px;overflow:hidden}ins{color:#777;text-decoration:none}a img{border:0}@media screen and (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}#logo{background:url(//www.google.com/images/branding/googlelogo/1x/googlelogo_color_150x54dp.png) no-repeat;margin-left:-5px}@media only screen and (min-resolution:192dpi){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat 0% 0%/100% 100%;-moz-border-image:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) 0}}@media only screen and (-webkit-min-device-pixel-ratio:2){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat;-webkit-background-size:100% 100%}}#logo{display:inline-block;height:54px;width:150px} | ||
+ | </style> | ||
+ | <a href=//www.google.com/><span id=logo aria-label=Google></span></a> | ||
+ | <p><b>400.</b> <ins>That’s an error.</ins> | ||
+ | <p>Your client has issued a malformed or illegal request. <ins>That’s all we know.</ins> | ||
+ | </code> | ||
+ | Am rulat comanda ''%%nc%%'' iar apoi am scris mesajul ''%%test%%'' și am apăsat tasta ''%%Enter%%''. Mesajul primit este un răspuns de tipul ''%%Bad Request%%'', deoarece am trimis un mesaj care nu este în formatul așteptat de serverul HTTP. | ||
+ | |||
+ | === Exercițiu - Testarea conexiunii la aplicații === | ||
+ | |||
+ | * Trimiteți un mesaj către programul care ascultă pe portul 22 pe sistemul local (cu IP-ul ''%%127.0.0.1%%''). | ||
+ | * Trimiteți un mesaj către programul care ascultă pe portul 80 de la adresa identificată prin numele ''%%elf.cs.pub.ro%%''. | ||