BẢO MẬTCĂN BẢNTUẦN 01–04
BÀI 05

IP, port, client và server: dữ liệu được gửi tới đâu

Từ bài này ta theo đường đi của dữ liệu trên mạng, từng bước một. Bạn sẽ đọc được hai đầu của một kết nối (ai gửi, ai nhận, qua IP và port nào), hiểu vì sao địa chỉ trong nhà khác địa chỉ ngoài Internet (NAT), tự xem các giá trị đó trên máy mình, và thấy điều này liên quan gì đến bảo mật.

Thời lượng: khoảng 1 giờ 50 phút (giảng và thực hành xen kẽ; 5 bài tập; nên chia hai buổi: phần 1–5 là khái niệm, phần 6–8 là thực hành trên máy)

Mũi tên ở đây là đường truyền dữ liệu. Địa chỉ dùng cho minh họa, không phải đích thực hành.
Mũi tên ở đây là đường truyền dữ liệu. Địa chỉ dùng cho minh họa, không phải đích thực hành.
01

Client và server: ai hỏi, ai trả lời

6 phút

Bắt đầu từ một câu hỏi quen thuộc: khi bạn gõ địa chỉ một website rồi nhấn Enter, chuyện gì xảy ra? Máy bạn "hỏi", một máy khác "trả lời". Bài này giải thích hai bên đó là ai, tìm nhau bằng cách nào, và dữ liệu đi qua những thiết bị nào. Ta đi từng bước, mỗi bước thêm đúng một khái niệm:

  1. Client và server: ai hỏi, ai trả lời.
  2. IP: tìm đúng máy.
  3. Port: tìm đúng chương trình trên máy đó.
  4. Router và gateway: dữ liệu rời khỏi nhà bằng lối nào.
  5. NAT: vì sao địa chỉ trong nhà khác địa chỉ ngoài Internet.
  6. Thực hành: xem tất cả những thứ này trên máy thật của bạn.

Bước đầu tiên: hai vai trò

Khi mở website, trình duyệt gửi một yêu cầu và chương trình web trả nội dung về. Bên hỏi là , bên chờ và trả lời là .

Trình duyệtCLIENTbên hỏi trướcChương trình webSERVERbên chờ và trả lời① Yêu cầu“Cho tôi trang chủ”② Trả lời“Đây là nội dung trang”Giống đi nhà hàng: khách gọi món (client), nhà bếp làm và mang ra (server).
Hình 1. Client luôn là bên hỏi trước; server chờ sẵn và trả lời. Mũi tên xanh là yêu cầu, mũi tên lục là câu trả lời.

Hai chữ này chỉ vai trò của chương trình, không phải loại máy. Máy tính để bàn có thể là server, một chiếc máy chủ khổng lồ ở trung tâm dữ liệu cũng có lúc làm client (khi nó gọi một dịch vụ khác). Thậm chí client và server có thể chạy trên cùng một máy; ở phần 7 bạn sẽ tự làm như vậy.

Cách nhớClient luôn là bên nói trước ("cho tôi cái này"). Server là bên ngồi chờ ("đây, của bạn").

Về bảo mật, điều này quan trọng vì mỗi chương trình đang chờ yêu cầu từ mạng là một điểm có thể bị người khác gửi yêu cầu tới. Ta gọi tổng các điểm đó là bề mặt tấn công (attack surface). Càng ít dịch vụ lắng nghe ra ngoài, bề mặt càng nhỏ.

02

IP: tìm đúng máy

12 phút

Trên mạng có hàng tỉ máy. Để gửi dữ liệu đúng nơi, mỗi máy cần một địa chỉ, giống nhà nào cũng cần địa chỉ để bưu tá tìm đến. Địa chỉ đó là .

là bốn số, mỗi số từ 0 đến 255, ngăn cách bằng dấu chấm. Ví dụ: 192.168.1.10. Nó dài 32 bit, nên có khoảng 4,3 tỉ địa chỉ khác nhau.

Địa chỉ IP giống địa chỉ nhà

Một địa chỉ nhà có hai phần: tên phố và số nhà. Địa chỉ IP cũng vậy. Mọi thiết bị trong cùng một mạng nhà có chung "tên phố", chỉ khác "số nhà":

Laptop192.168.1.10Điện thoại192.168.1.11Máy in192.168.1.20Tên phố chung: 192.168.1 · số nhà riêng: .10 .11 .20
Hình 2. Một địa chỉ IP gồm hai phần: tên phố (chung cho cả mạng) và số nhà (riêng từng thiết bị).

Làm sao biết đâu là tên phố, đâu là số nhà?

Máy biết nhờ một con số đi kèm địa chỉ, gọi là , viết dạng /24. Con số 24 nghĩa là 24 bit đầu là tên phố. Vì mỗi số trong địa chỉ chiếm 8 bit, 24 bit chính là ba số đầu. Số còn lại là số nhà.

PHẦN MẠNG · tên phốPHẦN MÁY · số nhà192.168.1.10Cùng thông tin đó viết bằng subnet mask:255.255.255.0255 = “chỗ này thuộc tên phố” · 0 = “chỗ này là số nhà”Ba số đầu giống nhau thì hai máy cùng một mạng.
Hình 3. /24 nghĩa là 24 bit đầu (ba số đầu) là tên phố. Subnet mask 255.255.255.0 chỉ là cách viết khác của /24.

Cùng thông tin đó còn được viết dưới dạng : 255.255.255.0. Cách đọc rất đơn giản: chỗ nào là 255 thì thuộc tên phố, chỗ nào là 0 thì thuộc số nhà. Vậy /24 và 255.255.255.0 là một, chỉ là hai cách viết.

Quy tắc quan trọng nhất của phần nàyHai máy có phần mạng giống nhau (ví dụ cùng 192.168.1) thì ở cùng một mạng và nói chuyện trực tiếp được. Khác phần mạng thì phải nhờ router chuyển giúp (phần 4).

Không phải mạng nào cũng là /24. Mạng công ty lớn có thể dùng /16 hay /8 (phần mạng ngắn hơn, chứa được nhiều máy hơn). Trong bài này ta dùng /24 cho dễ nhìn.

IPv6: vì sao có thêm một loại địa chỉ?

4,3 tỉ địa chỉ IPv4 không đủ cho mọi điện thoại, TV, camera trên thế giới. Vì vậy có , dài 128 bit, viết bằng nhóm số hệ 16 ngăn cách bởi dấu hai chấm (ví dụ fe80::1c2b:3d4e). Máy bạn thường có cả hai loại, thấy hai địa chỉ là bình thường. Bài này tập trung vào IPv4. Chuyện "thiếu địa chỉ" cũng chính là lý do phải có NAT ở phần 5.

Hai địa chỉ đặc biệt nên nhận ra ngay

Địa chỉNghĩa là gìThường gặp khi
127.0.0.1"Chính tôi." Dữ liệu gửi tới đây không rời khỏi máy ().Chạy thử website ngay trên máy mình.
169.254.x.xMáy tự đặt cho mình vì không xin được địa chỉ từ router.Lỗi mạng: của router không trả lời. Kiểm tra Wi-Fi và router trước.
03

Port: tìm đúng chương trình

12 phút

Biết IP là tìm được đúng máy. Nhưng một máy chủ chạy nhiều chương trình cùng lúc: web, quản trị từ xa, cơ sở dữ liệu… Làm sao dữ liệu biết nên giao cho chương trình nào? Đó là việc của : một số từ 0 đến 65535.

IP giống địa chỉ tòa nhà, port giống số cửa của từng bộ phận trong tòa nhà.

Máy của bạngửi dữ liệu điMáy chủ · IP 203.0.113.10(tòa nhà)80HTTPweb không mã hóa443HTTPSweb có mã hóa22SSHquản trị từ xa① IP: chọn tòa nhà② port: chọn cửa
Hình 4. IP chọn đúng tòa nhà, port chọn đúng cửa trong tòa nhà. Dữ liệu tới cửa 443 sẽ do chương trình HTTPS nhận.

