Mạng Căn Bản – Bài 5: Địa chỉ IP (Phần 1)

Xin chào,

Chào mừng các bạn đã đến với bài 5 của series Mạng Căn Bản. Hôm nay chúng ta sẽ tìm hiểu về bộ số đếm nhị phân và sơ lược về địa chỉ IP.

Trước khi vào bài chúng ta cũng cần làm rõ những nội dung mà series này không bao gồm:

  • Series này sẽ không dạy các kiến thức để thi CCNA hoặc MSCA cũng như các kiến thức về quản trị mạng ví dụ như cách thiết lập DHCP, DNS, Routing protocols, vâng vâng.
  • Series Mạng Căn Bản sẽ không bao gồm phần lab xây dựng mạng mà chỉ đơn thuần lý thuyết và một vài thực hành nhỏ.
  • Series Mạng Căn Bản sẽ chỉ có kiến thức căn bản và sẽ không đi quá sâu vào bất kỳ một Tuy nhiên, với những bạn muốn nghiên cứu thêm, mình sẽ đính kèm tài liệu tự nghiên cứu trong bài nhé.

Các bạn cũng lưu ý là những nội dung quan trọng sẽ được mình highlight như thế này nhé

Chúng ta bắt đầu vào bài


1/ Số thập phân, nhị phân và thập lục phân

Để hiểu được cấu trúc của địa chỉ IPv4, chúng ta cần phải hiểu số nhị phân (binary) là gì. Nhưng trước tiên mình sẽ sơ lược về hệ thập phân hay hệ đếm cơ số 10 mà ta đang dùng hàng ngày.

1a/ Số thập phân (Decimal)

Mình sẽ biểu thị một số thập phân bằng cách sau:

Vị trí của chữ số tính từ bên phải43210
Chữ số theo vị tríabcde
Giá trịa*10^4+b*10^3+c*10^2+d*10^1+e*10^0
Bảng giá trị A-1

Hệ số mà ta đang dùng được gọi là hệ thập phân hay hệ đếm cơ số 10 vì mỗi chữ số (a,b,c,d,e) trong bảng bên trên đều có thể mang một trong các giá trị từ 0 đến 9 (10 giá trị). Khi chữ số e vượt qua giá trị cao nhất là 9, nó sẽ quay trở về 0 và đồng thời tăng giá trị của chữ số d từ 0 lên 1.

Một cách dễ hiểu hơn, khi chúng ta học về số đếm ở cấp 1, giáo viên phân một số ra các hàng như:

HàngChục nghìnNghìnTrămChụcĐơn vị
Chữ sốabcde
Giá trị00009
00010
Bảng giá trị A-2

Nếu chữ số ở hàng đơn vị vượt qua giá trị cao nhất của nó là 9 thì số liền sau số 9 sẽ là 10 tương đương với chữ số hàng đơn vị đã quay về giá trị thấp nhất của nó là 0 và hàng chục sẽ tăng lên một đơn vị, từ 0 thành 1.

Để hàng chục tăng lên được một đơn vị (ví dụ 1 lên 2), buộc hàng đơn vị phải đi hết một chu kỳ từ 0 đến 9 lần nữa. Và khi hàng chục đạt đến giá trị lớn nhất là 9, nó sẽ tăng giá trị của hàng trăm lên một đơn vị (từ 0 lên 1) và trở về giá trị thấp nhất là 0.

Lúc này để hàng trăm tăng lên được một đơn vị, hàng chục và hàng đơn vị phải chạy số lại chu kỳ từ 0 đến 9. Hàng Nghìn, và Chục nghìn cũng sẽ tiếp diễn y như vậy.

Căn cứ vào bảng A-1, khi biểu diễn giá trị của chữ số ta sẽ căn cứ vào vị trí của chữ số đó. Ví dụ như giá trị của chữ số e (hàng đơn vị) sẽ bằng e*10^0. Giả dụ như e = 7 thì có nghĩa là nó bằng 7 * 10^0. (Dành cho bạn nào quên thì 10^0 = 1 nhé).

