My understanding is that I2C lines use pull-up resistors to passively pull up the bus to logic high because the drivers used on the bus are active drivers, namely open collector/open-drain. Since open collector/open-drain drivers can drive the line low but not high, the issue of bus contention is mitigated.
My question is however, why does the I2C protocol use these drivers as opposed to tri-state drivers? If you have multiple tri-state output drivers connected to the same bus, as long as the enable signals for the tri-states are mutually exclusive, shouldn't we be able to take care of bus contention and also achieve faster rise times in comparison to open-collector/open-drain topologies?