Một số port quen thuộc

PortDịch vụGhi chú bảo mật
80HTTP (web)Dữ liệu đi chữ rõ, ai nhìn thấy đường truyền cũng đọc được.
443HTTPS (web mã hóa)Cổng chuẩn cho website nghiêm túc.
22SSH (quản trị từ xa)Cho người quản trị đăng nhập; chỉ mở khi cần, bảo vệ bằng khóa hoặc MFA.
53DNS (tra tên miền)Sẽ gặp ở bài 6 và 7.
3306Cơ sở dữ liệu MySQLThường không nên mở ra Internet; chỉ website cùng máy cần gọi tới.

Số port chỉ là quy ước. Ai cũng có thể chạy dịch vụ lạ trên port 443, nên thấy port 443 không bảo đảm phía sau là dịch vụ đúng loại hay đáng tin.

Một kết nối có hai đầu, mỗi đầu gồm IP và port

Server dùng port cố định để ai cũng biết đường tới (ví dụ 443). Còn client thì sao? Mỗi lần kết nối, hệ điều hành của client tự chọn một port tạm (thường là số lớn, như 51514) để làm "địa chỉ trả lời". Vì vậy một kết nối được ghi dạng IP:port cho cả hai đầu:

LaptopIP 192.168.1.10Máy chủIP 203.0.113.10tab A51514tab B51515HTTPS443Kết nối A: 192.168.1.10 : 51514 → 203.0.113.10 : 443Kết nối B: 192.168.1.10 : 51515 → 203.0.113.10 : 443IP nguồn : port nguồn → IP đích : port đích. Hai kết nối chỉ khác port nguồn.
Hình 5. Mỗi kết nối được nhận ra bằng bốn thông tin. Hai tab trình duyệt dùng hai port nguồn khác nhau nên máy không bao giờ nhầm câu trả lời.
ĐỊA CHỈ MINH HỌA
192.168.1.10:51514  →  203.0.113.10:443
  • 192.168.1.10: IP của máy khách trong mạng riêng giả định.
  • 51514: port nguồn tạm thời, hệ điều hành chọn cho kết nối này.
  • 203.0.113.10: IP máy chủ (dải địa chỉ dùng cho tài liệu, không phải máy thật).
  • 443: port đích, quy ước dùng cho HTTPS.

Phân biệt nhiều kết nối

Kết nốiIP nguồnPort nguồnIP đíchPort đích
A (tab A)192.168.1.1051514203.0.113.10443
B (tab B)192.168.1.1051515203.0.113.10443

Hai kết nối chỉ khác port nguồn, đủ để hệ điều hành phân biệt. Phản hồi cho A đi theo chiều ngược: 203.0.113.10:443 → 192.168.1.10:51514. Số kết nối không bằng số tab: trình duyệt có thể dùng lại hoặc mở thêm kết nối nền.

BÀI TẬP 1 · 4 PHÚT

Đọc một kết nối

Cho kết nối 10.0.0.7:49821 → 203.0.113.10:22. Hãy trả lời:

  1. Bên nào là client, bên nào là server?
  2. Port nào là port dịch vụ, port nào là port tạm?
  3. Dịch vụ phía server là gì? Vì sao quản trị viên nên cân nhắc trước khi mở nó ra cho cả Internet?
Xem đáp án
  1. Client là 10.0.0.7 (bên gửi yêu cầu), server là 203.0.113.10.
  2. Port dịch vụ là 22 (cố định, ai cũng biết). Port 49821 là port tạm do máy client chọn.
  3. Port 22 là SSH, dùng để đăng nhập quản trị từ xa. Nếu mở cho mọi người, kẻ xấu có thể thử đoán mật khẩu hàng loạt; nên giới hạn nguồn truy cập và dùng khóa hoặc MFA.
04

Mạng nhà, router và gateway

12 phút

Ta đã biết một kết nối gồm hai đầu. Câu hỏi tiếp theo: dữ liệu rời khỏi nhà bằng lối nào? Hãy nhìn toàn cảnh một mạng gia đình:

MẠNG NHÀ (LAN) · 192.168.1.0/24Laptop192.168.1.10Điện thoại192.168.1.11TV192.168.1.12ROUTERmặt trong · gateway192.168.1.1mặt ngoài · IP công cộng198.51.100.25ra ngoàiINTERNETmáy chủ khắp nơivd 203.0.113.10IP riêng (chỉ dùng trong nhà)IP công cộng (Internet nhìn thấy)
Hình 6. Trong nhà dùng IP riêng (xanh). Router có hai mặt: mặt trong là gateway 192.168.1.1, mặt ngoài mang IP công cộng (vàng) mà Internet nhìn thấy.

là mạng nội bộ như mạng Wi-Fi ở nhà: laptop, điện thoại, TV đều nối vào đó. Để gửi dữ liệu ra ngoài LAN, các thiết bị gửi cho , thiết bị chuyển tiếp dữ liệu giữa các mạng. Router nhà bạn có hai mặt: mặt trong (nối với các thiết bị trong nhà, địa chỉ 192.168.1.1) và mặt ngoài (nối với nhà mạng, mang một địa chỉ công cộng).

Địa chỉ mặt trong của router, mà mọi máy trong nhà dùng làm lối ra mặc định, gọi là ("cổng ra"). Giống như cổng ra khỏi khu phố: muốn đi đâu xa, trước hết phải đi qua cổng đó.

Mỗi lần gửi, máy tự hỏi một câu

"Địa chỉ đích có cùng tên phố (phần mạng) với mình không?" Câu trả lời quyết định đường đi:

ĐíchSo với 192.168.1.10/24Máy làm gì
192.168.1.20 (máy in)Cùng phần mạng 192.168.1Gửi thẳng tới máy in.
203.0.113.10 (máy chủ web)Khác phần mạngGửi cho gateway 192.168.1.1 và nhờ chuyển tiếp.

Router chỉ là một điểm chuyển tiếp. Thực tế còn nhiều router trung gian giữa nhà bạn và máy chủ. Router, và những thiết bị trên đường đi, đều có thể nhìn thấy IP và port của gói dữ liệu, nên nội dung nhạy cảm phải được mã hóa (bài 6).

Ba dải IP riêng

Các địa chỉ trong nhà là . Có ba dải IPv4 dành riêng cho mạng nội bộ; chúng không được định tuyến thẳng ra Internet:

DảiVí dụHay gặp ở
10.0.0.0/810.1.2.3Mạng công ty, trường học, một số hotspot
172.16.0.0/12172.20.1.5Mạng công ty; Docker hay dùng 172.17.x.x
192.168.0.0/16192.168.1.10Mạng gia đình (hầu hết router)

Hai nhà có thể cùng dùng 192.168.1.10 trong hai mạng riêng độc lập mà không xung đột, giống hai thành phố đều có "đường Lê Lợi". Nhưng chính điều này đặt ra một vấn đề lớn khi ra Internet, và là lý do của phần tiếp theo.

Hai dải 198.51.100.0/24 và 203.0.113.0/24 trong bài là dải dành cho tài liệu, không phải máy để thử kết nối.

BÀI TẬP 2 · 5 PHÚT

Gửi thẳng hay qua gateway?

Máy A có địa chỉ 192.168.1.10/24 (gateway 192.168.1.1). Với mỗi đích sau, A gửi thẳng hay qua gateway?

  1. 192.168.1.77
  2. 192.168.2.77
  3. 10.0.0.5
  4. 203.0.113.10
Xem đáp án
  1. Thẳng. Ba số đầu 192.168.1 giống nhau, cùng mạng.
  2. Qua gateway. Số thứ ba khác (2 so với 1), nên khác mạng dù nhìn rất giống.
  3. Qua gateway. Phần mạng hoàn toàn khác.
  4. Qua gateway. Khác mạng, là máy ở ngoài Internet.
