Mustand: sisu ei ole veel tehniliselt ega keeleliselt täielikult kontrollitud ega toimetatud.

Peatüki vaade

Linux/Unix/macOS käsurea kiirõpik

Praegu loed peatükki Võrgu põhitööriistad, mis kuulub osasse Osa II: Süsteemi pilt ja haldus.

Võrgu põhitööriistad

Võrgu veaotsingus on tähtis eristada mitut eri küsimust. “Internet ei tööta”, “veebileht ei vasta” ja “minu programm ei kuula porti” võivad välja näha sarnased, aga kontrollitakse neid eri käskudega.

Loogika

Esimene võrgukontroll liigub tavaliselt nii:

  1. kas nimi või host vastab üldse
  2. kas HTTP/HTTPS teenus vastab
  3. millised võrguliidesed ja aadressid sinu masinal on
  4. kas kohalik teenus kuulab õiget porti

ping ei kontrolli veebilehte. curl -I ei näita sinu võrguliideseid. ss ja lsof ei ütle, kas DNS-nimi laheneb. Iga tööriist vastab oma kitsale küsimusele.

Kiire orientiir

KüsimusLinuxmacOSMida tavaliselt näed
kas host vastabping -c 4 example.comping -c 4 example.comvastuseread või paketikadu
kas veeb vastabcurl -I https://example.com/curl -I https://example.com/HTTP staatus ja päised
millised liidesed onip aifconfigliidesed ja IP-aadressid
mis pordid kuulavadss -ltnlsof -iTCP -sTCP:LISTEN -n -Pkuulavad TCP-pordid

Kui kasutad macOS-i ja ip a või ss annab command not found, siis see on normaalne. Need on Linuxi tööriistad; macOS-is kasuta alguses ifconfig ja lsof.

Tüüpilised algaja vead

  • peetakse ping tulemust veebiteenuse lõplikuks kontrolliks
  • unustatakse, et mõni server ei vasta ping-ile, kuigi veeb töötab
  • kasutatakse Linuxi käske ip ja ss macOS-is ning arvatakse, et midagi on katki
  • vaadatakse kuulavat porti, aga ei eristata 127.0.0.1, 0.0.0.0 ja päris võrguaadressi
  • kontrollitakse kauget teenust, kuigi probleem on enda arvutis käivitatud programmis

Esimene kontrollrada

Veebiteenuse puhul alusta HTTP-st:


curl -I https://example.com/

Kui tahad näha, kas host vastab ICMP-le:


ping -c 4 example.com

Kui uurid oma masina võrku, vali süsteemi järgi üks rida:


ip a
ifconfig

Kui uurid, kas kohalik teenus kuulab porti, vali süsteemi järgi üks rida:


ss -ltn
lsof -iTCP -sTCP:LISTEN -n -P

Ära käivita Linuxi ja macOS-i variante läbisegi. Vali see, mis sinu süsteemis olemas on.

ping: hosti esimene signaal

ping saadab ICMP-pakette ja mõõdab, kas host vastab.


ping -c 4 example.com

Tulemuse lugemine:

  • vastuseread tähendavad, et host vastas ICMP-le
  • paketikadu tähendab, et osa päringuid ei saanud vastust
  • vastuse puudumine ei tõesta veel, et veebiteenus on maas

Paljud serverid piiravad või blokeerivad ping vastuseid. Seetõttu on veebiteenuse kontrolliks parem järgmine käsk.

curl -I: veebiteenuse kontroll

curl -I küsib ainult HTTP päised, mitte kogu lehe sisu.


curl -I https://example.com/

Olulised read:

RidaTähendus
HTTP/2 200 või HTTP/1.1 200server vastas edukalt
301, 302, 308server suunab teisele aadressile
404aadressi ei leitud
500 seeriaserveripoolne viga

Kui tahad suunamist jälgida, lisa -L:


curl -I -L https://example.com/

Võrguliidesed: ip a ja ifconfig

