What is asymmetric routing?

Asymmetric routing is when a packet takes one path to the destination and takes another path when returning to the source. For example, review the following diagram.

Packets from A to B take one route and packets from B to A take another route. This is not a problem for regular TCP connections because TCP does not care what route a packets takes it just cares whether or not the packets make it from source to destination.
Asymmetric routing is common problem within most networks; the larger the network, the more likely there is asymmetric routing in the network.
Asymmetric routing is an undesirable situation for many network devices including, firewalls, VPNs and Caching devices or Proxy devices. These devices all rely on seeing every packet to function properly.