05

NAT: vì sao địa chỉ trong nhà khác ngoài Internet

15 phút

Vấn đề cần giải quyết

Laptop của bạn có IP riêng 192.168.1.10. Nhưng hàng triệu nhà khác cũng dùng đúng địa chỉ đó. Nếu laptop gửi gói tin ra Internet với nguồn 192.168.1.10, máy chủ nhận được sẽ trả lời cho ai? Không có đường nào dẫn về nhà bạn, vì địa chỉ ấy ở đâu cũng có.

Giải pháp là (dịch địa chỉ mạng): router nhà bạn "đóng dấu" địa chỉ công cộng của nó lên mọi gói tin đi ra, và nhớ xem gói nào của máy nào để chuyển câu trả lời về đúng chỗ. Router là thiết bị duy nhất của cả nhà có .

Ví dụ đời thường: phòng thư của một tòa nhà

Một tòa nhà có 50 phòng. Mọi thư gửi đi đều ghi người gửi là "Tòa nhà ABC, hồ sơ số 1, 2, 3…" thay vì tên từng phòng. Phòng thư ghi vào sổ: "hồ sơ số 1 là của phòng 305". Khi thư trả lời về, ghi "hồ sơ số 1", nhân viên phòng thư tra sổ rồi mang đến phòng 305. Người gửi thư chỉ biết địa chỉ tòa nhà, không biết phòng nào. Router và NAT hoạt động đúng như vậy; "hồ sơ số" chính là port.

Chiều đi: ra Internet

Laptop192.168.1.10:51514Điện thoại192.168.1.11:51514Router · NATIP ngoài 198.51.100.25Máy chủ203.0.113.10:443① Gói tin còn trong nhàNGUỒN192.168.1.10:51514ĐÍCH203.0.113.10:443NAT② Gói tin đã ra InternetĐÃ ĐỔINGUỒN198.51.100.25:62001ĐÍCH203.0.113.10:443SỔ ÁNH XẠ của router (bảng NAT)bên trong (IP riêng)bên ngoài (IP công cộng)192.168.1.10:51514⇄198.51.100.25:62001192.168.1.11:51514⇄198.51.100.25:62002
Hình 7. Router đổi nguồn của gói tin từ IP riêng sang IP công cộng và ghi vào sổ. Hai máy tình cờ chọn cùng port tạm 51514, nên router gán hai port ngoài khác nhau (62001, 62002).

Đọc hình theo thứ tự:

  1. Laptop gửi gói tin với nguồn là IP riêng và port tạm: 192.168.1.10:51514, đích 203.0.113.10:443.
  2. Router nhận gói. Nó thay nguồn bằng IP công cộng của chính nó cùng một port ngoài còn trống, ở đây là 198.51.100.25:62001. Đích không đổi.
  3. Router ghi một dòng vào sổ ánh xạ (bảng NAT) để sau này tra ngược.

Vì sao phải đổi cả port, không chỉ IP? Vì nhiều thiết bị cùng dùng chung một IP công cộng. Nếu chỉ đổi IP, khi câu trả lời về, router không phân biệt được của laptop hay điện thoại. Việc đổi kèm port để tách các kết nối gọi là ; ngoài đời người ta vẫn gọi gộp là NAT. Hình 7 có điểm đáng chú ý: hai máy tình cờ chọn cùng port tạm 51514, vẫn được tách thành 62001 và 62002.

Chiều về: câu trả lời tìm đường vào nhà

Máy chủ203.0.113.10:443Router · NATtra sổ ánh xạLaptop192.168.1.10:51514③ Server trả lờiNGUỒN203.0.113.10:443ĐÍCH198.51.100.25:62001tra sổ④ Router đổi đíchĐÃ ĐỔINGUỒN203.0.113.10:443ĐÍCH192.168.1.10:51514Gói lạ từ 192.0.2.77:4444 gửi tới 198.51.100.25:62999không có dòng nào trong sổ → router không biết chuyển cho ai → bỏ gói.
Hình 8. Câu trả lời về IP công cộng : port 62001; router tra sổ, đổi đích thành 192.168.1.10:51514 rồi chuyển vào nhà. Gói không có trong sổ thì bị bỏ.
  1. Máy chủ trả lời về IP công cộng : port ngoài (198.51.100.25:62001). Nó chỉ biết địa chỉ này, không biết gì về 192.168.1.10.
  2. Router tra sổ, thấy 62001 tương ứng laptop, đổi đích thành 192.168.1.10:51514 rồi chuyển vào mạng nhà.

Ai nhìn thấy địa chỉ nào?

Bên nàoThấy gì về laptop
Laptop, điện thoại trong nhàThấy địa chỉ riêng 192.168.1.10.
Máy chủ web ngoài InternetChỉ thấy 198.51.100.25:62001. Không thấy 192.168.1.10.

Hệ quả hay gặp: nhật ký (log) của website ghi IP công cộng của nhà hoặc trường bạn, không ghi từng máy. Khi điều tra sự cố (bài 4), một IP có thể đại diện cho nhiều người.

Hai điều NAT không phải là(1) NAT không phải tường lửa. Kết nối mới từ ngoài vào thường bị bỏ vì không có dòng nào trong sổ, nhưng đó chỉ là hệ quả phụ, không phải chính sách bảo mật có chủ đích. (2) Nhà bạn có thể còn nằm sau thêm một lớp NAT của nhà mạng (): khi đó IP công cộng bạn thấy trên router (hay dạng 100.64.x.x đến 100.127.x.x) khác IP mà website nhìn thấy. Bài 6 phần B2 mô phỏng sổ NAT và bàn kỹ hơn về bảo mật.

BÀI TẬP 3 · 6 PHÚT

Điền sổ ánh xạ

Sổ NAT đang có hai dòng như Hình 7. Laptop 192.168.1.10 mở thêm một tab mới tới 203.0.113.10:443, hệ điều hành chọn port tạm 51600.

  1. Router sẽ ghi dòng mới nào vào sổ? (Chọn một port ngoài chưa dùng.)
  2. Máy chủ trả lời về địa chỉ nào? Router đổi nó thành gì trước khi chuyển vào nhà?
Xem đáp án
  1. Ví dụ: 192.168.1.10:51600 ⇄ 198.51.100.25:62003. Port ngoài có thể là bất kỳ số chưa dùng; quan trọng là không trùng 62001, 62002.
  2. Máy chủ trả lời về 198.51.100.25:62003. Router tra sổ và đổi đích thành 192.168.1.10:51600.
06

Xem địa chỉ trên máy của bạn

25 phút
Mở terminalGõ một lệnh
Chọn đúng adapterWi-Fi hoặc cáp mạng
Đọc 3 dòngIP · mask · gateway

Đến đây bạn đã có đủ khái niệm. Phần này giúp bạn tìm đúng chỗ trên máy thật để đối chiếu với sơ đồ ở phần 4. Cần đọc ra ba thông tin:

① IP của máy192.168.1.10③ Gateway192.168.1.1② mask /243 số đầu giống nhau= cùng mạng, gửi thẳng đượcTìm ① ② ③ trong kết quả lệnh; các dòng còn lại có thể bỏ qua.
Hình 9. Các lệnh ở dưới in ra ba giá trị này. Việc của bạn là tìm đúng dòng chứa chúng.
Cần tìmVí dụ trong bàiDùng để làm gì
① Địa chỉ IPv4 của máy192.168.1.10Địa chỉ của máy bạn trong mạng nhà (như laptop trong sơ đồ)
② Subnet mask / prefix255.255.255.0 hay /24Cho biết bao nhiêu phần đầu của IP là "tên phố"
③ Gateway (cổng ra)192.168.1.1Địa chỉ router, nơi máy gửi mọi dữ liệu đi ra ngoài
Lần đầu dùng cửa sổ lệnh? Đọc 4 điều này trước là chương trình cho bạn gõ lệnh bằng chữ thay vì bấm chuột. (1) Các lệnh ở phần này chỉ đọc thông tin, không đổi cấu hình, nên gõ thử không làm hỏng máy. (2) Gõ xong nhấn Enter để chạy. (3) Ký hiệu ở đầu dòng như %, $ hoặc > là dấu nhắc máy tự in, bạn không gõ nó. (4) Dùng nút Sao chép để khỏi gõ nhầm; gõ sai thì máy chỉ báo lỗi như command not found, gõ lại là được.

