TCP/IP协议分析
一、实验简介
本实验主要讲解TCP/IP协议的应用,通过一次下载任务,抓取TCP/IP数据报文,对TCP连接和断开的过程进行分析,查看TCP“三次握手”和“四次挥手”的数据报文,并对其进行简单的分析。
二、实验目标
1.了解运输层TCP协议基本概念、报文结构;
2.分析TCP报文头部;
3.分析TCP连接建立过程、TCP连接释放;
4.掌握使用wireshark进行tcp协议分析技术。
三、实验环境
实验主机:centos7和本地Windows
实验工具:Wireshark
**四、**实验步骤
- 在本地Windows上打开Wireshark,选择要抓取的网卡,我们虚拟机使用的是VMnet8,所以这里选择这个网卡。
- Wireshark默认是开启流量捕获的,可以看到在我们没有使用虚拟机的时候,其实也是有数据交互的,这是由于系统服务本身的特点决定的,比如最上面的两条数据是NTP协议数据,这个协议对应的是NTP服务,是用来同步系统时间的,所以系统会定时向NTP服务器发送数据包。
3. 打开centos7虚拟机,确保虚拟机可以上网
- 为了使用方便,我们可以使用远程连接工具连接虚拟机,这里使用的使用SecureCRT
- 准备一个下载连接,这里我们下载阿里云的centos7yum文件,文件比较小,下载起来方便,需要使用wget命令,没有这个命令的需要提前安装以下,下载命令:wgethttp://mirrors.aliyun.com/repo/Centos-7.repo
- 清空Wireshark抓取的数据包,因为打开软件之后默认是开启数据包抓取的。
- 将下载连接复制并粘贴到虚拟机,开始下载
- 将抓取到的数据包保存,方便后续查看
- 打开上一步保存的数据包文件
- 右键选中其中一条TCP数据包,选择对话过滤,再选择TCP数据,就可以单独查看这一次会话的数据包
- 过滤出来的TCP会话数据包
- 现在我们对TCP建立连接的数据包进行简单的分析,如图所示,第一条数据由虚拟机发送给服务器,是TCP建立连接的第一次“握手”,首先客户端会开启请求(SYN)控制位,向服务器发送SYN包,SYN是Synchronization同步的意思,SYN包的目的是请求与服务器进行数据同步,并携带随机的Seq(序号)一同发送给服务器。
同时我们可以看一下标志位,SYN=1,意味着开启同步,在页面找到TransmissionControlProtocol,这其实就是TCP的全称,传输控制协议;然后找到Flags就可以看到标志位的情况。
- 我们接着看本次连接的第二条数据包,也就是TCP建立连接的第二次“握手”,是由服务器发送给虚拟机的,服务器会开启SYN和ACK控制位,向客户端发送了SYN包和ACK包;SYN包的意思上面说过了,就是请求同步的作用,ACK是Acknowledgement确认的意思,表示服务器确认与客户端同步数据;然后我们看一下序号和确认号,这条数据包的序号是0,确认号是1,序号是随机的,但确认号不是,这里的确认号是上一条数据包的序号加1,也就是ACK=0+1,因为第一次“握手”时客户端向服务器发送的数据包中Seq(序号)是0,所以这里的ACK就是0+1。
这里有个问题,为什么要有序号的存在,答案是为了保证通道的唯一性,因为应用程序可能会发送多个序号给服务器,序号的存在可以让服务器精准的找到客户端发过来的请求同步信息,后续服务器拿到序号之后也是有用的,服务器向客户端发送SYN包和ACK包,会把这个序号加1,作为ACK(确认号)发给客户端,这样客户端才知道这条数据包是服务器请求同步的报文。
我们再看看第二次“握手”的标志位情况,这里服务器向客户群发送了SYN包和ACK包,标志位应该是SYN=1,ACK=1。
- 我们接着看TCP建立连接的第三次“握手”,是由客户端发送给服务器的,发送的是ACK包,表示确认同步的意思,这里客户端会将第二次“握手”时服务器发过来的确认号(ACK)作为第三次“握手”的序号,也就是1;将第二次“握手”时服务器发过来的序号(Seq)加1作为确认号,也就是1,一同发送给服务器,表示确认同步数据,TCP通道建立成功。
同样来看看标志位的情况,这次时ACK为1,表示开启确认的报文。
- TCP成功建立连接之后做什么呢?说明应用层可以使用这个TCP通道传输数据了,这个应用层协议我们后面再讲。
- 现在我们来看一下TCP关闭连接的过程,客户端和服务端都能主动发起关闭请求,我们这次实验是由客户端主动发起的关闭请求,这个时候客户端会在报文中开启FIN和ACK两个控制位,FIN就是Finish结束的意思,这里也就是确认要结束会话的意思,由于序号和确认号在HTTP传输过程被不同的叠加,这里客户端发送给服务器的请求结束会话的序号变成了135,ACK编号为3206;这是TCP关闭连接的第一次挥手。
看一下标志位的情况,ACK(确认)和FIN(完成)处于开启状态。
- TCP关闭连接的第二次挥手,由服务器发送给客户端,服务器收到客户端的关闭连接请求,然后服务端发送一个ACk报文,确认收到了客户端的请求,序号(Seq)使用的是第一次“挥手”时发过来的确认号,也就是Seq=3206,确认号为第一次“挥手”时发过来的序号加1,也就是135+1=136。这个时候连接还没有断开,我们继看第三次“挥手”。
看一下第二次“挥手”的标志位情况,确认位为开启状态。
- TCP关闭连接的第三次“挥手”,由服务器发送给客户端,第二次“挥手”只确认了客户端已经没有数据需要同步了,但服务端可能还有需要发送给客户端的数据,所以,服务端也需要向客户端确认没有数据需要发送了;即第三次“挥手”是服务端向客户端确认,自己也没有数据需要发送了,在服务端确认收到客户端的关闭连接请求之后,会给客户端发送结束请求。报文内容为FIN包和ACK包来进行最后的确认,此时序号和确认号不变,因为没有交互,只是多了一个控制位。
看一下第三次“挥手”的标志位情况,确认位和结束位开启。
- TCP关闭连接第四次“挥手”,客户端收到了服务器最终的结束确认会发送ACK包来进行确认,此时自己的序号需要用对方的确认号,自己的确认号为对方序号加1,也就是3206+1=3207。四次“挥手”完成,TCP连接关闭。
看一下第四次“挥手”的标志位情况,此时只有确认位开启。
五、实验总结
通过本实验,学习了TCP/IP协议的应用,并通过抓取TCP/IP数据报文,深入了解了TCP连接和断开的过程。在分析TCP报文头部的过程中,加深了对TCP协议基本概念和报文结构的理解。重点探讨了TCP连接建立过程中的三次握手和连接释放过程中的四次挥手,从中了解了TCP连接的建立与断开的细节。通过使用Wireshark工具,掌握了TCP协议分析技术,为进一步深入研究网络通信提供了基础。这个实验有助于加深对TCP/IP协议栈的理解,提高了对网络通信的认识和技能。