【发布时间】:2019-01-13 06:35:00
【问题描述】:
为了说明 TCP 自连接示例
nc -p 9987 127.0.0.1 9987
tcpdump捕获连接建立
17:52:33.980137 IP 127.0.0.1.9987 > 127.0.0.1.9987: Flags [S], seq 4215993872, win 43690, options [mss 65495,sackOK,TS val 10050427 ecr 0,nop,wscale 7], length 0
17:52:33.980162 IP 127.0.0.1.9987 > 127.0.0.1.9987: Flags [S.], seq 4215993872, ack 4215993873, win 43690, options [mss 65495,sackOK,TS val 10050427 ecr 10050427,nop,wscale 7], length 0
17:52:33.980174 IP 127.0.0.1.9987 > 127.0.0.1.9987: Flags [.], ack 1, win 342, options [nop,nop,TS val 10050427 ecr 10050427], length 0
和正常的TCP建立一样,但是dst addr和src addr是一样的。
回想一下 TCP 同时打开 [ref: TCP/IP Illustrated, Volume 1, Figure 18.17 and Figure 18.18]
接下来,回忆一下TCP状态转移图
对于自连接的情况,TCP状态转换应该是:
- 向目标发送SYN,CLOSE -> SYN_SENT
- 接收 SYN(来自自己),发送 SYN+ACK 到 dst,SYN_SENT -> SYN_RECD
- 接收 SYN+ACK(来自自己),SYN_RECD -> ESTABLISHED
问题 1
自连接和同时打开的过程完全不同(由 tcpdump 显示)。有什么我错过的吗?
问题 2
接收 SYN+ACK(来自自己),SYN_RECD -> ESTABLISHED
TCP 状态转换图中未显示此转换。怎么解释?
【问题讨论】:
标签: networking tcp tcpdump