當用TCP/IP協議進行通信時,在發送端,send首先會將數據copy到協議的緩存區,然後協議會將數據發送到接收端,接著會等待接收端協議收到數據的ack,如果沒有收到ack,協議就會重發數據,在這一過程中send一直在等待,直到收到ack,當協議收到ack後才將協議緩存中的數據刪除,因此從協議上來說是不會丟失數據的。
但是協議沒有丟失數據並不能保證接收端應用程序就一定會處理了數據,因此,在接收端的應用層增加ack是有必要的,因為有可能因為某些原因(比如:接收端機器配置低),應層沒來得及處理數據,這也是TCP協議應用層加ack的意義所在。