A datagram is a self-contained packet of computer-readable information that uses the more common means of packet switching in networks of many interconnected media: routing, as opposed to virtual circuit packet switching. Datagram routing allow new paths to be decided on a per-packet basis, although this rarely happens. Virtual circuits either need predefined failover mechanisms, as in Multi-Protocol Label Switching, or, like a telephone call, the virtual circuit must be created again and reserve resources before the conversation can continue.
Minimally, a datagram has source and destination addresses. The destination address is the basis of the router's forwarding decision, but the source address is needed so a router or host can send error messages back to the originator of the datagram. One of the differences between datagrams and virtual circuits is that with datagrams, the scope of addresses is global to the entire routing environment, while data units in a virtual circuit system (e.g., MPLS or frame relay) are usually of link-local scope. Virtual circuit addresses nay gave been created as a short representation of establishing a virtual call (e.g., the Q.2931 protocol for Asynchronous Transfer Mode), or as part of setting up non-dynamic links in frame relay.