IPMAC INFORMATIC TECHNOLOGY JSC LàmviệcvớiđịachỉIP 1 Làmviệcvới địa chỉIPĐịachỉ 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àiliệ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àmviệcvớiđịachỉ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ỉĐịachỉ 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 địachỉ 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 địachỉ IPv4. Hình 1: Cấu trúc của một địachỉ 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 địachỉ để 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àmviệcvớiđịachỉIP 2 Nếu host A, vớiđịachỉ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 địachỉ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 địachỉ 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 địachỉ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 địachỉ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à địachỉ 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 địachỉIP và địachỉ 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 địachỉ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địachỉIP tương ứng đó sẽ reply lại vớiđịachỉ 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 địachỉIP và địachỉ 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àmviệcvớiđịachỉ IPv4 Như vậy ta đã biết về cấu trúc của địachỉ 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àmviệcvới chúng như thế nào ? IPMAC INFORMATIC TECHNOLOGY JSC LàmviệcvớiđịachỉIP 3 Các câu hỏi chún ta thương gặp phải khi làmviệcvớiđịachỉIP là: - Địachỉ mạng của prefix là bao nhiêu ? - Địachỉ 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 địachỉ prefix và địachỉ host sang dạng nhị phân và sau đó thực hiện các thuật toán AND và NOR giữa địachỉ đó 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 địachỉ một octet đơn trong một địachỉ 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địachỉ 192.168.100.80/26. IPMAC INFORMATIC TECHNOLOGY JSC Làmviệcvớiđịachỉ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àmviệcvớ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ề địachỉ mạng, còn các octet nằm sau working octet là thuộc về địachỉ host. Việc đầu tiên chúng ta cần làm là xác định octet làmviệ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àmviệ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 địachỉ dạng nhị phân và thập phân, dùng thuậ t toán logic AND và NOR để tìm ra địachỉ mạng và địachỉ 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 địachỉ mạng trong octet. IPMAC INFORMATIC TECHNOLOGY JSC Làmviệcvớiđịachỉ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 địachỉ 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 ở địachỉ 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 địachỉ 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 địachỉ mạng chính xác sẽ là 192.168.100.64/26. Vậy địachỉ host sẽ là gì ? Việc này thật đơn giản khi ta đã có địachỉ network. Ta chỉviệc lấy địachỉIP trừ đi địachỉ network sẽ có địachỉ 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àmviệc là octet thứ ba chứ không phải octet thứ 4. Để tìm địachỉ host trong ví dụ này, ta sẽ tìm địachỉ 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àmviệc và octet sau đó đều thuộc về địachỉ host. Summarizations và subnets Subnets và supernets thông thường là hai vấn đề phức tạp nhất về địachỉ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 địachỉ 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 địachỉ 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 địachỉ 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, địachỉ mà router A quảng cáo đi là địachỉ mạng (network address), ta có thể hiểu một cách đơn giản rằng đó là địachỉ 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ó địachỉ nằm trong dải từ 10.1.0.0 đến 10.1.1.255 đều IPMAC INFORMATIC TECHNOLOGY JSC LàmviệcvớiđịachỉIP 6 có thể đi qua tôi”. Không có một dây dẫn nào có địachỉ như vậy nhưng các router ở C ngoài router C có nhu cầu gửi gói tin không biết điều đó và chúng không quan tâm. Để xử lý tốt hơn đối với các dải địachỉ được kết hợp, ta định nghĩa hai khái niêmk là subnet và supernet. Một subnet là một network được chứa hoàn toàn trong một network khac; còn supernet là network bản thân nó chứa các network khác. Ví dụ 10.1.0.0/24 và 10.1.1.0/24 là hai subnet của network 10.1.0.0/23 trong khi 10.1.0.0/23 là supernet của 10.1.0.0/24 và 10.1.1.0/24. Bây giờ ta nhìn vào dạ ng nhị phân của các địachỉ này. Hình 7: Chi tiết về Aggregation Khi ta nhìn vào dạng nhị phân của hai địachỉ 10.1.0.0/24 và 10.1.1.0/24 ta nhận thấy chỉ có bit thứ 24 là thay đổi. Nếu ta thay đổi chiều dài prefix sang 23 bit, ta có thể hoàn toàn “che lấp” (“masked- out”) bit thay đổi này. Lúc này thì dải địachỉ cỉa 10.1.0.0/23 sẽ trùng với dải địachỉ kết hợp của hai địachỉ 10.1.0.0/24 và 10.1.1.0/24. Vấn đề khó khăn nhất của thực hiện subnet Vấn đề khó khăn nhất mà đa số người dùng gặp phải khi muốn thực hiện subnet đó là việc quyết định xem subnet nhỏ nhất là thế nào để có thể đáp ứng đủ số lượng host trên segment và đồng thời khồn gây ra sự lãng phí tài nguyên địa chỉ. Vấn đề này thường được nảy sinh dưới dạng như sau: “Bạn có 5 subnets với số lượng host tương ứng trên mỗi subnet như sau: 58, 14, 29, 49 và 3. Bạ n được cấp một dải địachỉ 10.1.1.0/24. Hãy xác định xem bạn cần phân chia dải địachỉ trên như thế nào để đáp ứng được nhu cầu sử dụng cho từng subnet trên?” Vấn đề này ban đầu tỏ ra tương đối phức tạp, nhưng nếu ta sử dụng bảng đã nêu ở phần trước để tìm ra bước nhảy trong mạng thì vấn đề trở nên khá dễ dàng. Trước h ết ta sẽ tuần tự theo các bước để giải quyết vấn đề trong ví dụ này, từ đó thấy được hoạt động thực sự của nó thế nào. - Sắp xếp các mạng theo thứ tự từ lớn nhất đến nhỏ nhất. - Tìm số nhỏ nhất trong bảng khớp với số host lớn nhất + 2. (chú ý: trừ trường hợp point-to- point ra, còn lại bạn không thể cấu hình đị a chỉvới toàn bit 0 hay toàn bit 1 ở phần host; trong point-to-point bạn có thể dùng một địachỉ prefix dạng /31, là một địachỉ không kèm địachỉ broadcast). - Tiếp tục với các dải khác cho đến khi bạn hết dải địachỉ hoặc công việc kết thúc. Tuy nhiên liệu thực sự nó có hoạt động không, ta cùng xét trong ví dụ. - Ta sắp xếp các subnet theo chiều giảm dần ta có thứ tự : 58, 49,29,14,3. - Bắt đầu với 58 o Số nhỏ nh ất trong bảng lớn hơn (58+2) là 64, và 64 là 2 bits o Prefix ban đầu có chiều dài 24 bit, ta thêm 2 bit vào được 26. o Network đầu tiên là 10.1.1.0/26 o Network tiếp theo là 10.1.1.0 + 64, vì vậy ta có thể tiếp tục với 10.1.1.64 - Block tiếp theo là 49 o Số nhỏ nhất lớn hơn (49+2) là 64, 2 bit o Ta thêm 2 bit vào prefix ban đầu ta có /26 o Ta bắt đầu block này ở 10.1.1.64, vì vậy địachỉ của subnet này sẽ là 10.1.1.64/26. IPMAC INFORMATIC TECHNOLOGY JSC LàmviệcvớiđịachỉIP 7 o Mạng tiếp theo sẽ là 10.1.1.64 + 64, vì vậy ta lại bắt đầu chu trình tiếp theo từ mạng 10.1.1.128 - Block tiếp theo là 29 host o Số nhỏ nhất lớn hơn (29+2) là 32, 32 tương ứng với 3 bits o Thêm 3 bit và ta có /27 o Ta bắt đầu block ở network 10.1.1.128, nên địachỉ mạng sẽ là 10.1.1.128/27. o Mạng tiếp theo sẽ là 10.1.1.128 + 32, vì vậy chu trình tiếp theo sẽ bắt đầu từ địachỉ 10.1.1.160. - Block tiếp theo là 14 o Số nhỏ nhất tương ứ ng với (14+2) là 16, 16 tương ứng với 4 bít o Prefix mới sẽ là /28 o Ta bắt đầu ở network 10.1.1.160, vậy địachỉ mạng sẽ là 10.1.1.160/28. o Mạng tiếp theo là 10.1.1.160 + 16, vì vậy chu trình tiếp theo sẽ bắt đầu từ địachỉ 10.1.1.176. - Block cuối cùng là 3 host: o Số nhỏ nhất lớn hơn (3+2) là 8, 32 tương ứng với 5 bits o Thêm 5 bit và ta có /29 o Ta bắt đầu block ở network 10.1.1.176, nên địachỉ mạng sẽ là 10.1.1.176/29. o Đây là block cuối cùng, và công vi ệc đã kết thúc. Trên đây là một ví dụ rất cơ bản về việc xử lý vớiviệc phân nhỏ một dải địachỉ thành các dải địachỉ nhỏ hơn tùy theo nhu cầu sử dụng bằng cách sử dụng bước nhảy (jump) đã nêu ở trên. Hình 8 minh họa kết quả của việc phân chia địachỉ theo các subnet phân cấp Hình 8: Sơ đồ phân chia subnet. Trong phần minh họa trên: - Dòng đầu tiên trong mỗi box chứa octet cuối của địachỉ mạng ở dạng thập phân và nhị phân. - Dòng thứ hai là chiều dài của prefix - Dòng thứ ba chỉ ra số host yêu cầu trong mỗi subnet - Box màu xám chỉ ra các dải địachỉ chưa dùng đến ở mức này. IPMAC INFORMATIC TECHNOLOGY JSC LàmviệcvớiđịachỉIP 8 Làmviệcvới địa chỉ IPv6 Địachỉ IPv6 tỏ ra khó để thao tác hơn rất nhiều, nhưng thực chất là không phải như vậy. Mặc dù lớn hơn, nhưng địachỉ IPv6 vẫn được cấu tạo từ những thành phần cơ bản và router cũng như các host cũng đều sử dụng một cách tương tự. Điều chúng ta cần lưu ý là một địachỉ hexa trong địachỉ IPv6 tương ứng với m ột octet trong địachỉ dạng nhị phân. Các phương thức để tìm địachỉ mạng, địachỉ host cũng như các khái niệm về subnet và supernet là tương đương. Ví du, giả sử ta có địachỉ IPv6 là 2002:FF10:9876:DD0A:9090:AC56:0E01/63 và ta cần biết địachỉ mạng là thế nào (địa chỉ host ít tác dụng trong IPv6 vì IPv6 sử dụng luôn địachỉ MAC) - 63 ÷ 8 = 7, dư 7 - Octet làmviệc là octet thứ 8, là 0A - Phần dư là 7, ta tra trong bảng sẽ thấy bước nhảy s ẽ là 2, vì vậy các mạng sẽ là 00, 02, 04, 06, 08, 0A, 0C và 0E. - Địachỉ mạng sẽ là 2002:FF10:9876:DD0A::/63. Địachỉ lớn hơn, nhưng phương pháp thao tác là như nhau, chỉ có điều ta cần nhớ là mỗi cặp số trong IPv6 tương ứng với 1 octet. Kết luận ĐịachỉIP tỏ ra tương đối phức tạp khi ta mới làm quen và nhìn vào nó, nhưng thực chất nó có những thành phần và những qui tắc chung. Khi nắm được các thành phần ta sẽ biết cách để xé nhỏ vấn đề ra các thành phần nhỏ hơn để dễ dàng xử lý, cũng như khi ta thiết kế một mạng với khả năng mở rộng cao thì đòi hỏi ta phải thiết kế theo hướng module. Ip thực sự đơn giản nếu ta nắm vững được cấu trúc của nó cũng như các kỹ thuật thao tác trên nó. Chử Kiên Bình binhck@ipmac.com.vn Creative Commons Some Rights Reserved . 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. chỉ ra các dải địa chỉ chưa dùng đến ở mức này. IPMAC INFORMATIC TECHNOLOGY JSC Làm việc với địa chỉ IP 8 Làm việc với địa chỉ IPv6 Địa chỉ IPv6 tỏ ra khó