A Data Access Object abstracts and encapsulates logic needed to access a given data source, such as a relational database, and performs these data access operation on behalf of a business object. See
CoreJ2EE Patterns - Data Access Object for more details.
A (Data) Transfer Object is basically a (serializable) data container that encapsulates the (partial) state of a business object. So, a DAO may use a DTO to transfer the persistent state of a business object to and from a particular data source. See
CoreJ2EE Patterns - Transfer Object for more details.
Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.