实验六TCP 报文段的格式及协议分析
【实验目的】
1、分析 TCP 报文段的格式;
2、了解 TCP 报文段首部结构以及各个字段的内容及其作用;
3、通过观察 TCP 协议的交互掌握TCP 连接建立、数据传输、连接释放的过程。
【实验内容】
1、分析 TCP 报文段的结构,熟悉各个字段的内容、功能、格式和取值范围;
2、编辑 TCP 报文段首部各字段的内容;
3、单个或批量发送已经编辑好的TCP 报文段;
4、分析 TCP 协议的交互过程。
【实验原理】
TCP 是 TCP/IP 体系中面向连接的运输层协议,提供全双工的和可靠交付的服务。
TCP 报文段的格式如下图所示:
32 bit
源端口目的端口
TCP
首部数据
偏移
序号
确认号20 字节保留
U A P R S F
窗口
R C S S Y I
G K HTNN
检验和紧急指针
选项和填充
数据
源端口和目的端口:各占 2 个字节,是运输层与应用层的服务接口。
序号:占 4 个字节。
TCP 连接传送的数据流中的每一个字节都被编上一个序号。
首部中序
号字段的值指的是本报文段所发送的数据的第一个字节的序号。
确认号:占 4 个字节,是期望收到对方下一个报文段的数据的第一个字节的序号。
数据偏移:占 4 bit,它指出报文段的数据起始处距离TCP 报文段的起始处有多远。
实际上
就是 TCP 报文段首部的长度。
保留:占 6 bit ,保留为今后使用。
紧急比特 URG :当 URG=1 时,表明紧急指针有效。
它告诉系统报文段中有紧急数据,应尽快传送。
确认比特 ACK :ACK=1 时确认号字段才有效, ACK=0 时确认号字段无效。
推送比特 PUSH :接收方接收到 PUSH=1 的报文段时会尽快的将其交付给接收应用进程, 而
不再等到整个接收缓存都填满后再向上交付。
复位比特 RST :当 RST=1 时,表明 TCP 连接中出现严重差错,必须释放连接。
复位比特还 用来拒绝一个非法的报文段或拒绝打开一个连接。
同步比特 SYN :在连接建立时用来同步序号。
当 SYN=1 而 ACK=0 时,表明这是一个连接
请求报文段。
对方若同意建立连接, 应在响应的报文段中使
SYN=1 和 ACK=1 。
因此,SYN=1
就表示这是一个连接请求或连接接收报文。
终止比特 FIN :当 FIN=1 时,表明此报文段的发送端的数据已发送完毕, 并要求释放运输连
接。
窗口:占 2 个字节,用来控制对方发送的数据量,单位是字节,指明对方发送窗口的上限。
校验和: 占 2 个字节, 校验的范围包括首部和数据两个部分, 计算校验和时需要在报文段前
加上 12 字节的伪首部。
紧急指针:占
2 个字节,指出本报文段中紧急数据最后一个字节的序号。
只有当紧急比特
URG=1 时才有效。
选项:长度可变。
TCP 只规定了一种选项, 即最大报文段长度
MSS (Maximum Segment Size)。
TCP 连接建立的过程如下图所示:
主机
A
主机 B
主动打开
SY
N , S EQ = x 被动打开
SYN , S E Q = y , A
CK = x
1
确认
确认
A CK = y
1
TCP 连接释放的过程如下图所示:
主机 A
主机 B
应用进程 F
IN , SEQ = x
通知主机 释放连接
应用进程
A C K = x 1
FIN , SEQ = y
, A CK
= x + 1
应用进程
释放连接
A CK = y 1
【实验步骤】
练习一:分析TCP 报文段的格式
1、运行报文仿真编辑器;
2、单击工具栏上的“新建报文”按钮,在弹出的“新建报文” 对话框中选择报文类型为“TCP”,
单击“确定”按钮,报文仿真编辑器自动构造一个TCP 报文段;
3、也可以通过单击工具栏上“打开”按钮,选择安装目录下Data 目录中报文仿真编辑器
存档文件: tcp.pef,报文仿真编辑器显示预存的TCP 报文段;
4、选中报文列表框中的一条记录,报文仿真编辑器中间部分自动显示此条报文记录的协议
结构树;
5、选中协议结构树中的“TCP 首部”结点,报文仿真编辑器右侧部分自动显示当前TCP
报文段首部各个字段的内容;
6、查看 TCP 报文段首部中各个字段的结构和内容,分析各个字段的含义。
练习二:编辑TCP 报文段格式中的字段内容
1、在报文仿真编辑器的右侧修改TCP报文段的各个字段的内容;
2、单击“保存”按钮;
3、查看修改后的字段内容。
练习三:发送和接收TCP 报文段序列
1、运行报文解析器;
2、单击报文解析器工具栏上的“开始捕获”按钮,报文解析器开始捕获数据报;
3、单击报文仿真编辑器工具栏上的“发送报文”按钮,报文仿真编辑器弹出“发送成功”
对话框;
4、单击报文解析器工具栏上的“停止捕获”按钮,在报文解析器左侧报文列表框中查看
所接收到的报文仿真编辑器发出的报文;
5、选中其中一条报文记录,报文解析器中间部分自动显示此条报文记录的协议结构树,
比较是否与发送的报文相同。
练习四: TCP 协议分析
1、单击报文仿真编辑器工具栏上的“打开”按钮,选择安装目录下Data
目录中报文仿真编辑器存档文件:tcp.pef ,报文仿真编辑器显示预存的TCP 报文段;
2、单击报文解析器工具栏上的“开始捕获”按钮,报文解析器开始捕获数据报;
3、单击报文仿真编辑器工具栏上的“发送报文”按钮,报文仿真编辑器弹出“发送成功”
对话框,发送出报文列表框中的报文;
4、可以看到报文解析器接收到报文仿真编辑器发出的报文,单击报文解析器工具栏上的
“停止捕获”按钮,停止捕获报文;
5、单击工具栏上的“协议分析”按钮,报文解析器弹出协议分析对话框。
在“协议”下拉
列表中选择“ TCP”,对话框下部的列表框中显示存在的TCP 连接。
选择一个 TCP 连接,单击“确定”按钮;
6、报文解析器左侧的报文列表中显示这一次TCP 连接中所有的报文,右侧以图形的方式显
示该 TCP 连接的交互过程。
选中左侧报文列表中的一条记录,报文解析器中部显示该报文的协议结构树,右侧的协议交互图中以蓝色突出显示该TCP 报文段;
7、在左侧的报文列表中选择不同的TCP 报文段,观察协议交互的进行过程,以及TCP 首
部各个字段值的变化。
【实验报告要求】
1.记录实验数据
发送成功:
接收:
2.分析实验结果
MAC 帧首部
目的地址: 00-24-81-1A-A8-B0
源地址: 00-24-81-1A-A8-48
类型: IP
IP 首部
版本: 4
首部长度: 20 字节
服务类型: 0
总长度: 46
标识: 73
DF:0
MF:0
片偏移: 0
生存时间: 128
协议: 6
首部校验和: 14420
源地址: 129.9.0.14
目的地址: 129.9.0.15
TCP 首部
源端口: 1063
目的端口: 69
序号: 88888888
确认号: 99999999
数据偏移: 20 字节
URG: 0
ACK:1
PSH:0
RST:0
SYN:0
FIN :0
窗口: 17520
校验和: 45264
紧急指针: 0
(16 进制显示框)
其中 :
第一行前 12 个字节为协议MAC 帧首部中的目的硬件地址和源地址
“类型: IP”对应值为08 00
3.未知数据包的分析
本部分通过 Sniffer 软件捕获本机所在计算机网络中的未知数据包,要求对所捕获的数据包进行分析。
数据包一如下(下图截取了该数据包16 进制表中的前10 行):
未知数据包二的 16 进制值
分析上述捕获的数据包为一个
什么协议 的请求报文。
答:分析如下:
第一行前 12 个字节为协议
MAC 帧首部中的目的地址
00-00-5e-00-01-17 和源地址
00-03-47-bb-af-12。
紧随其后的两个字节“
08 00”是 MAC 帧首部中的类型字段,标识从上层接收到什么
类型的协议, “ 08 00
IP
类型的数据报。
”表示从上层收到的是 则接下来的数据就代表该数据报的内容。
“ ”表示硬件类型为以太网,
45 00
IP
“ 08 00
类型, ”表示采用的协议类型为
综上得出,该数据包为一个 TCP 的请求报文。