一个新手问题:谁确切地发送了ACK,传输层或应用程序?我有一个带粒子计数器的COM服务器将数据发送到我的应用程序。有时我丢失了数据。当我检查Wireshark协议时,我看到数据包是从COM-Server发送的,但是来自接收器的ACK失败。我认为ACK丢失了,因为我的程序有错误,无法正确编辑数据。我的同事说接口(套接字)根本没有数据,也无法返回ACK。谁是对的?
答案 0 :(得分:2)
TCP是传输层协议。 ACK是TCP的一部分。因此,ACK是传输层的一部分并发送到那里。
请注意,可能存在包含传输层的应用程序(即用户空间TCP实现),在这种情况下,ACK由应用程序发送,但不在应用程序层中,但仍在传输层中。但在大多数情况下,TCP在内核中实现,因此在应用程序之外。有关这些图层的详细信息,请参阅OSI or TCP/IP model。
我的同事说接口(套接字)根本没有数据,也无法返回ACK。谁是对的?
假设您没有使用用户空间TCP实现:只要将这些数据放入应用程序的套接字缓冲区,操作系统内核就会确认数据。如果无法将数据包放入套接字缓冲区,即如果套接字缓冲区已满,因为您的应用程序无法读取数据,它将不会对数据包进行确认。在这种情况下,它还会减少窗口,以便对等体不再发送数据。