Monday, April 26, 2010

Tổng quan IPv4

Bàn về địa chỉ IP!
Okie, hôm nay sẽ post một bài nói về địa chỉ IP, có lẽ cũng đã có quá nhiều tut trên mạng rồi...Ở đây ta bàn về cấu trúc của IPv4
Địa chỉ IPv4 đc chia ra thành 5 lớp A,B,C,D,E. Trong đó lớp D là lớp dự phòng ko bàn tới( thực ra nếu có đọc về Cisco thì nó sẽ nằm trong module ROUTE của CCNP-theo code mới của nó), còn lớp E phục vụ cho công tác nghiên cứu của các vị researchers nên cũng ko bàn luôn!:P
Bây giờ ta sẽ đi bàn về địa chỉ 3 lớp A,B,C.
Một địa chỉ IPv4 gồm có 32bits đc chia thành 4 phần gọi là 4 octet.
|------------|---------------|---------------|-------------|
| ----octet--------- octet-------- octet----------- octet--- |
|------------|---------------|---------------|-------------|

<------------------------32bits-------------------------->
1.Địa chỉ lớp A(Class A)
Địa chỉ IP đc chia thành 2 phần, một phần gọi là netID dùng để định danh mạng, và phần hostID dùng để định danh host!
Địa chỉ lớp A có phần netID chiếm octet đầu tiên(8bit). Bit đầu tiên bắt đầu là bit 0
0xxxxxxx|------------------------
--netID--|---hostID---------------
-------------32bits----------------
Do bit đầu tiên là 0 cho nên số mạng trong lớp A chỉ còn có 2^7=128 mạng.
Trong lớp A này có một dãy địa chỉ mạng cũng không thể sử dụng đc đó là địa chỉ Loopback. Dãy IP của nó là 127.0.0.0
Như vậy tổng cộng trong lớp A ta chỉ có 126 mạng có thể sử dụng đc
Địa chỉ cho mạng sẽ chạy từ:
Binary:00000001->01111111
Decimal:1.0.0.0->126.0.0.0
Số host cho mỗi mạng là: 2^(32-8) hosts
2. Địa chỉ lớp B(Class B)
Lớp B có phần netID chiếm 2 octet đầu tiên. Ở octet thứ nhất thì 2 bit đầu tiên là 10
10xxxxxx xxxxxxxx|------------------------
--------netID----|---------hostID--------
Như vậy trong lớp B có 2^16 mạng có thể sử dụng.
Địa chỉ cho mạng này sẽ chạy từ
Binary:10000000 00000000 ->10111111 11111111
Decimal:128.0.0.0->191.255.0.0
Số host cho mỗi mạng là: 2^16 hosts
3. Địa chỉ lớp C(Class C)
Lớp C có phần net ID chiếm 3 octet đầu.Ở octet thứ nhất thì 3 bits đầu tiên là 110
110xxxxx xxxxxxxx xxxxxxxx|------------------
-------------netID--------|----hostID-------
Như vậy trong lớp C có 2^24 mạng có thể sử dụng.
Địa chỉ cho mạng này chạy từ:
Binary:11000000 00000000 00000000 -> 11011111 11111111 11111111
Decimal:192.0.0 -> 223.255.255
Số host cho mỗi mạng là: 2^8 hosts
----
OK, như vậy là đã cho bạn một cái nhìn có thể nói là sơ lược nhất về các lớp IP, nhưng vẫn có chỗ sai, nếu bạn để ý thì sẽ thấy mình tính số hosts và số mạng ko giống như các tut khác!;). Bây giờ mình sẽ chỉ ra 2 chỗ sai. Nếu bạn chưa thấy thì dừng lại một chút tìm chỗ sai của mình nhé!;)
------------------------------------------------
Now, mình sẽ chỉ ra 2 chỗ sai của mình ở trên:
3.1 Chỗ sai thứ nhất: số mạng có thể sử dụng
Như ở trên mình nói thì với lớp A ta có thể dùng 126 mạng, điều này là do ta đã loại bỏ 2 trường hợp mà mình đã nhắc ở trên. Còn đối với lớp B và C thì sao?!
Thật ra, đối với lớp B mình dùng "2^16" mạng là hoàn toàn sai!:D. Tại sao?! Bởi vì chỉ có 14 bit là có thể chạy qua lại giữa 0 và 1 mà thôi, 2 bit đầu tiên là bất di bất dịch, bạn ko có quyền sửa đổi 2 vị trí này, như vậy đúng ra ta sẽ có:
  1. Lớp B sẽ có 2^14 mạng có thể dùng
  2. Lớp C sẽ có 2^21 mạng có thể dùng
