Bidirectional
and full-duplex
are different concepts. For example the Ethernet
is only half-duplex because at a specific time, only one host can send data over the wire, and it cannot send and receive data simultaneously.
So when we use TCP over an Ethernet, I think TCP is only bidirectional or half-duplex.
But here it says TCP is full-duplex. Why?
It is both. It is bidirectional because it can send data in both directions, and it is full-duplex because it can do that simultaneously, without requiring line turnarounds, at the API level.
Of course at a lower level it may be restricted by the available physical layer.