Wireshark数据抓包分析之传输层协议(TCP协议)
1.TCP协议的由来
UDP协议,实验⾮常简单,并且容易实现。但是其可靠性较差,⼀旦将数据包发出,将⽆法知道对⽅是否收到。
为了解决这个问题,TCP协议就诞⽣了。使⽤TCP协议,可以提供⽹络的安全性。因为使⽤TCP协议传输数据时,每发送⼀个数据包都要求确认。如果有⼀个数据包丢失,就收不到确认包,发送⽅就知道应该重发这个数据包。这样,TCP协议就保证了数据的安全性。
2.TCP端⼝
TCP端⼝就是为TCP协议通信提供服务的窗⼝。所有TCP通信都会使⽤源端⼝和⽬的端⼝,⽽这些可以在每个TCP头中到。端⼝就像是⽼式电话机上的接⼝,⼀个总计操作员会监视着⼀个⾯板上的指⽰灯和插头。当指⽰灯亮起的时候,它就会链接这个呼叫者,问它想要和谁通话,然后插⼀根电缆线将它和它的⽬的地址链接起来。每次呼叫都需要有⼀个源端⼝(呼叫者)和⽬的端⼝(接收者)。TCP端⼝⼤概就是这样⼯作的。
为了能够将数据传输到远程服务器或者设备的特定应⽤中去,TCP数据包必须知道远程服务所监听的端⼝。
如果想试着链接⼀个不同于所设置的端⼝,那么这个通信就会失败。这个序列中的源端⼝并不⼗分重要,所以可以随机选择。远程服务器也可以很简单的从发送过来的原始数据中得到这个端⼝。如下图所⽰,在图中列举两种服务使⽤的TCP端⼝。
tcp三次握手图解图中表⽰客户端与Web服务器和邮件服务器的⼀个通信。从该图中,可以看到客户端与不同服务器建⽴连接时,使⽤的源端⼝和⽬标端⼝都不同。
在使⽤TCP进⾏通信的时候,有65535个端⼝可供使⽤,并通常将这些端⼝分成两个部分,如下所⽰:
1~1023:是标准端⼝组(忽略掉被预留的0),特定服务会⽤到这些通常位于标准端⼝分组中的标准端⼝。
1024~65535:是临时端⼝组(尽管⼀些操作对此有着不同的定义),当⼀个服务想在任意时间使⽤端⼝进⾏通信的时候,操作系统都会随机选择这个源端⼝,让这个通信使⽤唯⼀的源端⼝。这些源端⼝通常就位于临时端⼝组。
3.TCP三次握⼿
在TCP/IP协议中,TCP协议提供可靠的链接服务,通过使⽤三次握⼿建⽴⼀个链接。所有基于TCP协议的通信都需要以两台主机的握⼿开始。
Seq表⽰请求序列号,Ack表⽰确认序列号,SYN和ACK为控制位。
3.1 第⼀次握⼿
第⼀次握⼿建⽴连接时,客户端向服务器端发送SYN报⽂(Seq=x,SYN=1),并进⼊SYN_SEND状态,等待服务器确认。
3.2 第⼆次握⼿
第⼆次握⼿实际上是分两部分完成的。即SYN+ACK(请求和确认)报⽂。
(1)服务器收到了客户端的请求,向客户端回复⼀个确认信息(Ack=x+1)。
(2)服务器再向客户端发送⼀个SYN包(Seq=y)建⽴连接的请求,此时服务器进⼊SYN_RECV状态,如下图所⽰:
3.3 第三次握⼿
第三次握⼿,客户端收到服务器的回复(SYN+ACK报⽂)。此时,客户端也要向服务器发送确认包(ACK).此包发送完毕,客户端和服务器进⼊ESTABLISHED状态,完成三次握⼿,如下图所⽰:
这样就完成了三次握⼿,此时,客户端就可以与服务器开始传送数据了。
4.TCP四次断开
在TCP协议中,每次握⼿后都会终⽌。就和⼈与⼈之间相互问候⼀样,最终都会有⼀句再见。TCP终⽌⽤来在两台设备完成通信后正常的结束链接。该过程包含4个数据包,并且⽤⼀个FIN标志来标明链接的终结。
TCP四次断开连接如下图
如上图所⽰的四个过程,通过发送了4个数据包断开了与服务器的链接,整个过程的⼀个详细概述如下:
(1)客户端通过发送⼀个设置了FIN和ACK标志的TCP数据包,告诉服务器通信已经完成。
(2)服务器收到客户端发送的数据包后,发送⼀个ACK数据包来响应客户端。
(3)服务器再向客户端传送⼀个⾃⼰的FIN/ACK数据包。
(4)客户端收到服务器的FIN/ACK包时,响应服务器⼀个ACK数据包。然后结束通信过程。
5.TCP重置
在理想情况中,每⼀个连接都会以TCP四次断开来正常的结束会话。但是在现实中,连接经常会突然中断。例如,这可能由于⼀个潜在的攻击者正在进⾏断开扫描,或者仅仅是主机配置的错误。在这些情况下,就需要使⽤设置了RST标志的TCP数据包。RST标志⽤来指出连接异常中⽌或拒绝连接请求
的包。
根据实验环境,本实验的步骤如下:
1.在测试环境使⽤发包⼯具和Wireshark抓取TCP三次握⼿和四次断开的数据包。
2.详细分析TCP协议的三次握⼿以及四次断开。
任务描述:安装发包⼯具,并配置TCP客户端,服务端,与Wireshark配合使⽤此⼯具与分析UDP协议时相同,实验室环境中已经安装,在此再重复⼀遍,我们使⽤" TCP&UDP测试⼯具"来制作和发送TCP数据包。双击测试者机器桌⾯的" TCP&UDP测试⼯具",会出现下图显⽰页⾯:
下⾯我们需要配置TCP的服务端以及客户端。
1.配置服务器端
选择10.1.1.33的机器,双击桌⾯的" TCP&UDP测试⼯具",右键点击服务器模式,在下拉列表中,选择创建服务器,如下图:
选择"创建服务器"之后,会弹出服务器端⼝设置,本次使⽤默认⼯具给的6000端⼝即可,点击"确定"按钮。
点击"确定"按钮之后,在左侧的服务器模式列表中,会出现创建的列表,选择我们创建的服务器,右键
点击,选择"启动服务器",即完成了服务器端的配置
2.配置客户端
选择10.1.1.142的机器,双击桌⾯的" TCP&UDP测试⼯具",右键点击客户端模式,在下拉列表中,选择"创建连接",如下图:
在弹出的窗⼝中,选择TCP协议,服务器IP为10.1.1.33.端⼝6000,本机随意IP,如下图
点击创建后,如下图,
3.获取TCP数据包
获取的TCP协议的数据包。分为两部分,即TCP三次握⼿,四次断开的数据。但在实际的操作中,可能遇到的情况较多,⽐如源IP和⽬的IP⽐较多,协议的帧号乱序等各种问题。在此,我们教⼤家简单的过滤功能,着⾊功能⽅便过滤和查看。启动Wireshark,在Filter中输⼊tcp,点击Apply会看到很多的数据包,这是因为测试环境中,有很多的应⽤程序,与其服务器连接,使⽤TCP协议。我们已知两台机器的IP情况下,可以在filter中输⼊"ip.addr == 10.1.1.142 and ip.addr == 10.1.1.33"来过滤出我们想要的数据,点击⼯具中的"连接"按钮。在发送区域输⼊"hetinlabtcp"点击发送,会持续的更新TCP数据。
Wireshark还为我们提供了着⾊和指定的帧信息保存功能。左键点击某⼀帧,右键选择"Colorize Conversation",横向选择"TCP",横向再选择⾃⼰喜欢的颜⾊,操作如下图
从上⾯可以很容易的看出,70,73,74帧是tcp的三次握⼿,428,429,430,431帧是四次断开的数据。如果你还想把三次握⼿和四次断开的数据包分别保存,Wireshark也提供了这样的功能,并且⽀持帧序号乱序的情况。下⾯,我们先来保存三次握⼿的数据包,因三次握⼿的帧是乱序,我们先右键点击70帧,选择"Mark Packet(toggle)',在依次选择73帧,74帧,如下图
在Wireshark的菜单栏中,依次选择FIle->Export Specified Packets 命令,
择Marked packets,并选择保存名字和路径,即可。下⾯来保存四次断开的数据,因428-431为连续的序号,所以在Wireshark的菜单栏中,依次选择FIle->Export Specified Packets 命令
选择Range,输⼊序号的起始和结束数字,选择保存名字和路径即可。
实验步骤⼆
任务描述:通过实验⼀,我们已经获取了数据包,并且进⾏了分类保存,实验⼆将对TCP的三次握⼿进⾏详细分析
1.TCP⾸部
在分析TCP数据包之前,先介绍⼀下TCP⾸部格式,如下
TCP⾸部格式
在上⾯的表中,TCP⾸部的各字段含义如下所⽰:
源端⼝:⽤来传输数据包的端⼝。
⽬标端⼝:数据包将要被发送到的端⼝。
序号:该数字⽤来表⽰⼀个TCP⽚段。这个域⽤来保证数据流中的部分没有流失。seq
确认号:该数字是通信中希望从另⼀个设备得到的下⼀个数据包的序号。ack
保留:包括Resverved、Nonce、CWR、和ENC-Echo,共6个⽐特位。
标记:⽤来表⽰所传输的TCP数据包类型。该字段中可⽤的标记包括URG、ACK、PSH、RST、SYN和FIN。
窗⼝⼤⼩:TCP接收者缓冲的字节⼤⼩。
校验和:⽤来保证TCP⾸部和数据的内容,在达到⽬的地时的完整性。
紧急指针:如果设置了URG位,这个域将被检查作为额外的指令,告诉CPU从数据包的哪⾥开始读取数据。
选项:各种可选的域,可以在TCP数据包中进⾏指定。
上⾯提到了TCP传输时,可⽤到的标记位,下⾯分别介绍这6种标记的作⽤,如下:
URG:紧急标志,表⽰TCP包的紧急指针有效,⽤来保证TCP连接不被中断,并且督促中间层设备要尽快处理这些数据。
ACK:确认标志,表⽰应答域有效,就是前⾯所说的TCP应答号将会包含在TCP数据包中,该标志位有两个值,分别是0和1。当为1的时候,表⽰应答域有效。反之为0。
PSH:该标志位表⽰Push操作。所谓Push操作就是指在数据包到达接收端以后,⽴即传送给应⽤程序,⽽不是在缓存区排队。
RST:该标志位表⽰链接复位请求,⽤来复位那些产⽣错误的链接,也被⽤来拒绝错误和⾮法的数据包。
SYN:表⽰同步序号,⽤来建⽴连接。SYN 标志位和ACK标志位搭配使⽤,当连接请求的时候,SYN=1,ACK=0;当连接被响应的时
候,SYN=1,ACK=1。这个标志的数据包经常被⽤来进⾏端⼝扫描。扫描者发现⼀个只有SYN的数据包,如果对⽅主机响应了⼀个数据包回来,就表⾯该主机存在这个端⼝;但是由于这种扫描⽅式只是进⾏TCP三次握⼿的第⼀次握⼿,因此这种扫描成功表⽰扫描的机器不安全。因为⼀个安全的主机,将会强制要求⼀个链接严格的进⾏TCP的三次握⼿。
FIN:表⽰发送端以及达到数据末尾,也就是说双⽅的数据传送完毕,没有数据可以传送了。此时发送FIN标志位的TCP数据包后,链接将被断开。这个标志的数据包也经常被⽤于进⾏端⼝扫描。当⼀个FIN标志的TCP数据包发送到⼀台计算机的特定端⼝后,如果这台计算机响应了这个数据,并且反馈回来⼀个RST标志的TCP包,就表明这台计算机上没有打开这个端⼝,但是这台计算机是存在的;如果这台计算机没有反馈回来任何数据包,这就标明,这台被扫描的计算机存在这个端⼝。
2.分析TCP的三次握⼿
2.1.第⼀次握⼿
TCP第⼀次握⼿,捕获的数据包信息如下所⽰

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。