TCP三次握手和四次挥手包抓包及分析
学校实验 NCEPU
未经授权,禁止转载!

使用软件及环境

  1. Wireshark
  2. 连接上互联网
  3. 浏览器

实验过程

实验前准备

安装好抓包软件,测试好本地网络连接是否正常,打开Wireshark开始抓包

完成实验操作

使用浏览器直接浏览网页https://mcenjoy.cn,待网页加载完成后停止抓包,接着可以将抓到的包进行保存。

分析三次握手过程

过滤掉其他无用包 介绍一些参数

过滤参数 tcp && tcp.port == 443 && ip.addr == 193.200.134.40 && tcp.port == 1271 将无用的包过滤掉

字段 含义
URG 紧急指针是否有效。为1,表示某一位需要被优先处理
ACK 确认号是否有效,一般置为1。
PSH 提示接收端应用程序立即从TCP缓冲区把数据读走。
RST 对方要求重新建立连接,复位。
SYN 请求建立连接,并在其序列号的字段进行序列号的初始值设定。建立连接,设置为1
FIN 希望断开连接。

Client -> Server

0000   00 74 9c dd e6 c1 80 fa 5b 6b f8 0e 08 00 45 00
0010   00 34 fd 07 40 00 80 06 00 00 0a 02 5a 37 c1 c8
0020   86 28 04 f7 01 bb 70 c2 3f 0c 00 00 00 00 80 02
0030   fa f0 ac 50 00 00 02 04 05 b4 01 03 03 08 01 01
0040   04 02
第一次请求Client->Server
[SYN]
TCP包头
0020   ** ** 04 f7 01 bb 70 c2 3f 0c 00 00 00 00 80 02
0030   fa f0 ac 50 00 00 02 04 05 b4 01 03 03 08 01 01
0040   04 02
数据 含义
04 f7 源端口 1271
01 bb 目的端口 443
70 c2 3f 0c 32位序号 1891778316
00 00 00 00 32位确认序号 0
80 02 1000 0000 0000 0010
1000 TCP头部长度 8
0000 00 保留
URG 0
ACK 0
PSH 0
RST 0
SYN 1
FIN 0
fa f0 窗口大小 64240
ac 50 校验和 0xac50
00 00 紧急指针 0x0000

Server -> Client

0000   80 fa 5b 6b f8 0e 00 74 9c dd e6 c1 08 00 45 04
0010   00 34 00 00 40 00 29 06 a5 96 c1 c8 86 28 0a 02
0020   5a 37 01 bb 04 f7 11 b2 bc 9a 70 c2 3f 0d 80 12
0030   fa f0 43 18 00 00 02 04 05 b4 01 01 04 02 01 03
0040   03 07
来自服务器的回复Server->Client
[SYN,ACK] 此时由 Client -> Server 的通道已经打通
TCP包头
0020   ** ** 01 bb 04 f7 11 b2 bc 9a 70 c2 3f 0d 80 12
0030   fa f0 43 18 00 00 02 04 05 b4 01 01 04 02 01 03
0040   03 07
数据 含义
01 bb 源端口 443
04 f7 目的端口 443
11 b2 bc 9a 32位序号 296926362
70 c2 3f 0d 32位确认序号 1891778317
80 12 1000 0000 0001 0010
1000 TCP头部长度 8
0000 00 保留
URG 0
ACK 1
PSH 0
RST 0
SYN 1
FIN 0
fa f0 窗口大小 64240
43 18 校验和 0x4318
00 00 紧急指针 0x0000

Client -> Server

0000   00 74 9c dd e6 c1 80 fa 5b 6b f8 0e 08 00 45 00
0010   00 28 fd 0a 40 00 80 06 00 00 0a 02 5a 37 c1 c8
0020   86 28 04 f7 01 bb 70 c2 3f 0d 11 b2 bc 9b 50 10
0030   04 02 ac 44 00 00
来自客户端的回复Client->Server
[ACK] 此时由 Server -> Client 的通道已经打通,此时 TCP三次握手 已经完成接下来就可以进行数据的传输了,由于网站使用的是tls1.3(https)的协议后面就不进行详细分析了
TCP包头
0020   ** ** 04 f7 01 bb 70 c2 3f 0d 11 b2 bc 9b 50 10
0030   04 02 ac 44 00 00
数据 含义
04 f7 源端口 1271
01 bb 目的端口 443
70 c2 3f 0d 32位序号 1891778317
11 b2 bc 9b 32位确认序号 296926363
50 10 0101 0000 0001 0000
0101 TCP头部长度 5
0000 00 保留
URG 0
ACK 1
PSH 0
RST 0
SYN 0
FIN 0
04 02 窗口大小 1026
ac 44 校验和 0xac44
00 00 紧急指针 0x0000

上面通讯如下图所示

分析四次挥手包

遇到的问题


