惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

G
Google Developers Blog
博客园 - 三生石上(FineUI控件)
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
MongoDB | Blog
MongoDB | Blog
小众软件
小众软件
Y
Y Combinator Blog
博客园 - 聂微东
Google DeepMind News
Google DeepMind News
D
Docker
罗磊的独立博客
Microsoft Security Blog
Microsoft Security Blog
D
DataBreaches.Net
B
Blog
Vercel News
Vercel News
Recent Announcements
Recent Announcements
GbyAI
GbyAI
阮一峰的网络日志
阮一峰的网络日志
T
The Blog of Author Tim Ferriss
H
Hackread – Cybersecurity News, Data Breaches, AI and More
P
Proofpoint News Feed
酷 壳 – CoolShell
酷 壳 – CoolShell
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Microsoft Azure Blog
Microsoft Azure Blog
宝玉的分享
宝玉的分享

卡瓦邦噶!

服务器高性能网络调优 | 卡瓦邦噶! 为何写作 | 卡瓦邦噶! 读《金阁寺》 | 卡瓦邦噶! 雨季又来 | 卡瓦邦噶! MTU Probe 引起的初始延迟 | 卡瓦邦噶! 3.5 秒的固定延迟问题 | 卡瓦邦噶! 学习网络的一点经验 | 卡瓦邦噶! ARP 问题诊断 | 卡瓦邦噶! 网络断断续续…… | 卡瓦邦噶! Piccolo P2P 镜像分发 | 卡瓦邦噶! 一起看电影 | 卡瓦邦噶! 《征服C指针》 | 卡瓦邦噶! 我的姥姥 | 卡瓦邦噶! Python的哲学 Python 3.5的新特性 学校不教的计算机课 垃圾回收(GC)的三种基本方式 在编程中体验纯粹的快乐 从《美丽新世界》谈自由 在快钱实习 迷人的嗓音和迷人的故事——《Sleepyhead》 Python 的十个自然语言处理工具 记一个愚蠢的bug 一年炉石传说的游戏体验 《以撒的结合:重生》网页版图鉴 分清 C++的指针、引用和数组 笑话三则 自由比皇帝更伟大——《悲惨世界》笔记 Git 10 周年访谈:Linus 讲述背后故事 用 0x3f3f3f3f 设定最大int值的优点
重新认识 TCP 的握手和挥手:答案和解析
laixintao · 2024-07-23 · via 卡瓦邦噶!

本文是重新认识 TCP 的握手和挥手一文的答案和解析。

第一题,3个。

Wireshark 选择 Statistics > 选择 TCP Tab 就可以看到 3 个会话,以及 IP 端口,一共使用的数据量,发送的速率等等。

Wireshark 的会话统计功能

第二个问题,找到这 3 个会话的握手包和挥手的包。

这个问题比较简单,借这个问题介绍一个 Wireshark 的很好用的功能:Profile。

Profile 可以让你在分析不同的网络问题或者网络协议的时候使用不同的配置,比如,我们在分析 HTTP 问题的时候,就让 Wireshark 切换到 HTTP 模式;在分析 TCP 性能的时候,就切换到「TCP 性能模式」。

Profile 可以在 Edit > Configuration Profiles… 打开,然后可以添加或者复制已有的模式。

进入 Profile 管理

我们新添加一个 TCP Profile。(也可以复制已有的)

添加一个新的 Profile

我们点击 Wireshark 右下角的 Profile: 可以切换,选择我们刚刚创建的 TCP 模式。

刚切换过来,和之前没有什么不同。我们可以在这个 Profile 下做一些配置。

在 View > Coloring Rules… 可以打开颜色配置,在这里可以修改 Packet 在 Wireshark 中显示的颜色。

颜色配置入口

我们删除其他所有的颜色,只留下 TCP 和 TCP flags 的配色。

Wireshark 颜色配置

这时候回到 Wireshark,就没有其他的颜色干扰了,我们想要的 TCP SYN 和 FIN 都展现在眼前。

刚刚的修改只会影响我们创建的 TCP 这个 Profile,如果你在刚刚右下角的位置切换回 Default, 那么 Default 的颜色配置又回来了。Profile 就是我们对不同问题分析的时候用的不同配置。

如果还觉得不够清晰,可以试试这个 Display Filter Button 功能。

