DHCP – Dynamic Host Configuration Prococol

Nhân ngày sắp mưa bão, mình làm 1 topic về DHCP và các vấn đề của nó. Sau đây là nội dung chi tiết….

1. Hoạt động cơ bản của DHCP

DHCP (Dynamic Host Configuration Prococol), là giao thức cấp phát địa chỉ IP động cho các thiết bị mạng.

Một thiết bị (host) lần đầu được lắp vào mạng, nếu chúng ta không cấp phát địa chỉ IP bằng tay (static IP) thì nó sẽ không có IP để truy cập vào mạng. Và đương nhiên, với một mạng lớn vài trăm host thì không ai lại đi cấu hình IP bằng tay từng con một. Vì vậy người ta sinh ra giải pháp cấp phát địa chỉ động, trong đó có 1 con thiết bị gọi là DHCP server, chứa 1 đống địa chỉ (pool). Khi có yêu cầu cấp phát IP từ host, DHCP server sẽ cấp phát IP từ pool sẵn có cho host.

Chúng ta cùng điểm qua các hoạt động của DHCP:

1.1. Ở hình dưới, phía bên trái là 1 host mới tinh, chưa có IP. Bên phải là một con DHCP server được cấu hình static IP = 192.168.1.254.

dhcp topology

1.2. Ngay khi được cắm vào mạng và cấu hình IP động, host sẽ gửi bản tin DHCP Discover ra cổng mạng để tìm kiếm DHCP server và yêu cầu một địa chỉ IP. Bản tin này là bản tin broadcast, chứa:

  • Địa chỉ đích là địa chỉ broadcast (L2 = ff:ff:ff:ff:ff:ff, L3 = 255.255.255.255)
  • Địa chỉ nguồn = 0.0.0.0 (L3) và ở L2 là địa chỉ MAC của host.
  • Nội dung chính của bản tin chứa thông tin địa chỉ MAC của host đang xin cấp IP.

dhcp discover

1.3. DHCP server nhận được bản tin Discover sẽ kiểm tra trong pool của mình còn địa chỉ nào chưa cấp không. Nếu có sẽ gửi trả bản tin DHCP Offer chứa địa chỉ IP sẽ cấp cho host và MAC của host sẽ nhận/xử lý bản tin này. Ngoài ra, nếu được người quản trị cấu hình, DHCP server cũng sẽ cấp phát cả default gateway, DNS server và gửi kèm trong bản tin Offer.

Bản tin Offer cũng là một bản tin Broadcast, với địa chỉ đích là địa chỉ Broadcast như trên, địa chỉ nguồn là địa chỉ của DHCP Server.

Lưu ý: Đến bước này, trên DHCP chưa chính thức cấp IP cho host, mà chỉ là để ra 1 địa chỉ để đề xuất cho host là “mày có thể dùng”. Nó sẽ chờ host kiểm tra địa chỉ này và chính thức yêu cầu (bước 1.4) thì server mới chính thức gán IP cho host (bước 1.5).

dhcp offer

1.4. Host khi nhận được bản tin Offer sẽ kiểm tra MAC trong bản tin và xác định đây có phải là gửi cho nó hay không? Nếu đúng, host sẽ kiểm tra địa chỉ IP xem có hợp lệ không? Nếu không có vấn đề gì, nó sẽ gửi bản tin DHCP Request đến server để yêu cầu được cấp phát địa chỉ này. Ngoài địa chỉ IP, host cũng gửi cả yêu cầu 1 list các tham số mà nó muốn lấy từ server như: IP Address Lease Time, Renewal Time Value, Rebinding Time Value.

Việc đóng gói địa chỉ nguồn, đích của bản tin Request giống với bản tin Discover (bước 1.1).

Lưu ý: Khi host gửi bản tin Request thì nó vẫn chưa thực hiện cấu hình địa chỉ IP có trong Offer.

dhcp request

1.5. DHCP nhận được bản tin Request sẽ xử lý đánh dấu địa chỉ IP là đã gán cho host này. Đồng thời, nó gửi bản tin DHCP ACK đến host để thông báo rằng mày có thể dùng IP đó được rồi. Nội dung bản tin DHCP ACK ngoài thông tin IP/Subnet-mask, sẽ chứa thêm các thông tin về thời gian ràng buộc sử dụng địa chỉ IP như: IP Address Lease Time, Renewal Time Value, Rebinding Time Value.

Host nhận được bản tin ACK sẽ tiến hành cấu hình địa chỉ IP vào interface.

2. DHCP Relay Agent

