TCP/IP确认发送方:传输层还是应用程序?

TCP/IP确认发送方:传输层还是应用程序?,tcp,layer,transport,Tcp,Layer,Transport,一个新手问题:到底是谁发送ACK、传输层还是应用程序?我有一个带有粒子计数器的COM服务器,可以将数据发送到我的应用程序。有时我会丢失数据。当我检查Wireshark协议时,我看到数据包是从COM服务器发送的,但接收端的ACK失败。我认为ACK丢失是因为我的程序有错误,无法正确编辑数据。我的同事说,接口(套接字)根本没有数据,无法返回ACK。谁是对的?TCP是一种传输层协议。ACK是TCP的一部分。因此,ACK是传输层的一部分并发送到那里 请注意,可能存在包括传输层(即用户空间TCP实现)的应用

一个新手问题:到底是谁发送ACK、传输层还是应用程序?我有一个带有粒子计数器的COM服务器,可以将数据发送到我的应用程序。有时我会丢失数据。当我检查Wireshark协议时,我看到数据包是从COM服务器发送的,但接收端的ACK失败。我认为ACK丢失是因为我的程序有错误,无法正确编辑数据。我的同事说,接口(套接字)根本没有数据,无法返回ACK。谁是对的?

TCP是一种传输层协议。ACK是TCP的一部分。因此,ACK是传输层的一部分并发送到那里

请注意,可能存在包括传输层(即用户空间TCP实现)的应用程序,在这种情况下,ACK由应用程序发送,但不在应用程序层,而是仍在传输层。但在大多数情况下,TCP是在内核中实现的,因此在应用程序之外。有关这些层的详细信息,请参见

我的同事说,接口(套接字)根本没有数据,无法返回ACK。谁是对的


假设您没有使用用户空间TCP实现:一旦这些数据被放入应用程序的套接字缓冲区,OS内核就会确认这些数据。如果无法将数据包放入套接字缓冲区,即如果由于应用程序无法读取数据而导致套接字缓冲区已满,则不会确认数据包。在这种情况下,它还将减少窗口,以便对等方不再发送数据。

TCP是一种传输层协议。ACK是TCP的一部分。因此,ACK是传输层的一部分并发送到那里

请注意,可能存在包括传输层(即用户空间TCP实现)的应用程序,在这种情况下,ACK由应用程序发送,但不在应用程序层,而是仍在传输层。但在大多数情况下,TCP是在内核中实现的,因此在应用程序之外。有关这些层的详细信息,请参见

我的同事说,接口(套接字)根本没有数据,无法返回ACK。谁是对的


假设您没有使用用户空间TCP实现:一旦这些数据被放入应用程序的套接字缓冲区,OS内核就会确认这些数据。如果无法将数据包放入套接字缓冲区,即如果由于应用程序无法读取数据而导致套接字缓冲区已满,则不会确认数据包。在这种情况下,它还将减少窗口,以便对等方不再发送数据。

您应该参考TCP参考模型。OSI模型已经失效,并且没有参考现实世界中的任何东西,更不用说TCP了,它的参考模型在时间上早于它。你应该参考TCP参考模型。OSI模型已经失效,它没有引用现实世界中的任何东西,更不用说TCP了,TCP的引用模型在时间上先于OSI模型。