使用软件及环境

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

实验过程

实验前准备

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

完成实验操作

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

分析三次握手过程

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

过滤参数 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 0c32位序号1891778316
00 00 00 0032位确认序号0
80 02 1000 0000 0000 0010
1000TCP头部长度8
0000 00保留 
 URG0
 ACK0
 PSH0
 RST0
 SYN1
 FIN0
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 9a32位序号296926362
70 c2 3f 0d32位确认序号1891778317
80 12 1000 0000 0001 0010
1000TCP头部长度8
0000 00保留 
 URG0
 ACK1
 PSH0
 RST0
 SYN1
 FIN0
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 0d32位序号1891778317
11 b2 bc 9b32位确认序号296926363
50 10 0101 0000 0001 0000
0101TCP头部长度5
0000 00保留 
 URG0
 ACK1
 PSH0
 RST0
 SYN0
 FIN0
04 02窗口大小1026
ac 44校验和0xac44
00 00紧急指针0x0000

sequenceDiagram A–>B

分析四次挥手包

遇到的问题

我在抓四次挥手包时发现自己只能抓到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 8632位序号626381446
6b db ec 1132位确认序号1809574929
50 11 0101 0000 0001 0001
0101TCP头部长度5
0000 00保留 
 URG0
 ACK1
 PSH0
 RST0
 SYN0
 FIN1
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 1132位序号1809574929
25 55 d2 8632位确认序号626381446
50 10 0101 0000 0001 0000
0101TCP头部长度5
0000 00保留 
 URG0
 ACK1
 PSH0
 RST0
 SYN0
 FIN0
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 1132位序号1809574929
25 55 d2 8632位确认序号626381446
50 11 0101 0000 0001 0001
0101TCP头部长度5
0000 00保留 
 URG0
 ACK1
 PSH0
 RST0
 SYN0
 FIN1
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 8732位序号626381447
6b db ec 1232位确认序号1809574930
50 10 0101 0000 0001 0000
0101TCP头部长度5
0000 00保留 
 URG0
 ACK1
 PSH0
 RST0
 SYN0
 FIN0
04 00窗口大小1024
ac 44校验和0xac44
00 00紧急指针0x0000

实验结果

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