Cách tính toán địa chỉ IP

 

Cách tính toán địa chỉ IP

Trước khi đi vào tìm hiểu cách tính, chúng ta cần phải biết rõ IP là gì. Mình đã có làm một video clip giải thích đơn giản về nó. Hãy đảm bảo là xem nó trước khi đọc bài này nhé: https://fb.watch/432rB47sQq/

Oke. Đầu tiên chúng ta cần làm rõ một số khái niệm:

-        Network: Một phần của địa chỉ IP dùng để xác định mạng

-        Host: Một phần của địa chỉ IP dùng để xác định host – đối tượng trong một mạng.

-        Subnet mask: Hiểu đơn giản đó là một dãy số giúp ta xác định được đâu là phần network, đâu là phần host.

Ví dụ: Với IP 192.135.17.6, subnet mask 255.255.255.0, thì:

o   Đầu tiên, ta phải hiểu rằng chỉ có thể thấy rõ ý nghĩa của IP thông qua dạng bit. Để hiểu rõ ý nghĩa, ta cần chuyển đổi IP và subnet mask ra dạng bit. Như thế, ta có:

§  IP 192.135.17.6 -> 11000000.10000111.00010001.00000110

§  Subnet mask: 255.255.255.0 -> 11111111.11111111.11111111.00000000

o   Ta xếp hai dãy số trên thẳng hàng từng đôi một



o   Vùng subnet mask có dãy bit toàn 1 sẽ là vùng network.

o   Vùng subnet mask có dãy bit toàn 0 sẽ là vùng host.

o   Như thế, ta phân vùng địa chỉ IP như sau



o   Chuyển IP về lại dạng thập phân, ta được



Giới thiệu như thế đã đủ rồi. Giờ ta đi vào phần chính:

1.   Lớp của địa chỉ

Lớp của địa chỉ là một miền địa chỉ (tập hợp các địa chỉ) mà khi ta xác định được địa chỉ đó thuộc lớp nào, ta có thể biết ngay được phần network và phần host của địa chỉ đó.

Việc đặt ra quy tắc này để tạo sự thống nhất chung với nhau (vì IP là địa chỉ được cả thế giới dùng).

Cách xác định địa chỉ nào thuộc lớp nào được thực hiện như sau. Mình sẽ tiếp cận từ một ví dụ luôn:

Ví dụ: Cho địa chỉ IP là 192.135.17.6. Xác định địa chỉ trên thuộc lớp nào?

Ta biết rằng lớp là một miền địa chỉ, mà yêu cầu chỉ cho địa chỉ IP. Tức là địa chỉ này phải có dấu hiệu để biết rằng nó thuộc lớp nào.

Dấu hiệu để xác định nằm ở octet thứ nhất của địa chỉ. (Một địa chỉ a.b.c.d có 4 octet là a, b, c, d. Bạn hiểu octet là gì rồi đó!) Có 5 lớp địa chỉ: A, B, C, D, E. Cách xác định như nhau:

Lớp A: Octet có dạng nhị phân 0NNNNNNN (với N là một số nhị phân bất kỳ)

Lớp B: 10NNNNNN

Lớp C: 110NNNNN

Lớp D: 1110NNNN

Lớp E: 11110NNN

Với IP 192.135.17.6 thì 192 là octet thứ nhất, có dạng nhị phân là 11000000. Bạn thấy phần in đậm chứ, nó giống với dạng nhị phân của lớp C. Như vậy địa chỉ này thuộc lớp C.

Việc xác định lớp này để làm gì? Hay nói cách khác, lớp này có ý nghĩa gì? Như ta đã nói từ đầu, việc xác định lớp giúp ta xác định được phần network và phần host của một địa chỉ.



Như ta thấy thì lớp A có subnet mask là 255.0.0.0, lớp B là 255.255.0.0, lớp C là 255.255.255.0.

Ở lớp D và lớp E là hai lớp đặc biệt. Lớp D dùng để phục vụ cho việc Multicasting, không gán cho một host cụ thể nào cả. Chính vì thế lớp D không có subnet mask. Còn lớp E dùng để phục vụ các thí nghiệm, nghiên cứu và phát triển, nên ở đây cũng không có subnet mask.