Ngoài việc đọc ba giá trị, ta dùng thêm để kiểm tra máy mình có thật sự nói chuyện được với gateway hay không. Cách làm: chọn hệ điều hành của bạn ở tab dưới và làm theo từng bước. Phần tô vàng trong kết quả là dòng bạn cần đọc; phần còn lại có thể bỏ qua. Các kết quả dưới đây là ví dụ minh họa, số trên máy bạn sẽ khác.

Cách 1: bằng giao diện (không cần gõ lệnh)

  1. Bấm biểu tượng Apple ở góc trên trái → Cài đặt Hệ thống (System Settings).
  2. Chọn Wi-Fi ở cột trái (nếu cắm cáp mạng thì chọn Ethernet).
  3. Ở mạng đang kết nối (có chữ "Đã kết nối"), bấm Chi tiết… (Details).
  4. Chọn thẻ TCP/IP. Bạn thấy: Địa chỉ IPv4 (= ①), Mặt nạ mạng con / Subnet mask (= ②), Bộ định tuyến / Router (= ③, chính là gateway).

Tên mục có thể khác chút theo phiên bản macOS và ngôn ngữ, nhưng vị trí là: Wi-Fi → Chi tiết → TCP/IP.

Cách 2: bằng Terminal

BƯỚC 1Mở Terminal

Nhấn Cmd + Space để mở Spotlight, gõ Terminal, nhấn Enter. Một cửa sổ chữ hiện ra với con trỏ nhấp nháy sau dấu nhắc. Từ giờ, mỗi lệnh bạn gõ ở đây rồi nhấn Enter.

BƯỚC 2Lấy nhanh IP của máy: ipconfig getifaddr en0

Mục đíchIn ra đúng một dòng là địa chỉ IPv4 của Wi-Fi, để bạn có ngay giá trị ① mà không phải đọc một bảng dài.
TERMINAL
ipconfig getifaddr en0
PhầnÝ nghĩa
ipconfigCông cụ hỏi cấu hình mạng của máy.
getifaddrViết tắt của "get interface address": lấy địa chỉ của một giao diện mạng.
en0Tên giao diện Wi-Fi trên hầu hết máy Mac. Cắm cáp thì thường là en1 hoặc tên khác.
KẾT QUẢ MINH HỌA
192.168.1.10

Nếu không in gì, máy bạn đang dùng giao diện khác. Hãy thử en1, hoặc làm bước 3 để xem đầy đủ.

BƯỚC 3Xem đầy đủ: ifconfig

Mục đíchLiệt kê mọi giao diện mạng của máy và cấu hình từng cái. Ta dùng nó để lấy thêm giá trị ② (mask) và để biết giao diện nào đang hoạt động.
TERMINAL
ifconfig

Lệnh này không cần thêm tham số. Kết quả rất dài, gồm nhiều khối, mỗi khối bắt đầu bằng tên giao diện (lo0, en0…). Hãy tìm khối có dòng status: active (thường là en0) và bỏ qua khối lo0 (đó là loopback 127.0.0.1, chỉ trỏ về chính máy).

KẾT QUẢ MINH HỌA · RÚT GỌN, CHỈ KHỐI en0
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
	ether aa:bb:cc:dd:ee:ff
	inet6 fe80::1c2b:3d4e:5f6a:7b8c%en0 prefixlen 64 scopeid 0xe
	inet 192.168.1.10 netmask 0xffffff00 broadcast 192.168.1.255
	status: active
PhầnÝ nghĩa
inet 192.168.1.10① Địa chỉ IPv4 của máy. Dòng inet6 ngay trên là IPv6, đừng nhầm.
netmask 0xffffff00② Subnet mask viết hệ 16. Mỗi cặp ff là 255 và 00 là 0, nên 0xffffff00 = 255.255.255.0 = /24.
status: activeKhối này đang được dùng. Khối status: inactive là giao diện không kết nối.
ether …Địa chỉ phần cứng (MAC). Che đi khi chụp màn hình gửi người khác.

BƯỚC 4Tìm gateway: route -n get default

Mục đíchHỏi máy: "Nếu cần gửi tới nơi không có đường riêng, tôi sẽ gửi cho ai?" Câu trả lời chính là giá trị ③ (gateway).
TERMINAL
route -n get default
PhầnÝ nghĩa
routeCông cụ xem (và sửa) bảng đường đi của máy. Ta chỉ xem.
-nHiện số IP thay vì cố dịch ra tên, cho nhanh và dễ đọc.
getHỏi đường đi tới một đích cụ thể.
defaultĐích đặc biệt nghĩa là "mọi nơi không có đường riêng", tức lối ra Internet.
KẾT QUẢ MINH HỌA
   route to: default
destination: default
       mask: default
    gateway: 192.168.1.1
  interface: en0

Dòng gateway là ③. Dòng interface: en0 cho biết gateway này đi qua giao diện nào, nên bạn biết khối nào ở bước 3 là khối cần đọc.

BƯỚC 5Kiểm tra thông mạng: ping -c 4 192.168.1.1

Mục đíchGửi 4 gói nhỏ tới gateway và đợi trả lời. Nếu trả lời đủ, máy bạn thật sự nói chuyện được với router. Thay 192.168.1.1 bằng gateway ③ của bạn.
TERMINAL
ping -c 4 192.168.1.1
PhầnÝ nghĩa
pingGửi gói nhỏ rồi đo thời gian đối phương trả lời, giống "gõ cửa xem có ai ở nhà".
-c 4"count": gửi đúng 4 lần rồi dừng. Không có tham số này, macOS ping mãi cho tới khi bạn nhấn Ctrl + C.
192.168.1.1Địa chỉ cần gõ cửa, ở đây là gateway.
KẾT QUẢ MINH HỌA
PING 192.168.1.1 (192.168.1.1): 56 data bytes
64 bytes from 192.168.1.1: icmp_seq=0 ttl=64 time=2.914 ms
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=3.207 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=2.655 ms
64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=3.011 ms

--- 192.168.1.1 ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 2.655/2.947/3.207/0.199 ms
Cách đọc kết quảtime=2.9 ms là thời gian đi và về (mili giây); trong nhà thường vài ms. 0.0% packet loss nghĩa là không mất gói nào: kết nối tốt. Nếu thấy 100% packet loss, hoặc máy không tới được gateway, hoặc gateway cố ý không trả lời ping (một số thiết bị chặn), nên chưa đủ để kết luận có lỗi.

Cách 1: bằng giao diện

  1. Bấm Start → Settings → Network & internet.
  2. Chọn Wi-Fi (hoặc Ethernet nếu cắm cáp) → bấm vào tên mạng đang kết nối, hoặc mục Hardware properties / Properties.
  3. Kéo xuống tìm dòng IPv4 address (= ①).

Giao diện này không phải bản nào cũng hiện gateway, nên cách 2 đầy đủ và ổn định hơn.

Cách 2: bằng Command Prompt hoặc PowerShell

BƯỚC 1Mở cửa sổ lệnh

Nhấn phím Windows, gõ cmd (hoặc PowerShell), nhấn Enter. Không cần chạy bằng quyền quản trị. Cửa sổ chữ hiện ra với dấu nhắc kết thúc bằng >.

BƯỚC 2Xem cấu hình mạng: ipconfig

