At risk of inciting some inflammation I think TCP was a success because of BSD/UNIX rather than its own merits. Moving the stack into the kernel, therefore not requiring elaborate external communications controllers (like IBM's VTAM, predecessors, and other vendor networking approaches that existed since the '60s), and piggybacking on the success of UNIX and then "open systems" cemented victory. It has basically been made to work at scale, the same way gasoline engines have been made to work in automobiles.
There were protocols that fit better in the era like DeltaT with a simpler state machine and connection handling. Then there was a mad dash of protocol development in the mid to late ‘80s that were measured by various metrics to outperform TCP in practical and theoretical space. Some of these seemed quite nice like XTP and are still in use in niche defense applications.
Positive, rather than negative acknowledgement has aged well as computers got more powerful (the sender can pretty well predict loss when it hasn't gotten an ACK back and opportunistically retransmit). But RF people do weird things that violate end to end principle on cable modems and radios to try and minimize transmissions.
One thing I think that is missing in my contemporary modern software developers is a willingness to dig down and solve problems at the right level. People do clownish things like write overlay filesystems in garbage collected languages. Google's QUIC is a fine example of foolishness. I am mortified that is genuinely being considered for the HTTP 3 standard. But I guess we've entered the era where enough people have retired that the lower layers are approached with mysticism and deemed unable and unsuitable to change. So the layering will continue until eventually things topple over like the garbage pile in the movie Idiocracy.
Since the discussion meandered to the distinction of path selection/routing.. for provider level networks, label switching to this day makes a lot
more sense IMO.. figure out a path virtual circuit that can cut through
each hop with a small flow table instead of trying to coagulate, propagate routes from a massive address space that has to fit in an expensive CAM and buffer and forward packets at each hop.
Regards,
Kevin