Logo
lehuutrung.dev
Chia địa chỉ IP như thế nào?

Chia địa chỉ IP như thế nào?

November 27, 2020
11 min read
Table of Contents

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ị.

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:

Phân lớp địa chỉ IP
Phân lớp địa chỉ IP

Octet đầu tiên của mỗi lớp địa chỉ có miền giá trị như sau:

Miền giá trị octet đầu tiên mỗi lớp địa chỉ
Miền giá trị octet đầu tiên mỗi lớp địa chỉ

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.

Bảng tính số lượng địa chỉ mạng và địa chỉ host mỗi lớp
Bảng tính số lượng địa chỉ mạng và địa chỉ host mỗi lớp

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
0192.168.1.0/26192.168.1.1192.168.1.62192.168.1.63
1192.168.1.64/26192.168.1.65192.168.1.126192.168.1.127
2192.168.1.128/26192.168.1.129192.168.1.190192.168.1.191
3192.168.1.192/26192.168.1.193192.168.1.254192.168.1.255

Để tính nhanh địa chỉ mạng, bạn có thể thấy mỗi mạng sẽ cách nhau 28-số bit mượn, do đó bạn chỉ cần lấy địa chỉ mạng đầu tiên sau đó cộng với khoảng cách đó sẽ ra địa chỉ mạng tiếp theo.

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.

Mô hình mạng
Mô hình mạng

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é 😉