Vậy giá trị 15 ta sẽ biểu diễn nó thế nào? Vì 15 bao gồm 1 ở chữ số hàng chục và 5 ở hàng đơn vị => 15 = 1*10^1 + 5*10^0 (Với 10^1 = 10).

1b/ Số nhị phân (Binary)

Qua đến phần nhị phân, 1 chữ số ở hệ nhị phân (hay còn được gọi là 1 bit) chỉ có thể biểu thị được một trong hai giá trị đó là 0 hoặc 1. Đó là lí do nó được gọi là nhị phân. Với 0 là số bé nhất và 1 là số lớn nhất.

Số nhị phân hay còn được gọi số cơ số 2.

Số nhị phân thường được viết dưới dạng sau với chữ b sau số 0 đầu tiên là ký hiệu của binary, tên tiếng Anh của nhị phân

0b0010

Hoặc

0010(2)

Mình cũng sẽ biểu diễn số nhị phân như cách biểu diễn số thập phân như ở phía trên

Vị trí của chữ số tính từ bên phải43210
Chữ số theo vị tríabcde
Giá trịa*2^4+b*2^3+c*2^2+d*2^1+e*2^0
Bảng giá trị B-1

Số nhị phân sẽ được đếm như sau (bên trái là số thập phân và bên phải là số nhị phân tương đương nhé):

Thập phânNhị phân
0 0
1 1
2 10
3 11
4100
5101
6110
7111

Biểu diễn vào bảng sẽ như sau

Vị trí của chữ số tính từ bên phải43210
Chữ số theo vị tríabcde
Giá trị00000
00001
00010
00011
00100
00101
00110
00111
Bảng giá trị B-2

Tương tự như chữ số thập phân, khi chữ số e vượt qua giá trị cao nhất của nó là 1, nó sẽ tăng giá trị chữ số d từ 0 lên 1 và e sẽ trở về 0. Các chữ số tiếp theo cũng tuân theo quy luật tương tự.

Căn cứ vào bảng B-1, khi biểu diễn giá trị của số nhị phân ta cũng căn cứ vào vị trí của nó như chữ số thập phân. Ví dụ: 5 (cơ 10) = 0b101 = 1*2^2 + 0*2^1 + 1*2^0 = 1*4 + 0*0 + 1*1

Đến đây bạn có thể sẽ hỏi, tại sao phải học số nhị phân rắc rối như vậy? Vì tất cả những thao tác của bạn trên máy tính, từ gõ phím đến lướt web đều được dịch ra thành ngôn ngữ máy tính được biểu diễn dưới dạng nhị phân. Hay nói cách khác, máy tính của bạn chỉ hiểu nhị phân mà thôi. Một ký tự như “a” cũng sẽ được dịch ra thành nhị phân để máy tính có thể hiểu được là bạn muốn ký tự “a”. Và vì một vài công nghệ quan trọng ví dụ như giao thức IPv4 sử dụng cấu trúc số nhị phân, nên để hiểu được IPv4, bạn cần phải hiểu được số nhị phân.

Chưa kể nếu bạn làm trong lĩnh vực cybersecurity, nhất là ở mảng Malware Analysis, Reversing Engineering hay Pentester, thì việc bạn có khả năng đọc hiểu không chỉ số nhị phân mà còn cả số Hex (hệ thập lục phân), và có khi cả số Octal (hệ bát phân) là điều gần như là bắt buộc.

1c/ Số thập lục phân (Hexadecimal)

Mình đã từng nhắc đến số thập lục phân một lần trong bài 2 về địa chỉ MAC, hôm nay mình xin trình bày lại số Hex một lần nữa vì nó sẽ liên quan đến địa chỉ IPv6 mà chúng ta sẽ học ở phần 2 vào tuần sau.

