当用TCP/IP协议进行通信时,在发送端,send首先会将数据copy到协议的缓存区,然后协议会将数据发送到接收端,接着会等待接收端协议收到数据的ack,如果没有收到ack,协议就会重发数据,在这一过程中send一直在等待,直到收到ack,当协议收到ack后才将协议缓存中的数据删除,因此从协议上来说是不会丢失数据的。
但是协议没有丢失数据并不能保证接收端应用程序就一定会处理了数据,因此,在接收端的应用层增加ack是有必要的,因为有可能因为某些原因(比如:接收端机器配置低),应层没来得及处理数据,这也是TCP协议应用层加ack的意义所在。
更多技术文章请参看施昌权的个人网站: http://www.joyvc.cn