Commercial routers currently use different commutation methods. It means that when a new packet arrives to the input port of the router, the way this packet is sent to the output port can vary. Normally this is done by Store-and-Forward or Cut-Through routing. While Store-and-Forward receives the packet, saves it in a buffer and then processes it (checking the packet integrity and destination to know by which output port the packet has to be sent), Cut-Through simply reads the destination address without storing it, sending it directly to the correct output port.
However, Spacewire routing switches don’t use Store-and-Forward neither Cut-through, but Wormhole routing. Wormhole has the same behavior as Cut-through in absence of congestion, therefore, it doesn’t store anything, it sends the frame directly by the right port (after reading the packet destination). As you can imagine this technique is much quicker than Store-and-Forward and also requires less memory as we don’t store any packet. Thus, Wormhole uses fast switching, absolutely necessary for real-time networks like Spacewire.
However, in case of congestion our scenario become less idyllic, slower, and as a consequence we face the Wormhole main problem, the “Packet Blocking”, as shown in the image below. To understand a bit better what is happening in “Packet Blocking” we will explain it in detail. First of all, we send a big packet from Node 1 to Node 5 (blue), and then another one from Node 2 to Node 5 (red). While the blue packet is being sent, the red one blocks at the output port of Router 2 (we cannot send two packets at the same time by the same output port) waiting until the blue finish. In this case because of the big size of the packet also the port 4 and 5 from the router 1 are being blocked by the red and blue packet respectively. So, when a new yellow packet wants to be sent by the output port 4 of Router 1, also stays blocked, and it will wait until red finish to be transmitted.
Packet Blocking problem (Credit: STAR-Dundee)
As we have seen from the example, one packet being blocked can have important repercussions in the network, affecting several packets at the same time and not only the one initially blocked as we could wrongly think. Several strategies exist to decrease this phenomenon (send smaller packets, make sure that the destination is ready,…) but unfortunately for us, it doesn’t exist a perfect one.
To sum up, Wormhole Routing is being used for switching by SpaceWire Routers but as all the rest methods is not perfect and could also sometimes present some undesired behaviors.