Số đếm thập lục phân hay còn được gọi là bộ đếm cơ số 16, vì mỗi chữ số phải đi từ giá trị thấp nhất là 0 đến giá trị cao nhất là F. Bộ số thập lục phân sẽ có các giá trị sau:

0123456789ABCDEF
Bộ số đếm thập lục phân

Số thập lục phân có thể được viết dưới dạng sau với chữ x sau số 0 biểu thị cho hexadecimal

0x1A

Hoặc

1A(16)

Bảng giá trị của số thập lục phân

Vị trí của chữ số tính từ bên phải43210
Chữ số theo vị tríabcde
Giá trịa*16^4+b*16^3+c*16^2+d*16^1+e*16^0
Bảng giá trị C-1

Số thập lục phân sẽ được đếm như sau

Thập phânThập lục phân
00
11
22
33
44
55
66
77
88
99
10A
11B
12C
13D
14E
15F
1610
1711
1812

Như các bạn thấy, trong bộ số đếm thập lục phân, chữ số e trong bảng C-1 phải chạy từ giá trị thấp nhất là 0 đến giá trị cao nhất là F, sau đó sẽ tăng giá trị ở chữ số d từ 0 lên 1, trước khi quay về giá trị thấp nhất và bắt đầu một chu kỳ mới.

Khi biểu diễn vào bảng giá trị, nó sẽ như sau:

Vị trí của chữ số tính từ bên phải43210
Chữ số theo vị tríabcde
Giá trị00000
.
.
.
0000f
00010
.
.
.
000ff
00100
Bảng giá trị C-2

Căn cứ vào bảng C-1, tương tự như trong hệ đếm thập phân và nhị phân, ta căn cứ vào vị trí của chữ số biểu diễn giá trị của chữ số. Ví dụ. 26 (cơ 10) = 0x1A = 1*16^1 + A*16^0 = 1*16 + A*1 (với 16^1 = 16 và 16^0 = 1).

1d/ Cách chuyển đổi giá trị giữa các bộ số

Bạn có thể chuyển đổi giá trị giữa các bộ số một cách thủ công hoặc tự động.

Cách tự động, bạn có thể sử dụng ứng dụng máy tính trên windows và chọn máy tính Programmer như hình bên dưới.

Hoặc bạn có thể sử dụng những bộ chuyển đổi bộ số đếm online như trang này.

Với cách tính thủ công, bạn có thể tham khảo từ trang wikihow này nhé.

2/ Địa chỉ IP

IP là viết tắt của Internet Protocol (giao thức Internet). Trong mô hình TCP/IP mà ta đã học ở bài trước, IP là giao thức thuộc lớp Networking đảm nhận nhiệm vụ truyền gói tin dữ liệu từ điểm đầu đến điểm đích dựa vào địa chỉ IP.

Để tránh lẫn lộn giữa địa chỉ IP và địa chỉ MAC, mình sẽ cho bạn một ví dụ như sau:

Địa chỉ MAC tương tự như số chứng minh nhân dân (CMND) của bạn. Số CMND của bạn là duy nhất trên cả nước VN; giả dụ số CMND của bạn là 123456789 thì cả đất nước VN, chỉ có mình bạn là có số CMND 123456789 thôi. Con số này được dùng để định danh bạn là, tên họ là gì? sinh năm bao nhiêu? dân tộc nào? nguyên quán ở đâu? Tương tự như địa chỉ MAC có thể được dùng để tìm nhà nơi xuất xứ của thiết bị mạng.

