Packet-switching networks transfer information as packets that may experience random delays and loss. There are two main approaches: connectionless datagram service which routes packets independently, and connection-oriented virtual circuits which establish paths for packets belonging to a connection. Routing determines the best paths for packets using distributed algorithms that adapt to network changes. Large packet switches use techniques like self-routing, shared memory, and crossbar switches to efficiently route high volumes of packets.