计算机网络实验——TCP协议抓包分析
文章目录
- 计算机网络实验——TCP协议抓包分析
- 一、基础知识点
- 1、运输层两个重要协议的特点对比(TCP和UDP)
- 2、TCP报文的格式
- 3、常见的TCP报文标识字段(FLAG字段)
- 4、TCP连接的建立过程及理解——三次握手
- 5、TCP释放连接的过程及理解——四次挥手
- 二、实验操作
- 1、获取IP地址
- 2、监听并抓包
- 3、找到并分析三次握手的数据包
- 4、找到并分析四次挥手的数据包
- 三、补充
- 1、wireshark各颜色的标识的含义?
- 2、实验目的
- 3、实验内容
一、基础知识点
-
1、运输层两个重要协议的特点对比(TCP和UDP)
- UDP协议(用户数据报协议):UDP协议是无连接且不保证可靠交付的,面向报文且没有拥塞控制,支持一对一的通信也支持一对多、多对多、多对一的交互通信。
- TCP协议(传输控制协议):TCP协议面向连接且保证可靠交付,提供全双工通信,是面向字节流的点对点连接,将连接作为最基本的抽象。
-
3、常见的TCP报文标识字段(FLAG字段)
- 紧急URG:当标志字段(flag)的URG=1时,表示紧急指针字段有效,表明此数据包中有紧急数据,应该尽快传送。
- 确认ACK:当且仅当ACK=1时,确认号字段才是有效的,反之无效。TCP规定,在连接建立以后所有传送的报文的ACK必须为置为1。
- 推送PSH:当两个应用进程进行交互式通信时,将PSH设置为1使得报文在被接收方接收以后尽快推送并交付给应用进程,不再等到缓存填满以后再向上交付。
- 复位RST:当RST=1时,表明TCP链接中出现严重差错,此时必须释放后重新建立连接。
- 同步SYN:用来在建立连接时同步序列号,当SYN=1,ACK=0时表示这是一个请求建立连接的报文;当SYN=1,ACK=1时,表示接收方同意建立连接。
- 终止FIN:表示停止、终止TCP链接,当FIN=1时表明此报文段的发送方已经完成数据的发送,申请释放TCP连接
-
4、TCP连接的建立过程及理解——三次握手
- TCP的连接建立需要经历三次握手:第一次握手是由客户端发出,将SYN标志置1,申请与服务器端建立连接,仿佛是说“你好,聊天吗”;
- 服务器端收到请求以后确认与其建立连接,回复一个确认数据包,SYN和ACK标志置1,这是第二次握手,仿佛是回复“可以,你说吧”;
- 客户端收到来自服务器端的确认以后,对其确认再进行一次确认,将ACK标志置1,表示确认,仿佛是说“收到,那我开始说了”,至此完成第三次握手,TCP链接正式建立,客户端会向上层汇报,开始数据传送。
-
5、TCP释放连接的过程及理解——四次挥手
- TCP链接的释放需要经历四次挥手:第一次挥手一般由最开始发起连接的一方(一般是客户端)主动提出,将FIN标志置1,表示提出终止连接的申请,部分数据包可能也会将ACK标志置1,可以理解为对之前所接受的数据进行确认,这是第一次挥手,仿佛是在跟服务器端说“我要挂了,你还有事吗”;
- 在收到客户端的终止TCP连接申请以后,服务器端会将ACK标志置1发还客户端,表示对申请的确认,这是第二次挥手,仿佛是在回复“已经收到申请,你先别急,我再想想还有没有事,等一下再通知你”;
- 完成第二次挥手以后,服务器端会向上汇报,通知应用进程停止接受数据,并确认是否还有尚未发送完成的数据,若无,则将FIN和ACK标志置1,发还给客户端,申请释放连接,这是第三次挥手,仿佛是在说“我这边没事了,你可以挂了”;
- 客户端收到第三次挥手的数据包以后会发送对这个数据包的确认数据包,将ACK置1,表示确认断开连接,此时TCP连接将进入预关闭状态,客户端将设置一个时间等待计时器(TIME-WAIT timer)并等待2MSL时间确保服务器端彻底挂掉,防止“诈尸”,若过了2MSL时间以后服务器端没有任何数据包发送过来,客户端就能彻底确认服务器端已经正常释放连接,自己也就会随之释放连接,至此,四次挥手结束,TCP连接彻底被释放。
二、实验操作
使用控制台命令获取目标网站的IP地址,方便后续抓包的时候进行分析:输入ping xxxx
这里ping不到是因为我ping的是我们学校的官网,可能有设置了过滤ping命令。没关系,除了ping命令以外还可以使用nslookup命令:输入nslookup xxxx
有些出来的ip地址很奇怪很长,这个是ipv6的地址,较短的是ipv4的
打开wireshark,选择本机上网的接口进行监听,筛选条件设置为_ws.col.protocol==”TCP”,打开浏览器并访问目的网址(注意,此时后台的进程除了wireshark和浏览器以外的全都要关掉,防止产生不必要的数据包)
-
3、找到并分析三次握手的数据包
- 找到一个[SYN],一个[SYN ACK],还有一个[ACK]的就是三次握手的全部数据包了,这三个包不一定是连在一起的,要找自习一点,在wireshark的info列可以很清楚的看到。
- 另外还要强调一点,在找数据包的时候不能只关注源地址和目的地址是否正确,要记住TCP协议是一个传输层的协议,传输层提供的是应用进程之间的逻辑通信,端口这一个概念在运输层是非常重要的,所以我们要看清楚源端口和目的端口,有时候本机会有多个进程(多个端口)和目标网站进行通信,每个端口就都会建立TCP连接,不同端口的包是不一样的,不论是三次握手还是四次挥手都要注意这一点。
- 打开数据包,重点关注以下五个字段即可:
- source port源端口
- destination port目的端口
- sequence number序列号:seq的值
- acknowledgement number确认号:ack的值
- flag标志字段:判断包的类型、含义
-
4、找到并分析四次挥手的数据包
- 一共四个包,两个[FIN ACK](也有可能不带ACK),两个[ACK],注意,一定是FIN ACK作为第一次挥手,然后接收方连发一个ACK和一个FIN ACK,最后发送方回一个ACK。
- 注意端口号前后是否一致
- 也有可能只抓到了三个包,这是因为当服务器端收到第一次挥手的包以后发现自己没有什么数据可以再发的了,于是就把第二次挥手和第三次挥手的数据包合并发送了,这种情况会抓到两个[FIN ACK]和一个[ACK]的包。
- 注意,这四个包不一定是连在一起的,特别是在第一次挥手以后服务器端如果还有数据要发,则会在第一次挥手和第二次挥手的包之间产生其他的数据包,抓包结束在找数据包的时候比较费时间,一定要细心。只要四个包的目的端口和源端口都是那两个,而且seq和ack的值能够对得上,就说明这四个就是四次握手的包。
三、补充
熟悉网络协议分析的原理。
熟悉网络协议分析软件wireshark的使用。
加深对TCP连接建立三次握手过程、数据传输过程和释放过程(四次挥手)细节的掌握。
加深对TCP协议的理解。
学习使用网络协议分析软件wireshark。
捕捉所需要TCP报文段的三次握手和四次挥手的各个字段,并分析其内容。
分析TCP数据报头部各个字段