Mục đíchLiệt kê cấu hình mạng của từng adapter (card mạng). Một lệnh cho đủ cả ba giá trị ①②③.
COMMAND PROMPT / POWERSHELL
ipconfig
PhầnÝ nghĩa
ipconfigCông cụ in cấu hình IP của máy. Gõ riêng một mình là in bản tóm tắt; thêm /all sẽ in chi tiết hơn (cả địa chỉ MAC).

Kết quả chia theo từng adapter. Tìm adapter đang dùng: Wireless LAN adapter Wi-Fi nếu dùng Wi-Fi, hoặc Ethernet adapter Ethernet nếu dùng cáp. Bỏ qua adapter có dòng Media disconnected, và adapter tên vEthernet, VirtualBox, VMware (mạng ảo). Trong adapter đó, đọc ba dòng được tô vàng:

KẾT QUẢ MINH HỌA · RÚT GỌN
Wireless LAN adapter Wi-Fi:

   Link-local IPv6 Address . . . . . : fe80::1c2b:3d4e:5f6a:7b8c%12
   IPv4 Address. . . . . . . . . . . : 192.168.1.10
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . : 192.168.1.1
PhầnÝ nghĩa
IPv4 Address① Địa chỉ IPv4 của máy.
Subnet Mask② Subnet mask. 255.255.255.0 tương ứng /24.
Default Gateway③ Gateway, tức địa chỉ router. Dòng IPv6 (fe80…) cũng có thể hiện ở đây, đừng nhầm với IPv4.

Nếu Windows của bạn dùng ngôn ngữ khác, tên dòng có thể được dịch. Hãy tìm dòng chứa IPv4, mask và gateway.

BƯỚC 3Kiểm tra thông mạng: ping -n 4 192.168.1.1

Mục đíchGửi 4 gói nhỏ tới gateway và đợi trả lời. Nếu trả lời đủ, máy bạn thật sự nói chuyện được với router. Thay 192.168.1.1 bằng Default Gateway ③ của bạn.
COMMAND PROMPT / POWERSHELL
ping -n 4 192.168.1.1
PhầnÝ nghĩa
pingGửi gói nhỏ rồi đo thời gian đối phương trả lời, giống "gõ cửa xem có ai ở nhà".
-n 4"number": gửi 4 lần rồi dừng. (Windows mặc định cũng gửi 4 lần.)
192.168.1.1Địa chỉ cần gõ cửa, ở đây là gateway.
KẾT QUẢ MINH HỌA
Pinging 192.168.1.1 with 32 bytes of data:
Reply from 192.168.1.1: bytes=32 time=3ms TTL=64
Reply from 192.168.1.1: bytes=32 time=3ms TTL=64
Reply from 192.168.1.1: bytes=32 time=3ms TTL=64
Reply from 192.168.1.1: bytes=32 time=3ms TTL=64

Ping statistics for 192.168.1.1:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 3ms, Maximum = 3ms, Average = 3ms
Cách đọc kết quảMỗi dòng Reply from… là một lần gõ cửa có người đáp; time=3ms là thời gian đi và về. Lost = 0 (0% loss) nghĩa là không mất gói nào. Nếu thấy Request timed out hoặc Destination host unreachable, hoặc máy không tới được gateway, hoặc gateway cố ý không trả lời ping nên chưa đủ để kết luận có lỗi.

Để xem đường ra theo kiểu "bảng đường đi", chạy thêm route print và tìm dòng có 0.0.0.0 ở cả hai cột đầu: cột Gateway của dòng đó chính là ③.

Cách 1: bằng giao diện (GNOME, Ubuntu)

  1. Mở Settings → Wi-Fi (hoặc Network nếu dùng cáp).
  2. Bấm biểu tượng bánh răng ⚙ cạnh mạng đang kết nối.
  3. Ở thẻ Details bạn thấy IPv4 Address (= ①) và Default Route (= ③, gateway).

Mỗi môi trường desktop đặt tên hơi khác nhau; nếu không thấy, dùng cách 2.

Cách 2: bằng Terminal

BƯỚC 1Mở Terminal

Thường là Ctrl + Alt + T, hoặc tìm "Terminal" trong menu ứng dụng. Cửa sổ chữ hiện ra với dấu nhắc kết thúc bằng $.

BƯỚC 2Xem địa chỉ IP: ip -4 addr

Mục đíchLiệt kê các giao diện mạng và địa chỉ IPv4 của từng cái. Dòng inet chứa luôn cả ① (IP) lẫn ② (prefix) trong một chỗ.
TERMINAL
ip -4 addr
PhầnÝ nghĩa
ipCông cụ chính để xem và cấu hình mạng trên Linux.
-4Chỉ hiện IPv4, bỏ IPv6 cho gọn.
addrĐối tượng cần xem: địa chỉ (address) của các giao diện.
KẾT QUẢ MINH HỌA · RÚT GỌN
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536
    inet 127.0.0.1/8 scope host lo
2: wlp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500
    inet 192.168.1.10/24 brd 192.168.1.255 scope global dynamic wlp2s0
PhầnÝ nghĩa
loLoopback, 127.0.0.1, chỉ trỏ về chính máy. Bỏ qua.
wlp2s0Tên giao diện Wi-Fi (wlp…). Cáp mạng thường là enp… hoặc eth0. Tên của bạn sẽ khác.
inet 192.168.1.10/24① IP của máy và ② prefix /24 trong cùng một dòng. /24 = 255.255.255.0.

BƯỚC 3Tìm gateway: ip route

Mục đíchIn bảng đường đi của máy. Dòng bắt đầu bằng default cho biết lối ra mặc định, tức gateway ③.
TERMINAL
ip route
PhầnÝ nghĩa
ip routeHiện bảng định tuyến (routing table): máy sẽ gửi dữ liệu tới từng đích qua đâu.
KẾT QUẢ MINH HỌA
default via 192.168.1.1 dev wlp2s0 proto dhcp metric 600
192.168.1.0/24 dev wlp2s0 proto kernel scope link src 192.168.1.10

Dòng default via 192.168.1.1 nghĩa là: "đích nào không có đường riêng thì gửi cho 192.168.1.1, qua giao diện wlp2s0". Dòng thứ hai cho biết mạng 192.168.1.0/24 là mạng nội bộ, máy nói chuyện trực tiếp với các máy trong dải này mà không qua gateway, đúng như bảng "gửi thẳng hay qua gateway" ở phần 4.

BƯỚC 4Kiểm tra thông mạng: ping -c 4 192.168.1.1

Mục đíchGửi 4 gói nhỏ tới gateway và đợi trả lời. Nếu trả lời đủ, máy bạn thật sự nói chuyện được với router. Thay 192.168.1.1 bằng gateway ③ của bạn.
TERMINAL
ping -c 4 192.168.1.1
PhầnÝ nghĩa
pingGửi gói nhỏ rồi đo thời gian đối phương trả lời, giống "gõ cửa xem có ai ở nhà".
-c 4"count": gửi đúng 4 lần rồi dừng. Không có tham số này, ping chạy mãi cho tới khi bạn nhấn Ctrl + C.
192.168.1.1Địa chỉ cần gõ cửa, ở đây là gateway.
KẾT QUẢ MINH HỌA
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=2.81 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=3.12 ms
64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=2.74 ms
64 bytes from 192.168.1.1: icmp_seq=4 ttl=64 time=2.95 ms

--- 192.168.1.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 2.740/2.905/3.120/0.145 ms
Cách đọc kết quảtime=2.81 ms là thời gian đi và về; trong nhà thường vài ms. 0% packet loss nghĩa là không mất gói nào: kết nối tốt. Nếu thấy 100% packet loss, hoặc máy không tới được gateway, hoặc gateway cố ý không trả lời ping, nên chưa đủ để kết luận có lỗi.

Tên gọi khác nhau trên từng hệ điều hành