dhcp relay agent topology

Trước tiên, chúng ta sẽ xem xét topo trên để hiểu tạo sao lại cần DHCP Relay Agent. Như phần trước đã nói, để lấy địa chỉ IP từ server, host sẽ gửi bản tin DHCP Discover ra địa chỉ broadcast = ff:ff:ff:ff:ff:ff. Với mô hình mà client và server kết nối trực tiếp hoặc cùng chung miền broadcast, gói tin sẽ được chuyển đến server một cách bình thường. Nhưng với mô hình như ở trên, khi gói tin broadcast đến công f0/0 của R1, R1 sẽ đọc địa chỉ MAC đích và thấy đây là gói tin broadcast => R1 sẽ drop gói tin => H1 sẽ không bao giờ gửi được bản tin discover đến server.

Để giải quyết vấn đề trên, chúng ta cần xây dựng giải pháp để khi R1 đọc được bản tin broadcast, nó không drop gói tin mà check tiếp xem nếu là bản tin DHCP thì sẽ forward đến đúng con DHCP Server => Đây chính là mục đích chính của DHCP Relay Agent. Về bản chất, chức năng này sẽ cho phép chuyển gói tin DHCP từ broadcast sang unicast và ngược lại.

Giờ chúng ta sẽ điểm qua cơ chế hoạt động của DHCP Relay Agent. Để thuận tiện, mình vẫn sẽ sử dụng topo ở trên.

2.1. Cũng như bước 1.2, ban đầu host sẽ gửi ra bản tin DHCP Discover để tìm kiếm DHCP server. Gói tin broacast này sẽ được gửi đến f0/0 của R1.

dhcp relay discover

2.2. R1 lúc này được bật chức năng DHCP Relay Agent, sẽ đọc gói tin và thấy đây là gói tin DHCP Discover. Nó sẽ chèn thêm trường giaddr (Gateway IP Address) vào nội dung của gói tin, trường này chứa địa chỉ của cổng f0/0 (192.168.12.2 ). Đồng thời đóng gói gói tin mới với:

  • Địa chỉ đích = địa chỉ của DHCP Server (do người quản trị cung cấp cho nó khi cấu hình).
  • Địa chỉ nguồn là địa chỉ của f0/0.
  • Nội dung gói tin mới chính là nội dung của gói tin DHCP Discover + trường giaddr.

Nói thêm về trường giaddr. DHCP server ban đầu sẽ được cấu hình với nhiều pool IP thuộc nhiều dải mạng khác nhau để cung cấp cho host. Khi nhận được request, nó sẽ có trách nhiệm chọn ra 1 pool phù hợp với request để cấp phát cho host (phù hợp dải mạng).

  • Với trường hơp DHCP Relay (giaddr khác 0), DHCP server khi nhận được bản tin discover sẽ lựa chọn pool có địa chỉ và subnet mask phù hợp với địa chỉ giaddr.
  • Với trường hợp host và DHCP Server cùng broadcast domain, giaddr bằng 0. Server sẽ lựa chọn IP từ pool sao cho phù hợp với địa chỉ của cổng server nhận được bản tin discover.

dhcp relay discover unicast

2.3. DHCP Server nhận được bản tin Discover sẽ lựa chọn IP trong pool phù hợp (như đã nói ở trên) và đóng gói vào bản tin DHCP Offer. Gói tin Unicast DHCP Offer sẽ có các thông tin:

  • Địa chỉ đích: Là địa chỉ của f0/0 => trên DHCP phải được cấu hình sao cho biết được route đến f0/0!!!
  • Địa chỉ nguồn: Là địa chỉ của DHCP Server.

dhcp relay offer unicast

2.4. R1 nhận được bản tin DHCP Offer sẽ đọc địa chỉ đích, thấy đây là bản tin gửi đến cổng f0/0 của nó => R1 sẽ đọc tiếp nội dung gói tin và thấy đây là bản tin DHCP Offer => R1 sẽ broadcast bản tin này ra cổng f0/0 với nội dung bản tin giống với bản tin DHCP Offer như đã nói ở bước 1.3.

dhcp relay offer broadcast

2.5. Tương tự như các phần trên, các bản tin DHCP Request và ACK sẽ được gửi tuần tự và theo phương pháp như ở trên.

dhcp relay request unicast

dhcp relay dhcp ack

OK, tạm thời dừng ở đây. Trong phần tiếp theo, mình sẽ trình bày thêm về DHCP Binding và DHCP Identifier khi có thời gian. Cám ơn mọi người!

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s