Bitcoin uses a gossip protocol to transmit blocks and transactions. When you connect to the Bitcoin network, your wallet becomes a node on that network. It maintains one or more connections to other nodes. When you send a transaction, you send it to all of the nodes that you are connected to. Then they check the transaction against their node policy rules (which also typically include consensus rules). If it passes all of the checks, the node will store it locally and then broadcast the transaction to all of the nodes it is connected to. And so on and so forth until all nodes have heard the transaction.
The same happens with blocks except that they are only verified against the consensus rules, there are no local policy rules for blocks.
There are things done to prevent nodes from receiving the same transaction multiple times. Most nodes, when broadcasting a transaction, actually first announce to all of the nodes it is connected to that it has a transaction. Then those nodes must ask for that transaction before it is actually transmitted. This way nodes won't receive a transaction multiple times since they are asking for the transaction, not actually being sent it right away.