Liides on võrguühendus sinu arvutis: Wi-Fi, kaabel, VPN, loopback või virtuaalne adapter.

Linuxis:


ip a

macOS-is:


ifconfig

Alguses otsi ainult kahte asja:

  • kas mõnel liidesel on IP-aadress
  • kas näed loopback-aadressi 127.0.0.1

127.0.0.1 tähendab sinu enda masinat. See on kasulik kohalike teenuste testimisel, aga ei tähenda, et teenus oleks teistele arvutitele nähtav.

Kuulavad pordid

Kui programm peab teenust pakkuma, peab ta tavaliselt kuulama mingit porti. Näiteks:

  • 22 SSH
  • 80 HTTP
  • 443 HTTPS
  • 3000, 5173, 8000, 8080 arenduse kohalikud serverid

Linuxis:


ss -ltn

macOS-is:


lsof -iTCP -sTCP:LISTEN -n -P

Teine macOS-i sisseehitatud vaade:


netstat -anv -p tcp | grep LISTEN

Vaata eriti aadressi osa:

KujuTähendus
127.0.0.1:3000teenus kuulab ainult sinu arvutis
0.0.0.0:3000teenus kuulab kõigil IPv4 liidestel
[::]:3000teenus kuulab IPv6 kaudu kõigil liidestel

Kui brauseris http://localhost:3000 töötab, aga teiselt masinalt ligi ei saa, võib põhjus olla just selles, et teenus kuulab ainult 127.0.0.1 peal või tulemüür ei luba ühendust.

Kas port on kaugelt avatud

Kui tahad kontrollida konkreetset hosti ja porti, sobib sageli nc.


nc -vz example.com 443

See ei tõenda, et rakendus töötab õigesti, aga näitab, kas TCP-ühendus porti õnnestub.

Kui nc pole olemas, kasuta veebiteenuse puhul curl -I-d. HTTP jaoks annab see tavaliselt rohkem infot.

macOS: kas pean midagi paigaldama?

Alguses ei pea. macOS-is on võrgukontrolliks piisavalt sisseehitatud tööriistu:

  • ping
  • curl
  • ifconfig
  • lsof
  • netstat
  • sageli ka nc

Kui tahad hiljem Linuxi ip-stiilis käsku, saab lisada:


brew install iproute2mac

See on mugav lisakiht, mitte õpiku eeldus.

Minitest

  1. Tee curl -I päring aadressile https://example.com/.
  2. Tee ping -c 4 example.com ja võrdle, kas see vastab samale küsimusele.
  3. Vaata oma süsteemis võrguliideseid: Linuxis ip a, macOS-is ifconfig.
  4. Vaata, kas sinu masinas kuulab mõni TCP-port.
  5. Selgita ühe lausega, mis vahe on aadressidel 127.0.0.1:3000 ja 0.0.0.0:3000.

Peatüki täisspikker

Baas ja süsteemipilt

Eesmärk

erista nelja küsimust: kas host vastab, kas veeb vastab, millised liidesed on ja kas kohalik teenus kuulab porti

Kontrollrada

  • curl -I https://example.com/kontrolli veebiteenust
  • ping -c 4 example.comkontrolli hosti ICMP vastust
  • ip avaata Linuxi liideseid
  • ifconfigvaata macOS-i liideseid
  • ss -ltnvaata Linuxi kuulavaid TCP-porte
  • lsof -iTCP -sTCP:LISTEN -n -Pvaata macOS-i kuulavaid porte
  • nc -vz example.com 443kontrolli TCP ühendust porti

Olulised võtmed ja vaated

  • -Iküsi ainult HTTP päised
  • -Ljärgi HTTP suunamisi
  • LISTENport kuulab
  • 127.0.0.1ainult oma masin
  • 0.0.0.0kõik IPv4 liidesed
  • ip/ssLinuxi tööriistad
  • ifconfig/lsofmacOS-i põhivariandid