À, còn nữa. Class A có dạng 0NNNNNNN, tức là miền giá trị nằm trong khoảng từ 00000000 đến 01111111 đúng không. Nếu đổi sang dạng thập phân sẽ là từ 0 đến 127 phải không. Đây cũng chính là một cách xác định lớp không cần phải biến đổi về dạng nhị phân.

Như thế ta có:

Lớp A: Từ 1 – 127

Lớp B: Từ 128 – 191

Lớp C: Từ 192 – 223

Lớp D: Từ 224 – 239

Lớp E: Từ 240 - 255

Hừm, lớp A sao lại từ 1 – 127 mà không phải là từ 0 – 127. Ở đây, để giải thích thì mình sẽ đưa ra ba địa chỉ đặc biệt nhất:

-        0.0.0.0: Đây là địa chỉ được dùng trong trường hợp cần cấp phát địa chỉ IP, lúc đầu máy sẽ không có IP cụ thể nên sẽ tự đặt địa chỉ của mình là 0.0.0.0. Bạn hãy search DHCP để biết thêm cái này

-        127.0.0.1: Đây là địa chỉ loopback, là địa chỉ khi mình gửi gói dữ liệu đi, nó sẽ gửi vào chính máy của mình như là một client. Có một cái tên thân thuộc bạn có thể biết đó là localhost. Ở đây, địa chỉ này xác định bản thân máy của nó chính là một thiết bị mạng khác.

Thực ra cả miền địa chỉ 127.*.*.* đều là localhost cả.

-        255.255.255.255: Địa chỉ này là địa chỉ broadcast. Khi gửi gói tin được đánh địa chỉ này, gói sẽ gửi đến tất cả các thiết bị mạng đang hoạt động được kết nối với nó. Nó chỉ được gửi trong mạng cục bộ (LAN)

Công nhận nhiều thứ để nhớ nhỉ? Nhưng nếu bạn đọc được tới đây tức là bạn đã hiểu đầy đủ về lớp rồi đấy. Xin chúc mừng!

Khoan? Nếu vậy thì liệu rằng có subnet mask 255.255. 240.0 hay không? Ý là, nếu đã có cách xác định IP dựa vào lớp của địa chỉ, vậy thì chúng ta cần gì phải xác định IP thông qua subnet mask? – Các bạn có thấy thắc mắc không?

Chúc mừng bạn đã mở khóa thêm một vấn đề mới, cái mà mình sắp viết thêm một tràng nữa ha ha.

2.   Subnetwork (hay subnet)

Đó là quá trình phân chia một mạng lớn thành nhiều mạng con nhỏ.

Để hiểu rõ hơn thì đầu tiên mình cần hiểu cách tính số host có thể đăng ký trong một network.

2.1 Cách tính số host trong một network

Nó được tính bằng công thức 2n – 2. Với n là số lượng các bit host. Bit host có thể hiểu là thế này:



Đơn giản đó là những bit nằm trong vùng host.

Ở hình trên, ta có số bit host là 8, tức số lượng host có thể đăng ký sẽ là 28 – 2 = 254. Bạn có thể sẽ hiểu con số 28 tức là số lượng các địa chỉ IP trong khoảng từ 192.135.17.0 đến 192.135.17.255. Thế nhưng, tại sao lại trừ 2? Vì trong một network bất kỳ sẽ tồn tại hai địa chỉ đặc biệt. Đó là địa chỉ với bit host toàn 0, và bit host toàn 1. Tức là 192.135.17.0 và 192.135.17.255 chính là hai địa chỉ đặc biệt đó.

-        Với bit host toàn 0: Đó sẽ là địa chỉ network. Hiểu đơn giản là nó sẽ không gán được cho host

-        Với bit host toàn 1: Đó là địa chỉ broadcast. Các bạn sẽ thắc mắc với địa chỉ broadcast 255.255.255.255 nữa nhỉ. Vì mình quên Unicast và Broadcast rồi, xem lại thì hơi lâu, nên tạm thời chúng ta xem nó là địa chỉ đặc biệc nhé!

2.2 Cách chia network thành các subnet

Đó là quá trình phân chia một mạng lớn thành nhiều mạng con nhỏ. Để đi trực tiếp và cụ thể mình lấy ví dụ nhé:

Giả sử: Bạn vào một công ty và thấy host 192.135.17.6 / 255.255.255.0. Như thế bạn có thể biết thông tin rằng mạng của công ty này có thể đăng ký tối đa 28 – 2 = 254 host.

