TCP报文格式
TCP报文是TCP层传输的数据单元,也称为报文段。
TCP报文首部格式
l 源端口(Source Port):16位的源端口字段包含初始化通信的端口号。源端口和IP地址的作用是标识报文的返回地址。
l 目的端口(Destination Port):16位的目的端口字段定义传输的目的。这个端口指明接收方计算机上的应用程序接口。
l 序列号(Sequence Number):该字段用来标识TCP源端设备向目的端设备发送的字节流,它表示在这个报文段中的第几个数据字节。序列号是一个32位的数。
l 确认号(Acknowledge Number):TCP使用32位的确认号字段标识期望收到的下一个段的第一个字节,并声明此前的所有数据已经正确无误地收到,因此,确认号应该是上次已成功收到的数据字节序列号加1。收到确认号的源计算机会知道特定的段已经被收到。确认号的字段只在ACK标志被设置时才有效。
l 数据偏移(Data Offset):这个4位字段包括TCP头大小。由于首部可能含有选项内容,因此TCP首部的长度是不确定的。首部长度的单位是32比特或4个八位组。首部长度实际上也指示了数据区在报文段中的起始偏移值。
l 保留(Reserved):6位置0的字段。为将来定义新的用途保留。、
l 控制位(Control Bits):共6位,每一位标志可以打开一个控制功能。
URG(Urgent Pointer Field Significant,紧急指针字段标志):表示TCP包的紧急指针字段有效,用来保证TCP连接不被中断,并且督促中间齐备尽快处理这些数据。
ACK(Acknowledgement field significant,确认字段标志): 取1时表示应答字段有效,也即TCP应答号将包含在TCP段中,为0则反之。
PSH(Push Function,推功能):这个标志表示Push操作。所谓Push操作就是指在数据包到达接收端以后,立即送给应用程序,而不是在缓冲区中排队。
RST(Reset the connection,重置连接):这个标志表示感谢连接复位请求,用来复位那些产生错误的连接,也被用来拒绝错误和非法的数据包。
SYN(Synchronize sequence numbers,同步序列号):表示同步序号,用来建立连接。
FIN(No more data from sender):表示发送端已经发送到数据末尾,数据传送完成,发送FIN标志位的TCP段,连接将被断开。
l 窗口(Window):目的主机使用16位的窗口字段告诉源主机它期望每次收到的数据通的字节数。
l 校验和(Checksum):TCP头包括16位的校验和字段用于错误检查。源主机基于部分IP头信息,TCP头和数据内容计算一个校验和,目的主机也要进行相同的计算,如果收到的内容没有错误过,两个计算应该完全一样,从而证明数据的有效性。
l 紧急指针(Urgent Pointer):紧急指针字段是一个可选的16位指针,指向段内的最后一个字节位置,这个字段只在URG标志被设置时才有效。
l 选项(Option):至少1字节的可变长字段,标识哪个选项(如果有的话)有效。如果没有选项,这个字节等于0,说明选项的结束。这个字节等于1表示无需再有操作;等于2表示下四个字节包括源机器的最大长度(Maximum Segment Size,MSS).
l 填充(Padding):这个字段中加入额外的零,以保证TCP头是32的整数倍。
==========================================tcp报文格式实验=-======================
实验六 TCP报文段的格式及协议分析
【实验目的】
1、 分析TCP报文段的格式;
2、 了解TCP报文段首部结构以及各个字段的内容及其作用;
3、 通过观察TCP协议的交互掌握TCP连接建立、数据传输、连接释放的过程。
【实验内容】
1、 分析TCP报文段的结构,熟悉各个字段的内容、功能、格式和取值范围;
2、 编辑TCP报文段首部各字段的内容;
3、 单个或批量发送已经编辑好的TCP报文段;
4、 分析TCP协议的交互过程。
【实验原理】
TCP是TCP/IP体系中面向连接的运输层协议,提供全双工的和可靠交付的服务。TCP报文段的格式如下图所示:
源端口和目的端口:各占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连接建立的过程如下图所示:
TCP连接释放的过程如下图所示:
【实验步骤】
练习一:分析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”表示硬件类型为以太网,
“08 00”表示采用的协议类型为IP类型,
综上得出,该数据包为一个 TCP 的请求报文。