Asynchronous communication works much like the postal system: An application creates a message (that's a piece of data such as the text String "Order 1000 barrels crude oil", or an XML expression), and labels the message with a destination address (that's typically the logical name of a "mail box", and not an IP address). The message is passed to the messaging middleware system.
Now the sender application proceeds happily, without needing to wait for the message to be delivered.
Synchronous communication works much like a phone call. The Receiver (callee) must be available, otherwise the conversation cannot occur.
There are many pros and cons about both models, and many details (message priorities, message persistency, forwarding and routing, etc.). I'd suggest a distributed systems book such as the ones written by Andy Tanenbaum, or by Orfali et al.
This was first published in March 2002