Nền tảng Mạng máy tính/Địa chỉ IP — IPv4, IPv6 và dải private
7/17
Bài 7 / 17~20 phútĐịa chỉ & Định tuyếnMiễn phí lượt xem

Địa chỉ IP — IPv4, IPv6 và dải private

Cấu trúc địa chỉ IPv4 (32-bit), IPv6 vì sao ra đời, public vs private, ba dải private RFC 1918, loopback. Giải thích vì sao máy bạn có 192.168.x.x nhưng Internet thấy IP khác, và vì sao mạng nội bộ luôn chọn dải private.

TL;DR: Địa chỉ IPv4 là số 32-bit, viết thành 4 octet thập phân (vd 192.168.1.10), mỗi octet 0–255. Có hai loại: public (định danh trên toàn Internet, do nhà mạng cấp) và private (chỉ dùng nội bộ LAN, theo RFC 1918: 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16). Máy bạn có IP private; khi ra Internet, router NAT đổi nó thành IP public của đường truyền — nên whatismyip thấy địa chỉ khác ip addr. IPv6 (128-bit) ra đời vì IPv4 cạn. Mọi mạng nội bộ (nhà, văn phòng, cloud) đều chọn dải private RFC 1918 vì cùng một lý do: không cần và không nên dùng IP public bên trong LAN.

Mở terminal gõ ip addr (hoặc ifconfig), bạn thấy máy mình có IP kiểu 192.168.1.10. Nhưng vào whatismyip.com, nó báo một IP hoàn toàn khác, kiểu 113.161.45.20. Cùng một máy, hai địa chỉ khác nhau — cái nào là "thật"? Và vì sao lại có hai?

Bài này giải thích cấu trúc địa chỉ IP, sự khác nhau giữa publicprivate, và cơ chế khiến một máy có thể mang hai địa chỉ cùng lúc — nền tảng để hiểu vì sao mọi mạng nội bộ đều chọn dải private.

1. Analogy — Số phòng nội bộ vs địa chỉ toà nhà

Một công ty lớn có địa chỉ bưu điện công khai: "Toà nhà X, 123 Đường Y" — đó là cái cả thành phố biết để gửi thư. Bên trong, mỗi phòng có số nội bộ ("phòng 305") chỉ có nghĩa trong toà nhà; người ngoài không gửi thẳng tới "phòng 305" được. Thư từ ngoài tới địa chỉ công khai, rồi lễ tân chuyển tiếp vào đúng phòng.

Công tyMạng
Địa chỉ toà nhà (công khai)IP public (cả Internet thấy)
Số phòng nội bộ (305)IP private (chỉ trong LAN)
Lễ tân chuyển thư vào phòngNAT trên router
Người ngoài chỉ biết địa chỉ toà nhàInternet chỉ thấy IP public
💡 Cách nhớ

Private IP = số phòng nội bộ (lặp lại ở mọi toà nhà, vô nghĩa bên ngoài). Public IP = địa chỉ toà nhà (duy nhất, cả thành phố dùng được). Router là lễ tân đứng giữa.

2. Cấu trúc địa chỉ IPv4

Một địa chỉ IPv4 là 32 bit, chia thành 4 octet (mỗi octet 8 bit = 0–255), viết dạng thập phân chấm:

192
11000000
.
168
10101000
.
1
00000001
.
10
00001010

4 octet × 8 bit = 32 bit · mỗi octet 0–255 · tổng cộng khoảng 4,3 tỉ địa chỉ

32 bit cho khoảng 4,3 tỉ địa chỉ — nghe nhiều, nhưng với hàng tỉ thiết bị ngày nay là không đủ. Đó là động lực cho cả NAT (dùng chung IP public) lẫn IPv6.

3. IPv6 — vì sao cần, ngắn gọn

IPv6 dùng 128 bit, viết dạng hex chia bởi dấu hai chấm, ví dụ 2001:0db8:85a3::8a2e:0370:7334. Không gian địa chỉ khổng lồ (đủ cho mọi thiết bị có IP public riêng, không cần NAT). Thực tế đang chuyển dần (dual-stack — chạy song song IPv4 + IPv6). Với dev hôm nay, IPv4 + NAT vẫn là thứ bạn gặp hằng ngày; biết IPv6 tồn tại và là tương lai là đủ ở mức này.

4. Public vs Private — ba dải RFC 1918

Một số dải IPv4 được dành riêng cho mạng nội bộ (private), không bao giờ định tuyến trên Internet công cộng. Chuẩn RFC 1918 quy định ba dải:

Dải privateSố địa chỉHay gặp ở
10.0.0.0/8~16,7 triệumạng doanh nghiệp lớn, cloud VPC
172.16.0.0/12~1 triệumạng vừa, một số mạng ảo nội bộ
192.168.0.0/16~65 nghìnrouter gia đình, văn phòng nhỏ

Vì là private, các dải này lặp lại tự do: nhà bạn và nhà hàng xóm đều có thể dùng 192.168.1.x mà không xung đột — vì chúng chỉ có nghĩa trong LAN mỗi nhà. Ngoài ra còn vài dải đặc biệt:

  • 127.0.0.0/8loopback (địa chỉ trỏ ngược về chính máy này; 127.0.0.1 = "localhost", gói không bao giờ ra khỏi máy).
  • 169.254.0.0/16link-local (dải máy tự gán khi không xin được IP từ DHCP — Dynamic Host Configuration Protocol, dịch vụ tự động cấp IP/gateway/DNS cho máy khi vào mạng).

5. Vì sao một máy có hai địa chỉ

Máy bạn mang IP private trong LAN. Khi gói tin ra Internet, router thay địa chỉ nguồn private bằng IP public của đường truyền — cơ chế NAT (bài sau đào sâu):

flowchart LR
    L["Laptop<br/>192.168.1.10<br/>(private)"] --> R["Router + NAT<br/>doi nguon"]
    R --> I["Internet thay<br/>113.161.45.20<br/>(public)"]

Vậy nên ip addr cho bạn thấy IP private (góc nhìn từ trong LAN), còn whatismyip cho thấy IP public (góc nhìn từ Internet). Kiểm chứng:

ip addr            # private, vd 192.168.1.10
curl ifconfig.me   # public, vd 113.161.45.20

6. Vì sao mạng nội bộ chọn dải private

Bất kỳ mạng nội bộ nào — router gia đình, switch văn phòng, một mạng ảo (virtual network) do hệ điều hành tạo — đều cấp địa chỉ cho thiết bị từ một trong ba dải private RFC 1918, không bao giờ dùng IP public. Lý do rất thực dụng:

  • Không tốn IP public. IPv4 đã cạn; xin IP public cho từng thiết bị nội bộ là bất khả thi và lãng phí. Một LAN cả trăm máy chỉ cần một IP public của đường truyền, phần còn lại dùng private.
  • An toàn hơn. Địa chỉ private không định tuyến trên Internet, nên thiết bị nội bộ không bị truy cập trực tiếp từ ngoài — phải mở cổng tường minh mới vào được (bài NAT).
  • Tự do đánh số. Vì private chỉ có nghĩa trong LAN, mỗi mạng tự chọn dải mà không lo trùng với mạng khác.

Đây là lý do khi ip addr, bạn luôn thấy máy mình mang IP kiểu 192.168.x hay 10.x — một địa chỉ private. Hiểu private IP + NAT ở bài này nghĩa là bạn đã nắm cách mọi mạng nội bộ tổ chức địa chỉ.

7. Pitfall — hiểu nhầm thường gặp

Nhầm 1: "IP máy tôi là 192.168.1.10, đưa cho bạn ở xa để họ kết nối thẳng." ✅ Đó là IP private, vô nghĩa ngoài LAN bạn. Người ở xa không tới được nó trực tiếp — cần IP public + cấu hình port forwarding/NAT.

Nhầm 2: "Dải private là của riêng tôi nên không bao giờ trùng." ✅ Chính vì private nên dễ trùng: VPN công ty dùng 10.x, mạng nhà dùng 192.168.x, một mạng ảo nội bộ dùng 172.x — nếu hai mạng bạn nối vào cùng dùng một dải, định tuyến rối (vd VPN 192.168.1.x trùng Wi-Fi nhà 192.168.1.x). Đây là lỗi cấu hình thật sự hay gặp.

Nhầm 3: "127.0.0.10.0.0.0 như nhau." ✅ 127.0.0.1 là loopback — chỉ chính máy này. 0.0.0.0 khi bind server nghĩa là "lắng nghe trên mọi interface" (kể cả từ mạng ngoài). Bind nhầm 0.0.0.0 thay vì 127.0.0.1 có thể vô tình mở service ra ngoài (chi tiết ở module port/socket).

8. 📚 Deep Dive — tài liệu gốc

📚 Spec & reference chính thức

Đọc khi muốn tới gốc địa chỉ IP:

Ghi chú: RFC 1918 là tài liệu bạn sẽ dẫn lại nhiều nhất — mọi mạng nội bộ (nhà, công ty, cloud VPC) đều dùng đúng ba dải này.

9. Tóm tắt

  • IPv4 = 32 bit = 4 octet (0–255), khoảng 4,3 tỉ địa chỉ — không đủ cho thế giới ngày nay.
  • Public = duy nhất, định tuyến trên Internet; private = chỉ trong LAN, lặp lại tự do giữa các mạng.
  • Ba dải private (RFC 1918): 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16. Thêm loopback 127.0.0.1, link-local 169.254.x.
  • Một máy có hai địa chỉ: private (trong LAN, ip addr) và public (Internet thấy, curl ifconfig.me) — NAT trên router là cầu nối.
  • IPv6 (128-bit) là tương lai, giải bài toán cạn IPv4; hôm nay dev chủ yếu vẫn gặp IPv4 + NAT.
  • Mọi mạng nội bộ chọn dải private RFC 1918 và NAT ra Internet — tiết kiệm IP public, an toàn hơn, tự do đánh số.

