利用Wireshark分析TCP三次握手和四次挥手
一、安装Wireshark
wireshark是一个网络封包分析软件,它可以撷取网络封包,并尽可能显示出最为详细的网络封包信息,方便我们学习理解。
百度网盘下载链接: https://pan.baidu.com/s/1evR2fse5sXuLwjro5NgIWw?pwd=ub80
二、界面介绍
1. 网卡类型
本次我们用WLAN演示过程
以抓取WLAN数据包为例
打开软件,选择WLAN,START开始抓包
2. 首页功能
2.1 按钮界面
- 列出可用接口
- 抓包时需要设置的一些选项
- 开始新的一次抓包
- 暂停抓包
- 继续进行本次抓包
2.2 数据包列表
在数据包列表中又包含每个捕获到的数据包编号,时间戳,源地址,目标地址,协议,长
度,以及数据包信息。
2.3 数据包详细信息列表
选择指定数据包,查看协议中的每一个字段
具体字段信息此处不再赘述
为了排除大量冗余数据包,迅速定位到目标监听数据包,我们采用过滤器的方式
3. Wireshark过滤器
3.1 设置数据抓取选项
先停止数据包抓取,选择常用按钮第二个,设置
筛选端口号为80的数据(默认筛选WLAN)
START后选择Continue
捕获到了所有端口为80的数据
如果要针对网卡筛选,在Capture中,双击该网卡
单独筛选WLAN网络下80端口的数据
如果没有设置混杂模式,本地计算机只能获取数据包发往的目标是主机和从主机出去的数据包。如果设置了混杂模式,就可以捕获局域网中所有的数据包。
抓包通常采用混杂模式,抓取范围更大
3.2 显示过滤器
显示过滤器应用于捕获文件,用来告诉wireshark只显示那些符合过滤条件的数据包。
比如输入tcp,可以筛选所有使用tcp协议的数据包
为了提高筛选效率,我们采用过滤表达式
点击Expression按钮,选择过滤表达式的内容
表达式一般有三组组成,分别是过滤项、过滤关系和过滤值
过滤项中有很多协议,此处我们以TCP为例
先找到TCP协议
在协议下找到端口协议
过滤关系选择==,过滤值填80
通过Expression填写过滤表达式,在首页过滤器中自动出现一行表达式
筛选使用tcp通信时,端口为80的数据包
tcp.port == 80
举例:
筛选出源IP或目的IP是117.147.199.51的所有数据包
ip.addr == 117.147.199.51
筛选出目的地址是117.147.199.51的数据包
ip.dst == 117.147.199.51
3.3 过滤关系
过滤关系也可以使用英文表达
比如
筛选出目的地址是117.147.199.51的数据包
ip.dst eq 117.147.199.51
有时候需要筛选的条件较多,普通表达式满足不了需求,故采用符合过滤表达式
3.4 复合过滤表达式
逻辑与
筛选同时满足目的地址是117.147.199.51和端口号为80的数据包
ip.dst eq 117.147.199.51 && tcp.port == 80
逻辑或
筛选同时满足目的地址是117.147.199.51或端口号为80的数据包
ip.dst eq 117.147.199.51 && tcp.port == 80
3.5 常见用显示过滤需求及其对应表达式
3.5.1 数据链路层
筛选mac地址为04:f9:38:ad:13:26的数据包
eth.addr == 04:f9:38:ad:13:26
筛选源mac地址为04:f9:38:ad:13:26的数据包
eth.src == 04:f9:38:ad:13:26
打开Expression,找到Ethernet,可以参考下面的表达式
3.5.1 网络层
筛选ip地址为192.168.1.1的数据包
ip.addr == 192.168.1.1
筛选192.168.1.0网段的数据
ip contains 192.168.1
筛选192.168.1.1和192.168.1.2之间的数据包
ip.addr == 192.168.1.1 && ip.addr ==
192.168.1.2
筛选从192.168.1.1到192.168.1.2的数据包
ip.src == 192.168.1.1 && ip.dst ==
192.168.1.2
3.5.1 传输层
筛选tcp协议的数据包
tcp
筛选除tcp协议以外的数据包
!tcp
筛选端口为80的数据包
tcp.port == 80
筛选12345端口和80端口之间的数据
tcp.port == 12345 && tcp.port == 80
筛选从12345端口到80端口的数据包
tcp.srcport == 12345 && tcp.dstport == 80
3.5.1 应用层
注:
http中http.request表示请求头中的第一行(如GET index.jsp HTTP/1.1)
http.response表示响应头中的第一行(如HTTP/1.1 200 OK),其他头部都用http.header_name形式。
筛选url中包含.php的http数据包
http.request.uri contains .php
筛选内容包含username的http数据包
http contains username
URL和URI区别
URL(locater):统一资源定位符,找到路经
URI(identification):统一资源标识符
URL是URI的子集
三、wireshark分析TCP三次握手
1. 过滤阿里云服务器
设置过滤阿里云服务器的IP地址
ip.addr == 123.56.136.14
由于目前尚未与服务器有数据传输,故监听不到数据包
2. 连接阿里云TCP服务端
需要安装一个网络调试助手辅助操作
百度网盘链接:
https://pan.baidu.com/s/1EK4jgQr3jeBTipa5N5Qi0A?pwd=v4zg
协议类型选择TCP Client,远程主机地址填写阿里云服务器IP地址,端口根据服务器具体端口开发情况设置
连接后,在Wireshark会看到,出现三条数据包信息(TCP三次握手)
参考下图,方便理解
2.1 TCP第一次握手数据包
客户端发送一个TCP,标志位为SYN=1, 代表客户端请求建立连接。等待服务器收到数据包后,客户端变为监听状态。
2.2 TCP第二次握手数据包
服务器发回确认包, 标志位为 SYN,ACK。
SYN=1表示已经同步数据包
ACK=1表示确认收到
seq设为0,即服务器发出的第0个数据包
将确认序号设置为客户的seq加1,即ack=0+1=1,
2.3 TCP第三次握手数据包
客户端再次发送确认包,SYN标志位为0,ACK标志位为1。
seq=0+1=1,客户端发送的第二个包,编号为1
ack=0+1=1,回复给服务器,表示服务器发出的0数据包已经收到
至此,三次握手完成
四、wireshark分析TCP四次挥手
1. 断开阿里云服务器连接
我们用客户端主动释放连接为例,在网络调试助手中,点击断开
在Wireshark页面中发现多出四行数据包,很显然,两次释放数据包,两次确认数据包
我们接着分析
2. TCP第一次挥手数据包
客户端主动释放连接,将结束报文端标志FIN设为1,ACK设为1,表明这是一个连接释放报文段,同时对之前接收到的报文段进行确认。
seq=1告诉服务器,这是客户端发送的序号为1的数据包
ack=1告诉服务器,之前发的0号数据包已经收到
客户端进入终止等待1状态
3. TCP第二次挥手数据包
服务器进程接收到TCP连接释放报文段后,会发送一个普通的TCP确认报文段并且进入关闭等待状态。
此时TCP客户进程到服务器进程这个方向的连接就释放了,这时的TCP连接属于半关闭状态,也就是TCP客户进程已经没有数据要发送了。
但是TCP服务器进程如果还有数据需要发送,客户进程则还需要接收,这个状态可能会持续一段时间,直到TCP服务器进程将数据发送完毕。
4. TCP第三次挥手数据包
服务器传输剩余数据,当TCP服务器进程没有数据要发送后,释放连接,TCP服务器进程发送TCP连接释放报文段并进入最后确认状态,FIN=1,ACK=1
5. TCP第四次挥手数据包
客户端收到TCP连接释放报文段后,针对该报文段发送最后一次确认报文段。客户端此时处于时间等待状态,等服务器收到后关闭,客户端等待2msl后也进入关闭状态
版权归原作者 九芒星# 所有, 如有侵权,请联系我们删除。