我有一些关于TCP协议的基本问题。
:Machine_A调用send(sockfd)将数据发送到Machine_B,send()调用成功。
问题:当send()调用返回时,是否意味着数据已经到达Machine_B?或者它刚刚被操作系统接受了?
:Machine_A调用发送(Sockfd)发送数据到Machine_B,但是application_B on Machine_B没有足够快地从套接字读取数据。Application_A正在编写10 1KB/s,而Application_B仅为1KB/秒。
问题:
在这种情况下,发送()调用什么时候在Machine_A上成功?在数据提交到OS_A on Machine_A时,它是成功的还是等到收到OS_B的确认时才成功?
确认之前提取数据包?
发布于 2020-03-27 05:01:50
send只关心将数据放入本地套接字缓冲区,即不会等待接收方计算机的ACK,甚至不会等到收件人应用程序处理数据(甚至更晚)。如果您需要这类信息,则需要一些应用程序级别的确认。此外,虽然ACK是通过TCP发送的,但无论如何也不会由其他协议(如UDP )发送。
send只有在不能将数据放入套接字缓冲区时才会失败,这可能是因为没有套接字缓冲区(套接字已关闭),或者因为套接字缓冲区已经满了,但send称为非阻塞缓冲区。如果套接字缓冲区已满,而send被称为阻塞,则它只会阻塞,直到套接字缓冲区中再次有空间为止。
https://stackoverflow.com/questions/60878688
复制相似问题