HỌC BẰNG THỰC HÀNH
← Lộ trình học
02 — Networking

Đi theo một HTTP request

Thực hiện trên server của bạn, rồi kiểm tra từng tiêu chí.

Cốt lõi

Đi theo một HTTP request

Mục tiêu

Nhìn thấy request từ client đến socket và phân biệt lỗi ứng dụng với lỗi kết nối.

Hiểu trước khi làm

OSI giúp gọi tên lớp; TCP/IP mô tả stack vận hành thực tế. IP xác định đích mạng, port xác định socket của tiến trình. TCP có kết nối và truyền tin có thứ tự; UDP gửi data gram. HTTP là giao thức ứng dụng, thường qua TCP; HTTPS thêm TLS. Loopback 127.0.0.1 chỉ về chính máy chạy lệnh, khác IP của VM. IPv4 có địa chỉ private/public; IPv6 dùng địa chỉ và routing riêng. NAT đổi địa chỉ/port, không thay thế xác thực hay firewall.

Chuẩn bị

Python 3.10+ và curl trên máy thực hành; lần đầu chưa cần project tồn tại. Sau khi giải nén, dùng lab root ~/kdc-labs.

Tải ứng dụng mẫu KDC Notes · Cách tải và chuẩn bị workspace. Không cần mã nguồn nền tảng khóa học.

pwd
python3 --version
curl --version
Giải thích lệnh và tham số

pwd in thư mục hiện tại. --version xem phiên bản công cụ; chưa cần thư mục project ở bước này. Sau bước tải/giải nén, chuyển vào ~/kdc-labs/project rồi thực hiện các lệnh tiếp theo.

Thực hành

1. Tải mã ứng dụng dành cho học viên

Mở liên kết tải ở trên, lưu file thành ~/Downloads/kdc-starter.zip. Trên VM không có trình duyệt, nhập URL của nền tảng bạn đang học (ví dụ địa chỉ của web trên máy host, không phải URL minh họa):

printf "URL nền tảng (không có dấu / cuối): "
read -r KDC_SITE
mkdir -p ~/kdc-labs/project ~/kdc-labs/evidence
curl -fsSL "$KDC_SITE/downloads/kdc-starter.zip" -o ~/kdc-labs/kdc-starter.zip
python3 -m zipfile -e ~/kdc-labs/kdc-starter.zip ~/kdc-labs/project
Giải thích lệnh và tham số

read -r đọc nguyên văn URL, không xử lý backslash. curl -f coi HTTP lỗi là thất bại, -s tắt progress, -S vẫn hiện lỗi, -L theo redirect, -o chọn file đích. python3 -m zipfile -e chạy module zipfile để giải nén. Nếu tải bằng trình duyệt, thay đường dẫn ZIP bằng file trong Downloads. Không giải nén đè lên repo đã sửa; sao lưu hoặc dùng thư mục mới.

2. Khởi động endpoint nhập môn

Trong terminal thứ nhất chạy cd ~/kdc-labs/project rồi python3 echo.py. Giữ terminal này; Ctrl+C dừng server. Đây là endpoint quan sát HTTP, chưa dùng database. Trong terminal thứ hai trên cùng máy:

cd ~/kdc-labs/project
curl -v http://127.0.0.1:8081/healthz
curl -fsS http://127.0.0.1:8081/healthz -o ../evidence/network-health.json
Giải thích lệnh và tham số

-v hiện quá trình kết nối, header request/response; không dùng khi header chứa token. -fsS tải nội dung và báo lỗi; -o lưu JSON làm bằng chứng.

3. Đối chiếu socket với tiến trình

Trên Linux dùng lệnh sau; macOS thay bằng lsof -nP -iTCP:8081 -sTCP:LISTEN. Dừng echo server rồi gọi curl lần nữa: connection refused xảy ra trước HTTP status. Khởi động lại để khôi phục.

ss -ltnp
ip -brief address
ip route
Giải thích lệnh và tham số

ss -l chỉ socket listen, -t TCP, -n dùng số thay vì phân giải tên, -p hiển thị tiến trình khi có quyền. ip -brief address in địa chỉ gọn; ip route liệt kê route, không sửa cấu hình.

Tiêu chí tệp nộp bài

Các đường dẫn dưới đây tính từ lab root ~/kdc-labs, không từ thư mục project. Không viết sẵn kết quả giả để qua kiểm tra. Tệp có đúng tiêu đề chưa chứng minh đã thực hiện bài; giữ đầu ra thật và tự đối chiếu các phép thử.

  • evidence/network-health.json — trường status bằng "ok". Xuất từ phép thử/công cụ thật theo hướng dẫn.
  • evidence/network-request-path.md — có nội dung ## Kết quả.

Tự kiểm tra

JSON có status: ok; curl verbose thấy đích 127.0.0.1:8081 và HTTP 200. Dừng tiến trình phải gây connection refused, khởi động lại phải phục hồi. Vẽ luồng Browser → DNS → TCP → HTTP server và chỉ rõ lớp chưa tham gia trong phép thử loopback.

Agent kiểm tra trực tiếp những trạng thái runtime ghi trong tiêu chí, đồng thời kiểm tra tệp cấu hình/hồ sơ. Một workload Ready chưa chứng minh toàn bộ yêu cầu nghiệp vụ; hãy làm cả phép thử bên trên.

Lưu bằng chứng

Tạo evidence/network-request-path.md bằng trình soạn thảo, gồm các mục dưới đây. Điền số liệu và lệnh đã chạy, thời điểm, đầu ra trước/sau, cùng kết luận của bạn; không chỉ sao chép tiêu đề. Không lưu token, mật khẩu, kubeconfig hoặc dump dữ liệu vào báo cáo.

## Môi trường
Hệ điều hành, phiên bản công cụ, cluster/VM và thời điểm.

## Kết quả
Lệnh kiểm tra, đầu ra đã che thông tin nhạy cảm, kết quả mong đợi/thực tế.

## Giải thích
Vì sao cách làm đạt mục tiêu; giới hạn của phép kiểm tra.

## Khôi phục
Cách rollback/cleanup riêng các tài nguyên lab và cách xác nhận lại.

Tài liệu chính thức