There is no particular reason why three CAN ports on one ECU would always have to be separate.
An ECU doesn't usually need to receive on one port what it transmits on another, but receiving data from itself is highly unlikely to be a problem. I made some points about that here:-
https://www.electro-tech-online.com...en-j1939-extended-can-vs-j1939-can-fd.163102/
Also, any data sent on any CAN port is anyhow received by the module that sends it. There are not separate receive and transmit wires. The signal levels are monitored as the message is sent, so as to implement bus arbitration (
https://en.wikipedia.org/wiki/CAN_bus, section on data transmission), to check for errors, and to check that the frame is acknowledged, so it's normal for a module to see it's own data.
Messages on CANbus rarely have a destination address. They usually just have an ID, the 11 bit address. The are transmitted whether or not there is anything listening to them, unlike on Ethernet connections.
A single ECU would normally only be made with the number of CAN ports that are needed for the application, and multiple CANports would be needed when:-
One CANbus is loaded so much that a second is needed
Data transmitted or received by the ECU has to be on a different bus, or running at a different data rate
Some security is needed so that the CANbus on the OBD port doesn't have access to some information
and probably several other reasons.
However, ECUs often get used in different applications, where the vehicle is configured differently, or some other module changes. Vehicle manufacturers don't redesign every module for every production year for every car, so there may well be changes that mean that data that was on separate CAN busses in one car, can be on a single CANbus in another car.
There are also good reasons to connect one CANbus to more than one port on a single module, such as:-
Removing the need to reprogram or reconfigure a module that is used on multiple cars.
Providing a connection to a CANport so that transmission errors don't occour, even if the transmitted signals aren't actually needed anywhere else on the car.
Providing CANbus termination.