wireshark 抓到的四次挥手 怎么感觉不大一样呢?

2021-03-03 22:50:11 +08:00
 amiwrong123

如上这个 ip ( 39.156.66.14 )是百度的 ip,我在浏览器键入这个 ip 后,关闭了这个网页。

  1. 为啥没有看到客户端先发 FIN 呢,反而是服务器先发[FIN,ACK]呢?
  2. 之后才看到客户端连发了 6 次[FIN,ACK]?
  3. 客户端从来没有发过 FIN 呢?
  4. 从上示意图来看,服务器发的 FIN 和 ACK 都是分开的呀?

看完这个挥手过程完全懵了,大佬们求解答?

1796 次点击
所在节点    程序员
16 条回复
divilkcvf
2021-03-03 23:03:23 +08:00
图看不到,但是一般来说 http 请求不会保持长连接,即 html 以及相关的 js 下载完就由服务端关闭了,不用等到关闭页面

多次 FIN 是因为不只有一个 tcp 连接,每一张图片都是单独的 http 同时请求的。
amiwrong123
2021-03-03 23:06:31 +08:00
@divilkcvf #1
等一下哈,大佬,我发现这个图床有问题。。路过图床又不好使了。你们都用的什么图床啊~
amiwrong123
2021-03-03 23:16:17 +08:00
wakzz
2021-03-04 09:24:20 +08:00
楼主这个图是 6 个 tcp 的挥手过程,只看 7719 端口的话,实际上是 3 次挥手,符合标准协议没问题。
diaryevil
2021-03-04 09:55:28 +08:00
1. 建议加个端口的过滤式,百度的 IP 对应了不止一个端口,说明不止一个连接
2. 服务端先发 FIN 也很常见,双方都可以关闭连接
daimiaopeng
2021-03-04 10:10:32 +08:00
有的没有四次,只有三次,二三次和在一起发。
amiwrong123
2021-03-04 20:53:40 +08:00
@wakzz #4
我看是 4 次啊:
先是服务器先发 FIN,对方回复 ACK
然后客户端再发 FIN,对方回复 ACK
amiwrong123
2021-03-04 20:55:37 +08:00
@diaryevil #5
加个端口过滤是个好主意哈。

但是是我主动关闭了网页,才发现挥手过程的呀。这不应该客户端先发 FIN 嘛,我懵了
amiwrong123
2021-03-04 20:56:32 +08:00
@daimiaopeng #6
你的意思是,像握手过程一样,把二三次进行了合并(因为本质上来说,是四次握手,只不过进行了合并)
amiwrong123
2021-03-04 21:14:10 +08:00
手动 at 大佬 @qakito
daimiaopeng
2021-03-05 09:05:18 +08:00
@amiwrong123 对,具体 google 上有,我之前抓的 linux nc 命令的包就这样
daimiaopeng
2021-03-05 09:07:05 +08:00
wakzz
2021-03-05 09:07:58 +08:00
@amiwrong123
建议对端口做个过滤,例如看 7719 端口,一共就三个包
443 -> 7719 [FIN, ACK]
7719 -> 443 [FIN, ACK]
443 -> 7719 [ACK]
------------------------
TCP 挥手标准情况为 4 次挥手,如下
A -> B [FIN]
B-> A [ACK]
B -> A [FIN]
A -> B [ACK]
但是当服务端与客户端之间没有数据延迟(大多数发生在闲置 TCP 连接上),为了更快地交互而把第二步和第三步合并,从而把 4 次挥手缩短成了 3 次挥手,也就是楼主图片这种情况。
daimiaopeng
2021-03-05 09:09:18 +08:00
@amiwrong123 还有一个忘记说了,https 和 http 连接不一样,https 步数更多
diaryevil
2021-03-05 10:17:00 +08:00
@amiwrong123 我测试了下,百度的 keepalive 客户端不发送数据的话保持 90s,90s 不发送任何实际数据的话百度会自动断开连接。我在访问后的 8s 关闭了浏览器,是由客户端主动发起的 FIN
diaryevil
2021-03-05 10:17:30 +08:00

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

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

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

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

© 2021 V2EX