我在抓四次挥手包时发现自己只能抓到3次😫,很奇怪。经过查询资料后得知在如果对方收到本端FIN报文时,对方的接收通道就会关闭。此时,如果对方也没有数据发给本端,那么对方也会发送FIN给本端,用于关闭从对方到本端的连接,这时候就可能出现ACK和FIN合在一起的情况。当然,如果对方仍然有数据发送,那么就等数据发完,再发FIN来关闭连接,这时候就是四次挥手了。因此,四次挥手变成三次。

Client -> Server

0000   00 74 9c dd e6 c1 80 fa 5b 6b f8 0e 08 00 45 00
0010   00 28 3f 3c 40 00 80 06 00 00 0a 02 5a 37 c1 c8
0020   86 28 44 92 01 bb 25 55 d2 86 6b db ec 11 50 11
0030   04 00 ac 44 00 00
第一次请求Client->Server
[ACK FIN]向服务器请求关闭服务器的接收通道
TCP包头
0020   ** ** 44 92 01 bb 25 55 d2 86 6b db ec 11 50 11
0030   04 00 ac 44 00 00
数据 含义
44 92 源端口 17554
01 bb 目的端口 443
25 55 d2 86 32位序号 626381446
6b db ec 11 32位确认序号 1809574929
50 11 0101 0000 0001 0001
0101 TCP头部长度 5
0000 00 保留
URG 0
ACK 1
PSH 0
RST 0
SYN 0
FIN 1
04 00 窗口大小 1024
ac 44 校验和 0xac44
00 00 紧急指针 0x0000

Server -> Client

0000   80 fa 5b 6b f8 0e 00 74 9c dd e6 c1 08 00 45 04
0010   00 28 13 aa 40 00 2a 06 90 f8 c1 c8 86 28 0a 02
0020   5a 37 01 bb 44 92 6b db ec 11 25 55 d2 86 50 10
0030   01 f5 6b 9f 00 00 00 00 00 00 00 00
Server->Client
[ACK]此时服务器已经关闭了自己的接收通道
TCP包头
0020   ** ** 01 bb 44 92 6b db ec 11 25 55 d2 86 50 10
0030   01 f5 6b 9f 00 00 00 00 00 00 00 00
数据 含义
01 bb 源端口 443
44 92 目的端口 17554
6b db ec 11 32位序号 1809574929
25 55 d2 86 32位确认序号 626381446
50 10 0101 0000 0001 0000
0101 TCP头部长度 5
0000 00 保留
URG 0
ACK 1
PSH 0
RST 0
SYN 0
FIN 0
01 f5 窗口大小 501
6b 9f 校验和 0x6b9f
00 00 紧急指针 0x0000

Server -> Client

0000   80 fa 5b 6b f8 0e 00 74 9c dd e6 c1 08 00 45 04
0010   00 28 13 ab 40 00 2a 06 90 f7 c1 c8 86 28 0a 02
0020   5a 37 01 bb 44 92 6b db ec 11 25 55 d2 86 50 11
0030   01 f5 6b 9e 00 00 00 00 00 00 00 00
Server->Client
[ACK FIN]服务器向客户端请求关闭客户端的接收通道
TCP包头
0020   ** ** 01 bb 44 92 6b db ec 11 25 55 d2 86 50 11
0030   01 f5 6b 9e 00 00 00 00 00 00 00 00
数据 含义
01 bb 源端口 443
44 92 目的端口 17554
6b db ec 11 32位序号 1809574929
25 55 d2 86 32位确认序号 626381446
50 11 0101 0000 0001 0001
0101 TCP头部长度 5
0000 00 保留
URG 0
ACK 1
PSH 0
RST 0
SYN 0
FIN 1
01 f5 窗口大小 501
6b 9e 校验和 0x6b9e
00 00 紧急指针 0x0000

Client -> Server

0000   00 74 9c dd e6 c1 80 fa 5b 6b f8 0e 08 00 45 00
0010   00 28 3f 3d 40 00 80 06 00 00 0a 02 5a 37 c1 c8
0020   86 28 44 92 01 bb 25 55 d2 87 6b db ec 12 50 10
0030   04 00 ac 44 00 00
Client->Server
[ACK]此时双向通道都已经关闭了,四次挥手包完成
TCP包头
0020   ** ** 44 92 01 bb 25 55 d2 87 6b db ec 12 50 10
0030   04 00 ac 44 00 00
数据 含义
44 92 源端口 17554
01 bb 目的端口 443
25 55 d2 87 32位序号 626381447
6b db ec 12 32位确认序号 1809574930
50 10 0101 0000 0001 0000
0101 TCP头部长度 5
0000 00 保留
URG 0
ACK 1
PSH 0
RST 0
SYN 0
FIN 0
04 00 窗口大小 1024
ac 44 校验和 0xac44
00 00 紧急指针 0x0000

实验结果

成功抓到TCP握手与挥手的包,并且分析完成,验证了老师上课讲的内容。但在实验过程中也遇到了一些困难,特别是在抓挥手包时,服务器发送的包总是将ACK和FIN合并,导致只抓到三个包,后面经过查阅资料成功解决问题。

高性能,高性价比服务器推荐 ( DogYun ) 😉
暂无评论

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