Địa chỉ IP tương tự như địa chỉ nhà bạn đang ở, và địa chỉ này là duy nhất trong cả thành phố nơi bạn đang sống. Giả dụ bạn sống ở 123 Nguyễn Thị Minh Khai, Sài Gòn; thì cả Sài Gòn chỉ có duy nhất 1 địa chỉ 123 Nguyễn Thị Minh Khai mà thôi. Khi bạn đi qua một thành phố khác, ví dụ như Vũng Tàu chẳng hạn, nếu Vũng Tàu cũng có con đường Nguyễn Thị Minh Khai, thì nhiều khả năng nó cũng sẽ có địa 123 Nguyễn Thị Minh Khai thuộc thành phố Vũng Tàu. Vậy như bạn thấy cùng là 1 địa chỉ 123 Nguyễn Thị Minh Khai, nhưng nếu ở hai thành phố khác nhau thì 2 địa chỉ này chẳng liên quan gì đến nhau cả.

Tương tự với địa chỉ IP của bạn, địa chỉ IP mà máy bạn đang dùng có thể là 192.168.0.10, nhà hàng xóm của bạn địa chỉ 192.168.0.10 có thể là địa chỉ được gán cho một cái máy in được kết nối mạng, dù địa chỉ IP giống nhau, nhưng do mạng nhà bạn và mạng nhà hàng xóm vốn dĩ chả liên quan gì nhau nên việc có địa chỉ IP giống nhau không gây ra bất kỳ vấn đề gì cả.

2a/ Cấu trúc địa chỉ IPv4

Địa chỉ IPv4 bao gồm hai phần đó là phần mạng và phần host và được cấu thành từ 4 octets (hay 4 bytes), với mỗi octet bao gồm 8 bits nhị phân (1 bytes cũng bằng 8 bits nhị phân) .

4 octets hay 4 bytes này được dùng để định danh cho thiết bị kết nối vào mạng.

Với 4 bytes tương đương với 32 bits, sẽ cho phép IPv4 có khả năng cung cấp tối đa

2^32 = 4 294 967 296

địa chỉ IP khác nhau trong cùng 1 mạng.

Một địa chỉ IP có thể được biểu diễn như sau dưới dạng nhị phân, thập phân và thập lục phân. Ngăn cách giữa các octet sẽ là dấu chấm ‘.’

Octet 1Octet 2Octet 3Octet 4
Nhị phân1100 0000.1010 1000.0000 1010.0000 0001
Thập phân192.168.10.1
Thập lục phânC0.A8.A.1

Mặc dù địa chỉ IPv4 nguyên thủy của nó được cấu thành từ số nhị phân, tuy nhiên do bộ số đếm nhị phân và thập lục phân quá xa lạ với người dùng không chuyên kỹ thuật, nên để dễ nhớ, người ta thường dùng bộ đếm thập phân để biển diễn địa chỉ IP.

Với 1 byte (8 bits) nhị phân, số lớn nhất mà một octet có thể biểu diễn đó là 1111 1111 căn cứ vào bảng B-1, giá trị trên bằng

1*2^7 + 1*2^6 + 1*2^5 + 1*2^4 + 1*2^3 + 1*2^2 + 1*2^1 + 1*2^0 = 128 + 64 + 32 + 16 + 8 + 4 +2 + 1 = 255

Như vậy địa chỉ IPv4 có thể chạy từ 0.0.0.0 đến 255.255.255.255

Để xác định đâu là phần mạng, đâu là phần host của địa chỉ IPv4, ta cần dựa vào subnet mask.

2b/ Subnet mask

Subnet mask cũng được cấu thành từ 32 bits nhị phân tương tự như địa chỉ IP, chức năng chính của subnet mask dùng để phân chia phần mạng và phần host trong địa chỉ IP thành hai phần tách biệt.

Phần mạng trong địa chỉ IP được dùng để định danh mạng mà thiết bị của bạn đang kết nối và phần host dùng để định danh thiết bị của bạn trong mạng đó.

Vậy subnet mask hoạt động như thế nào?

Có một khái niệm mà các bạn phải luôn nhớ đối với subnet mask đó là

Phần mạng chạy đến đâu, subnet mask sẽ chạy đến đó.

Ví dụ: Laptop của bạn có địa chỉ IPv4 bao gồm luôn cả phần subnet sẽ có dạng như sau: 192.168.10.123/24

