Sunday, April 4, 2010

Proxy ARP

Theo mặc định thì Router sẽ drop các gói tin broadcast khi gói tin này đến bất kỳ 1 interface nào của nó. Nhưng nếu vậy thì làm sao các máy khác mạng có thể liên lạc đc với nhau khi yêu cầu là phải có source MAC và dest MAC trong Frame gửi đi?! Đây là một chức năng trên Router làm nhiệm vụ "giả" MAC của host đích để đánh lừa host gửi, nhưng vẫn đảm bảo rằng dữ liệu đến đúng nơi cần thiết!


1. Sơ lược về ARP( RFC 826 )
ARP(Address Resolution Protocols) là một giao thức hoạt động nhằm map giữa địa chỉ logic(IP) và địa chỉ vật lý(MAC).
Cơ chế hoạt động của ARP như sau:
-Khi 2 host trong cùng mạng muốn liên lạc với nhau chúng phải biết được rằng địa chỉ vật lý(MAC address) của host kia là gì. Ban đầu các máy chưa hề biết nhau, vì vậy muốn biết đc MAC của máy đích thì máy gửi sẽ broadcast gói tin lên mạng. Trong gói tin này sẽ chứa IP nguồn là IP của máy gửi, IP đích là IP của máy cần biết M. Khi gói tin đến đúng đc máy có IP tương ứng thì máy nhận sẽ phải gửi lại một gói tin chứa MAC của mình.

-Ta có thể hình dung như sau:
  • Trong một mạng có 2 host A,B. Host A đã có IP của host B và muốn biết MAC của host B. Khi đó HostA gửi lên mạng một gói tin ARP Request với IP của hostB và MAC của hostA.
  • Vì đây là gói tin broadcast nên tất cả các host trong mạng sẽ đều phải xử lý gói tin, nhưng chỉ có host nào có IP đúng như IP đích của gói tin thì mới reply lại, trong trường hợp này thì chỉ có hostB reply lại, đem theo MAC của host B.
  • Như vậy hostA đã học đc MAC của hostB và có thể truyền dữ liệu đến hostB.

2.Proxy ARP(RFC 1027)

Như ta đã xem xét sơ lược ở trên thì gói tin ARP request là một gói tin dạng broadcast. Bây giờ ta thử xem xét đến việc truyền tải giữa 2 host ở 2 mạng khác nhau xem sao. 2 mạng khác nhau muốn kết nối với nhau phải sử dụng một thiết bị layer3 như Router để có thể truyền tải thông tin cho nhau. Nhưng giả sử ở mạng A ta có hostA muốn kết nối tớ hostB ở mạng B mà vẫn chưa biết MAC của host B thì sao?! Nếu sử dụng 1 gói tin broadcast thì sẽ ko khả thi vì như ta biết thì gói tin broadcast sẽ bị drop khi đến 1 interface nào đó của Router. Như vậy làm sao để có thể lấy đc MAC hostB?!....
Vấn đề trên đc giải quyết qua RFC 1027 đó là sử dụng Proxy ARP. Ta cùng xem xét về vấn đề này...
Cùng xem một ví dụ:


HostA(172.16.10.100/16) muốn gửi các gói tin đến host D(172.16.20.200) trong subnet B. Như trên hình thì hostA có subnet mask là /16, tức là đang ở ClassB, và nó sẽ tin rằng nó đc kết nối trực tiếp đến các host trong cùng mạng 172.16.0.0. Khi hostA muốn truyền tải thông tin cho bất kỳ một host nào mà nó tin rằng nó đang đc kết nối trực tiếp thì nó sẽ gửi một ARP request đến host đích để lấy thông tin về layer2(MAC). Khi đó gói tin broadcast của hostA gửi đi sẽ có các thông số:








TRong gói tin ARP request này hostA sẽ yêu cầu host D gửi cho nó MAC của host D. Vì gói tin dưới dạng broadcast nên tất cả các host trong mạng đều nhận đc và xử lý, kể cả interface e0 của Router, nhưng gói tin này sẽ ko đến đc hostD vì Router đã drop gói tin ngay khi nó đến e0.
Khi Router biết rằng địa chỉ đích(172.16.20.200) ở mạng khác và nó có thể đến đc hostD thì nó sẽ gửi cho hostA một gói tin:

Đây chính là gói tin ARP Proxy reply mà router gửi về cho hostA. Gói tin này đc đóng gói trong Ethernet Frames với source MAC là MAC của interface kết nối đến subnet của hostA và dest MAC chính là MAC của hostA. Đây là gói tin dưới dạng unicast.
Khi hostA nhận đc gói tin trên nó sẽ cache vào ARP table của nó:


Kể từ bây giờ, khi hostA muốn gửi gói tin đến hostD thì nó sẽ gửi gói tin đến interface e0 của router, router sẽ biết cách để forward gói tin đến đúng đích. Và nếu hostA muốn gửi gói tin đến bất kỳ một host nào đang ở trong subnet B thì sẽ biết phải forward đến e0. ARP table của hostA:



Nhờ nguyên tắc của Proxy ARP mà ta vẫn nghe thấy rằng trong quá trình truyền dữ liệu thì chỉ có MAC thay đổi còn IP thì ko đổi....

4 comments: