实验五TCP 的连接及释放过程分析
【实验目的】
1. 掌握TCP 连接建立的三次握手工作原理;
2. 理解TCP 连接释放的四次握手工作原理。
【实验环境】
与因特网连接的计算机,操作系统为Windows,安装有Wireshark、IE 等软件。
【实验内容】
1. 使用Wireshark 抓包软件分析TCP 协议报文的类型;
2. 分析TCP 连接建立的工作过程;
3. 分析TCP 数据传输的工作过程;
4. 分析TCP 连接释放的工作过程。
【实验步骤】
1. 启动WireShark 抓包软件;
2. 使用ping 命令,ping 你想浏览的网站,记下该网站的ip 地址。
119.75.218.77
3. 使用浏览器访问一个因特网网站(例如,),通过Wireshark 捕获通信内容;
4. 分析与你浏览的网站相对应的TCP 连接建立的三次握手和连接释放的握手过程( 在wireshark 里通过ip 地址过滤找到对应的TCP 数据包)。
具体分析步骤如下:
l 览网页,抓取三次握手的包,分析TCP 包头格式,指出下列4 个字段的值。
l 源IP:192.168.6.8
l 目的IP: 119.75.218.77
l 源端口:1849
l 目的端口:80
连接建立第一次握手:
若只显示第一次握手的数据包,即显示包含TCP SYN 且不包含ACK 标志的数据包,
则显示过滤器的规则应该怎样设置?找出第一次握手的数据包并截取对该数据包的展
开图来替换下图。
根据截图在表1 的相应位置填写各字段的值。
表1
窗口65535 65535 65535 40200 40200 5840 65134
为了显示第一次握手的包,过滤器的设为“tcp.flags.ack==0&&tcp.flags.syn==1”,如上图所示。
连接建立第二次握手:
若只抓取第二次握手的数据包,则显示过滤器的规则应该怎样设置?为什么?找出第二次握手的数据包并截取对该数据包的展开图来替换下图,根据截图在表1 的相应位置填写各
字段的值。
为了显示第二次握手的包,过滤器的设为“tcp.flags.ack==1&&tcp.flags.syn==1”,如上图所示。
连接建立第三次握手:
是否可以设定过滤规则只抓取第三次握手的数据包? 若不能,如何确定是第三次
握手的数据包。
找出第三次握手的数据包并截取对该数据包的展开图来替换下图,根据
截图在表1 的相应位置填写各字段的值。
不能,因为第三次握手发送的是ack包,也就是仅ACK标记设为1的TCP包,但三次握手建立后,TCP连接的每个包都会设置ACK位,所以不能。
第三次握手的TCP包序列号是1。
如下图
三次连接握手完成后说明TCP 连接正确建立,客户端要请求服务器传送数据。
客户端第一次请求数据:
找出第一次请求的数据包并截取对该数据包的展开图,根据截图在表1 的相应位置
填写各字段的值。
你是如何确定是第一次的请求的数据包?
包的序列号为1,且下次序列号不为1,同时确认号为1的TCP包就是第一次请求数据的包:
若服务器相应了客户端的请求,服务器要向客户端传送数据。
服务器第一次回复数据:
找出第一次回复的数据包并截取对该数据包的展开图,根据截图在表1 的相应位置填
写各字段的值。
你是如何确定是第一次的回复的数据包?
确认号为第一次请求数据包的下一个序列号的包,且序列号是1的TCP包,如下图:
TCP 连接的断开:
设置过滤器的规则为tcp.flags.fin ==1&& tcp.flags.ack == 1 ,捕捉断开连接的数据
包。
根据捕获的断开连接数据报填写表一,并分别截取断开连接第一次、第二次握手的展开
图。
我们知道TCP 连接建立后,是全双工的通信方式。
观察你截获的结果请写出通信双方各
自是怎样断开连接的。
(由于没有截取到数据,故采用老师的数据)
第一次断开连接握手:
第二次断开连接握手:
断开连接的过程是一个双向的过程,由客户机向服务器发送释放请求,服务器作出应答;然后服务器向客户机发送释放请求,客户机应答。
【实验结果总结与思考】
本次的实验结构基本符合预想,要找的TCP包基本上都能够找出来。
不过有几点需要注意的就是:
1.要灵活运用filter,准确输入过滤词是很重要的。
比如说我的机子上建立了相当多
的tcp连接,我就要对他们进行过滤,只看选定目标的Tcp包,那么我就应该在
filter中写上“ip.addr==目标地址”。
在找连接的三次握手的包时,一定要注意每
次握手的tcp包都有哪些特征,比如说第一次握手的包的特征是内容仅含SYN=1
的包,那么在filter中就可以输入“tcp.flags.syn==1&&ip.dst==目标地址”这样就
可以快速搜出相应的包了。
2.对于利用filter不能一次找出的包,要懂得推理找出相应的tcp包。
比如说进行连
接的第三次握手的包,我用filter是不能一次性找出来的,因为那个包只含内容
ACK==1,符合ACK==1的条件的包多得是,因此我就有必要通过第二次握手的包
进行推理判断,若第二次握手的tcp包的确认号是1,那么我就看第三次握手的
包的序列号是否为1,且Flags的字段里是否只有ack=1,那么我就可以判断这个
包是否是第三次握手的tcp包了。
3.有个问题就是:我不知道为什么我做tcp释放的抓包时没有抓到,服务器给我发
的释放请求,因此利用了别的数据源。