SOA is an approach to software design based on modularizing business logic and functions as loosely coupled services. An ESB is a distributed infrastructure that provides foundational services like message routing and transformation to enable complex architectures. While an ESB does not implement an SOA itself, it provides key features to build an SOA. ESBs should be standards-based and flexible to support different transport mediums.