实验三 TCP报文的捕获与分析
实验四 TCP报文的捕获与分析
——实验报告
一、实验目的
(1)掌握TCP建立连接的工作机制。
(2)掌握借助Wireshark捕捉TCP三次握手机制。
(3)掌握SYN、ACK标志的使用。
二、实验内容
用Wireshark软件捕捉TCP三次握手机制。
三、实验原理
TCP报文段格式如图1所示。
图1 TCP报文段格式
表1 TCP的标志位含义
TCP的标志位 |
英文简写 |
含义 |
紧急标志位 |
URG |
表示数据包的紧急指针域有效,用来保证连接不被阻断,并督促中间设备尽快处理 |
确认标志位 |
ACK |
对已接收的数据包进行确认 |
推送标志位 |
PSH |
表示该数据包被对方接收后应立即交给上层应用,而不在缓冲区排队 |
重置标志位 |
RST |
用于连接复位、拒绝错误和非法的数据包 |
同步标志位 |
SYN |
用于建立会话连接,同步序列号 |
完成标志位 |
FIN |
表示已经没有数据要发送了,即将关闭连接 |
三次握手机制实验原理如图2所示。
TCP的序号和确认号:
32位序号 seq:Sequence number 缩写seq ,TCP通信过程中某一个传输方向上的字节流的每个字节的序号,通过这个来确认发送的数据有序,比如现在序列号为1000,发送了1000,下一个序列号就是2000;
32位确认号 ack:Acknowledge number 缩写ack,TCP对上一次seq序号做出的确认号,用来响应TCP报文段,给收到的TCP报文段的序号seq加1。
区分ack和ACK:
小写的ack,代表的是头部的确认号Acknowledge number, 缩写ack,是对上一个包的序号进行确认的号,ack=seq+1;
大写的ACK,则是上面说的TCP首部的标志位,用于标志的TCP包是否对上一个包进行了确认操作,如果确认了,则把ACK标志位设置成1。
三次握手机制过程:
客户端发送SYN报文,并置发送序号为X;服务端发送SYN和ACK报文,并置发送序号为Y,确认序号为X+1;客户端发送ACK报文,并置发送序号为X+1,确认序号为Y+1。
图2 三次握手机制工作示意图
四、实验环境
交换式网络、windows操作系统、Wireshark软件
注意:在做这个实验的过程中,例如从打开某一网页获得TCP包从而分析TCP的三次握手机制过程中,容易犯先打开网页再开始抓包的错误,正确的做法是先在Whireshark软件中设置TCP抓包,然后再打开一个网页。
五、实验内容与步骤
(1)开启Wireshark软件
在捕捉接口对话框中选中网卡接口,然后点击“Optinos”进行包过滤,如图3所示。
图3 Wireshark捕获
(2)过滤TCP数据包
在随后出现的的下列对话框中,在“Capture Filter”处填写TCP,从而捕捉到TCP包,进而获得TCP三次握手的建立机制,然后点击“Start”。如图4所示。
图4 TCP过滤设置
(3)TCP三次握手机制生成与分析
访问某一网站,则Whireshark捕捉到的TCP三次握手的信息,如图5所示,以前三行为例解析一下。
图5 捕获到的三次握手通信包
- 第一行对应的是第一次握手,其中[SYN]出现表明为三次握手的开始的标志。
客户端59361端口号向服务器端80号端口发送一个标志为SYN=1且含有初始化序列值seq=0的数据包,开始建立会话,在初始化会话过程中,通信双方还在窗口大小Win、最大报文段长度MSS等方面进行协商。Source port为59361,Destination port为80,打开编号为1所示的下拉菜单,会出现对应项的更加详细的解析,如图6所示。
图6 SYN第一次握手
- 第二行对应的[SYN,ACK]表明为二次握手,是对建立的确认。
服务器端80端口号向客户端59361号端口发送包含确认值的数据段,如图7总Transmission Control Protocol(TCP)所示,其值等于所收到的序列值加一,即ACK=1,其自身的序列号为0;并对MSS更改为1460。源端口号Src Port为80,目的端口号Dst Port为59361。
图7 SYN、ACK第二次握手
- 第三行对应的是第三次握手
客户端59361端口号向服务器端80号端口发送确认值Seq=1、Ack=1(59361接收到的序列值加1),这便完成了三次握手的建立。如图8所示对应答的应答为第三次握手。
图8 ACK第三次握手
图9 http
五、实验心得
这次实验更系统地学习了解TCP三次握手建立连接的全过程,明白了TCP报文格式、标志位等内容含义,以及建立的三次握手菜单解析。TCP三次握手过程中,传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。实验过程中也遇到了一些问题,比如不熟悉握手菜单中的一些英文内容,还有可能由于版本不同,导致显示建立连接的只有端口号。另外,与建立连接的“三次握手”类似,断开一个TCP连接则需要“四次握手”四次挥手过程。
若有不足,恳请指正,感谢!