当FIN是recv时系统会做什么,而套接字发送缓冲区中还有数据?

时间:2016-04-28 08:59:32

标签: linux sockets tcp

目前我遇到了一个奇怪的问题。

所以我想知道将会发生什么。

说有TCP连接,套接字发送缓冲区有10个字节的数据,然后FIN是recv,哪些数据包会被回复?

一个。一个包含10个字节数据的ACK

B中。没有字节的ACK和另一个10字节的ACK

℃。以上任何一个

2 个答案:

答案 0 :(得分:0)

FIN仅表示对方不再发送数据。这并不意味着它不会接受更多数据,因此本地系统不会关闭连接。这意味着对FIN的ACK将反映连接的当前状态:如果可以发送数据(取决于窗口),本地系统通常会(*)发送包含数据的数据包和FIN的ACK。如果数据无法立即发送,则只会确认FIN,并可能稍后发送数据。

(*)请注意,理论上它可以在两个数据包中进行发送,但TCP堆栈通常会在可能的情况下组合数据和ACK,以便发送更少的数据包。

答案 1 :(得分:0)

  

目前我遇到了一个奇怪的问题。

我建议您发布实际的奇怪问题,而不是猜测它。

  

一个。一个包含10个字节数据的ACK

10个字节的数据?为什么ACK会回显10个字节的接收数据?

  

B中。没有字节的ACK和另一个10字节的ACK

这也没有意义。

  

℃。以上任何一个

这也不是。

收到FIN时,应通过ACK数据包确认。当FIN终止此方向的连接时,当前在套接字接收缓冲区中的数据量是无关紧要的。

相关问题