I've been reading more about TCP and found out that since multiple flags can be set at once, basically every packet after the initial SYN has the ACK flag set, and serves as an acknowledgment of all the packets up to that point.
That sounds like a great and efficient idea! But wait, then why do I usually see individual ACK packets sent in TCP conversations? In fact, I often see an individual ACK sent, then immediately afterward the same machine sends out a data packet that also has ACK set, with the same acknowledgment number! The lone ACK and the data packet seem to be serving the same purpose!
What's the reason for sending ACK packets separately from the data? Are they more likely to get through network congestion faster or something?