Thì trong đó, /24 chính là phần subnet mask cho biết phần mạng của địa chỉ 192.168.10.123 là 192.168.10 và phần host là 123.

Có nghĩa là thiết bị của bạn thuộc mạng 192.168.10.0 và trong mạng đó thiết bị của bạn mang định danh là 123.

Khi phân tích ra thành nhị phân nó sẽ có dạng sau:

Địa chỉ IP192.168.10.12311000000.10101000.00001010.01111011
Subnet mask255.255.255.011111111.11111111.11111111.00000000

Như bạn đã thấy trong bảng trên, khi 192.168.10 (3 octets đầu tiên của địa chỉ IP) được dùng làm phần mạng, 3 octets đầu của subnet mask cũng đều bật tất cả các bit của nó lên 1 nhằm phân tách giữa phần mạng và phần host.

Sự kết hợp giữa phần mạng và phần host được biểu diễn trong bảng sau đây.

Địa chỉ mạng (phần mạng)192.168.10.011000000.10101000.00001010.00000000
Địa chỉ host (phần host)0.0.0.12300000000.00000000.00000000.01111011
Địa chỉ IP (kết hợp cả phần
mạng và phần host)
192.168.10.12311000000.10101000.00001010.01111011

Có 2 cách để biểu thị subnet mask:

  • /8, /16, /24, etc. ý chỉ tổng số bits ở phần subnet mask được bật lên 1 để phân tách phần mạng và phần host.
  • 255.0.0.0, 255.255.0.0, 255.255.255,0, etc. ý chỉ tổng giá trị của tất cả các bit được bật lên 1 để phân tách phần mạng và phần host.

Nếu bạn không phải là một người làm về quản trị mạng, phần lớn thời gian bạn sẽ chỉ gặp các subnet /24, /8 hoặc /16 mà thôi. Khi bạn học CCNA phần chia mạng, bạn sẽ được tiếp xúc với những subnet /17, /32 v.v (nhưng mình sẽ không đề cập đến vấn đề đó trong series này nhé.)

Một lưu ý là tất cả các máy trong cùng một mạng sẽ có cùng phần mạng và khác phần host nhé.

Ví dụ: Tất cả các máy trong mạng 192.168.10.0/24 sẽ có cùng phần mạng 192.168.10 và khác phần host. Như:

  • 192.168.10.2
  • 192.168.10.45
  • 192.168.10.100
  • 192.168.10.244

Tất cả đều có cùng subnet là /24 và đều có thể giao tiếp với nhau.

Vậy sự khác nhau giữa /8, /16 và /24 là gì?

  • /8 cho bạn 3 octets để tạo IP cấp cho các thiết bị trong mạng, tương đương với 2^24 – 2 địa chỉ, khoảng 16 777 216 địa chỉ IP khả dụng có thể sử dụng được. (mình sẽ nói về IP khả dụng ở bài sau)
  • /16 cho bạn 2 octects để tạo IP cấp cho các thiết bị trong mạng, tương đương với 2^16 – 2 địa chỉ, khoảng 65 534 địa chỉ IP khả dụng.
  • /24 cho bạn 1 octect để tạo IP cấp cho các thiết bị trong mạng, tương đương với 2^8 – 2 địa chỉ, khoảng 254 địa chỉ IP khả dụng.

Để tìm subnet mask bạn có thể làm như sau, mở Command prompt trên Windows và gõ lệnh sau:

ipconfig
Wireless LAN adapter Wi-Fi:

   Connection-specific DNS Suffix  . : cg.shawcable.net
   IPv6 Address. . . . . . . . . . . : 2604:3d09:2a82:1c00::9b83
   IPv6 Address. . . . . . . . . . . : 2604:3d09:2a82:1c00:ccdb:5989:3631:76e5
   Temporary IPv6 Address. . . . . . : 2604:3d09:2a82:1c00:bc4a:64e:1433:3dc3
   Link-local IPv6 Address . . . . . : fe80::ccdb:5989:3631:76e5%11
   IPv4 Address. . . . . . . . . . . : 10.0.0.205
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . : fe80::be9b:68ff:fe08:cacb%11
                                       10.0.0.1

