Before traffic from VM1 can reach VM2, the DLR needs to learn VM2’s MAC address. After learning VM2's MAC address, the DLR can create the correct L2 headers for the outbound packets.

DLR ARP Process shows the DLR's ARP resolution process.

Figure 1. DLR ARP Process

To learn the MAC address, the DLR follows these steps:

  1. The DLR instance on Host A generates an ARP request packet, with SRC MAC = vMAC, and DST MAC = Broadcast. The VXLAN module on Host A finds all VTEPs on the egress VXLAN 5001, and sends each one a copy of that broadcast frame.

  2. As the frame leaves the host via the VXLAN encapsulation process, the SRC MAC is changed from vMAC to pMAC A, so that return traffic can find the originating DLR instance on Host A. Frame now is SRC MAC = pMAC A, and DST MAC = Broadcast.

  3. As the frame is received and decapsulated on Host B, it is examined and found to be sourced from the IP address that matches the local DLR instance’s LIF on VXLAN 5001. This flags the frame as abrequest to perform the proxy ARP function. The DST MAC is changed from Broadcast to vMAC so that the frame can reach the local DLR instance.

  4. The local DLR instance on Host B receives the ARP Request frame, SRC MAC = pMAC A, DST MAC = vMAC, and sees its own LIF IP address requesting this. It saves the SRC MAC, and generates a new ARP Request packet, SRC MAC = vMAC, DST MAC = Broadcast. This frame is tagged as “DVS Local” to prevent it from being flooded via the dvUplink. The DVS delivers the frame to VM2.

  5. VM2 sends an ARP Reply, SRC MAC = MAC2, DST MAC = vMAC. The DVS delivers it to the local DLR instance.

  6. The DLR instance on Host B replaces DST MAC with the pMAC A saved at from step 4, and sends the packet back to the DVS for delivery back to Host A.

  7. After the ARP Reply reaches Host A, DST MAC is changed to vMAC, and the ARP Reply frame with SRC MAC = MAC2 and DST MAC = vMAC reaches the DLR instance on Host A.

The ARP resolution process is complete, and the DLR instance on Host A can now start sending traffic to VM2.