Nhập địa chỉ IPv4 hoặc IPv6 kèm tiền tố CIDR để lấy ngay địa chỉ mạng, broadcast, dải host khả dụng, và nhiều thông tin khác.
File không bao giờ rời khỏi thiết bị của bạn
Địa chỉ mạng
192.168.1.0
Địa chỉ broadcast
192.168.1.255
Host khả dụng đầu tiên
192.168.1.1
Host khả dụng cuối cùng
192.168.1.254
Số host khả dụng
254
Tổng số địa chỉ
256
Subnet mask
255.255.255.0
Wildcard mask
0.0.0.255
Độ dài tiền tố
/24
Phạm vi
Riêng tư (private)
Lớp địa chỉ
Lớp C
Mask thật ra làm gì
Subnet mask đánh dấu bit nào của địa chỉ thuộc về mạng, bit nào thuộc về host: lấy địa chỉ AND với mask, phần còn lại là địa chỉ mạng, mọi bit host đều về 0. Nhập 192.168.1.0/24, mask là 255.255.255.0 — 24 bit đầu là mạng, 8 bit cuối là host — cho ra network 192.168.1.0, broadcast 192.168.1.255, và dải host khả dụng từ 192.168.1.1 tới 192.168.1.254: 254 địa chỉ, vì bản thân network và broadcast không tính là host.
Chia một khối thành nhiều khối nhỏ hơn
CIDR chỉ có nghĩa là độ dài tiền tố có thể là bất kỳ số nào, không chỉ những giá trị mặc định theo class cũ, nên cùng một /24 có thể cắt thành bốn khối /26 bằng nhau. Lấy 192.168.1.100/26 làm ví dụ: mask là 255.255.255.192, địa chỉ đó rơi vào khối chạy từ 192.168.1.64 tới 192.168.1.127 — network 192.168.1.64, broadcast 192.168.1.127, 62 host khả dụng. Ba khối /26 khác từ cùng /24 nằm cạnh đó, mỗi khối cũng 62 host, cắt ra từ một dải trước kia chỉ có đúng một kích thước.
Hai tiền tố khiến công thức quen thuộc bị phá vỡ
Số host khả dụng thường tính bằng 2^(32 − tiền tố) − 2 — tổng số địa chỉ trừ đi một cho network và một cho broadcast. Công thức đó cho ra kết quả vô lý ở hai tiền tố dài nhất, và chính vì vậy chúng được xử lý như trường hợp đặc biệt. /31 hoàn toàn không có broadcast: theo RFC 3021, cả hai địa chỉ của nó đều dùng được cho một liên kết điểm-điểm, nên host khả dụng là 2, không phải 0. /32 chỉ có một địa chỉ duy nhất, đóng vai trò tuyến tới đúng một host — địa chỉ đó chính là host — nên host khả dụng là 1, không phải -1 như công thức cho ra.
Mẹo:Thấy một /31 trên liên kết giữa hai router không phải là cấu hình sai — đó là trường hợp RFC 3021, cố tình chọn kích thước để không lãng phí địa chỉ nào cho cặp network/broadcast mà một liên kết hai host không cần tới.
Từ class cố định tới tiền tố tự chọn
Trước khi có CIDR, class của một địa chỉ được đọc từ octet đầu tiên và quy định luôn kích thước mạng: 1–127 là Class A với /8 mặc định (16.777.214 host), 128–191 là Class B với /16 mặc định (65.534 host), 192–223 là Class C với /24 mặc định (254 host) — 192.168.1.1 rơi vào dải cuối này. CIDR (RFC 1519) cắt đứt mối ràng buộc giữa các bit đầu của địa chỉ và kích thước mạng, cho phép một địa chỉ 192.168.x.x chạy ở /26 hay /28 dễ dàng như /24 cũ — bốn khối chia ở trên chỉ tồn tại được vì CIDR biến tiền tố thành lựa chọn tự do thay vì cố định.
Class
Octet đầu
Tiền tố theo class
Số host
A
1–127
/8
16.777.214
B
128–191
/16
65.534
C
192–223
/24
254
D
224–239
— (multicast)
không áp dụng
E
240–255
— (dự trữ)
không áp dụng
IPv6: không còn broadcast, và rộng hơn nhiều so với vẻ ngoài
Một địa chỉ IPv6 được rút gọn để dễ đọc, không phải để tiết kiệm chỗ lưu trữ: 2001:0db8:0000:0000:0000:ff00:0042:8329 viết thành 2001:db8::ff00:42:8329 sau khi mỗi nhóm bỏ số 0 dẫn đầu, rồi chuỗi các nhóm toàn số 0 liên tiếp dài nhất được gộp thành :: — không gộp chuỗi chỉ có một nhóm số 0, và không bao giờ có hơn một :: trong cùng một địa chỉ. Cũng không có broadcast nào để tính; công cụ báo địa chỉ cuối cùng thay vào đó, tức đỉnh của dải. Dải địa chỉ tự nó vượt xa IPv4: một /64, kích thước thường cấp cho một LAN, đã chứa 2^64 địa chỉ — 18.446.744.073.709.551.616 địa chỉ — nhiều hơn toàn bộ địa chỉ IPv4 từng tồn tại, gói gọn trong một mạng gia đình.
Mẹo:Một /32 trong IPv6 hoàn toàn khác một /32 trong IPv4 — đó là kích thước cấp phát điển hình cho cả một nhà cung cấp dịch vụ (ISP), không phải một tuyến tới một host duy nhất. Cùng một con số tiền tố ở IPv4 và IPv6 mô tả hai lượng địa chỉ khác nhau rất xa; đừng mang trực giác về kích thước tiền tố của IPv4 sang áp dụng cho IPv6.
Câu hỏi thường gặp
Subnet mask thật ra dùng để làm gì?
Nó đánh dấu bit nào của địa chỉ thuộc về mạng, bit nào thuộc về host: lấy địa chỉ AND với mask, phần còn lại chính là địa chỉ mạng, mọi bit host đều về 0. Nhập `192.168.1.0/24`, mask là `255.255.255.0` — 24 bit đầu là mạng, 8 bit cuối là host — cho ra network `192.168.1.0`, broadcast `192.168.1.255`, và dải host khả dụng từ `192.168.1.1` tới `192.168.1.254`: 254 địa chỉ, vì bản thân network và broadcast không tính là host.
Vì sao công thức `2^n − 2` không còn đúng ở /31 và /32?
Vì công thức đó giả định luôn tồn tại một địa chỉ mạng và một địa chỉ broadcast cần trừ đi, mà ở hai tiền tố dài nhất thì cả hai giả định đó đều không còn đúng. `/31` không có broadcast: theo RFC 3021, cả hai địa chỉ của nó đều dùng được cho một liên kết điểm-điểm, nên số host khả dụng là 2, không phải 0 như công thức tính ra. `/32` chỉ có một địa chỉ duy nhất, đóng vai trò tuyến tới đúng một host — địa chỉ đó *chính là* host — nên số host khả dụng là 1, không phải -1.
CIDR đã thay thế các lớp địa chỉ (class) cũ như thế nào?
Trước khi có CIDR, class của một địa chỉ được đọc thẳng từ octet đầu tiên và quy định luôn kích thước mạng: 1–127 là Class A với /8 mặc định, 128–191 là Class B với /16 mặc định, 192–223 là Class C với /24 mặc định. CIDR (RFC 1519) cắt đứt mối ràng buộc đó, cho phép chọn độ dài tiền tố độc lập với các bit đầu của địa chỉ — cùng dải `192.168.x.x` từng bị khóa cứng ở /24 giờ có thể chia thành bốn khối /26, tám khối /27, hoặc giữ nguyên một khối /24, tùy nhu cầu mạng thực tế.
Chuyển công cụ này từ IPv4 sang IPv6 thì cái gì thay đổi?
Cách tính đổi hình dạng nhiều như chính địa chỉ đổi. IPv6 không có địa chỉ broadcast, nên thay vào đó là địa chỉ cuối cùng của dải; mọi con số đều là `bigint` chứ không phải number thường, vì chỉ riêng một khối `/64` đã chứa nhiều địa chỉ hơn mức một number của JavaScript biểu diễn chính xác được; và không còn khái niệm class cũ, vì IPv6 được thiết kế theo kiểu tiền tố CIDR ngay từ đầu.
Vì sao `2001:0db8:0000:0000:0000:ff00:0042:8329` rút gọn thành `2001:db8::ff00:42:8329`?
Hai quy tắc áp dụng cùng lúc. Trước tiên mỗi nhóm bỏ số 0 dẫn đầu của riêng nó — `0db8` thành `db8`, `0042` thành `42` — sau đó chuỗi các nhóm toàn số 0 liên tiếp dài nhất được gộp thành `::`. Ở đây đó là ba nhóm số 0 ở vị trí thứ ba tới thứ năm; một chuỗi chỉ có đúng một nhóm số 0 thì không bao giờ được gộp, vì `::` phải tiết kiệm được nhiều hơn công viết ra nó.
Subnet mask khác wildcard mask ở điểm nào?
Chúng bù nhau theo từng bit, trên cùng 32 bit đó. Mask đánh dấu bit mạng bằng 1, bit host bằng 0 — `255.255.255.192` cho một /26. Wildcard mask đảo ngược lại: bit host thành 1, bit mạng thành 0 — `0.0.0.63` cho cùng /26 đó. Mask xuất hiện trên interface và route; wildcard mask xuất hiện trong luật access-control-list, nơi bit 1 nghĩa là 'bỏ qua bit này' thay vì 'phải khớp bit này'.
Có nhập được dạng mask chấm như `255.255.255.0` thay vì tiền tố không?
Có — `192.168.1.10/255.255.255.0` và `192.168.1.10/24` cho cùng một kết quả. Cứ nhập dạng nào bạn đang có sẵn; công cụ tự đọc mask dạng chấm về đúng độ dài tiền tố, miễn các bit 1 của nó tạo thành một chuỗi liên tục từ đầu — hình dạng duy nhất mà một subnet mask thật sự có thể có.