目前我遇到了一个奇怪的问题。
所以我想知道将会发生什么。
说有TCP连接,套接字发送缓冲区有10个字节的数据,然后FIN是recv,哪些数据包会被回复?
一个。一个包含10个字节数据的ACK
B中。没有字节的ACK和另一个10字节的ACK
℃。以上任何一个
答案 0 :(得分:0)
FIN仅表示对方不再发送数据。这并不意味着它不会接受更多数据,因此本地系统不会关闭连接。这意味着对FIN的ACK将反映连接的当前状态:如果可以发送数据(取决于窗口),本地系统通常会(*)发送包含数据的数据包和FIN的ACK。如果数据无法立即发送,则只会确认FIN,并可能稍后发送数据。
(*)请注意,理论上它可以在两个数据包中进行发送,但TCP堆栈通常会在可能的情况下组合数据和ACK,以便发送更少的数据包。
答案 1 :(得分:0)
目前我遇到了一个奇怪的问题。
我建议您发布实际的奇怪问题,而不是猜测它。
一个。一个包含10个字节数据的ACK
10个字节的数据?为什么ACK会回显10个字节的接收数据?
B中。没有字节的ACK和另一个10字节的ACK
这也没有意义。
℃。以上任何一个
这也不是。
收到FIN时,应通过ACK数据包确认。当FIN终止此方向的连接时,当前在套接字接收缓冲区中的数据量是无关紧要的。