IPMAC INFORMATIC TECHNOLOGY JSC
Làm việc với địa chỉ IP
1
Làm việc với địa chỉ IP
Địa chỉ IP, cả IPv4 và IPv6, đều tỏ ra tương đối phức tạp, nhưng thực tế chúng đều có những cấu
trúc cơ bản, và sử dụng một số qui luật để có thể tính toán một cách nhanh chóng nhất. Trong tài
liệu này chúng ta sẽ cùng ôn lại một số khái niệm cư bản trong IPv4 và các kỹ thuật được sử dụng
để có thể làm việc với địa chỉ IP một cách đơn giản hơn. Cu
ối cùng chúng ta sẽ cùng đề cập đến
cách ứng dụng các kỹ thuật đó trong IPv6.
Cơ bản về cách gán địa chỉ
Địa chỉ IPv4 là một số nhị phân 32 bit. Để dễ dàng đối với người sử dụng, người ta chia địa chỉ
IPv4 ra làm 4 phần, được phân chia bởi dấu chấm (.), và mỗi phần chia đó được gọi là một octet.
Một octet là một số nguyên 8 bit, còn có thể gọi là một byte. Chúng ta không sử d
ụng từ byte ở
đây, vì byte có thể dao động, thay đổi giữa các máy tính, trong khi octet là một số cố định không
thay đổi. Hình 1 minh họa cấu trúc của một địa chỉ IPv4.
Hình 1: Cấu trúc của một địa chỉ IPv4
Vì mỗi octet đại diện cho một số nhị phân (cơ số 2), nằm trong khoảng từ 0 đến 8, nghìa là từ 0
đến 255. Phần này tương đối đơn giản, vậy còn subnet mask thì sao. Để hiểu về subnet mask,
trước hết ta tìm hiểu cách mà các thiết bị xử lý từ subnet mask để xác định chính xác địa chỉ để gửi
gói tin. Hình 2 sẽ minh họa điều này.
Hình 2: Subnet mask
IPMAC INFORMATIC TECHNOLOGY JSC
Làm việc với địa chỉ IP
2
Nếu host A, với địa chỉ IP local là 10.1.1.2 và subnet mask là 255.255.255.0, muốn gủi một gói tin
tới địa chỉ IP 10.1.3.2 của host D, làm sao để host A có thể biết được host D có kết nối trực tiếp
trong cùng một mạng (broadcast domain) hay không? Nếu D nằm trong cùng mạng thì A sẽ căn cứ
vào địa chỉ lớp 2 cua D để gửi gói tin đi. Nếu D nằm ở khác mạng hay khác broadcast domain thì A
sẽ gửi gói tin đến default gateway của mình.
Để tìm hiểu xem D có nằm trong cùng mạng hay không, A s
ẽ sử dụng địa chỉ IP local của mình
thực hiện một thuật toán AND với subnet mask. Rồi tiếp đó lại sử dụng địa chỉ IP cùng subnet
mask của D, và thực hiện tiếp một thuật toán AND tương tự. Nếu hai kết quả thu được, còn gọi là
địa chỉ mạng (network address) hay prefix trùng khớp thì A có thể kết luận A và D nằm trên cùng
một mạng hay một broadcast domain. Tiếp đó A sẽ tra trong Address Resolution Protocol (ARP)
cache để tìm đị
a chỉ lớp 2 của D và gửi bản tin đến D dưới dạng bản tin nội bộ. Ngược lại, nếu hai
kết quả này không trùng khớp, nghĩa là hai thiết bị nằm trên hai mạng khác nhau, thì A sẽ gửi bản
tin đến default gateway của mình.
Lưu ý: ARP là một giao thức dùng để gán địa chỉ IP và địa chỉ MAC lớp 2 của các thiết bị trong
cùng một mạng. Các thiết bị gửi một bản tin broadcast trong đó chứ
a địa chỉ IP của một số thiết bị
mà nó tin là đang kết nối trực tiếp trong mạng, và các thiết bị với địa chỉ IP tương ứng đó sẽ reply
lại với địa chỉ lớp 2 của mình, giúp thiết bị ban đầu có thể có một bảng tương ứng giữa địa chỉ IP và
địa chỉ lớp 2, thuận lợi trong việc gửi các bản tin nội bộ.
Nếu subnet mask ở dạng thập phân, vậy làm thế nào để xác định prefic length ? Prefix length là
một dạng viết tắt của subnet mask. Prefix length là số lượng các bit được set trong subnet mask.
Ví dụ một subnet mask là 255.255.255.0 thì ta nhận thấy có 24 bit 1 trong subnet mask, vì vật
prefix length sẽ là 24 bits. Hình 3 sẽ minh họa về network mask và prefix length.
Hình 3: Bảng Prefix Length.
Làm việc với địa chỉ IPv4
Như vậy ta đã biết về cấu trúc của địa chỉ IPv4, nó được hình thành thế nào, và biết về các khái
niệm subnet mask và prefix length. Vậy làm việc với chúng như thế nào ?
IPMAC INFORMATIC TECHNOLOGY JSC
Làm việc với địa chỉ IP
3
Các câu hỏi chún ta thương gặp phải khi làm việc với địa chỉ IP là:
- Địa chỉ mạng của prefix là bao nhiêu ?
- Địa chỉ host là bao nhiêu ?
Có hai cách để giải quyết vấn đề này, cách phức tạp và đơn giản. Trước hết ta sẽ nói về cách
phức tạp, và tiếp sau sẽ đề cập về phương pháp đơn giản.
Cách phức tạp
Các phức tạp là ta sẽ chuyển đổi địa chỉ prefix và địa chỉ host sang dạng nhị phân và sau đó thực
hiện các thuật toán AND và NOR giữa địa chỉ đó với subnet mask và sau đó lại chuyển đổi kết quả
trở lại dạng thập phân. Hình 4 minh họa quá trình chuyển đổi địa chỉ một octet đơn trong một địa
chỉ IPv4 sang dạng nhị phân, số được chuyển đổi ở đây là 192.
Hình 4: Chuyển đổi nhị phân.
Quá trình tính toán là tương đối đơn giản. Ta sẽ lấy số thập phân ban đầu chia cho 2, lấy phần dư
ra, rối lại chia tiếp thương số vừa nhận được cho 2, lại lấy phần dư ra, tới khi bằng 0. Các phần dư
được sắp xếp theo chiều ngược lại chính là số nhị phân cần tìm. Thực hiện phép tính với cả 4
octet ta sẽ được địa ch
ỉ IP dưới dạng nhị phân và sau đó ta có thể dùng các thuật tóan logic AND
và NOR để tím ra được prefix (network address) và host address. Hình 5 sẽ minh họa một ví dụ với
địa chỉ 192.168.100.80/26.
IPMAC INFORMATIC TECHNOLOGY JSC
Làm việc với địa chỉ IP
4
Hình 5: Ví dụ về tính toán địa chỉ.
Cách đơn giản
Tất cả việc chuyển đổi từ dạng thập phân sang nhị phân và ngược lại, từ nhị phân sang thập phân
thật phức tạp và buồn tẻ, vậy liệu có cách nào đơn giản hơn không ? Câu trả lời là có.
Trước hết chúng ta quan sát thấy rằng chúng ta chỉ làm việc với các số trong cùng một octet tại
một thời điểm bất kể chiều dài của prefix là gì. Ta gọi đó là octet làm việ
c (hay working octet). Ta
giả sử coi tất cả các octet nằm trước working octet là thuộc về địa chỉ mạng, còn các octet nằm sau
working octet là thuộc về địa chỉ host.
Việc đầu tiên chúng ta cần làm là xác định octet làm việc của mình. Công việc tương đổi đơn giản
đó là lấy prefix chia cho 8 rồi cộng thêm 1. Hình dưới đây minh họa một số ví dụ.
Note: Một cách khác để xác định working octet là ta sẽ loại bỏ số octet được chỉ ra trong phép chia.
Ví dụ 192.168.100.80/26, ta lấy 26 chia cho 8 được 3. Như vậy ta sẽ loại bỏ 3 octet ban đầu, suy ra
octet làm việc là octet thứ 4. Hai cách đều cho cùng một kết quả.
Khi ta đã xác định được working octet, vậy việc tiếp theo ta sẽ làm là gì? Có thể ta sẽ lại làm theo
cách đã chỉ ra ở phía trên, chuyển đổi qua lại giữa địa chỉ dạng nhị phân và thập phân, dùng thuậ
t
toán logic AND và NOR để tìm ra địa chỉ mạng và địa chỉ host. Nhưng có một cách đơn giản hơn
để tìm ra phần mạng và phần host trong working octet. Thực hiện phép toán tương tự trên, nhưng
lần này ta chỉ quan tâm đến phần dư chứ không phải toàn bộ kết quả.
192.168.100.80/26
26 ÷ 8 = 3 và phần dư là 2.
Ta lấy phần dư, và tra theo bảng sau để tìm ra bước nhảy (jump) trong octet. Số này là một số ở
dạng thậ
p phân, là khoảng cách giữa các địa chỉ mạng trong octet.
IPMAC INFORMATIC TECHNOLOGY JSC
Làm việc với địa chỉ IP
5
Trong bảng trên, dòng đầu tiên là chiều dài prefix trong octet, dòng thứ hai là giá trị của prefix khi
bit này được set bằng 1, là số lượng các host trong subnet cho prefix length này là bước nhảy giữa
các địa chỉ mạng với prefix length xác định được chỉ ra.
Số 2 tương ứng với 64, có nghĩa là có 64 host trong subnet, tương ứng với bước nhảy 64. Điều
này có nghĩa là có mỗi network ở địa chỉ 0, 64, 128, và 192 trong octet này. Việc tiếp theo là ta phải
xác định chính xác địa chỉ của ta nằm trong network nào trong số các network trên. Công việc cũ
ng
tương đối đơn giản : chỉ việc lấy số network lớn nhất khớp với số octet làm việc. Trong trường hợp
này, số lớn nhất khớp với 80 là 64, vậy địa chỉ mạng chính xác sẽ là 192.168.100.64/26.
Vậy địa chỉ host sẽ là gì ? Việc này thật đơn giản khi ta đã có địa chỉ network. Ta chỉ việc lấy địa chỉ
IP trừ đi địa chỉ network sẽ có
địa chỉ host tương ứng nằm trong network : 80 – 64 = 16. Công việc
này sẽ đơn giản hơn nếu bạn thực hành nhiều.
Trong ví dụ thứ hai và thứ ba, bạn nhận thấy octet làm việc là octet thứ ba chứ không phải octet
thứ 4. Để tìm địa chỉ host trong ví dụ này, ta sẽ tìm địa chỉ host trong octet thứ 3, rồi tiếp tục với
octet thứ 4, coi đó là thuộc phần host, vì ta biết rằng phần của của octet làm việc và octet sau đó
đều thuộc về địa chỉ host.
Summarizations và subnets
Subnets và supernets thông thường là hai vấn đề phức tạp nhất về địa chỉ IP khi ta muốn hiểu và
thao tác một cách nhanh chóng. Nhưng thực chất cả hai đều dựa trên một cơ sở chung là
aggregation. Hình 6 chỉ ra Aggregation hoạt động như thế nào.
Hình 6: Address Aggregation.
Hình minh họa trên cho thấy có 4 host với các địa chỉ lần lượt là 10.2.0.1, 10.2.0.2, 10.1.0.3, và
10.2.0.4. Router A quảng cáo một prefix 10.1.0.0/24 với ý nghĩa rằng có thể định tuyến được tới tất
cả các host trong dải địa chỉ từ 10.1.0.0 đến 10.1.0.255 thông qua router A. Chú ý rằng không phải
tất cả các địa chỉ trong dải kia đều tồn tại, nhưng nếu có một host trong dải đó có thể đến đượ
c thì
nhất định nó phải đi qua router A. Trong IP, địa chỉ mà router A quảng cáo đi là địa chỉ mạng
(network address), ta có thể hiểu một cách đơn giản rằng đó là địa chỉ của đường dây kết nối các
máy tính và router chứ không phải để chỉ một thiết bị cụ thể nào.
Vấn đề thường gây nhầm lẫn diễn ra ở sau đó. Khi router B cũng quảng cáo một prefix 10.2.2.0/24.
Và khi các gói tin quảng cáo được gử
i từ A và B đến router C thì router C làm công việc kết hợp lại,
hay gộp chung lại (aggregation) hai bản tin quảng cáo thành một bản tin duy nhất. Router C quảng
cáo rằng “Tất cả các gói tin đến các host có địa chỉ nằm trong dải từ 10.1.0.0 đến 10.1.1.255 đều