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:
- kas nimi või host vastab üldse
- kas HTTP/HTTPS teenus vastab
- millised võrguliidesed ja aadressid sinu masinal on
- 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üsimus | Linux | macOS | Mida tavaliselt näed |
|---|---|---|---|
| kas host vastab | ping -c 4 example.com | ping -c 4 example.com | vastuseread või paketikadu |
| kas veeb vastab | curl -I https://example.com/ | curl -I https://example.com/ | HTTP staatus ja päised |
| millised liidesed on | ip a | ifconfig | liidesed ja IP-aadressid |
| mis pordid kuulavad | ss -ltn | lsof -iTCP -sTCP:LISTEN -n -P | kuulavad 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
pingtulemust veebiteenuse lõplikuks kontrolliks - unustatakse, et mõni server ei vasta
ping-ile, kuigi veeb töötab - kasutatakse Linuxi käske
ipjassmacOS-is ning arvatakse, et midagi on katki - vaadatakse kuulavat porti, aga ei eristata
127.0.0.1,0.0.0.0ja 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:
| Rida | Tähendus |
|---|---|
HTTP/2 200 või HTTP/1.1 200 | server vastas edukalt |
301, 302, 308 | server suunab teisele aadressile |
404 | aadressi ei leitud |
500 seeria | serveripoolne 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:
22SSH80HTTP443HTTPS3000,5173,8000,8080arenduse 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:
| Kuju | Tähendus |
|---|---|
127.0.0.1:3000 | teenus kuulab ainult sinu arvutis |
0.0.0.0:3000 | teenus kuulab kõigil IPv4 liidestel |
[::]:3000 | teenus 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:
pingcurlifconfiglsofnetstat- sageli ka
nc
Kui tahad hiljem Linuxi ip-stiilis käsku, saab lisada:
brew install iproute2mac
See on mugav lisakiht, mitte õpiku eeldus.
Minitest
- Tee
curl -Ipäring aadressilehttps://example.com/. - Tee
ping -c 4 example.comja võrdle, kas see vastab samale küsimusele. - Vaata oma süsteemis võrguliideseid: Linuxis
ip a, macOS-isifconfig. - Vaata, kas sinu masinas kuulab mõni TCP-port.
- Selgita ühe lausega, mis vahe on aadressidel
127.0.0.1:3000ja0.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 veebiteenustping -c 4 example.comkontrolli hosti ICMP vastustip avaata Linuxi liideseidifconfigvaata macOS-i liideseidss -ltnvaata Linuxi kuulavaid TCP-portelsof -iTCP -sTCP:LISTEN -n -Pvaata macOS-i kuulavaid portenc -vz example.com 443kontrolli TCP ühendust porti
Olulised võtmed ja vaated
-Iküsi ainult HTTP päised-Ljärgi HTTP suunamisiLISTENport kuulab127.0.0.1ainult oma masin0.0.0.0kõik IPv4 liidesedip/ssLinuxi tööriistadifconfig/lsofmacOS-i põhivariandid