10. Tự kiểm tra

Tự kiểm tra
Q1
Vì sao `ip addr` và `curl ifconfig.me` cho hai địa chỉ IP khác nhau trên cùng một máy?
ip addr hiển thị IP private — địa chỉ máy bạn trong LAN (vd 192.168.1.10), góc nhìn từ bên trong. curl ifconfig.me hỏi một server ngoài Internet "bạn thấy IP nào của tôi?", và nó thấy IP public của đường truyền (vd 113.x) vì router đã NAT đổi địa chỉ nguồn private thành public khi gói ra ngoài. Một máy, hai góc nhìn: private trong LAN, public ngoài Internet.
Q2
Ba dải private RFC 1918 là gì, và vì sao nói chúng 'lặp lại tự do'?

Ba dải: 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16.

Chúng "lặp lại tự do" vì chỉ có nghĩa trong nội bộ một LAN và không bao giờ định tuyến ra Internet. Nhà bạn và nhà hàng xóm cùng dùng 192.168.1.x mà không xung đột, vì mỗi 192.168.1.10 chỉ tồn tại trong LAN riêng của nó. Internet không bao giờ thấy các địa chỉ này — nên chúng có thể tái sử dụng ở mọi mạng.

Q3
Một đồng nghiệp ở xa nhờ bạn gửi IP để họ kết nối tới server đang chạy trên laptop bạn. Bạn gửi 192.168.1.10. Vì sao họ không kết nối được?
192.168.1.10 là IP private, chỉ có nghĩa trong LAN nhà bạn — Internet không định tuyến tới nó. Người ở xa cần một đường vào: IP public của đường truyền cộng với port forwarding/NAT trên router (hoặc một tunnel như ngrok). Gửi private IP cho người ngoài LAN luôn vô dụng.
Q4
Vì sao mọi mạng nội bộ (router nhà, LAN văn phòng, cloud VPC) đều cấp IP từ dải private RFC 1918 thay vì IP public?
Ba lý do thực dụng. Tiết kiệm IP public: IPv4 đã cạn, không thể cấp IP public cho từng thiết bị — cả LAN chỉ cần một IP public của đường truyền, phần còn lại dùng private rồi NAT chung ra ngoài. An toàn hơn: địa chỉ private không định tuyến trên Internet nên thiết bị nội bộ không bị truy cập trực tiếp từ ngoài (phải mở cổng tường minh mới vào được). Tự do đánh số: vì private chỉ có nghĩa trong LAN, mỗi mạng tự chọn dải mà không lo trùng mạng khác. Đó là lý do ip addr luôn cho thấy máy bạn mang IP kiểu 192.168.x hay 10.x.
Q5
Khi bind một server, dùng `127.0.0.1` khác `0.0.0.0` thế nào?
127.0.0.1 (loopback) khiến server chỉ nhận kết nối từ chính máy này — an toàn cho dịch vụ nội bộ. 0.0.0.0 nghĩa là lắng nghe trên mọi interface, kể cả từ mạng ngoài — tức server có thể bị truy cập từ các máy khác trong LAN (hoặc Internet nếu có port forwarding). Bind nhầm 0.0.0.0 cho thứ đáng lẽ chỉ nội bộ là một lỗi bảo mật phổ biến.
Q6
Vì sao IPv6 ra đời, và vì sao dev hôm nay vẫn chủ yếu làm việc với IPv4 + NAT?
IPv4 chỉ có ~4,3 tỉ địa chỉ (32-bit) — không đủ cho hàng tỉ thiết bị, nên IPv6 (128-bit) ra đời với không gian địa chỉ gần như vô hạn, đủ cho mỗi thiết bị một IP public mà không cần NAT. Tuy nhiên chuyển đổi tốn thời gian; hạ tầng hiện tại chạy dual-stack và NAT trên IPv4 đã giải quyết tạm bài toán cạn địa chỉ. Vì vậy thực tế hằng ngày của dev vẫn là IPv4 private + NAT; biết IPv6 là hướng tương lai là đủ ở mức nền tảng.

Bài tiếp theo: Subnet & CIDR — đọc CIDR cho đúng

Bài này có giúp bạn hiểu bản chất không?

Hỏi đáp về bài này

Chưa có câu hỏi

Đặt câu hỏi

Có gì chưa rõ trong bài? Đặt câu hỏi đầu tiên — câu trả lời từ cộng đồng giúp bạn (và người sau).

Đặt câu hỏi đầu tiên