为什么 tcp 连接 会停在 close_wait 状态,而不是直接到 last_ack 状态

2018-02-09 01:23:45 +08:00
 helloworld12

为什么 tcp 连接 会停在 close_wait 状态,而不是直接到 last_ack 状态

假设客户端 A 发送 fin 给服务器 B,那么服务器 B 进入 close_wait 状态 这时候,服务器 B 发送 ack 给 客户端 A 接着服务器 B 发送 fin 给客户端 A, 服务器 B 进入 last_ack 状态

嗯? B 处在 close_wait 状态, 是因为要发送其他数据给客户端 A,等待发送完毕,才发送 Fin 给客户端 A,然后才能进入 last_ack 状态吗?

1885 次点击
所在节点    问与答
3 条回复
helloworld12
2018-02-09 01:31:59 +08:00
那问题来了

为什么 netstat 可以看到
```
tcp4 66186 0 192.168.1.4.63632 47.100.42.26.88 CLOSE_WAIT
tcp4 49856 0 192.168.1.4.64196 47.100.42.26.88 CLOSE_WAIT
```
这种数据,receive-Q 接收队列还有数据,不应该数据都接收完了,才收到 Fin 数据包,然后才进入 Close_wait 状态吗?
junwuhui
2018-02-09 02:38:50 +08:00
close_wait 是为了可以让要处理的任务处理完,所以~
tamer
2018-02-09 09:48:53 +08:00
因为是全双工,
收发数据都要保证无残留

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/429614

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX