sockets - 数据在 tcp 套接字中保留多长时间和位置

标签 sockets kernel tcp

TCP 发送方应用程序想要发送数据,因此它使用 write() 系统调用写入套接字,然后 write() 返回。现在 socket 到 NIC 发生在内核和 nic 驱动程序的幕后,这取决于可以在线发送的数据量,同时牢记 tcp 连接的属性(拥塞窗口和所有)。

现在,在从客户端返回成功的接收通知 (TCP ACK) 之前,这些数据是否会一直保存在套接字中?

我想知道数据保留多长时间和保留位置,以便在 tcp 数据包丢失的情况下可以再次发送。

最佳答案

TCP 是一种可靠的传输方式。它自动处理重传。如果确实发生数据丢失,则连接被视为断开/丢失,并且您的代码将开始在后续套接字操作中接收错误代码,直到您关闭套接字。您无需担心使用 TCP(仅使用 UDP)手动重新传输数据。一旦数据进入内核,它就会为您处理剩下的事情。是的,数据位于内核中,直到对等方确认它,并根据需要重新传输,直到套接字在内部超时。

关于sockets - 数据在 tcp 套接字中保留多长时间和位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34771289/

相关文章:

c# - 停止线程后,可以用变量取消监听操作吗?

C套接字重定向

使用线程的并发 TCP 服务器

apache - TIME_WAIT 连接过多

.net - Socket.SendAsync 未检测到无效的 TCP 连接

linux - Linux 中的同时套接字读/写 ("full-duplex")(特别是 aio)

linux - 如何检查进程是否仍在 c 中的内核中运行?

kernel - 纳米内核和外内核有什么区别?

c - TCP 套接字 : Can read() still fail with EINTR when select() indicates there are data available?

image - 通过socket.recv()在python中通过tcp/ip接收损坏的图像