Thông tinWindowsmacOSLinux
① IP của máyIPv4 Addressinetinet
② Subnet maskSubnet Masknetmask 0xffffff00/24 sau IP
③ GatewayDefault Gatewaygateway (trong route -n get default)default via (trong ip route)

Đọc kết quả: những chỗ dễ nhầm

  • Nhiều là bình thường. Máy có thể có Wi-Fi, cáp, Bluetooth, VPN, máy ảo, Docker. Adapter cần đọc là cái đang kết nối và có gateway. Adapter mạng ảo thường có IP riêng khác hẳn (ví dụ 172.17.0.1 của Docker) và không có đường ra Internet.
  • IP bắt đầu bằng 169.254 nghĩa là máy không nhận được địa chỉ từ router (lỗi DHCP). Mạng đang trục trặc, kiểm tra Wi-Fi hoặc router trước.
  • IP riêng khác IP công cộng. Những số bạn vừa đọc là địa chỉ trong mạng nhà. Địa chỉ mà website bên ngoài nhìn thấy là IP công cộng của router (phần NAT ở trên), xem ở trang quản trị router (mục WAN/Internet). Bài 6 có lab so sánh hai địa chỉ này.
  • Cẩn thận khi chụp màn hình. Khi gửi ảnh kết quả cho người khác (hỏi bài, báo lỗi), che dòng ether/Physical Address (địa chỉ MAC, định danh phần cứng) và tên máy. IP riêng ít nhạy cảm hơn, nhưng không cần chia sẻ.

BÀI TẬP 4 · 6 PHÚT

Đối chiếu máy của bạn với sơ đồ

Làm theo tab hệ điều hành của bạn, ghi lại ba thông tin: ① IP, ② prefix hoặc mask, ③ gateway, và kết quả ping tới gateway. Sau đó trả lời:

  1. IP của bạn thuộc dải riêng nào trong ba dải ở phần 4?
  2. Gateway và IP của máy có chung ba số đầu không? Vì sao?
  3. Có bao nhiêu adapter đang kết nối? Adapter nào có gateway?
Xem đáp án
  1. Hầu hết mạng nhà thuộc 192.168.0.0/16; một số mạng công ty hay hotspot dùng 10.0.0.0/8 hoặc 172.16.0.0/12.
  2. Với prefix /24, ba số đầu là phần mạng và phải giống nhau thì máy mới gửi trực tiếp tới gateway được (ví dụ 192.168.1.10 và 192.168.1.1). Nếu khác nhau, cấu hình mạng đang bất thường, hoặc prefix không phải /24.
  3. Thường chỉ một adapter đang dùng (Wi-Fi hoặc cáp) có gateway. Adapter VPN hay máy ảo có thể có IP nhưng không có gateway mặc định.
07

Xem port: chương trình nào đang lắng nghe

20 phút
Chụp "trước"Liệt kê port mở
Bật server nhỏPython, port 8080
Chụp "sau"Thấy port mới

Ở phần 6 ta xem "địa chỉ nhà" của máy. Bây giờ xem cửa nào đang mở: những port mà chương trình đang (chờ có người gõ cửa). Mỗi cửa mở là một phần của bề mặt tấn công, nên quản trị viên cần biết danh sách này.

Một dòng trong danh sách cho ta biết gì?

Mỗi dòng có một cột địa chỉ lắng nghe dạng địa-chỉ:port. Phần địa chỉ quyết định ai gõ cửa được:

Hiện làNghĩa làMức tiếp xúc
127.0.0.1:8080Chỉ chương trình trên chính máy này kết nối được.Thấp
192.168.1.10:8080Chỉ qua địa chỉ mạng nhà đó; máy trong cùng mạng kết nối được.Trung bình
*:8080 hoặc 0.0.0.0:8080 hoặc [::]:8080Nhận từ mọi địa chỉ của máy, tức cả mạng nhà (và Internet nếu router mở port).Cao
Lắng nghe ở 127.0.0.1= chỉ nhận từ chính máy nàyServerport 8080✗ bị từ chốiMáy kháccùng Wi-FiPhù hợp khi thử nghiệmLắng nghe ở 0.0.0.0 (hoặc *)= nhận từ mọi thiết bị trong mạngServerport 8080✓ vào đượcMáy kháccùng Wi-FiBề mặt tấn công lớn hơn
Hình 10. Cùng một server, chỉ khác địa chỉ lắng nghe. Dịch vụ thử nghiệm nên lắng nghe ở 127.0.0.1 để máy khác không gõ cửa được.

Thực hành: chụp ảnh "trước", bật một server nhỏ, chụp ảnh "sau"

Bài thực hành này làm trên một máy, hai cửa sổ lệnh. Gọi cửa sổ đầu là Terminal A, cửa sổ thứ hai là Terminal B. Bài 6 dùng port 8000; bài này dùng 8080 để hai bài không đụng nhau.

BƯỚC 1Chụp ảnh "trước" (Terminal A): lsof -iTCP -sTCP:LISTEN -n -P

Mục đíchLiệt kê mọi chương trình đang chờ kết nối TCP. Đây là ảnh chụp ban đầu để lát nữa so sánh.
TERMINAL A
lsof -iTCP -sTCP:LISTEN -n -P
PhầnÝ nghĩa
lsof"list open files": liệt kê file đang mở. Trên macOS/Linux, mỗi kết nối mạng cũng được coi là một "file mở".
-iTCPChỉ lấy kết nối mạng giao thức TCP.
-sTCP:LISTENChỉ lấy những kết nối ở trạng thái LISTEN (đang chờ).
-nKhông dịch IP ra tên máy, cho nhanh và đọc rõ số.
-PHiện số port (443) thay vì tên dịch vụ (https).
KẾT QUẢ MINH HỌA · RÚT GỌN
COMMAND    PID  USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
rapportd   656  an     11u  IPv4  0x1f2a      0t0  TCP *:49152 (LISTEN)
cupsd      312  root    6u  IPv4  0x3c4b      0t0  TCP 127.0.0.1:631 (LISTEN)
PhầnÝ nghĩa
COMMANDTên chương trình đang mở cửa.
PIDSố hiệu tiến trình, dùng để tìm hoặc dừng nó.
NAMEđịa-chỉ:port (LISTEN). Dòng đầu *:49152 là mở cho cả mạng; dòng hai 127.0.0.1:631 chỉ trong máy.

Không có dòng nào là bất thường: macOS có sẵn nhiều dịch vụ. Bạn chỉ cần ghi nhớ danh sách này và để ý dòng nào mở ra cả mạng.

BƯỚC 2Tạo thư mục thử (Terminal A)

Mục đíchServer nhỏ sẽ phục vụ file trong thư mục hiện tại. Ta tạo riêng một thư mục chỉ chứa một trang, để không vô tình chia sẻ file khác.
TERMINAL A
mkdir thu-port
cd thu-port
echo '<h1>Xin chao tu may cua toi</h1>' > index.html
PhầnÝ nghĩa
mkdir thu-port"make directory": tạo thư mục tên thu-port.
cd thu-port"change directory": đi vào thư mục vừa tạo.
echo '…' > index.htmlecho in chuỗi ra; dấu > chuyển phần in ra đó vào file index.html thay vì màn hình.

BƯỚC 3Bật server nhỏ (Terminal A): python3 -m http.server 8080 --bind 127.0.0.1

Mục đíchBiến máy bạn thành server web trong vài giây: Python có sẵn một server tĩnh, chỉ cần bật lên.
TERMINAL A
python3 -m http.server 8080 --bind 127.0.0.1
PhầnÝ nghĩa
python3 -m http.serverChạy module http.server có sẵn của Python: một web server trả về file trong thư mục hiện tại.
8080Port mà server lắng nghe (cửa số 8080).
--bind 127.0.0.1Chỉ nghe ở địa chỉ loopback, nên chỉ máy này truy cập được. Bỏ tham số này, server nghe ở mọi địa chỉ và máy khác cùng Wi-Fi cũng vào được.

Nếu macOS hỏi cài "Command Line Developer Tools" khi chạy python3, hãy đồng ý cài rồi chạy lại lệnh. Kết quả mong đợi:

KẾT QUẢ TRONG TERMINAL A
Serving HTTP on 127.0.0.1 port 8080 (http://127.0.0.1:8080/) ...

Terminal A đứng yên, không trả về dấu nhắc. Đó là bình thường: server đang chạy và chờ. Đừng đóng cửa sổ này. Mở Terminal B bằng Cmd + T (tab mới).

BƯỚC 4Chụp ảnh "sau" (Terminal B): lsof -iTCP:8080 -sTCP:LISTEN -n -P

Mục đíchHỏi đúng một câu: "Ai đang lắng nghe port 8080?" Thêm :8080 sau -iTCP để lọc theo port.
TERMINAL B
lsof -iTCP:8080 -sTCP:LISTEN -n -P
KẾT QUẢ MINH HỌA
COMMAND   PID  USER  FD   TYPE  DEVICE SIZE/OFF NODE NAME
Python  48213  an     5u  IPv4  0x7d1e      0t0  TCP 127.0.0.1:8080 (LISTEN)

BƯỚC 1Chụp ảnh "trước" (cửa sổ A): netstat -ano | findstr LISTENING

Mục đíchLiệt kê mọi kết nối và giữ lại những dòng đang chờ kết nối (LISTENING). Đây là ảnh chụp ban đầu để lát nữa so sánh.
POWERSHELL / CMD · CỬA SỔ A
netstat -ano | findstr LISTENING
PhầnÝ nghĩa
netstatCông cụ thống kê kết nối mạng của máy.
-a"all": hiện cả các cổng đang lắng nghe, không chỉ kết nối đang truyền dữ liệu.
-nHiện số (IP, port) thay vì cố dịch ra tên.
-o"owner": thêm cột PID, số hiệu chương trình đang giữ cổng.
|"Ống dẫn": đưa kết quả của lệnh bên trái sang lệnh bên phải.
findstr LISTENINGChỉ giữ những dòng có chữ LISTENING.
KẾT QUẢ MINH HỌA · RÚT GỌN
  Proto  Local Address          Foreign Address        State           PID
  TCP    0.0.0.0:135            0.0.0.0:0              LISTENING       1024
  TCP    127.0.0.1:5432         0.0.0.0:0              LISTENING       4120
PhầnÝ nghĩa
Local Addressđịa-chỉ:port đang lắng nghe. 0.0.0.0:135 là mở cho cả mạng; 127.0.0.1:5432 chỉ trong máy.
Foreign AddressLuôn là 0.0.0.0:0 với cổng đang chờ, vì chưa có ai kết nối. Bỏ qua.
PIDSố hiệu tiến trình. Tra tên chương trình bằng tasklist /FI "PID eq 4120".

BƯỚC 2Tạo thư mục thử (cửa sổ A, PowerShell)

Mục đíchServer nhỏ sẽ phục vụ file trong thư mục hiện tại. Ta tạo riêng một thư mục chỉ chứa một trang, để không vô tình chia sẻ file khác.
POWERSHELL · CỬA SỔ A
mkdir thu-port
cd thu-port
Set-Content -Path index.html -Value '<h1>Xin chao tu may cua toi</h1>' -Encoding ascii
PhầnÝ nghĩa
mkdir thu-portTạo thư mục tên thu-port.
cd thu-port"change directory": đi vào thư mục vừa tạo.
Set-Content -Path … -Value …Lệnh PowerShell ghi giá trị vào file. -Encoding ascii giữ file là chữ thường, không có ký tự lạ ở đầu file.

BƯỚC 3Bật server nhỏ (cửa sổ A): py -m http.server 8080 --bind 127.0.0.1

Mục đíchBiến máy bạn thành server web trong vài giây: Python có sẵn một server tĩnh, chỉ cần bật lên.
POWERSHELL · CỬA SỔ A
py -m http.server 8080 --bind 127.0.0.1
PhầnÝ nghĩa
py -m http.serverpy là trình chạy Python trên Windows; -m http.server chạy module web server có sẵn, trả về file trong thư mục hiện tại.
8080Port mà server lắng nghe (cửa số 8080).
--bind 127.0.0.1Chỉ nghe ở địa chỉ loopback, nên chỉ máy này truy cập được. Bỏ tham số này, server nghe ở mọi địa chỉ và máy khác cùng Wi-Fi cũng vào được.

Nếu Windows báo không tìm thấy py, cài Python từ python.org (tích chọn Add python.exe to PATH) rồi mở lại cửa sổ. Kết quả mong đợi:

KẾT QUẢ TRONG CỬA SỔ A
Serving HTTP on 127.0.0.1 port 8080 (http://127.0.0.1:8080/) ...

Cửa sổ A đứng yên, không trả về dấu nhắc. Đó là bình thường: server đang chạy và chờ. Đừng đóng cửa sổ này. Mở thêm một cửa sổ PowerShell nữa làm cửa sổ B.

BƯỚC 4Chụp ảnh "sau" (cửa sổ B): netstat -ano | findstr :8080

Mục đíchHỏi đúng một câu: "Ai đang dùng port 8080?" Lệnh findstr :8080 chỉ giữ các dòng có :8080.
POWERSHELL · CỬA SỔ B
netstat -ano | findstr :8080
KẾT QUẢ MINH HỌA
  TCP    127.0.0.1:8080         0.0.0.0:0              LISTENING       9312

Cột cuối là PID. Chạy tasklist /FI "PID eq 9312" (thay đúng PID của bạn) sẽ thấy tên chương trình là py.exe hoặc python.exe.

BƯỚC 1Chụp ảnh "trước" (Terminal A): ss -tln

Mục đíchLiệt kê mọi cổng TCP đang chờ kết nối. Đây là ảnh chụp ban đầu để lát nữa so sánh.
TERMINAL A
ss -tln
PhầnÝ nghĩa
ss"socket statistics": công cụ xem các ổ cắm (kết nối) mạng của máy.
-tChỉ TCP.
-l"listening": chỉ những cổng đang chờ.
-nHiện số (IP, port) thay vì tên.
KẾT QUẢ MINH HỌA · RÚT GỌN
State   Recv-Q  Send-Q  Local Address:Port   Peer Address:Port
LISTEN  0       4096    0.0.0.0:22           0.0.0.0:*
LISTEN  0       4096    127.0.0.1:631        0.0.0.0:*
PhầnÝ nghĩa
Local Address:Portđịa-chỉ:port đang lắng nghe. 0.0.0.0:22 là mở cho cả mạng; 127.0.0.1:631 chỉ trong máy.
Peer Address:PortLuôn trống (*) với cổng đang chờ, vì chưa có ai kết nối. Bỏ qua.

Muốn biết chương trình nào giữ cổng, thêm -p và chạy bằng sudo: sudo ss -tlnp. Cột cuối sẽ có dạng users:(("sshd",pid=812,fd=3)).

BƯỚC 2Tạo thư mục thử (Terminal A)

Mục đíchServer nhỏ sẽ phục vụ file trong thư mục hiện tại. Ta tạo riêng một thư mục chỉ chứa một trang, để không vô tình chia sẻ file khác.
TERMINAL A
mkdir thu-port
cd thu-port
echo '<h1>Xin chao tu may cua toi</h1>' > index.html
PhầnÝ nghĩa
mkdir thu-port"make directory": tạo thư mục tên thu-port.
cd thu-port"change directory": đi vào thư mục vừa tạo.
echo '…' > index.htmlecho in chuỗi ra; dấu > chuyển phần in ra đó vào file index.html thay vì màn hình.

BƯỚC 3Bật server nhỏ (Terminal A): python3 -m http.server 8080 --bind 127.0.0.1

Mục đíchBiến máy bạn thành server web trong vài giây: Python có sẵn một server tĩnh, chỉ cần bật lên.
TERMINAL A
python3 -m http.server 8080 --bind 127.0.0.1
PhầnÝ nghĩa
python3 -m http.serverChạy module http.server có sẵn của Python: một web server trả về file trong thư mục hiện tại.
8080Port mà server lắng nghe (cửa số 8080).
--bind 127.0.0.1Chỉ nghe ở địa chỉ loopback, nên chỉ máy này truy cập được. Bỏ tham số này, server nghe ở mọi địa chỉ và máy khác cùng Wi-Fi cũng vào được.
KẾT QUẢ TRONG TERMINAL A
Serving HTTP on 127.0.0.1 port 8080 (http://127.0.0.1:8080/) ...

Terminal A đứng yên, không trả về dấu nhắc. Đó là bình thường: server đang chạy và chờ. Đừng đóng cửa sổ này. Mở Terminal B bằng Ctrl + Shift + T (tab mới).

BƯỚC 4Chụp ảnh "sau" (Terminal B): ss -tln | grep 8080

Mục đíchHỏi đúng một câu: "Ai đang lắng nghe port 8080?" Lệnh grep 8080 chỉ giữ các dòng có chữ 8080.
TERMINAL B
ss -tln | grep 8080
KẾT QUẢ MINH HỌA
LISTEN  0       5       127.0.0.1:8080      0.0.0.0:*

Dòng mới 127.0.0.1:8080 chính là cánh cửa bạn vừa mở. Ở cột địa chỉ là 127.0.0.1 chứ không phải * hay 0.0.0.0, nhờ tham số --bind 127.0.0.1.

Bước 5. Làm client: mở trang bằng trình duyệt

Mở trình duyệt, vào http://127.0.0.1:8080. Bạn thấy dòng "Xin chao tu may cua toi". Lúc này:

CÙNG MỘT MÁY · địa chỉ 127.0.0.1 (loopback)Trình duyệtCLIENTport tạm do máy chọnPython web serverSERVERlắng nghe port 8080GET /200 OK + trangKhông ra khỏi máy: không qua router, không qua NAT, máy khác trong Wi-Fi không thấy.
Hình 11. Khi bạn mở http://127.0.0.1:8080, trình duyệt (client) và Python (server) đều ở trong máy bạn. Gói tin không rời máy.
  • Trình duyệt là client, dùng một port tạm do hệ điều hành chọn.
  • Python là server, lắng nghe ở port 8080.
  • Hai bên đều ở cùng một máy, nói chuyện qua địa chỉ loopback 127.0.0.1.

Quay lại Terminal A (hoặc cửa sổ A), server đã in nhật ký của lần truy cập:

NHẬT KÝ SERVER (NGÀY GIỜ CỦA BẠN SẼ KHÁC)
127.0.0.1 - - [19/Oct/2026 20:05:38] "GET / HTTP/1.1" 200 -
PhầnÝ nghĩa
127.0.0.1IP của client (ở đây là chính máy bạn).
"GET / HTTP/1.1"Client xin trang chủ / bằng phương thức GET.
200Mã trả lời: thành công. (404 là không tìm thấy.)

Nếu có dòng 404 cho /favicon.ico, đó là trình duyệt tự hỏi biểu tượng tab; bỏ qua.

Bước 6. Tắt server và xác nhận cửa đã đóng

Về Terminal A (cửa sổ A), nhấn Ctrl + C. Dấu nhắc lệnh quay lại. Chạy lại lệnh ở bước 4 trong Terminal B: lần này không còn dòng nào. Cửa 8080 đã đóng, bề mặt tấn công trở về như lúc đầu. Ngoài đời, đây là thói quen cần có: dịch vụ không dùng thì tắt.

Đừng bỏ --bind 127.0.0.1 khi chưa cầnKhông có tham số này, Python lắng nghe ở mọi địa chỉ. Khi đó bất kỳ ai cùng Wi-Fi gõ http://IP-của-bạn:8080 đều đọc được mọi file trong thư mục đó. Dịch vụ thử nghiệm nên giữ ở 127.0.0.1.

BÀI TẬP 5 · 7 PHÚT

Đọc danh sách cổng đang mở của máy bạn

Chạy lại lệnh "trước" ở bước 1 trên máy của bạn (khi chưa bật server), rồi trả lời:

  1. Có bao nhiêu dòng lắng nghe ở mọi địa chỉ (*, 0.0.0.0 hoặc [::]) và bao nhiêu dòng chỉ ở 127.0.0.1?
  2. Chọn một dòng mở cho cả mạng, tìm tên chương trình (cột COMMAND hoặc qua PID). Bạn có biết nó làm gì không?
  3. Vì sao server Python ở bước 3 không thể bị máy khác trong cùng Wi-Fi truy cập?
Xem đáp án
  1. Số liệu tùy máy. Máy cá nhân thường có vài dòng mở cho cả mạng (dịch vụ hệ điều hành, chia sẻ file/máy in) và nhiều dòng chỉ ở 127.0.0.1.
  2. Nếu không biết chương trình làm gì, tra tên trên Internet trước khi kết luận gì. Một dịch vụ lạ mở cho cả mạng là đáng để hỏi người quản trị.
  3. Vì --bind 127.0.0.1 khiến Python chỉ lắng nghe ở địa chỉ loopback, địa chỉ này không tồn tại với máy khác (127.0.0.1 của họ là chính họ).
08

Ôn lại bằng một bảng

5 phút

Mỗi khái niệm trong bài đều có một hình ảnh đời thường đi kèm. Khi gặp từ lạ, hãy nhớ lại hình ảnh đó:

Khái niệmGiống nhưVí dụ trong bài
ClientKhách gọi mónTrình duyệt
ServerNhà bếp chờ và làm mónChương trình web, Python http.server
IPĐịa chỉ nhà192.168.1.10
Prefix /24, maskTên phố (ba số đầu) và số nhà (số cuối)192.168.1 | .10; 255.255.255.0
PortSố cửa, số phòng443, 22, 8080
Router, gatewayCổng ra khỏi khu phố192.168.1.1
IP riêng, IP công cộngSố phòng nội bộ, địa chỉ tòa nhà192.168.1.10, 198.51.100.25
NATPhòng thư đóng dấu địa chỉ tòa nhà và ghi sổ192.168.1.10:51514 ⇄ 198.51.100.25:62001
LoopbackTự nói chuyện với chính mình127.0.0.1
Lắng ngheCửa đang mở chờ khách127.0.0.1:8080 (LISTEN)

Về bảo mật, quản trị viên nên biết máy mình đang dùng giao diện nào, đang lắng nghe port nào và ở địa chỉ nào, và dịch vụ nào thật sự cần mở ra ngoài. Bài 6 nói về việc kiểm soát điều đó bằng tường lửa và mã hóa.

Tóm tắt

Tự kiểm tra · 6 câu có giải thích +
1. Trong 192.168.1.10:51514 → 203.0.113.10:443, số 443 là gì?
2. Hai kết nối cùng máy nguồn và cùng đích khác nhau ở đâu để phân biệt?
3. Máy 192.168.1.10/24 gửi dữ liệu tới 192.168.1.77 và tới 192.168.2.77. Điều gì đúng?
4. Máy chủ web ngoài Internet nhận gói từ laptop trong nhà bạn. Nó nhìn thấy IP nguồn nào?
5. Bạn chạy một server thử nghiệm chỉ để mở bằng trình duyệt trên chính laptop. Nên cho nó lắng nghe ở đâu?
6. Vì sao nên hạn chế số dịch vụ lắng nghe từ mạng?

Ghi chú cá nhân +

Tự lưu trên trình duyệt. Không nhập thông tin bí mật.

Có thể bỏ đánh dấu bất cứ lúc nào.
Tài liệu tham khảo chính thức

Tra thuật ngữ