ARP – ADDRESS RESOLUTION PROTOCOL VÀ QUÁ TRÌNH PHÂN PHỐI GÓI TIN TRONG MẠNG
Nhớ lại nguyên lý hoạt động của mô hình OSI thì dữ liệu từ bên trên đi xuống khi đi tới một lớp sẽ được đóng vào trong header của lớp đó. Khi đi tới layer 7 sẽ được đóng vào trong layer 7 header, xuống layer 6 sẽ được đóng vào trong layer 6 header tương tự với các lớp 5, 4, 3 và 2, và khi nghiên cứu về Network thì sẽ tập trung vào các lớp 4, 3, 2, và 1.Vậy thì dữ liệu xuống layer 4 Transport, thông tin cần chú ý sẽ là cặp source port và destination port, xuống lớp 3 Network lại quan tâm đến cặp địa chỉ source IP và destination IP rồi xuống lớp 2 Data-Link sẽ được đóng vào trong layer 2 header với cặp thông tin source MAC và destination MAC tương ứng với source IP và destination IP bên trên, thì lúc này sẽ phải có 1 cái gì đó đứng ra đảm nhiệm việc tìm cho ra cặp thông tin source MAC và destination MAC tương ứng với IP ở lớp bên trên, và cái gì đó chính là giao thức ARP – giao thức phân giải địa chỉ giữa lớp Network và lớp Data-Link. ARP sẽ tiến hành mapping giữa địa chỉ IP lớp 3 và địa chỉ MAC lớp 2. Hình: ARP mapping địa chỉ lớp 3 Network và địa chỉ lớp 2 Data-Link
Ví dụ 1 máy A có địa chỉ 172.16.3.1 muốn gửi dữ liệu đến máy B có địa chỉ 172.16.3.2 thì máy A cần phải biết địa chỉ MAC tương ứng với 172.16.3.2 là bao nhiêu để gửi xuống lớp 2 Data-Link. Thì lúc này ARP của máy A hoạt động và đi tìm MAC của 172.16.3.2. ARP máy A sẽ tìm dữ liệu trong bảng ARP local của nó nhưng nếu không có trong dữ liệu thì phải broadcast lên đi tìm, khi máy B nhận được broadcast hỏi địa chỉ MAC của 172.16.3.2 biết là hỏi mình thì trả lời lại máy A, máy A nhận được địa chỉ MAC thì đóng gói dữ liệu rồi truyền đi.
Vậy ARP hoạt động như thế nào, minh hoạ quá trình trao đổi gói tin giữa hai máy trong mạng dưới đây sẽ nói rõ điều này. Minh hoạ này sẽ chia làm 3 giai đoạn:
- Quá trình TCP bắt tay 3 bước thiết lập kết nối
- Quá trình ARP hoạt động phân giải địa chỉ
- Quá trình data được gửi và nhận
Ví dụ có 2 máy 1 và 2 đang trao đổi dữ liệu với nhau qua hệ thống mạng, máy 1 có IP là 192.168.3.1 (viết tắt là 3.1) địa chỉ MAC là 0800:0222:2222 (viết tắt là 2222); máy 2 có IP là 192.168.3.2 (viết tắt là 3.2) địa chỉ MAC là 0800:0222:1111 (viết tắt là 1111).
Giai đoạn 1: Quá trình TCP bắt tay 3 bước thiết lập kết nối.
Đầu tiên tầng ứng dụng Application yêu cầu 1 dịch vụ từ lớp bên dưới nó là Network, hãy thiết lập 1 kết nối tin cậy đến địa chỉ 3.2 dùm cho tôi được hay không, yêu cầu này đi xuống dưới đến Transport, Transport nhìn thấy yêu cầu kết nối tin cậy thì biết mình phải dùng TCP và nói TCP thiết lập 1 phiên kết nối tới 3.2 đi, TCP nhận được yêu cầu thì thực hiện quá trình bắt tay 3 bước và gói TCP SYN được đưa xuống lớp Network để gửi đến 3.2.
Gói TCP SYN này đi xuống lớp 3 Network được đóng vào trong layer 3 header với cặp địa chỉ source IP và destination IP, source IP từ chính bản thân máy 1 là 3.1 còn destination IP thì từ yêu cầu của lớp Transport bên trên, khi đã có đủ cặp chỉ source IP và destination IP thì gửi xuống layer 2 yêu cầu layer 2 gửi gói này đến 3.2.
Đến lớp 2 Data-Link thì sẽ phải đóng vào layer 2 header với cặp địa chỉ source MAC và destination MAC tương ứng. Source MAC từ chính Card mạng của máy 1 là 2222, còn destination MAC của 3.2 là bao nhiêu, nó sẽ phải dùng ARP để tìm. Nó sẽ tra trong bảng ARP của nó là có MAC của 3.2 chưa thì phát hiện là chưa có nên tạm thời nó sẽ để gói TCP SYN qua 1 bên (đưa vào Parking Lot) và tiến hành gửi ARP đi tìm MAC của 3.2 trước.
Giai đoạn 2: Quá trình ARP hoạt động phân giải địa chỉ
Khi máy 1 thực hiện ARP đi tìm MAC của 3.2 thì đầu tiên phải gửi gói ARP request mang các thông tin như thể máy 1 đang nói rằng tôi là 3.2, tôi có địa chỉ mac là 2222, anh có phải là 3.1 hay không. và sẽ broadcast gói này đi đến từng nhà từng nhà để hỏi anh có phải là 3.2 không. Gói ARP request này sẽ có source MAC là chính nó 2222 và destination MAC ở dạng broadcast layer 2 tương ứng với tất cả các bit bật lên bằng 1 thành 12 chữ F. Sau đó đưa xuống lớp 1 Physical chuyển thành các bit nhị phân rồi truyền đi. Vì destination là Broadcast nên gói ARP request này sẽ đi đến tất cả các máy có trong mạng và tất nhiên sẽ đến được tay máy 2.
Lớp Physical của máy 2 nhận được dãy bit nhị phân đưa lên lớp 2 Data-Link thì chuyển thành frame phát hiện đây là gói broadcast thì xử lý gói này, đọc vào protocol ID của header thì biết nó là ARP thì máy 2 gọi ARP ra nhận và xử lý gói tin này.
Khi ARP mở gói này ra xem thì thấy đây là 1 ARP request được gửi từ 3.1 với MAC 2222 và hỏi phải 3.2 không, máy 2 nhận ra 3.2 chính là mình thì mình trả lời và trước khi trả lời, máy 2 sẽ lưu thông tin 3.1 có MAC là 2222 vào bảng ARP của nó trước để sau này có khi dùng tới sau đó mới trả lời gói ARP request nhận được.
Máy 2 sẽ dùng gói ARP Reply mang các thông tin như tôi là 3.2 đây, tôi có địa chỉ MAC là 1111.Và lúc này gói ARP reply sẽ đảo cặp địa chỉ source MAC và destination MAC lại, source MAC của chính máy 2 là 1111, destination MAC là 2222, đóng thành gói ARP reply chuyển xuống lớp Physical và trả về đúng máy 1.
Lớp Physical của máy 1 nhận được cũng đưa lên trên chuyển thành frame, thấy frame này gửi cho mình thì xử lý nó, đọc vào protocol ID của header thì biết nó là ARP thì máy 1 gọi ARP ra nhận và xử lý gói tin này.
Máy 1 mở ra thì thấy đây là gói ARP reply từ 3.2 với địa chỉ MAC là 1111, thì máy 1 lưu 1111 vào bảng ARP của nó. Khi đó máy 1 đã có được MAC của 3.2 thì thông báo cho layer 2 biết rằng đã có địa chỉ MAC tương ứng của 3.2 rồi, bây giờ gửi gói tin đi. Lúc này giai đoạn 2 ARP phân giải địa chỉ mới hoàn tất.
Lúc này máy 1 mới bắt đầu lấy gói TCP SYN đang chứa trong Parking Lot để đóng gói lại với đầy đủ cặp source IP, destination IP, source MAC, destination MAC đưa xuống lớp Physical chuyển thành các bit nhị phân và gửi qua máy 2.
Physical của máy 2 nhận được cũng đưa lên trên chuyển thành frame thấy destination MAC gửi cho mình thì xử lý nó, gỡ bỏ layer 2 header đưa lên trên, có được cặp source IP và destination IP, gỡ layer 3 header có được gói TCP SYN, khi nhận được TCP SYN thì máy 2 sẽ trả lời lại SYN ACK.
Gói TCP SYN ACK được gửi xuống lớp 3 thì đóng vào layer 3 header với cặp source IP và destination IP đảo ngược lại là 3.2 và 3.1, gửi xuống lớp 2 đóng vào layer 2 header với cặp source MAC và destination MAC, source MAC của máy 2 1111, destination MAC 2222 tương ứng máy 3.1 đã được lưu lúc nhận ARP request từ máy A và đưa xuống Physical gửi đi.
Máy 1 nhận được cũng làm tương tự, chuyển thành frame, gở bỏ các header của lớp 2, lớp 3 và nhận được gói TCP SYN ACK
Nhận được TCP SYN ACK thì phải trả lời lại ACK để biết mà kết thúc quá trình bắt tay 3 bước thiết lập kết nối trước khi truyền data. Lúc này giai đoạn 1 TCP bắt tay 3 bước thiết lập kết nối mới hoàn tất.
Giai đoạn 3: Quá trình data được gửi và nhận
Layer 4 ở máy 1 báo rằng đã thiết lập xong 1 kết nối rồi, Applicatiion hãy bắt đầu truyền data đi, Application bắt đầu đưa data của mình xuống lớp bên dưới, xuống tới Transport bọc thêm header của nó vào và giao thức lúc đầu thiết lập cho kết nối an toàn là TCP nên nó sẽ gắn TCP vào và bắt đầu đánh số thứ tự sequence number cho quá trình truyền ví dụ trường hợp này đánh sequence là 3 rồi gửi xuống lớp Network, ở đây tương tự như quá trình bắt tay 3 bước sẽ đóng layer 3 header với source IP, destination IP, xuống lớp 2 là source MAC và destination MAC rồi xuống lớp 1 rồi truyền qua máy 2.
Máy 2 nhận được chuyển thành frame, gỡ bỏ các header ở các lớp 2, 3, 4… và trả về data cho Application.
Và đương nhiên, dùng TCP thì khi máy 2 nhận được sẽ phải trả lời lại cho máy 1 biết, nên đóng gói tin ACK với sequence là 3, ACK là 4 với ý là đã nhận được gói thứ 3 rồi còn gói thứ 4 nữa không, gửi thêm gói thứ 4 đi. Nếu máy 1 không gửi dữ liệu nữa thì đến đây, giai đoạn 3 quá trình data được gửi và nhận hoàn tất.
Lúc này quá trình phân phối gói tin giữa 2 máy 1 và 2 trong mạng kết thúc.