Như bạn thấy, subnet mask mạng nhà mình là 255.255.255.0 hay /24. Địa chỉ mạng của mình là 10.0.0.0 và địa chỉ host là 205.

Một lưu ý cực kỳ quan trọng là địa chỉ IP được cấp cho máy của bạn, thật chất là được cấp cho card mạng hoặc network interfaces trên máy tính của bạn. Điều đó có nghĩa nếu máy tính bạn có nhiều card mạng hoặc nhiều network interface, máy tính của bạn sẽ có nhiều hơn 1 địa chỉ IP.

Ví dụ như máy tính mình có sử dụng VMware và VirtualBox để chạy máy ảo. Cả hai phần mềm này đều cần network interface để giúp cho các máy ảo có thể truy cập được mạng. Nên khi mình dùng lệnh ipconfig trên Command prompt nó sẽ hiển thị như sau:

ipconfig
Ethernet adapter VirtualBox Host-Only Network:

   Connection-specific DNS Suffix  . :
   Link-local IPv6 Address . . . . . : fe80::3004:422d:80b2:f811%3
   IPv4 Address. . . . . . . . . . . : 192.168.56.1
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . :

Ethernet adapter VMware Network Adapter VMnet1:

   Connection-specific DNS Suffix  . :
   Link-local IPv6 Address . . . . . : fe80::818c:f943:a180:7042%21
   IPv4 Address. . . . . . . . . . . : 192.168.31.1
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . :

Wireless LAN adapter Wi-Fi:

   Connection-specific DNS Suffix  . : cg.shawcable.net
   IPv6 Address. . . . . . . . . . . : 2604:3d09:2a82:1c00::9b83
   IPv6 Address. . . . . . . . . . . : 2604:3d09:2a82:1c00:ccdb:5989:3631:76e5
   Temporary IPv6 Address. . . . . . : 2604:3d09:2a82:1c00:bc4a:64e:1433:3dc3
   Link-local IPv6 Address . . . . . : fe80::ccdb:5989:3631:76e5%11
   IPv4 Address. . . . . . . . . . . : 10.0.0.205
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . : fe80::be9b:68ff:fe08:cacb%11
                                       10.0.0.1

Như bạn thấy, máy mình hiện có 3 IP khác nhau là 10.0.0.205/24, 192.168.31.1/24 và 192.168.56.1/24.

Ngoài lề một chút

Khi ISP (nhà cung cấp dịch vụ mạng) nối mạng cho nhà bạn, bạn sẽ được cấp cho 1 địa chỉ IP (tại điểm A), tại điểm B tức là trong nhà bạn, bạn được toàn quyền quyết định địa chỉ IP trong mạng nhà bạn là bao nhiêu với subnet bao nhiêu. Bạn hoàn toàn có thể set địa chỉ IP nhà bạn là 10.0.0.0/8 hay 192.168.0.0/16 nếu bạn muốn. Nếu bạn không set, địa chỉ IP và subnet sẽ được set theo mặc định của modem. Tuy nhiên, do số thiết bị tối đa mà router nhà có thể cho phép kết nối chỉ tầm 10 – 30 thiết bị, nên việc chọn subnet là /8, /16 hay /24 không có quá nhiều ý nghĩa.


Vì chủ đề này khá lớn lại quan trọng, nên mình sẽ cắt nó ra làm 2 phần. Phần 2 sẽ được đăng vào thứ 3 tuần sau nhé.

Xin cám ơn các bạn,

Vincent Nguyễn

Source:

CCNA Certfication All in One for Dummies
https://support.microsoft.com/en-ca/help/164015/understanding-tcp-ip-addressing-and-subnetting-basics

Leave a comment