Subnet mask là gì? Nhị phân, chia mạng con và bảng tra
Subnet mask (mặt nạ mạng con) là một số 32 bit chia địa chỉ IPv4 thành phần mạng và phần host. Các bit bằng 1 đánh dấu phần mạng, các bit bằng 0 đánh dấu phần host. Mặt nạ phổ biến nhất, 255.255.255.0, bắt đầu bằng 24 bit 1, nên còn được viết là /24 và để lại 254 địa chỉ host dùng được.
Dùng thử miễn phí: Máy tính mạng con IPv4 Miễn phí, không cần tài khoản.
Vậy subnet mask là gì trong thực tế? Mỗi thiết bị dùng mặt nạ để so sánh địa chỉ của chính nó với địa chỉ đích, từ đó quyết định đích nằm trong mạng cục bộ hay phải đi qua router. Bài viết này trình bày dạng nhị phân phía sau, cách tính subnet mask, một ví dụ chia mạng con, wildcard mask và một bảng tra đầy đủ. Để kiểm tra bất kỳ ví dụ nào khi đọc, hãy nhập nó vào Máy tính mạng con IPv4 miễn phí.
Subnet mask ở dạng nhị phân là gì?
Một địa chỉ IPv4 gồm bốn số 8 bit (octet), và subnet mask cũng vậy. Viết ở dạng nhị phân, 255.255.255.0 là:
11111111.11111111.11111111.00000000
Các bit 1 luôn đứng trước và liền nhau: một mặt nạ hợp lệ là một dãy bit 1 theo sau là một dãy bit 0, không bao giờ xen kẽ. Vì vậy có thể mô tả mặt nạ bằng một con số duy nhất, tức số bit 1. Dạng viết ngắn này là độ dài tiền tố trong ký hiệu CIDR: 192.168.1.10/24 nghĩa là địa chỉ 192.168.1.10 với mặt nạ 255.255.255.0. Để tìm hiểu sâu hơn về khối CIDR, xem bài cách tính khối CIDR.
Một octet của mặt nạ hợp lệ chỉ có thể nhận tám giá trị:
| Số bit 1 trong octet | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|---|---|---|---|---|---|---|---|---|
| Giá trị octet | 128 | 192 | 224 | 240 | 248 | 252 | 254 | 255 |
Octet bằng không (0) là lựa chọn thứ chín; bất kỳ số nào khác, chẳng hạn 255.255.255.100, đều làm mặt nạ không hợp lệ.
Mặt nạ tìm ra mạng như thế nào: ví dụ phép AND
Thiết bị tìm địa chỉ mạng bằng cách kết hợp địa chỉ IP và mặt nạ bằng phép AND theo bit: mỗi bit kết quả bằng 1 chỉ khi cả hai bit đầu vào đều bằng 1. Lấy ví dụ 192.168.10.37/26. Mặt nạ /26 có 26 bit 1, tức là 255.255.255.192:
Địa chỉ IP 192.168.10.37 11000000.10101000.00001010.00100101
Mặt nạ 255.255.255.192 11111111.11111111.11111111.11000000
AND 192.168.10.0 11000000.10101000.00001010.00000000
Ba octet đầu giữ nguyên. Ở octet cuối, 37 là 00100101 và mặt nạ là 11000000, nên chỉ hai bit cao nhất được giữ lại, và cả hai đều bằng 0. Địa chỉ mạng là 192.168.10.0.
Địa chỉ broadcast là địa chỉ mạng với tất cả các bit host bằng 1: 00111111 ở octet cuối, tức 63. Như vậy ta có bức tranh đầy đủ:
| Mục | Giá trị |
|---|---|
| Địa chỉ mạng | 192.168.10.0 |
| Host dùng được đầu tiên | 192.168.10.1 |
| Host dùng được cuối cùng | 192.168.10.62 |
| Địa chỉ broadcast | 192.168.10.63 |
| Tổng số địa chỉ | 64 |
| Số host dùng được | 62 |
Thiết bị có địa chỉ 192.168.10.37/26 gửi lưu lượng tới 192.168.10.50 trực tiếp, vì địa chỉ đó nằm trong cùng /26. Lưu lượng tới 192.168.10.70 được gửi tới gateway mặc định, vì .70 thuộc khối kế tiếp.
Cách tính subnet mask
Có hai điểm xuất phát thường gặp: bạn biết độ dài tiền tố, hoặc bạn biết mạng cần bao nhiêu host.
Từ độ dài tiền tố
Viết số bit 1 bằng đúng độ dài tiền tố, thêm bit 0 cho đủ 32 bit, rồi đổi từng octet sang thập phân. Với /20:
11111111.11111111.11110000.00000000 = 255.255.240.0
Octet thứ ba có bốn bit 1, và bảng ở trên cho giá trị 240 với bốn bit 1. Mẹo nhanh: tiền tố cho biết có bao nhiêu octet 255 trọn vẹn (20 ÷ 8 = 2, dư 4), và phần dư quyết định giá trị của octet tiếp theo.
Từ số host cần dùng
Mỗi mạng con mất hai địa chỉ, là địa chỉ mạng và địa chỉ broadcast, nên quy tắc là:
số host dùng được = 2^h − 2, trong đó h là số bit host (số bit 0 trong mặt nạ).
Tìm h nhỏ nhất sao cho 2^h − 2 không nhỏ hơn số host bạn cần, rồi tính tiền tố = 32 − h.
- 50 host: 2^5 − 2 = 30 là chưa đủ, còn 2^6 − 2 = 62 là đủ. Vậy h = 6, tiền tố là /26 và mặt nạ là
255.255.255.192. - 500 host: 2^8 − 2 = 254 là chưa đủ, còn 2^9 − 2 = 510 là đủ. Vậy h = 9, tiền tố là /23 và mặt nạ là
255.255.254.0.
Hãy chừa chỗ để mở rộng, vì đánh lại địa chỉ về sau tốn công hơn nhiều so với chọn ngay một khối lớn hơn một chút. Bạn có thể kiểm tra kết quả bằng công cụ tính subnet mask, chẳng hạn nhập 10.0.0.0/23 rồi đọc địa chỉ đầu tiên và cuối cùng.
Chia mạng con (subnetting) là gì? Chia một /24 thành bốn mạng /26
Chia mạng con là chia một mạng thành nhiều mạng nhỏ hơn bằng cách dời ranh giới giữa bit mạng và bit host sang phải. Mỗi bit mượn từ phần host làm số mạng con tăng gấp đôi và kích thước mỗi mạng giảm một nửa.
Giả sử bạn có 192.168.10.0/24 (256 địa chỉ) và cần bốn mạng riêng, ví dụ cho nhân viên, khách, máy chủ và camera. Bốn mạng con cần mượn 2 bit (2^2 = 4), nên tiền tố tăng từ /24 lên /26 và mặt nạ trở thành 255.255.255.192. Mỗi mạng con có 2^6 = 64 địa chỉ, trong đó 62 địa chỉ dùng được:
| Mạng con | Địa chỉ mạng | Dải host dùng được | Địa chỉ broadcast |
|---|---|---|---|
| 1 | 192.168.10.0/26 | 192.168.10.1 – 192.168.10.62 | 192.168.10.63 |
| 2 | 192.168.10.64/26 | 192.168.10.65 – 192.168.10.126 | 192.168.10.127 |
| 3 | 192.168.10.128/26 | 192.168.10.129 – 192.168.10.190 | 192.168.10.191 |
| 4 | 192.168.10.192/26 | 192.168.10.193 – 192.168.10.254 | 192.168.10.255 |
Các địa chỉ mạng tăng theo bước 64, chính là kích thước khối. Cách nhanh để tìm nó là lấy 256 trừ octet quan trọng của mặt nạ: 256 − 192 = 64. Gộp lại, bốn mạng con cung cấp 248 host dùng được thay vì 254, vì mỗi mạng tốn hai địa chỉ cho địa chỉ mạng và địa chỉ broadcast của riêng nó.
Wildcard mask: nghịch đảo của subnet mask
Wildcard mask đảo từng bit của subnet mask: bit 0 đánh dấu các bit phải khớp, bit 1 đánh dấu các bit được phép thay đổi. Bạn tính nó bằng cách lấy 255 trừ từng octet, nên 255.255.255.192 trở thành 0.0.0.63.
Router Cisco dùng wildcard mask trong danh sách kiểm soát truy cập (ACL) và trong câu lệnh network của OSPF:
access-list 10 permit 192.168.10.0 0.0.0.63
router ospf 1
network 192.168.10.0 0.0.0.63 area 0
Cả hai dòng đều chỉ cùng một /26 như trong ví dụ. Khác với subnet mask, wildcard mask trong ACL không bắt buộc phải liền mạch, nhưng với mạng con thông thường thì nó đơn giản là phần nghịch đảo.
Mạng phân lớp và subnet mask mặc định
Trước năm 1993, IPv4 dùng các lớp cố định, và octet đầu tiên của địa chỉ quyết định mặt nạ:
| Lớp | Octet đầu tiên | Mặt nạ mặc định | Tiền tố |
|---|---|---|---|
| A | 1–126 | 255.0.0.0 | /8 |
| B | 128–191 | 255.255.0.0 | /16 |
| C | 192–223 | 255.255.255.0 | /24 |
Lớp D (224–239) dành cho multicast, lớp E (240–255) dành cho mục đích thử nghiệm, còn 127 được giữ cho loopback. Vì các tổ chức chỉ có thể nhận khối 256, 65.536 hoặc 16.777.216 địa chỉ, hệ thống này gây lãng phí. Định tuyến liên miền không phân lớp (CIDR) đã thay thế nó bằng tiền tố có độ dài bất kỳ, và đặc tả hiện hành là RFC 4632. Ngày nay lớp của một địa chỉ không còn ý nghĩa kỹ thuật, dù các mặt nạ mặc định cũ vẫn xuất hiện như giá trị gợi ý trong nhiều màn hình cài đặt.
Dải địa chỉ riêng và mặt nạ của chúng
RFC 1918 dành riêng ba khối cho mạng riêng, không được định tuyến trên internet công cộng:
| Dải riêng | Tiền tố | Subnet mask | Tổng số địa chỉ |
|---|---|---|---|
| 10.0.0.0 – 10.255.255.255 | 10.0.0.0/8 | 255.0.0.0 | 16.777.216 |
| 172.16.0.0 – 172.31.255.255 | 172.16.0.0/12 | 255.240.0.0 | 1.048.576 |
| 192.168.0.0 – 192.168.255.255 | 192.168.0.0/16 | 255.255.0.0 | 65.536 |
Hiếm khi người ta dùng cả một khối làm một mạng. Chẳng hạn, một router gia đình điển hình chỉ dùng một mạng 192.168.1.0/24 hoặc 192.168.0.0/24 với subnet mask 255.255.255.0.
Subnet mask trong IPv6
IPv6 không có subnet mask dạng chấm. Mạng chỉ được viết bằng độ dài tiền tố, như 2001:db8:1234:5678::/64, và /64 là kích thước chuẩn cho một phân đoạn LAN vì cơ chế tự cấu hình không trạng thái (SLAAC) cần định danh giao diện 64 bit. IPv6 cũng không có địa chỉ broadcast, nên quy tắc "trừ hai" không áp dụng.
Những lỗi thường gặp với subnet mask
- Mặt nạ không liền mạch.
255.0.255.0hay255.255.255.100không phải subnet mask hợp lệ, vì các bit 1 phải tạo thành một dãy liên tục. - Quên địa chỉ mạng và địa chỉ broadcast. Một /24 có 256 địa chỉ nhưng chỉ 254 host dùng được. Gán
.0hoặc.255cho thiết bị trong một /24 sẽ gây sự cố. - Dùng mặt nạ khác nhau trong cùng một mạng. Nếu một thiết bị dùng /24 và thiết bị khác dùng /25 trên cùng phân đoạn, chúng sẽ hiểu khác nhau về địa chỉ nào là cục bộ, và một phần lưu lượng bị gửi tới gateway hoặc bị mất.
- Nhầm subnet mask với wildcard mask.
0.0.0.255trong ô subnet mask, hoặc255.255.255.0trong ACL, cho kết quả hoàn toàn khác.
Bảng tra subnet mask: từ /8 đến /32
Bảng này liệt kê mọi tiền tố từ /8 đến /32. Số host dùng được là 2^(32 − tiền tố) − 2, với hai ngoại lệ: /31 có 2 địa chỉ dùng được trên liên kết điểm-điểm (RFC 3021), và /32 là một host duy nhất.
| Tiền tố | Subnet mask | Wildcard mask | Tổng số địa chỉ | Host dùng được |
|---|---|---|---|---|
| /8 | 255.0.0.0 | 0.255.255.255 | 16.777.216 | 16.777.214 |
| /9 | 255.128.0.0 | 0.127.255.255 | 8.388.608 | 8.388.606 |
| /10 | 255.192.0.0 | 0.63.255.255 | 4.194.304 | 4.194.302 |
| /11 | 255.224.0.0 | 0.31.255.255 | 2.097.152 | 2.097.150 |
| /12 | 255.240.0.0 | 0.15.255.255 | 1.048.576 | 1.048.574 |
| /13 | 255.248.0.0 | 0.7.255.255 | 524.288 | 524.286 |
| /14 | 255.252.0.0 | 0.3.255.255 | 262.144 | 262.142 |
| /15 | 255.254.0.0 | 0.1.255.255 | 131.072 | 131.070 |
| /16 | 255.255.0.0 | 0.0.255.255 | 65.536 | 65.534 |
| /17 | 255.255.128.0 | 0.0.127.255 | 32.768 | 32.766 |
| /18 | 255.255.192.0 | 0.0.63.255 | 16.384 | 16.382 |
| /19 | 255.255.224.0 | 0.0.31.255 | 8.192 | 8.190 |
| /20 | 255.255.240.0 | 0.0.15.255 | 4.096 | 4.094 |
| /21 | 255.255.248.0 | 0.0.7.255 | 2.048 | 2.046 |
| /22 | 255.255.252.0 | 0.0.3.255 | 1.024 | 1.022 |
| /23 | 255.255.254.0 | 0.0.1.255 | 512 | 510 |
| /24 | 255.255.255.0 | 0.0.0.255 | 256 | 254 |
| /25 | 255.255.255.128 | 0.0.0.127 | 128 | 126 |
| /26 | 255.255.255.192 | 0.0.0.63 | 64 | 62 |
| /27 | 255.255.255.224 | 0.0.0.31 | 32 | 30 |
| /28 | 255.255.255.240 | 0.0.0.15 | 16 | 14 |
| /29 | 255.255.255.248 | 0.0.0.7 | 8 | 6 |
| /30 | 255.255.255.252 | 0.0.0.3 | 4 | 2 |
| /31 | 255.255.255.254 | 0.0.0.1 | 2 | 2 (điểm-điểm) |
| /32 | 255.255.255.255 | 0.0.0.0 | 1 | 1 (một host) |
Kiểm tra lại bằng máy tính mạng con
Máy tính mạng con IPv4 miễn phí chạy hoàn toàn trong trình duyệt của bạn. Nhập một địa chỉ kèm tiền tố, như 192.168.10.37/26, hoặc kèm mặt nạ dạng chấm sau dấu gạch chéo, như 10.0.0.0/255.255.0.0, và công cụ sẽ hiển thị:
- địa chỉ mạng, subnet mask, mặt nạ ở dạng nhị phân, ký hiệu CIDR và wildcard mask;
- kích thước mạng (toàn bộ địa chỉ trong khối, kể cả địa chỉ mạng và broadcast);
- địa chỉ dùng được đầu tiên và cuối cùng cùng địa chỉ broadcast;
- lớp IP theo cách phân lớp cũ của địa chỉ.
Với /31, công cụ hiển thị cả hai địa chỉ đều dùng được và không có broadcast, còn địa chỉ không kèm mặt nạ được coi là một host duy nhất (/32). Nút "Khối trước đó" và "Khối tiếp theo" chuyển sang mạng con liền kề cùng kích thước, tiện để duyệt qua bốn mạng /26 ở trên. Công cụ chỉ hỗ trợ IPv4, từ chối mặt nạ không liền mạch, không nhận mặt nạ cách bằng dấu cách và không tự tính tiền tố từ số host; hãy dùng công thức ở trên cho bước đó.
Câu hỏi thường gặp
Subnet mask 255.255.255.0 nghĩa là gì?
Đó là mặt nạ /24: ba octet đầu xác định mạng, octet cuối xác định host. Một mạng /24 có 256 địa chỉ, trong đó 254 địa chỉ có thể gán cho thiết bị, ví dụ từ 192.168.1.1 đến 192.168.1.254 trong 192.168.1.0/24.
Làm sao xem subnet mask của máy tính?
Trên Windows, chạy ipconfig và tìm dòng Subnet Mask. Trên Linux, ip addr hiển thị địa chỉ kèm tiền tố, như 192.168.1.20/24. Trên macOS, ipconfig getoption en0 subnet_mask in ra mặt nạ của giao diện en0, và phần cài đặt mạng cũng hiển thị nó.
Vì sao /31 có hai địa chỉ dùng được?
Sau khi trừ địa chỉ mạng và địa chỉ broadcast, một khối hai địa chỉ sẽ không còn host nào. RFC 3021 cho phép mạng /31 trên liên kết điểm-điểm, nơi không cần broadcast, nên hai đầu liên kết có thể dùng cả hai địa chỉ.
Subnet mask có giống gateway mặc định không?
Không. Subnet mask xác định những địa chỉ nào thuộc mạng cục bộ, còn gateway mặc định là địa chỉ của router xử lý mọi thứ còn lại. Thiết bị dùng mặt nạ trước để xác định đích có phải cục bộ không, và chỉ gửi lưu lượng tới gateway khi đích không cục bộ.
Dùng thử miễn phí: Máy tính mạng con IPv4 Miễn phí, không cần tài khoản.