An EtherCAT "loop" is a connected set of slave devices, which can each connect to at most four neighboring devices. These four possible connections are called ports and are numbered 0-3. Port 0 is the "upstream" connection, which I usually describe as connecting to the slave's parent device, port 1 is usually whatever the "straight through" path would be.
If you take a bus coupler (EK1100) for example, it has:
- port 0: RJ45 socket (for Ethernet 8P8C connector) labelled "X1 In"
- port 1: EBUS-Out (for EBUS slice connections)
- port 2: RJ45 socket labelled "X2 Out"
For comparison an EBUS junction has:
- port 0: EBUS-In (for connection to upstream EBUS slices)
- port 1: EBUS-Out
- port 2: RJ45 socket labelled "X1"
- port 3: RJ45 socket labelled "X2"
And a bus extension (EK1110) has:
- port 0: EBUS-In
- port 1: RJ45 socket labelled "X1 Out"
These connections form a graph where every slave is a node having exactly one parent and at most three children. Each edge in the graph represents a bidirectional ethernet connection between two ports. Once you have built up this connected graph of slaves the auto-increment numbering scheme results from a depth first traversal of the tree, numbering each new slave with the next free number. Sub-graphs are explored along port 1, port 3, then port 2 (no clue why it's that order).
So, yes, each half duplex link is traversed only once during a packet transmission through the network, meaning that it can be viewed as a ring of half duplex links, with each slave-to-slave connection appearing on the ring in two places (once for each direction of traversal).