Như ta đã biết mạng Internet sử dụng địa chỉ IPv4 32 bit và phân chia ra các lớp A,B,C,D , tuy nhiên, với một hệ thống địa chỉ như vậy việc quản lý vẫn rất khó khăn . Nếu như một mạng được cấp một địa chỉ lớp A thì có nghĩa nó có thể chứa tới 16*1.048.576 địa chỉ ( máy tính ) .Với số lượng máy tính lớn như vậy rất ít công ty hoặc tổ chức dùng hết được điều đó gây lãng phí địa chỉ IP. Để tránh tình trạng đó các nhà nghiên cứu đưa ra một phương pháp là sử dụng mặt nạ mạng con ( Subnet mask ) để phân chia mạng ra thành những mạng con gọi là Subnet. Subnet mask là một con số 32 bit bao gồm n bit 1 ( thường là các bit cao nhất ) dùng để đánh địa chỉ mạng con và m bit 0 dùng để đánh địa chỉ máy trong mạng con với n+m=32 .
Subnet mask phải được cấu hình cho mỗi máy tính trong mạng và phải được định nghĩa cho mỗi giao diện Router. Như vậy, ta phải dùng cùng một Subnet mask cho toàn bộ mạng vật lý cùng chung một địa chỉ Internet. Trong thực tế, để dễ dàng cho hoạt động quản lý các máy trong mạng, thường chia nhỏ các mạng lớn trong các lớp mạng (A, B, C) thành các mạng nhỏ hơn. Quá trình này được thực hiện bằng cách lấy một số bit ở phần định danh host để sử dụng cho việc đánh địa chỉ mạng. Tuỳ theo cách sử dụng của người quản trị mạng ( số subnet và số host trên mỗi subnet ) mà số lượng bit lấy ở phần host nhiều hay ít.
Để tách biệt giữa địa chỉ mạng và địa chỉ host người ta dùng netmask. Để tách biệt giữa Subnet address và địa chỉ host người ta dùng Subnet mask.
I. Tính theo công thức :
Theo quy ước, các địa chỉ IP được chia ra làm ba lớp như sau:
Dạng thập phân:
Lớp A:1.0.0.0->126.0.0.0
Lớp B:128.0.0.0->192.255.0.0
Lớp C:192.0.0.0->223.255.255.0
Dạng nhị phân :
Class Subnet mask trong dạng nhị phân Subnet mask
Lớp A
11111111 00000000 00000000 00000000 255.0.0.0
Lớp B
11111111 11111111 00000000 00000000 255.255.0.0
Lớp C
11111111 11111111 11111111 00000000 255.255.255.0
Như ta đã biết:
+ lớp A sử dụng 1 octet đầu tiên làm Network ID. Sử dụng 8 bit đầu được set giá trị thành 1, và 24 bit sau set giá trị 0 => có Subnet Mask 255.0.0.0.
+ lớp B sử dụng 2 octet đầu tiên làm Network ID. Sử dụng 16 bit đầu được set giá trị thành 1, và 16 bit sau set giá trị 0 => có Subnet Mask 255.255.0.0.
+ lớp C sử dụng 3 octet đầu tiên làm Network ID. Sử dụng 32 bit đầu được set giá trị thành 1, và 8 bit sau set giá trị 0 => có Subnet Mask 255.255.255.0.
Ví dụ IP: 192.168.1.0/24
Đây là địa chỉ thuộc lớp C. Và con số 24 có nghĩa là ta sử dụng 24 bit cho phần Network ID, và còn lại 8 bit cho Host ID.
Ví dụ : Công ty thuê một đường IP là 192.168.1.0. Bây giờ ông giám đốc yêu cầu phân làm chia làm 3 mạng con cho ba phòng ban trong công ty. Hãy thực hiện việc chia subnet này.
Trước hết ta phân tích cấu trúc của địa chỉ: 192.168.1.0 như sau:
+ Địa chỉ NetMask: 255.255.255.0
+ Network ID: 11111111.11111111.11111111 (32 bit )
+ HostID: 00000000 ( 8 bit )
Trong ví dụ này ta cần chia làm 3 mạng con (3 subnet) nên ta cần sử dụng 2 bit ở phần Host ID để thêm vào Network ID. Làm sao để biết được số bit cần mượn thêm? Ta có công thức : 2^n>=m (với m là số subnet cần chia, n là số bit cần mượn). Ở đây 2^2>=3.
Sau khi mượn 2 bit, ta có cấu trúc mới ở dạng nhị phân là (bit mượn ta set giá trị bằng 1,còn lại là 0 ở Net mask ):
+ Địa chỉ NetMask:: 11111111.11111111.11111111.
11000000
+ Network ID: 11111111.11111111.11111111.11
+ Host ID: 000000
=> Ở dạng thập phân là: 255.255.255.192 ( 2^8 +2^7 =128+64=192 )
Địa chỉ IP mới lúc này là: 192.168.1.0/26 ( 24 bit + 2 bit mượn =26 bit ).
Ta xác định "bước nhảy" cho các subnet:
Bước nhảy k=256-192=64 ( số máy trên mmỗi mạng con , nhưng không được dùng IP đầu và IP cuối, tức là mỗi mạng chỉ có 62 máy )
Các mạng con sau:
Ip: 192.168.1.0 Netmask: 255.255.255.192
Ip: 192.168.1.64 Netmask: 255.255.255.192
Ip: 192.168.1.128 Netmask: 255.255.255.192
Ip: 192.168.1.192 Netmask: 255.255.255.192
Số máy trên mỗi mạng :
Số bits của Host ID còn lại sau khi đã bị Network ID mượn: x = 32-26 = 6
=> Số máy trên mỗi mạng: 2^n-2 = 2^6-2 = 62 máy
VD: Giả sử ta có một địa chỉ IP cho toàn bộ hệ thống mạng của ta là 132.8.18.60 => Đây là một địa chỉ lớp B và ta có biểu diễn của nó theo dạng
địa chỉ mạng. địa chỉ mạng. địa chỉ Host. địa chỉ Host
1000 0100 . 0000 1000 . 0001 0010 . 0011 1100
=> Nó có 16 Bit cho địa chỉ mạng và 16 Bit cho địa chỉ Host => ta có thể lấy một số Bit trong phần địa chỉ Host để làm Subnet Mask
Giả sử ta cần chia mạng của ta thành 14 mạng con => ta cần xác định lấy mấy Bit của địa chỉ Host làm Sub net mask : 2^1=2, 2^2=4, 2^3=8, 2^4=16 ( 16>14 ) => cần 4 Bit ( phần Host còn 12 bit )
Ta có Subnet Mask : 1111 1111. 1111 1111. 1111 0000 0000 0000
=> tính được số Host trong mỗi Subnet là 2 ^12 -2 = 4094
II. Tính nhẩm :
Đầu tiên các bạn xòe bàn tay trái ra và đếm theo hình:
Qui tắc bàn tay trái
Các bạn để ý bàn tay chúng ta có tất cả 14 lóng tay, mỗi lóng tay tương trưng cho 1 bit nhé!
Đếm 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384.
- Để tính tổng số lượng Subnet id có được sau khi chia, ta đếm số bit mượn làm subnet id trong octet đó là ra. Mượn 3 bit thì đếm 2 4 8, mượn 4 bit thì đếm 2 4 8 16, giá trị của bit đếm sau cùng chính là tổng số subnet id sau khi được chia ra.
Ví dụ: 10.10.0.0 /13 ---> mượn 5 bit ---> đếm 2 4 8 16 32 mạng này có 32 subnet.
- Để tính bước nhảy trong mỗi subnet id. Ta đếm số bit còn lại dùng làm host trong riêng octet đó. Giá trị của bit được đếm sau cùng cũng là giá trị của bước nhảy trong octet đó.
Ví dụ: 172.35.0.0/19. Tức là địa chỉ lớp B sẽ mượn 3 bit ở octet thứ 3 làm subnet id. Dùng phương pháp đếm ta có 2 4 8, đủ 3 bit mượn rồi, vậy tổng số subnet id là 8. Ta biết trong octet thứ 3 sau khi cho mượn 3 bit làm net id thì còn lại 5 bit làm host, vậy ta đếm 2 4 8 16 32, đủ 5 bit rồi, giá trị là 32, và cũng chính là bước nhảy của subnet id., thử xem nào:
-172.35.0.0/19
-172.35.32.0/19
-172.35.64.0/19
-172.35.96.0/19
-172.35.128.0/19
-172.35.160.0/19
-172.35.192.0/19
-172.35.224.0/19
Ta có tổng cộng 8 subnet id, với bước nhảy là 32.
- Để tính địa chỉ broadcast của một subnet id ta lấy subnet id kế tiếp giảm 1. Ví dụ, để tính broadcast của subnet id 172.35.64.0/19, ta lấy subnet id kế tiếp là 172.35.96.0/19 giảm 1 == 172.35.95.255/19 đây chính là broadcast của subnet id 172.35.64.0
- Để tính số host trong một subnet, ta đếm toàn bộ số bit host còn lại trong subnet và lấy giá trị bit sau cùng đó -2, Lưu ý là không phân biệt octet. Nhắc lại, ta lấy giá trị của bit được đếm sau cùng - 2 ta được số host trong subnet id có thể xài.
Trong ví dụ subnet 172.35.64.0/19, ta nhận biết toàn bộ số bit dùng làm host còn lại là 13. Ta đếm 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192, đủ 13 bit rồi, ok, số host trong mạng sẽ là 8192 -2 = 8190. Vì sao -2, vì ta phải trừ bỏ địa chỉ subnet id và broadcast. Hay đơn giản hơn có thể nhận thấy là số host có thể xài được trong dãy:
172.35.64.1/19 ----> 172.35.95.254/19
Và đống thời nó cũng lọt giữa 2 subnet id và broadcast.
Lưu ý: Phương pháp đếm từ 2 không được dùng để tính tổng số giá trị của 1 octet chạy từ 0->255. Hay nói cách khác là không được dụng để tính tổng giá trị của 1 dãy bit như 10101101. Để tính tổng số giá trị của dãy trên ta phải đếm từ 1, cộng các giá trị có bit 1 với nhau.
Các bạn cũng có thể dùng bàn tay phải để ghi nhớ các giá trị sau :
1xxxxxxx =128
11xxxxxx =192
111xxxxx =224
1111xxxx =240
11111xxx =248
111111xx =252
1111111x =254
11111111 =255
và
2^0 = 1
2^1 = 2
2^2 = 4
2^3 = 8
2^4 = 16
2^5 = 32
2^6 = 64
2^7 = 128
2^8 = 256
Qui tắc bàn tay phải
Mượn 1 bit : 128
Mượn 2 bit : 192
Mượn 3 bit : 224
Mượn 4 bit : 240
Mượn 5 bit : 248
Mượn 6 bit : 252
Mượn 7 bit : 254
Mượn 8 bit : 255
Ví dụ : 10.10.0.0 /13 --mượn 5 bit ( 248 ) => S/M: 255.
248.0.0
155.55.3.32 /28 -- mượn 12 bit = 8 +4 ( 255.240 ) => S/M: 255.255.
255.240
III . Ví dụ mẫu :
Cho giải địa chỉ 172.35.0.0/16 , hãy Subnet để cấp cho các mạng con :
A: 320 host
B: 115 host
C: 80 host
D: 30 host
E: 2 host
Hướng dẫn giải:
- Theo đầu bài cho địa chỉ ban đầu là X: 172.35.0.0/16
=> đổi ra hệ nhị phân ta được:
10101100.00100011.
00000000.00000000
11111111.11111111.00000000.00000000
(Phần tô màu chính là phần bit host, việc chia từ địa chỉ trên thành nhiều Subnet chính
là việc biến đổi – hay gọi là mượn các bit phần host_id chuyển thành các bit Net_id; Nhìn
vào số bit 1 của địa chỉ Subnet Mask ta sẽ phân biệt được danh giới: các bit bên trên bit 1
chính là Net_id, các bit bên trên bit 0 là host_id)
-
B1: Theo VLSM thì ta sẽ phải chia X cho các mạng theo chiều giảm dần, tức là chia
cho mạng có số host cao nhất rồi thấp nhất cuối cùng-> sắp xếp lại ta có:
+A: 320
+B:115
+C:80
+D:30
+E:2
-
B2:
+Thực hiện chia X cho mạng A đầu tiên, áp dụng công thức: 2^n - 2 ≥ 320 => n=9
(chính là số bit còn lại chưa bị mượn)
=> số bit đã mượn là m= 32 (là tổng số bit của 1 địa chỉ IP v4) – 16 (số bit thuộc phần Net_id của địa chỉ đã cho) – 9 ( số bit còn lại) = 7
=> SM’ (Subnet Mask mới) = SM (Subnet Mask cũ) + m = 16 + 7 = 23 ( viết tắt là /23)
=> số Subnet ( mạng con ) được tạo ra là: 2^m = 2^
7 = 128
với SM’ thay đổi từ /16 thành /23 (các bit trong khoảng này của X đã chuyển sang
Octet thứ 3) nên ta có:
- 101100.00100011.
00000000.00000000
- 172.16. 0. 0
(bit màu đỏ là 7 bit vừa mượn, việc sinh ra các Subnet con chính là dựa vào việc thay đổi vị trí và giá trị từ 0 thành 1 của những bit này)
Vậy các mạng con được sinh ra từ X là:
| Octet 3 |
Mạng X 1: 10101100.00100011.
00000000.00000000 -> 172.35.0.0/23
Mạng X 2: 10101100.00100011.
00000010.00000000 -> 172.35.2.0/23
Mạng X 3: 10101100.00100011.
00000100.00000000 -> 172.35.4.0/23
……………… ………………….............................................................................
Mạng X127: 10101100.00100011.
11111100.00000000 -> 172.35.252.0/23
Mạng X128: 10101100.00100011.
11111110.00000000 -> 172.35.254.0/23
(chú ý, để ý ta thấy chỉ cần tính đến mạng thứ 3 trở đi là ta đã có thể tìm được bước nhảy
giữa 2 mạng liền kề là 2: lấy octet tương ứng của mạng sau trừ octet mạng trước)
=> lấy mạng con đầu tiên X1: 172.35.0.0/23 cấp cho mạng A: 320 host
+ Tiếp theo, lấy mạng X2 (là địa chỉ mạng lớn nhất tiếp theo) chia cho mạng B:115 host.
Tương tự trên, theo công thức: 2h - 2 ≥ 115 => h=7 => n = 32-23-7 = 2
=> SM’ (Subnet Mask mới) = SM (Subnet Mask cũ) + n = 23 +2 = 25 ( viết tắt là /25)
& số Subnet (mạng con) được tạo ra là: 2^n = 2^
2 = 4
với SM thay đổi từ /23 thành /25 (các bit trong khoảng này của X2 liên quan đến cả
Octet 3 và Octet thứ 4 ) nên ta có các mạng con mới sinh ra từ X2:
| Octet 3 | | Octet 4 |
Mạng X21: 10101100.00100011.0000001
0.00000000 -> 172.35.2.0/25
Mạng X22: 10101100.00100011.0000001
0.10000000 -> 172.35.2.128/25
Mạng X23: 10101100.00100011.0000001
1.00000000 -> 172.35.3.0/25
Mạng X24: 10101100.00100011.0000001
1.10000000 -> 172.35.3.128/25
=> ta tính được số host trên mỗi subnet là 27 -2 = 126 host > 115 host mà mạng B yêu
cầu, có nghĩa là các mạng con này không những có thể cung cấp đủ cho mạng B mà còn
thừa ra một số host, ở đây theo VLSM ta lấy mạng X21: 172.35.2.0/25 cấp cho mạng B
(yêu cầu 115 host)
+ Tiếp theo, ta sử dụng mạng con X22: 172.35.2.128/25 để chia cho mạng C: 80 host
Tương tự trên, theo công thức: 2h - 2 ≥ 80 => h=7 => n = 32-25-7 = 0 (Vừa đẹp; khi giá
trị n=0 điều này chứng tỏ là mạng đang chia chỉ có thể cấp vừa đủ hoặc thừa một số ít địa
chỉ IP cho mạng có số host đang yêu cầu, ở đây là 115 host- chú ý: khi sử dụng VLSM
thì n sẽ không bao giờ nhận giá trị âm)
=> cấp luôn X22 cho mạng C: 80 host
+ Lúc này cần phải dùng đến giải địa chỉ X23 để chia cho mạng D: 30 host
Tương tự trên, theo công thức: 2h - 2 ≥ 30 => h=5 => n = 32-25-5 = 2
=> SM’ (Subnet Mask mới) = SM (Subnet Mask cũ) + n = 25 +2 = 27 ( viết tắt là /27)
& số Subnet (mạng con) được tạo ra là: 2^n = 2^
2 = 4
với SM thay đổi từ /25 thành /27 (các bit trong khoảng này của X23 liên quan đến
Octet thứ 4) nên ta có các mạng con mới sinh ra từ X23:
| Octet 4 |
Mạng X231 : 10101100.00100011.00000011.0
0000000 => 172.35.3.0/27
Mạng X232 : 10101100.00100011.00000011.0
0100000 => 172.35.3.32/27
Mạng X233 : 10101100.00100011.00000011.0
1000000 =>172.35.3.64/27
Mạng X234 : 10101100.00100011.00000011.0
1100000 => 172.35.3.96/27
=> lấy X231: 172.35.3.0/27 cấp cho mạng D: 30 host
+ Lấy X232 chia cho các mạng E: 2 host, F: 2 host.
Tương tự trên, theo công thức: 2h - 2 ≥ 2 => h=2 => n = 32-27-2 = 3
=> SM’ (Subnet Mask mới) = SM (Subnet Mask cũ) + n = 27 +3 = 30 ( viết tắt là /30)
& số Subnet (mạng con) được tạo ra là: 2^n = 2^
3 = 8
với SM thay đổi từ /27 thành /30 (các bit trong khoảng này của X232 liên quan đến
Octet thứ 4) nên ta có các mạng con mới sinh ra từ X232 là:
| Octet 4 |
Mạng X2321: 10101100.00100011.00000011.001
00000 -> 172.35.3.32/30
Mạng X2322: 10101100.00100011.00000011.001
00100 -> 172.35.3.36/30
Mạng X2323: 10101100.00100011.00000011.001
01000 -> 172.35.3.40/30
.......................................................................................................................
Mạng X2327: 10101100.00100011.00000011.001
11000 -> 172.35.3.56/30
Mạng X2328: 10101100.00100011.00000011.001
11100 -> 172.35.3.60/30
=> lấy mạng Mạng X2321: 172.35.3.32/30 cấp cho mạng E: 2 host
KẾT LUẬN
- Sau khi cấp các địa chỉ mạng con cho các mạng A, B, C, D, E sẽ còn dư các
mạng chưa được sử dụng (để giành khi cần ta có thể sử dụng để cấp phát hoặc chia
nhỏ tiếp). Phương pháp VLSM này sẽ giúp ta kiểm soát được phần địa chỉ dư thừa
chưa được sử dụng.