Công ty có 5 phòng ban, và muốn chia nhỏ mạng lớn thành 5 mạng nhỏ (subnet). Công ty nhờ bạn xác định địa chỉ network và broadcast của 5 subnet trên. (Tất nhiên phải trả lương cho bạn xứng đáng chứ haha)

Cốt lõi của việc chia mạng con thực hiện thông qua việc vay mượn bit ở phần host để làm bit cho network. Cụ thể như sau:

Bạn thấy bit mình chỉ chứ. Đó là bit của host đúng không. Bạn nhớ kỹ rằng khi mình đăng ký mạng thì phần bit host (ở phần IP) mình có thể thay đổi được. Bây giờ chúng ta sẽ đổi bit đó thành bit của network.

Tại bit mình đánh dấu trên subnet mask, mình đã chuyển đổi thành bit của network.

Hồi nãy mình có nói rằng bit đó (ở phần IP) có thể thay đổi được đúng không? Vì chúng ta đăng ký network 11000000.10000111.00010001.xxxxxxxx nên phần octet cuối cùng chúng ta có thể thay đổi tùy ý. Chính điều đó đã dẫn đến một kết quả là, chúng ta đã tạo ra được hai network con (subnet). Một cái là 11000000.10000111.00010001.0xxxxxxx (1) và một cái là 11000000.10000111.00010001.1xxxxxxx. (2)

Ở subnet thứ nhất (1), ta có thể tính được địa chỉ network bằng cách điền hết phần host là 0, và địa chỉ broadcast bằng cách điền hết phần host là 1. Cơ bản là:

-        Network: 11000000.10000111.00010001.00000000

-        Broadcast: 11000000.10000111.00010001.01111111

Chuyển đổi sang dạng thập phân, ta sẽ được.

-        Network: 192.135.17.0

-        Broadcast: 192.135.17.127

Tương tự với subnet thứ hai (2), ta được như sau

-        Network: 11000000.10000111.00010001.10000000

-        Broadcast: 11000000.10000111.00010001.11111111

Chuyển đổi sang dạng thập phân, ta sẽ được.

-        Network: 192.135.17.128

-        Broadcast: 192.135.17.255

Số lượng host trên mỗi network vẫn sẽ tính như công thức cũ là 27 – 2 = 126, với 7 là số host sau khi đã mượn bit.

Bạn có thể thấy một số quy luật sau đây:

-        Nếu mượn 2 bit, thì sẽ tạo thành 4 network con (subnet) (Vì hai bit mượn sẽ có 4 trường hợp thay đổi là 00, 01, 10, 11). Mượn 3 bit tạo thành 23 = 8 subnet,… Như thế, nếu mượn n bit thì sẽ tạo thành 2n subnet.

-        Với ví dụ trên:

Khi mượn 1 bit, số bit host là h – 1 = 8 – 1 = 7 => số host là 27 – 2 = 126 (Với h là tổng số bit host lúc ban đầu chưa chia subnet)

Khi mượn 2 bit, số bit host là h – 2 = 8 – 2 = 6 => số host là 26 – 2 = 62

Khi mượn n bit, số bit host là h – n => số host là 2h - n

 

Và còn nhiều quy luật khác nữa mà mình nghĩ sẽ khá dài dòng khi nói ở đây.

Đối với yêu cầu trên tính toán cho 5 phòng ban, mình sẽ không làm mà các bạn sẽ tự làm (gợi ý là tính số subnet tối thiểu trước bằng công thức trên)

Tóm lại: Những cái cơ bản về địa chỉ IP mình đã nói chi tiết và đầy đủ rồi. Bài này làm mình tốn kha khá công sức để làm. Hi vọng các bạn sẽ cảm thấy thích!

Nội dung bài viết thuộc về Lê Công Diễn. Mang đi nhớ dẫn link và ghi nguồn.

Người viết: Lê Công Diễn

Mang đi nhớ ghi nguồn

 

 

Nhận xét

Bài đăng phổ biến từ blog này

Deploy project Springboot MIỄN PHÍ sử dụng Render

Ứng dụng Mã hóa bất đối xứng (Asymmetric cryptography) vào Chữ ký số (Digital Signature)

API và HTTP - Một số khái niệm cơ bản cần biết về Web (Phần 2)