TCP 发送方应用程序想要发送数据,因此它使用 write() 系统调用写入套接字,然后 write() 返回。现在 socket 到 NIC 发生在内核和 nic 驱动程序的幕后,这取决于可以在线发送的数据量,同时牢记 tcp 连接的属性(拥塞窗口和所有)。
现在,在从客户端返回成功的接收通知 (TCP ACK) 之前,这些数据是否会一直保存在套接字中?
我想知道数据保留多长时间和保留位置,以便在 tcp 数据包丢失的情况下可以再次发送。
最佳答案
TCP 是一种可靠的传输方式。它自动处理重传。如果确实发生数据丢失,则连接被视为断开/丢失,并且您的代码将开始在后续套接字操作中接收错误代码,直到您关闭套接字。您无需担心使用 TCP(仅使用 UDP)手动重新传输数据。一旦数据进入内核,它就会为您处理剩下的事情。是的,数据位于内核中,直到对等方确认它,并根据需要重新传输,直到套接字在内部超时。
关于sockets - 数据在 tcp 套接字中保留多长时间和位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34771289/