TCP连接后没有读取的字节流是暂存在客户端还是服务端?
发布时间:
2023-08-25 12:29
阅读量:
17
在TCP接收端的buffer满之前,缓存在接收端。
TCP接收端buffer满(TCP未ACK)之后,缓存在发送端。
发送端buffer满了,阻塞发送端发送接口调用。
非阻塞模式下,发送接口返回错误码。
若后续,接收端读取了一部分数据,接收端TCP协议栈发送ACK,发送端将发送buffer一部分数据发送给接收端。发送端buffer腾挪出这部分空间,发送端继续从应用层搬运一部分数据到TCP协议栈发送buffer,应用发送接口返回,返回值为搬运大小。若应用层使用多路复用(select/poll/epoll/kqueue/iocp),再发送buffer非满时,将产生fd可写信号。
TCP在交互过程中,会根据上下行网络情况,不断地更新自身滑动窗口,并通知对方。发送端在发送了等于接收端滑动窗口大小的数据后,需要等待接收方ACK,期间按照算法时间重传。在收到接收方ACK以后,发送方才从发送buffer中删除这段数据。
END