假设我有一个 TCP 状态转换图。并假设最后一个 ACK 丢失了。然后,B 会认为 A 没有收到 FIN,会重新发送 FIN。从 B 的角度来看,这与 FIN 丢失一样,从 A 的角度来看,这是不同的,因为 A 现在处于
案例1:TIME_WAIT
或者
Case2:关闭状态。
case1 : 当 A 从 A 接收到新的 FIN 时,如果它处于 TIME_WAIT 状态,它将再次发送 ACK(理解这一点)。
case2:如果 A 处于 CLOSED 状态,它将发送一个 RESET(不明白这个),在任何一种情况下,B 都将能够关闭其一侧的连接。
A -----FIN-----> B
FIN_WAIT_1 CLOSE_WAIT
A <----ACK------ B
FIN_WAIT_2
(B can send more data here, this is half-close state)
A <----FIN------ B
TIME_WAIT LAST_ACK
A -----ACK-->X(Lost) B
TIME_WAIT LAST_ACK
|
2MSL Timer
|
CLOSED
(timeout waiting for ACK)
A <----FIN------ B
A -----RST-----> B
CLOSED
我的问题是,为什么 A 在关闭状态时发送 RST?