In my example, Netscape was assigned two ports, but the Web serveron bigserver.debian.org explicitly asked to use port 80. Usually there are only 3975 ports used for automatic assignment, numbered 1024 to 4999. Though they're sent in the right order, IP packets may arrive at their destination all jumbled up. To keep track of things, each TCP header has a sequence number, which increases for every data byte sent. So a packet with sequence number 1000000 comes before a packet with sequence number 1000200.
Reliability means knowing when something has failed.
If no acknowledgement is received, TCP assumes that the packet has been lost and retransmits it. In the modern Internet, connections range from 960 bytes per second up to over 200,000,000 bytes per second. TCP uses some interesting algorithms to avoid congestion while providing reasonable data flow. The basic assumption behind these algorithms is that packet loss is usually caused by congestion, not by corruption, and that the fewer packets you can send, the better.