3.2 Chỗ sai thứ 2: số hosts cho mỗi mạng
Mình đã nói là: lớp A có 2^24 hosts cho mỗi mạng, lớp B có 2^16, lớp C có 2^8. Như vậy là sai(theo cái lý thuyết mà chúng ta đang cần nắm;) )
Tại sao lại sai nhỉ? Có gì sai đâu khi có từng ấy bit dành cho phần hostID?!
Thật ra nó sai ở chỗ người ta đưa ra 2 loại địa chỉ mà chúng ta ko đc dùng để đặt cho các hosts.
  • Loại địa chỉ thứ nhất ko đc dùng cho host: Đó là địa chỉ của lớp mạng(các bit host đều bằng 0)
  • Loại địa chỉ thứ 2 ko đc dùng cho host: Đó là địa chỉ broadcast(tất cả các bit host đều bằng 1)
OK, để mình chỉ rõ hơn một chút!;)
Bây giờ mình sẽ lấy địa chỉ của lớp B ra làm ví dụ!
Địa chỉ của lớp B có phần hostID là 16bits. Bây giờ mình sẽ lấy địa chỉ đầu tiên dành cho hosts đó là các bit đều ở trạng thái bằng 0
10xxxxxx xxxxxxxx|00000000 00000000
-----netID-------|-------hostID--------
Nếu như cách tính(sai) ở trên thì trạng tất cả các bit bằng 0 vẫn đc chấp nhận trong phần host(2^16).Với địa chỉ trên bạn sẽ có là một địa chỉ mạng đúng ko?! Đây là cái sai thứ nhất!:D
Với địa chỉ 100.10.0.0 thì các bit host đều bằng 0, nhưng đây là địa chỉ phần mạng! Như vậy nó sẽ ko đc dùng để đặt cho host
Loại địa chỉ thứ 2:đây là địa chỉ mà tất cả các bit host đều bằng 1. Khi đó theo quy ước thì địa chỉ này là địa chỉ broadcast. Địa chỉ này cũng ko đc sử dụng cho host.
Ví dụ: 100.10.11111111.11111111
-----netID--|-------hostID-----
Decimal:100.10.255.255
Như vậy với mỗi lần tính số hosts/net ta phải làm một thao tác đó là trừ đi 2 giá trị ko sử dụng đc cho host này.
Như vậy:
Lớp A, số hosts/net là: (2^24)-2 hosts
Lớp B, số hosts/net là: (2^16)-2 hosts
Lớp C, số hosts/net là: (2^8)-2 hosts
-----------------------------------------------
Có thể bạn sẽ bị lùng bùng với cách diễn giải của mình, nhưng cứ yên tâm, chút nữa ta sẽ cùng nhau rút ra vấn đề chính để có thể nhớ dễ dàng và chính xác hơn!:D
-----------------------------------------------
4.Địa chỉ Private và địa chỉ Public
Nôm na là địa chỉ riêng và địa chỉ công cộng( người Việt mình dịch ra như vậy, để dễ hơn thôi, ta thì cứ từ ngữ chuyên ngành mà dùng cho nhanh!:P)
Bây giờ mình sẽ bàn về địa chỉ Private
4.1 Địa chỉ Private
Mình nêu ra một ví dụ như vầy:
Mình chuyển đến khu trọ mới, đk một đường dây Internet. Sau đó khu trọ mới có vài người cũng muốn mình share net cho họ(share liền vì IT mà!:P)
Sau đó mình để ý rằng, trong cái mạng LAN bé nhỏ đó có dãy địa chỉ IP là 192.168.1.x. Địa chỉ của máy mình là 192.168.1.2. Mấy máy của các nhà khác thì lần lượt từ .3, .4....
Một ngày nọ, mình đến nhà thằng bạn chơi, dùng máy nó nghịch chút thì thấy rằng máy nó cũng là 192.168.1.2!:|. Tại sao lại vậy nhỉ?! Nguyên tắc là các máy không đc trùng IP với nhau cơ mà?! Sao máy nó lại có IP giống máy mình?!
Câu trả lời là hiện tại mình và thằng bạn mình đang dùng địa chỉ IP Private.
Địa chỉ Private là địa chỉ thường đc sử dụng trong các mạng LAN, địa chỉ này không thể đi ra Internet đc. Nó chỉ có ý nghĩa với mạng LAN của bạn mà thôi. Trong mạng LAN này thì máy của bạn cũng có IP duy nhất trong mạng. Như vậy là hoàn toàn hợp lệ.
Nói vậy cũng có nghĩa là: mạng 192.168.1.x của khu trọ nhà mình với nhà thằng bạn là hoàn toàn đúng, và với các dãy IP này ko thể nói chuyện trực tiếp với nhau đc.
Như vậy địa chỉ Private là địa chỉ của mạng LAN, không thể đi ra Internet. Địa chỉ này thường do người Administrator quản lý.
Với mỗi lớp mạng thì sẽ có một dãy địa chỉ IP Private riêng
Lớp A: 10.0.0.0
Lớp B: 172.16.0.0->172.31.0.0
Lớp C: 192.168.0.0->192.168.255.0
4.2 Địa chỉ Public
Cũng với ví dụ trên của mình, vậy thì cái máy của mình làm sao có thể chat với thằng bạn mình, làm sao mình có thể dùng Google đc?!
Mỗi khi bạn đi ra Internet với chiếc máy của mình thì máy của bạn cũng sẽ phải được định danh bằng 1 IP duy nhất trên Internet, ko chung đụng với bất cứ ai. Bạn lên mạng lướt web, vào 4rum, chat với bạn bè cũng là bằng IP đó. Đó là IP Public, địa chỉ này là một tài nguyên mạng cho nên mỗi khi bạn đk 1 dịch vụ Internet thì ISP sẽ cung cấp cho bạn một IP để bạn có thể ra ngoài Internet đc.
Để biết được IP Public của mình, bạn có thể vào trang http://whatismyip.com để xem
Ngày xưa, khi mình đọc đến đây thì mình có 1 thắc mắc nho nhỏ đó là: mạng LAN của mình có nhiều máy, vậy chẳng lẽ mỗi máy ra mạng lại đc cấp 1 IP Public riêng và ko trùng nhau?!
Nhưng đâu thể nào như vậy đc, với tình trạng khan hiếm IP như hiện nay ở VN thì điều đó là ko thể. ISP sẽ dùng một công nghệ gọi là NAT( Network Address Translation) để làm cho tất cả các máy trong mạng LAN của bạn đi ra ngoài chỉ với 1 IP nhưng vẫn đảm bảo máy bạn ra Internet ngon lành!:D. Mình sẽ đề cập đến cái NAT này sau!;)
Dãy địa chỉ Public là các địa chỉ còn lại không thuộc vào dãy IP Private mình đã đưa ra ở trên!:)
--------------------------------
OK, Mình đã giới thiệu sơ lược về địa chỉ IP rồi, bây giờ ta cùng review lại các ý chính
-IPv4 có 32bit, chia làm 4 octet
-Có 3 lớp địa chỉ IP đc sử dụng
-Số mạng mỗi lớp
-Số host trên mỗi mạng: (2^n)-2 với n là số bit dành cho phần host
-Địa chỉ Private và địa chỉ Public
Đó là các mục chúng ta vừa tìm hiểu, mỗi người hãy xây dựng cho mình một cách riêng để nhớ nhé!;)

1 comment: