Tarmoq asoslari — ip, ping, DNS, portlar, ss
Muammodan boshlaylik
"Sayt ochilmayapti." Bu bitta jumla ortida o'nlab sabab bo'lishi mumkin:
- Server o'chganmi?
- Domen noto'g'ri IP ga ko'rsatyaptimi?
- Firewall portni yopib qo'yganmi?
- Nginx ishlayaptimi, lekin noto'g'ri portda?
- Ilova faqat
localhostni tinglayaptimi?
Har biri uchun — o'z buyrug'i. Bu dars — tarmoq muammolarini qatlam-baqatlam tekshirish vositalari.
Asosiy tushunchalar
| Tushuncha | Misol | Nima |
|---|---|---|
| IP manzil | 45.12.34.56 |
Kompyuterning tarmoqdagi manzili |
| Port | 80, 443, 3000 |
Bitta kompyuterdagi "eshik" — qaysi dasturga |
| Domen | dokon.uz |
IP ning inson uchun nomi |
| DNS | Domenni IP ga aylantiradigan tizim | |
| localhost | 127.0.0.1 |
"Shu kompyuterning o'zi" |
Analogiya: IP — bino manzili, port — xonadon raqami, DNS — telefon kitobi.
Tipik portlar
| Port | Xizmat |
|---|---|
| 22 | SSH |
| 80 | HTTP |
| 443 | HTTPS |
| 3306 | MySQL |
| 5432 | PostgreSQL |
| 6379 | Redis |
| 3000, 5173, 8080 | Ishlab chiqish serverlari |
ip — mening manzilim
ip a # ip address — barcha tarmoq interfeyslari
1: lo: <LOOPBACK,UP> ...
inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP> ...
inet 45.12.34.56/24 brd 45.12.34.255 scope global eth0
lo— loopback,127.0.0.1— o'zi bilan gaplashish uchuneth0(yokiens3,enp0s3) — haqiqiy tarmoq kartasi
ip -br a # qisqa ko'rinish
ip r # marshrutlar; "default via" — internet shlyuzi
hostname -I # faqat IP lar
curl ifconfig.me # internetdan ko'rinadigan tashqi IP
[!INFO] Eski qo'llanmalarda
ifconfigvanetstatni ko'rasiz. Zamonaviy Linux da ular o'rnida —ipvass. Ko'pincha eski buyruqlar umuman o'rnatilmagan.
ping — server tirikmi?
ping -c 4 google.com
PING google.com (142.250.185.78) 56(84) bytes of data.
64 bytes from 142.250.185.78: icmp_seq=1 ttl=117 time=12.4 ms
64 bytes from 142.250.185.78: icmp_seq=2 ttl=117 time=11.9 ms
...
4 packets transmitted, 4 received, 0% packet loss
time— javob vaqti (kechikish)packet loss— yo'qolgan paketlar; 0% dan ko'p bo'lsa — tarmoq muammosi-c 4— 4 marta (busiz Ctrl+C gacha davom etadi)
[!INFO]
pingjavob bermasligi — server o'chganini anglatmaydi: ko'p serverlar va bulut provayderlari ICMP (ping) ni firewall da yopadi. Keyingi qadam — port bo'yicha tekshirish (curl,nc).
DNS — domen qaysi IP ga ko'rsatyapti?
dig dokon.uz +short
45.12.34.56
dig dokon.uz # batafsil
dig dokon.uz A +short # IPv4
dig dokon.uz MX +short # pochta serverlari
dig @8.8.8.8 dokon.uz +short # Google DNS orqali tekshirish
nslookup dokon.uz # muqobil
host dokon.uz # yana bir muqobil
dig yo'q bo'lsa: sudo apt install dnsutils.
DNS yozuvlari
| Tur | Nima | Misol |
|---|---|---|
| A | Domen → IPv4 | dokon.uz → 45.12.34.56 |
| AAAA | Domen → IPv6 | |
| CNAME | Domen → boshqa domen | www.dokon.uz → dokon.uz |
| MX | Pochta serveri | |
| TXT | Matn (tasdiqlash, SPF) |
Domenni yangi serverga yo'naltirganda: DNS o'zgarishi butun dunyoga tarqalishi uchun bir necha daqiqadan bir necha soatgacha vaqt ketadi. dig @8.8.8.8 va dig @1.1.1.1 bilan tekshirib turing.
/etc/hosts — lokal "DNS"
cat /etc/hosts
127.0.0.1 localhost
127.0.0.1 dokon.local
Bu fayl DNS dan oldin tekshiriladi. Lokal sinov uchun qulay: echo "127.0.0.1 dokon.local" | sudo tee -a /etc/hosts (19-dars).
ss — qaysi portlar ochiq?
ss (socket statistics) — qaysi dastur qaysi portni tinglayotganini ko'rsatadi:
sudo ss -tlnp
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=1102,fd=6))
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=845,fd=3))
LISTEN 0 151 127.0.0.1:3306 0.0.0.0:* users:(("mysqld",pid=812,fd=21))
LISTEN 0 511 127.0.0.1:3000 0.0.0.0:* users:(("node",pid=2214,fd=19))
Bayroqlar: t — TCP, l — tinglayotganlar (listen), n — raqamlar (nomlar emas), p — jarayon.
Eng muhim ustun: Local Address
| Manzil | Ma'nosi |
|---|---|
0.0.0.0:80 |
Barcha interfeyslardan — tashqaridan ham ochiq |
127.0.0.1:3306 |
Faqat shu kompyuterdan — tashqaridan yopiq |
[::]:80 |
IPv6 da barchasidan |
Yuqoridagi misolda MySQL va Node faqat 127.0.0.1 da — internetdan yetib bo'lmaydi (bu to'g'ri: ularga Nginx orqali murojaat qilinadi).
[!WARNING] Klassik muammo: ilova serverda ishlayapti,
curl localhost:3000javob beradi, lekin tashqaridan — yo'q. Sabab: ilova127.0.0.1ni tinglayapti. Yechim: ilovani0.0.0.0da ishga tushirish (yoki — yaxshiroq — Nginx reverse proxy orqali, 43-dars).
sudo ss -tlnp | grep :3000 # 3000-portni kim egallagan
sudo ss -tnp # faol ulanishlar
ss -s # umumiy statistika
"Port already in use" (EADDRINUSE) — sudo ss -tlnp | grep :PORT bilan jarayonni toping, keyin kill (23-dars).
Port ochiqligini tekshirish
nc -zv dokon.uz 443 # netcat
nc -zv 45.12.34.56 22
curl -I https://dokon.uz # HTTP darajasida (keyingi dars)
Connection to dokon.uz 443 port [tcp/https] succeeded!
Tarmoq yo'lini kuzatish
traceroute google.com # yoki: tracepath
mtr google.com # interaktiv, ping + traceroute
Paket qaysi routerlar orqali o'tishini va qayerda kechikish yoki yo'qotish borligini ko'rsatadi.
Tashxis tartibi: "sayt ochilmayapti"
Pastdan yuqoriga, qatlam-baqatlam:
# 1. DNS: domen to'g'ri IP ga ko'rsatyaptimi?
dig dokon.uz +short
# 2. Server: tarmoqda bormi?
ping -c 3 45.12.34.56 # (ICMP yopiq bo'lishi mumkin)
# 3. Port: ochiqmi? (tashqaridan)
nc -zv 45.12.34.56 443
# --- serverning ichida ---
# 4. Xizmat ishlayaptimi?
systemctl status nginx
# 5. To'g'ri portni, to'g'ri manzilda tinglayaptimi?
sudo ss -tlnp | grep -E ':80|:443'
# 6. Firewall?
sudo ufw status # (36-dars)
# 7. Ilovaning o'zi javob beryaptimi?
curl -I localhost:3000
Qaysi qadamda muvaffaqiyatsizlik bo'lsa — muammo shu qatlamda.
Nima uchun shunday?
Nima uchun ilovalar standart holatda 127.0.0.1 ni tinglaydi va bu nima uchun yaxshi?
Xavfsizlik uchun. 127.0.0.1 — faqat shu kompyuter ichidagi "ichki telefon": tashqi dunyo unga umuman yetib bora olmaydi, firewall bo'lmasa ham. Baza, kesh, ichki API lar aynan shunday bo'lishi kerak — ularga faqat yonidagi ilova murojaat qiladi. Tashqi dunyo bilan faqat bitta "darvoza" — Nginx (80/443) gaplashadi. Agar MySQL 0.0.0.0 da tinglab, firewall unutilgan bo'lsa — butun internet sizning bazangizga parol tanlashni boshlaydi. Shuning uchun ss -tlnp da 0.0.0.0 ni ko'rganingizda doim so'rang: "bu haqiqatan tashqaridan ochiq bo'lishi kerakmi?"
Xulosa
Eslab qoling:
- IP — manzil, port — eshik, DNS — domen → IP
ip a— manzillar;curl ifconfig.me— tashqi IPping -c 4— bog'lanish; javobsizlik ≠ o'chgandig domen +short— DNS;/etc/hosts— lokalsudo ss -tlnp— kim qaysi portni tinglayapti0.0.0.0— hammaga ochiq;127.0.0.1— faqat lokalnc -zv host port— port ochiqmi- Tashxis: DNS → server → port → xizmat → tinglash manzili → firewall → ilova
Keyingi dars
33-dars: curl va wget — HTTP so'rovlar va yuklab olish