前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Wireshark 抓包分析 TCP,ARP 协议

Wireshark 抓包分析 TCP,ARP 协议

原创
作者头像
Java4ye
发布2024-05-21 09:11:35
1580
发布2024-05-21 09:11:35
举报
文章被收录于专栏:网络

小伙伴们好呀,今天来分享下这个网络知识。

利用 Wireshark 抓包 VMware Network Adapter VMnet8 网卡,来分析 虚拟机 上的流量。

TCP 三次握手

如图所示,打开 SSH 工具,登录到虚拟机上,要先进行这个 TCP 链接,很标准的 三次握手。

Client --- > Server : SYN Seq=0

Client < --- Server : SYN+ACK Seq=0 ACK=1

Client --- > Server : ACK Seq=1 ACK=1

有个经典的面试题,就是为啥是 3次,不是 2次,4次?

因为 TCP是全双工协议,每一方都可以独立地向另一方发送数据,双方都得发一次 SYN 请求,并分别 ACK 一次,才能建立好连接。

开头是 SYN,中间刚好是 SYN+ACK ,最后则是 ACK 。刚好就 3 次。

这个过程,Linux 内核维护了两个队列:全连接队列(established connections)和半连接队列(half-open connections)来记录。

查看全连接队列:

代码语言:javascript
复制
netstat -ant | grep ESTABLISHED

查看半连接队列:

代码语言:javascript
复制
cat /proc/net/tcp

我把第三条包复制下来👇

代码语言:javascript
复制
1   0.000000    192.168.200.1   192.168.200.128 TCP 66  53159 → 22 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 WS=256 SACK_PERM

2   0.000174    192.168.200.128 192.168.200.1   TCP 66  22 → 53159 [SYN, ACK] Seq=0 Ack=1 Win=29200 Len=0 MSS=1460 SACK_PERM WS=128

3   0.000410    192.168.200.1   192.168.200.128 TCP 54  53159 → 22 [ACK] Seq=1 Ack=1 Win=1051136 Len=0

可以发现 3 这里 Win=1051136

这里我是有点小疑惑的,TCP 窗口大小不是 16 位(65536)吗?

后来发现这个和 WS(window_scaling)窗口缩放有关。

代码语言:javascript
复制
# 开启 返回 1
sudo sysctl net.ipv4.tcp_window_scaling

它属于 TCP_OPTION 的内容,是对 TCP 协议的扩展,允许将窗口大小扩张到更大的值,解决 TCP 窗口大小的原始设计所施加的性能限制。

RFC 7323 中的 TCP 窗口缩放选项部分简要介绍了此功能。 https://tools.ietf.org/html/rfc1323#page-8

里面还有 SACK(Selective Acknowledgment , 选择性确认) ,属于 重传机制 的一个。

一个简单例子 👇

发送方:发送 A,B,C,D

接收方:应答 A,D

发送方:重发 B,C

TCP 四次分手

这里新开个 SSH 窗口,然后关掉,抓这个 TCP 的 FIN 包。

代码语言:javascript
复制
74  21.966960   192.168.200.1   192.168.200.128 TCP 54  53329 → 22 [FIN, ACK] Seq=3055 Ack=3486 Win=1050880 Len=0
75  21.967027   192.168.200.128 192.168.200.1   TCP 54  22 → 53329 [ACK] Seq=3486 Ack=2991 Win=35072 Len=0
76  21.978675   192.168.200.128 192.168.200.1   TCP 54  22 → 53329 [FIN, ACK] Seq=3486 Ack=3056 Win=35072 Len=0
77  21.978982   192.168.200.1   192.168.200.128 TCP 54  53329 → 22 [ACK] Seq=3056 Ack=3487 Win=1050880 Len=0

这里也很直观👇

Client --- > Server : FIN + ACK Seq=3055 Ack=3486

Client < --- Server : ACK Seq=3486 ACK=2991(数据未接收完,才 ACK 到 2991)

Client < --- Server : FIN + ACK Seq=3486 Ack=3056

Client --- > Server : ACK Seq=3056 Ack=3487

每个 FIN 信号,都要去 ACK 应答,一来一回,就四次了。

FIN 表示我这边发送完了,等待关闭,但是对方还在忙,只能 ACK 表示我知道了。

ARP 协议

Address Resolution Protocol (request) 。

它的触发场景如下

  1. 当知道 IP 地址,不知道 MAC 地址时,就会发送 ARP 协议(缓存表找不到的情况)
  2. 本地 ARP 缓存表缓存过期
  3. ARP 请求应答丢失
代码语言:javascript
复制
112 74.131366   VMware_c0:00:08 Broadcast   ARP 42  Who has 192.168.200.2? Tell 192.168.200.1
113 74.877192   VMware_c0:00:08 Broadcast   ARP 42  Who has 192.168.200.2? Tell 192.168.200.1

这个居然这么拟人,哈哈 “Who has”

00:00:00:00:00:00这个目标MAC地址通常被用于发送广播消息或者表示目标MAC地址未知。

Over!

结尾

本文就到这里啦,感谢您的阅读,有不对的地方也请您帮忙指正!谢谢~😋

喜欢的小伙伴们,别忘了点赞关注呀~😋 祝你有个美好的一天!😝

https://github.com/Java4ye 😆

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • TCP 三次握手
  • TCP 四次分手
  • ARP 协议
  • 结尾
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档