我刚刚查看RFC1337有关TIME_WAIT暗杀事件,这是其中的一部分。
图1显示了TIME-WAIT暗杀的一个例子。细分1-5
的TIME-WAIT状态
完全从RFC-793的图13中复制,显示正常关闭
握手。数据包5.1,5.2和5.3是本文的扩展 序列,说明TWA。这里5.1是任何旧段 技术合作计划A是不可接受的。因为它可能是不可接受的 序列号或旧PAWS时间戳。在任一情况下, TCP A为其当前的SND.NXT和RCV.NXT发送ACK段5.2 由于它没有此连接的状态,因此TCP B将其反映为RST 第5.3段,暗杀了A!**
RFC 1337 TCP TIME-WAIT Hazards May 1992 TCP A TCP B 1. ESTABLISHED ESTABLISHED (Close) 2. FIN-WAIT-1 --> <SEQ=100><ACK=300><CTL=FIN,ACK> --> CLOSE-WAIT 3. FIN-WAIT-2 <-- <SEQ=300><ACK=101><CTL=ACK> <-- CLOSE-WAIT (Close) 4. TIME-WAIT <-- <SEQ=300><ACK=101><CTL=FIN,ACK> <-- LAST-ACK 5. TIME-WAIT --> <SEQ=101><ACK=301><CTL=ACK> --> CLOSED - - - - - - - - - - - - - - - - - - - - - - - - - - - - 5.1. TIME-WAIT <-- <SEQ=255><ACK=33> ... old duplicate 5.2 TIME-WAIT --> <SEQ=101><ACK=301><CTL=ACK> --> ???? 5.3 CLOSED <-- <SEQ=301><CTL=RST> <-- ???? (prematurely) **
现在,让我感到困惑的是,在TCP / IP Illustrated第1卷中,它所说的是:
任何延迟的段在到达时都会到达 2MSL等待被丢弃。
那么,为什么RFC 1337的图1中的TCP A会确认旧的重复段?
答案 0 :(得分:2)
RFC 793在“重置生成”中指出:
- 如果连接处于同步状态(ESTABLISHED, FIN-WAIT-1,FIN-WAIT-2,CLOSE-WAIT,CLOSING,LAST-ACK,TIME-WAIT), 任何不可接受的段(窗口序列号或 不易察觉的确认号码)必须只引出一个空的 包含当前发送序列号的确认段 以及表示预期的下一个序列号的确认 接收,并且连接保持相同状态。
醇>