一个新手的问题:到底是谁发送了ACK、传输层还是应用程序?我有一个带有粒子计数器的COM服务器将数据发送到我的应用程序。有时我有丢失的数据。当我检查Wireshark协议时,我发现数据包是从COM-Server发送的,但是从接收方发送的ACK失败了。我认为ACK是缺少的,因为我的程序有错误,不能正确地编辑数据。我的同事说接口(套接字)根本没有数据,不能返回ACK。谁是对的?
发布于 2016-09-12 08:33:11
TCP是一种传输层协议。ACK是TCP的一部分。因此,ACK是传输层的一部分并发送到那里。
请注意,可能有包括传输层(即用户空间TCP实现)的应用程序,在这种情况下,ACK是由应用程序发送的,但不是在应用层,而是仍然在传输层。但在大多数情况下,TCP是在内核中实现的,因此在应用程序之外。有关这些层的更多信息,请参见OSI或TCP/IP模型。
我的同事说接口(套接字)根本没有数据,不能返回ACK。谁是对的?
假设您没有使用用户空间TCP实现:当这些数据被放入应用程序的套接字缓冲区时,操作系统内核将立即对数据进行ACK。如果未能将数据包放入套接字缓冲区,即如果套接字缓冲区由于应用程序无法读取数据而已满,它将不会对数据包进行ACK操作。在这种情况下,它还将减少窗口,以便对等方不再发送数据。
https://stackoverflow.com/questions/39445965
复制相似问题