点击这个 +,可以输入过滤条件。
输入 Label,Filter 和 Comment

点击 OK,在 + 右边会出现一个 SYN||FIN 的按钮。点击之后,就会直接应用我们给这个按钮绑定的过滤条件。

使用 Display Filter Button 快速过滤

这个按钮也是跟随 Profile 的,切换不同的 Profile 就可以展示不同的快速过滤按钮。适合将常用的 filter 给保存下来。

在第二题中,前两个会话是特殊构造的。

第一个会话的三次握手其实只有两个包。在TCP 延迟分析中,我们知道三次握手的第三个包发送出去之后就可以直接发送数据,不占用延迟时间,那么是否可以将数据和第三个包(实际上是一个 ACK)一起发送呢?答案是可以的,就和当前题目中给出的抓包文件一样。

在之前的博客 TCP可以使用两次握手建立连接吗?再多来点 TCP 吧:Delay ACK 和 Nagle 算法中也有讨论。

第二个会话中,四次挥手其实是三次,FIN 和 ACK 也合并了。读者如果没有注意到,可以再仔细观察下第二个 TCP 连接。

在第三个问题,如何区分 ACK 的是数据还是 FIN flag 呢?答案是:FIN flag 也是占用一个 sequence number 的。

我们可以用第三个会话来分析这个现象。在第三个会话中右键选择 Follow > TCP Stream.

过滤某一个单独的会话

就可以只显示和这个 TCP 会话有关的包了,在有很多 TCP 连接,我们只想分析其中一个的时候,非常有用。

除了 Wireshark 的包列表页面,我们还会看到一个明文的页面,这就是这个 TCP 会话中发送的所有数据。

TCP Stream 分析

我们这里想要分析的 seq number 和 ack number,所以可以在列表中展示这两列。直接在列的 header 右键可以编辑。

也可以打开一个包,在想要的字段上右键,选择 Apply as Column,就可以直接把这个字段放到列里面。

Apply as Column

同理,也把 ack number 放到 Column 里面。

找到一个 FIN 的包,就可以清楚的看到这个 length 为 0 的 FIN 包页增加了一个 seq number。

在 TCP 协议里面是这么说的。

A control bit (finis) occupying one sequence number, which indicates that the sender will send no more data or control occupying sequence space.

RFC 793

总结一下,今天学习到的 Wireshark 技巧真多呢:

  • Wireshark 的会话统计功能
  • 配置 Profile 和颜色
  • 配置 Profile 的快速过滤按钮
  • 过滤单独的 TCP 会话
  • 将想看的字段展示在 Column 上面

==抓包破案录==

这篇文章是抓包破案录系列文章(之前叫做《计算机网络实用技术》,后来改名了)中的一篇,这个系列正在连载中,我计划用这个系列的文章来分享一些网络抓包分析的实用技术。这些文章都是总结了我的工作经历中遇到的问题,经过精心构造和编写,每个文件附带抓包文件,通过实战来学习网络抓包与分析。

如果本文对您有帮助,欢迎扫博客右侧二维码打赏支持,正是订阅者的支持,让我公开写这个系列成为可能,感谢!

如果您正在阅读的是题目类的文章,这个目录内容正好用来隔离其他读者的评论。读完题目可以稍作暂停,进行思考,继续向下滑动,可能会被其他的读者剧透答案。

没有链接的目录还没有写完,敬请期待……

  1. 序章
  2. 抓包技术以及技巧
  3. 理解网络的分层模型
  4. 数据是如何路由的
  5. 网络问题排查的思路和技巧
  6. 不可以用路由器?答案和解析
  7. 网工闯了什么祸?答案和解析阅读加餐!
  8. 重新认识 TCP 的握手和挥手答案和解析
  9. 3.5 秒初始延迟问题答案和解析
  10. 网络断断续续……答案和解析
  11. 延迟增加了多少?答案和解析
  12. 压测的时候 QPS 为什么上不去?答案和解析
  13. TCP 下载速度为什么这么慢?答案和解析
  14. 请求为什么超时了?答案和解析
  15. 0.01% 的概率超时问题答案和解析
  16. 后记:学习网络的一点经验分享
与本博客的其他页面不同,本页面使用 署名-非商业性使用-禁止演绎 4.0 国际 协议。