Ось готовий урок, створений спеціально для тебе у стилі David Malan. Вмикай уяву — ми починаємо!
🎓 CS50-style: Мережі в Linux (IP, DNS, порти)
Привіт усім! Це CS50 (умовно 😉), і сьогодні ми зазирнемо під капот того, що ви робите щодня сотні разів.
1. 🔥 Вступ: Магія, яка ламається
Уявіть ситуацію. Ви пишете код, запускаєте свій вебсервер, відкриваєте браузер, вводите адресу... і бачите "Site can't be reached". Або намагаєтесь підключитися до бази даних, а вона "мовчить".
Ви панікуєте? Ви перезавантажуєте роутер? Чи ви відкриваєте термінал і точно знаєте, як діагностувати проблему?
Давайте чесно: Інтернет — це не магія. Це набір труб, адрес і дверей. І якщо ви працюєте з Linux (а всі серйозні сервери працюють на Linux), ви мусите розуміти, як один процес знаходить інший у цьому цифровому хаосі.
Питання до вас: Коли ви відправляєте лист поштою, чи достатньо написати на конверті "Мамі"? Ні. Потрібна точна адреса. А чи достатньо адреси будинку, якщо це хмарочос на 500 квартир? Теж ні.
Сьогодні ми розберемо три кити мережі: 1. IP-адреса (Будинок). 2. DNS (Телефонна книга). 3. Port (Номер квартири).
2. 🧠 Теоретична база (Як це працює насправді)
Давайте відкинемо нудні підручники й подивимось на логіку.
📍 IP-адреса (Internet Protocol Address)
Це унікальний ідентифікатор комп'ютера в мережі.
* IPv4: Виглядає як 192.168.1.1. Це як координати GPS.
* Localhost (127.0.0.1): Це адреса "Я". Коли комп'ютер хоче поговорити сам із собою, він йде сюди. Запам'ятайте це число — це "дім" для будь-якого сервера.
Інтуїтивно: IP — це адреса будівлі. Без неї листоноша (пакет даних) не знайде отримувача.
📒 DNS (Domain Name System)
Люди погано запам'ятовують цифри. Нам легше запам'ятати google.com, ніж 142.250.74.46.
DNS — це служба, яка перетворює зрозумілі нам слова на зрозумілі комп'ютеру IP-адреси.
Під капотом: Коли ви вводите
google.com, ваш Linux спершу дивиться у свій маленький блокнотик (файл/etc/hosts), а якщо там пусто — питає у глобального довідника (DNS-сервера, наприклад,8.8.8.8).
🚪 Порти (Ports)
Окей, пакет даних дійшов до сервера (будівлі) за IP-адресою. Але всередині працює вебсервер, база даних, пошта і ще купа всього. Кому віддати пакет? Тут вступають порти. Це віртуальні "двері" з номерами від 0 до 65535.
- Порт 80/443: Зазвичай вебсервер (HTTP/HTTPS).
- Порт 22: SSH (віддалене керування).
- Порт 5432: PostgreSQL (база даних).
Головне: На одній IP-адресі може жити багато сервісів, але кожен має сидіти за своїм унікальним портом.
3. 🧪 Приклади (Дивимось у Термінал)
Відкривайте термінал. Давайте "помацаємо" мережу руками.
Приклад 1: Хто я? (IP)
Як дізнатися свою адресу в мережі?
Введіть команду:
ip addr
(Раніше використовували ifconfig, але ми ж сучасні люди, правда? ip — це новий стандарт).
Що ви бачите?
Купу тексту. Знайдіть блок, де написано inet.
* lo (loopback) — це ваш 127.0.0.1 (внутрішнє кільце).
* eth0 або wlan0 — це ваш вихід у зовнішній світ. Там буде щось типу 192.168.x.x або 10.x.x.x.
Приклад 2: Де живе Google? (DNS + Ping)
Давайте перевіримо, чи живий Google, і дізнаємось його справжнє обличчя (IP).
ping -c 2 google.com
-c 2 означає "зроби це 2 рази й зупинись".
Результат:
PING google.com (142.250.185.78) 56(84) bytes of data.
64 bytes from ...
Бачите? Система сама сходила в DNS, дізналась, що google.com = 142.250.185.78, і відправила туди пакети.
Приклад 3: Хто слухає? (Ports)
Уявіть, що ви охоронець і перевіряєте, які двері в будівлі відчинені.
Використовуємо команду ss (спадкоємець старого netstat).
ss -tulpn
Виглядає страшно? Давайте розберемо ключі:
* -t (tcp) — надійні з'єднання.
* -u (udp) — швидкі з'єднання.
* -l (listening) — ті, хто чекає гостей.
* -p (process) — покажи, яка програма відкрила двері.
* -n (numeric) — покажи порти цифрами, не перетворюй їх на назви.
У колонці Local Address:Port ви побачите щось типу 0.0.0.0:22 або 127.0.0.1:5432. Це означає, що певний процес "слухає" цей порт.
4. 🛠 Практична частина
А тепер ваша черга. Не бійтеся, нічого не зламаєте (сподіваюсь 😉).
Завдання 1: "Детектив"
Використайте ip addr. Знайдіть IP-адресу вашого мережевого інтерфейсу (не lo, а реальну). Запишіть її.
Завдання 2: "Ручний DNS"
Є команда nslookup або dig. Спробуйте дізнатися IP-адресу сайту facebook.com.
dig facebook.com +short
Отримали IP? Тепер спробуйте вставити цей IP прямо в адресний рядок браузера. Що сталося? (Іноді спрацює, іноді ні — залежить від налаштувань сервера, але спробувати варто!).
Завдання 3: "Хакери в місті"
Запустіть простий вебсервер на Python (він є майже в кожному Linux).
1. Створіть папку mkdir test_site і зайдіть у неї cd test_site.
2. Виконайте: python3 -m http.server 8000
3. Термінал "зависне" — він слухає.
4. Відкрийте інший термінал і перевірте порти: ss -tulpn | grep 8000.
5. Відкрийте браузер і перейдіть за адресою http://localhost:8000.
Результат: Ви бачите вміст папки. Ви тільки що створили сервер!
Завдання 4: "Localhost Trick" (Найцікавіше!)
Ми можемо обдурити систему.
1. Відкрийте файл hosts (потрібні права root): sudo nano /etc/hosts.
2. Додайте в кінець рядок:
127.0.0.1 mysuperwebsite.com
3. Збережіть (Ctrl+O, Enter) і вийдіть (Ctrl+X).
4. Тепер спробуйте пінгувати: ping mysuperwebsite.com.
Питання: Куди йдуть пінг? Правильно, на ваш власний комп'ютер! Так розробники тестують сайти локально, даючи їм красиві імена.
5. 💡 Мислення як у розробника
Як відрізнити новачка від профі, коли щось не працює?
Новачок: * "Воно не працює". * Перезавантажує все підряд. * Пише код, не перевіривши, чи є зв'язок із базою.
Досвідчений інженер (думає шарами):
1. Чи є пінг? (Чи бачу я сервер взагалі? -> IP).
2. Чи правильне ім'я? (Чи резолвиться DNS? -> dig / nslookup).
3. Чи відкритий порт? (Чи запущений процес? Чи не блокує фаєрвол? -> ss, telnet або nc).
4. Чи слухає сервер "зовні"? (Часта помилка: сервер запущено на 127.0.0.1, а ви стукаєте з іншого комп'ютера. Треба запускати на 0.0.0.0, щоб пускати всіх).
Порада: Якщо ваша програма не бачить базу даних — на 90% це або неправильний хост/порт, або закритий порт фаєрволом. Перевіряйте це до того, як переписувати код!
6. 🧩 Підсумок
Сьогодні ви перестали сприймати мережу як магію. Ви тепер знаєте:
* IP — щоб знайти будинок.
* DNS — щоб не запам'ятовувати цифри.
* Ports — щоб постукати у правильні двері.
* Ви вмієте використовувати ip, ping, ss і навіть обманювати свій комп'ютер через /etc/hosts.
Ви більше не "користувач". Ви — інженер, який розуміє трафік.
Наступного разу: Ми поговоримо про те, як захистити ці двері. Готуйтеся до теми "Права доступу та безпека в Linux (chmod, chown)".
А поки що — закрийте той Python-сервер, не залишайте відкриті порти без нагляду! 😉
Happy coding!