Xin chào các bạn, lại là mình đây 😁 Hôm nay, mình sẽ giới thiệu với các bạn về địa chỉ IP và cách chia mạng con, đây là một chủ đề khá thực tế và thú vị.
Nội dung
1. Địa chỉ IP là gì?
Địa chỉ IP (Internet Protocol Address) là địa chỉ duy nhất dùng để nhận biết
các thiết bị trong mạng máy tính sử dụng giao thức Internet. Nói nôm na thì
địa chỉ IP giống như địa chỉ nhà của bạn và nó dùng để phân biệt đâu là nhà
của bạn và đâu là nhà hàng xóm của bạn trên một con đường 😜. Địa chỉ IP
thường được sử dụng hiện nay là IP version 4 (IPv4) và IP version 6 (IPv6),
còn lại thì hầu như không được sử dụng. Các bạn có thể tham khảo lịch sử phát
triển các phiên bản của địa chỉ IP tại
đây. Trong bài viết này, mình sẽ chỉ giới thiệu các bạn về địa chỉ IPv4.
Một địa chỉ IP (IPv4) được tạo thành bởi 32 bit nhị phân (4 bytes), được chia
làm 4 bộ tám (octet). Các octet được ngăn cách nhau bởi dấu chấm ".".
Như vậy, mỗi octet sẽ là 1 byte và giá trị mỗi octet sẽ nằm trong đoạn từ
00000000 - 11111111 (nhị phân) hay từ 0 - 255 (thập phân). Ví dụ một địa chỉ
IP như sau:
192.168.1.1
11000000.10101000.00000001.00000001 (dạng nhị phân)
Địa chỉ IP được chia làm 2 phần: phần Network (Network ID) và phần Host
(Host ID). Phần Network dùng để xác định địa chỉ mạng, phần Host dùng để xác
định địa chỉ của các thiết bị trong mạng đó. Dựa vào đó, người ta chia địa
chỉ IP thành 5 lớp:
Octet đầu tiên của mỗi lớp địa chỉ có miền giá trị như sau:
Với hình trên, bạn có thắc mắc rằng tại sao miền địa chỉ lớp A không phải
từ 0 - 127 mà lại là 1 - 126 không? Câu trả lời là địa chỉ 0 và 127 của
lớp A được sử dụng cho mục đích khác. Với địa chỉ 0, 0.0.0.0 là một địa
chỉ meta đại diện cho việc không có địa chỉ cụ thể. Còn 127 chính là địa
chỉ loopback hay localhost mà các bạn thường nghe. Trong thực tế, chúng ta
hầu như chỉ sử dụng địa chỉ lớp A, B, C. Lớp D được dùng cho multicast
truyền thông đa phương tiện, còn lớp E chỉ sử dụng để dự phòng và dùng
trong phòng thí nghiệm.
2. Chia mạng con là gì? Tại sao phải chia mạng con?
Với chiều dài là 32 bit nhị phân, chúng ta có tổng cộng
232 = 4,294,967,296 địa chỉ IP. Chúng ta thấy con số này
rất hữu hạn. Với địa chỉ IP lớp A, chúng ta dùng 1 byte cho Network ID, tuy
nhiên chúng ta giữ nguyên bit đầu tiên là bit 0, do đó chúng ta có
27 - 2 = 126 địa chỉ mạng (2 địa chỉ mạng không dùng tới là 0
và 127 như mình đã đề cập ở trên). Tương tự như vậy với các lớp khác, bạn có
thể tham khảo bảng tính bên dưới.
Chia mạng con (Subnetting) là việc bạn tạo ra nhiều địa chỉ mạng logic hơn trong mỗi lớp
A, B, C. Nôm na là việc bạn tạo ra nhiều hơn 126 địa chỉ mạng trong lớp A
chẳng hạn. Thử tưởng tượng nếu như không chia mạng con, với địa chỉ mạng lớp
A, chúng ta chỉ có 126 địa chỉ mạng mà với mỗi địa chỉ mạng chúng ta lại có
tới 16,777,216 địa chỉ host. Giả sử một tổ chức lớn được cấp một địa chỉ
mạng lớp này đi chăng nữa cũng không thể có việc 16 triệu máy tính cùng kết
nối vào một mạng được. Việc không sử dụng hết địa chỉ IP là một sự lãng phí
không đáng có, trong khi số lượng địa chỉ IP lại có hạn. Do đó, chúng ta cần
phải chia mạng con. Tuy nhiên, việc chia mạng con sẽ làm giảm số lượng địa
chỉ IP có thể sử dụng, bởi vì với mỗi mạng con mới sinh ra, chúng ta lại tốn
thêm 2 địa chỉ (1 là địa chỉ mạng, 2 là địa chỉ broadcast). Địa chỉ mạng là
địa chỉ mà tất cả bit của Host ID có giá trị là 0, ngược lại địa chỉ
broadcast là địa chỉ mà tất cả bit của Host ID sẽ có giá trị là 1. Ví dụ với
địa chỉ mạng lớp C 192.168.1.0, chúng ta sẽ có địa chỉ broadcast là
192.168.1.255, như vậy những địa chỉ mà chúng ta có thể dùng được là từ
192.168.1.1 cho đến 192.168.1.254.
3. Chia mạng con như thế nào?
Trước khi tìm hiểu về cách chia mạng con, chúng ta hãy cùng xem qua Network
Mask (mặt nạ mạng 😅) là gì đã nhé. Thực sự là việc dịch những thuật ngữ
chuyên ngành sang tiếng Việt nó hơi 🍌 nên mình vẫn giữ nguyên thuật ngữ
tiếng anh nhé. Network Mask là một địa chỉ giúp bạn xác định được đâu là
Network ID, đâu là Host ID. Vậy xác định bằng cách nào? Bằng cách chuyển
những bit của phần Network ID sang 1 và Host ID sang 0. Ví dụ với địa chỉ
10.0.0.8 sẽ có network mask mặc định là 255.0.0.0 (do 10.0.0.8
là địa chỉ lớp A và có 8 bit dành cho Network ID).
Như vậy, với việc biểu thị những bit của Network ID là 1, chúng ta có thể sử
dụng phép AND thần thánh, chúng ta có thể tìm được địa chỉ mạng tương ứng
của một địa chỉ IP bất cứ. Trở lại với ví dụ 10.0.0.8 255.0.0.0 trên, ta có:
00001010.00000000.00000000.00001000
11111111.00000000.00000000.00000000
--------------------------------------------------
00001010.00000000.00000000.00000000
Như vậy, ta tìm được địa chỉ mạng tương ứng với địa chỉ 10.0.0.8 là
10.0.0.0.
Như đã nói ở trên, chia mạng con là việc tạo ra nhiều địa chỉ mạng hơn. Vậy,
chúng ta sẽ tăng số lượng mạng bằng cách tăng số lượng bit của Network ID.
Tuy nhiên, số bit mỗi địa chỉ lại cố định, do đó chúng ta sẽ mượn một số bit
nhất định của Host ID để làm Network ID. Như vậy, khi mượn n bit, chúng ta
sẽ chia được 2n địa chỉ mạng và có 2số bit host còn lại địa chỉ host (2số bit host còn lại - 2 địa chỉ dùng
được). Ví dụ với địa chỉ mạng 192.168.1.0/24 chia thành 4 mạng con, chúng ta
sẽ mượn 2 bit phần Host ID. 192.168.1.0 =
11000000.10101000.00000001.00000000 sẽ được chia thành 4 mạng con như
sau:
192.168.1.0/26
= 11000000.10101000.00000001.00000000
192.168.1.64/26
= 11000000.10101000.00000001.01000000
192.168.1.128/26 = 11000000.10101000.00000001.10000000
192.168.1.192/26 = 11000000.10101000.00000001.11000000
STT | Địa chỉ mạng | Địa chỉ đầu | Địa chỉ cuối | Địa chỉ broadcast |
---|---|---|---|---|
0 | 192.168.1.0/26 | 192.168.1.1 | 192.168.1.62 | 192.168.1.63 |
1 | 192.168.1.64/26 | 192.168.1.65 | 192.168.1.126 | 192.168.1.127 |
2 | 192.168.1.128/26 | 192.168.1.129 | 192.168.1.190 | 192.168.1.191 |
3 | 192.168.1.192/26 | 192.168.1.193 | 192.168.1.254 | 192.168.1.255 |
4. Làm thế nào để xác định 2 thiết bị có thuộc cùng một mạng hay không?
Giả sử cho địa chỉ IP của 2 thiết bị như sau:
- Thiết bị X: 172.16.20.30/20 hay 172.16.20.30 255.255.240.0
- Thiết bị Y: 172.16.28.64/20 hay 172.16.28.64 255.255.240.0
Để xác định địa chỉ mạng của một địa chỉ IP, ta sẽ sử dụng phép AND thần
thánh như mình đã trình bày ở phần 3.
172.16.20.30 = 10101100.00010000.00010100.00011110
255.255.240.0 = 11111111.11111111.11110000.00000000
Subnet ID = 10101100.00010000.00010000.00000000 =
172.16.16.0
Cách mình trình bày ở trên là cách làm truyền thống, tuy nhiên bạn có thể
nhẩm nhanh như sau: xét thiết bị X, ta thấy octet đầu tiên là 172 nên đây là
địa chỉ mạng lớp B, Network ID mặc định của địa chỉ mạng lớp B là 16, như
vậy ở đây là mạng con đã mượn 20 - 16 = 4 bit. Mỗi mạng sẽ cách
nhau 24 = 16. Do đó thiết bị X sẽ thuộc mạng 172.16.16.0. Tương tự với
thiết bị Y ta cũng có thiết bị Y thuộc mạng 172.16.16.0. Do đó, 2 thiết bị
sẽ thuộc cùng một mạng.
5. Vận dụng chia mạng con
Giả sử cho địa chỉ mạng 200.15.5.0/24 và mô hình mạng như hình bên dưới. Hãy
chia mạng con sao cho phù hợp.
Như vậy, với bài này chúng ta sẽ chia địa chỉ mạng trên thành 5 mạng con
tương ứng với A, B, C, D, E như trên hình. Mạng có số lượng host lớn nhất
trong các mạng con là mạng D với 29 hosts. Như vậy chúng ta cần mượn 3 bit
để chia được 8 mạng con và mỗi mạng sẽ có 30 địa chỉ host dùng được (thoả
yêu cầu). Ta có 5 mạng con như sau:
- Net A: 200.15.5.0/27
- Net B: 200.15.5.32/27
- Net C: 200.15.5.64/27
- Net D: 200.15.5.96/27
- Net E: 200.15.5.128/27
Tuy nhiên, cách giải trên đã tối ưu hay chưa khi mà mỗi mạng với số lượng
hosts khác nhau lại được chia cùng một số lượng hosts như nhau? Do đó, với
bài toán này, mình sẽ sử dụng VLSM (Variable Length Subnet Masks). VLSM sẽ
cho phép bạn sử dụng những mask khác nhau cho mỗi Net. Mình sẽ giải lại
như sau:
Xét Net có số lượng hosts lớn nhất trước theo thứ tự là D > B > A >
C > E. Đầu tiên là Net D và Net B, ta thấy số lượng hosts nằm trong đoạn
từ 15-30, do đó, mình sẽ mượn 3 bit để chia. Ta được 8 mạng con:
- Net 0: 200.15.5.0/27
- Net 1: 200.15.5.32/27
- Net 2: 200.15.5.64/27
- Net 3: 200.15.5.96/27
- Net 4: 200.15.5.128/27
- Net 5: 200.15.5.160/27
- Net 6: 200.15.5.192/27
- Net 7: 200.15.5.224/27
Ta sẽ lấy Net 0 và Net 1 gán tương ứng cho Net D và Net B. Với Net A gồm có
14 hosts, chúng ta sẽ lấy Net 2 mượn 1 bit sẽ chia làm 2 mạng con, mỗi mạng
có 14 host dùng được.
- Net 2a: 200.15.5.64/28
- Net 2b: 200.15.5.80/28
Ta lấy Net 2a gán cho Net A. Đối với Net C gồm 7 hosts (>6 hosts nên
không thể chia tiếp), ta lấy Net 2b gán cho Net này. Với Net E, chúng ta chỉ
cần 2 hosts gán cho 2 router nên sẽ lấy Net 3 mượn thêm 3 bit sẽ chia được 8
mạng con, mỗi mạng có 2 host dùng được. Chúng ta chỉ cần 1 mạng con đầu tiên
của Net 3 gán cho Net E là 200.15.5.96/30. Như vậy chúng ta đã chia xong và
có địa chỉ mạng tương ứng như sau:
- Net A: 200.15.5.64/28
- Net B: 200.15.5.32/27
- Net C: 200.15.5.80/28
- Net D: 200.15.5.0/27
- Net E: 200.15.5.96/30
Ghi chú: Nội dung bài viết được mình tham khảo từ
[1] IP Addressing and Subnetting for New Users: Cisco (27/11/2020)
Như vậy là mình đã giới thiệu xong về cách chia mạng con và vận dụng nó
qua một số ví dụ cụ thể. Nếu có bất cứ vấn đề gì thắc mắc, bạn có thể bình
luận vào bên dưới bài viết. Cảm ơn bạn đã theo dõi bài viết. Nếu cảm thấy
bài viết hữu ích, hãy chia sẻ cho bạn bè cùng đọc nhé 😉