精华内容
下载资源
问答
  • Wireshark过滤+查看TCP
    千次阅读
    2021-08-03 15:13:02

    Wireshark过滤

    ip.dst==192.168.1.199 目标地址
    ip.src==1.1.1.1 源地址
    tcp.port==8096 and (ip.dst==192.168.1.199 or ip.src==192.168.1.199)目标地址199请求+返回的所有信息
    tcp.port==8096 and (ip.dst==192.168.1.199 or ip.src==192.168.1.199) and http
    
    tcp.port==8096
    tcp.port==80 目标源地址都过滤
    tcp.dstport==80 目标地址
    tcp.srcport==80 源地址
    
    http.request.method=="POST";
    
    ip.src==192.168.101.8 and http
    

    Wireshark查看TCP包
    在这里插入图片描述

    TCP连接:SYN ACK RST UTG PSH FIN
    三次握手:发送端发送一个SYN=1,ACK=0标志的数据包给接收端,请求进行连接,这是第一次握手;
    接收端收到请求并且允许连接的话,就会发送一个SYN=1,ACK=1标志的数据包给发送端,告诉它,可以通讯了,并且让发送端发送一个确认数据包,这是第二次握手;
    最后,发送端发送一个SYN=0,ACK=1的数据包给接收端,告诉它连接已被确认,这就是第三次握手。之后,一个TCP连接建立,开始通讯。

    *SYN:同步标志
    同步序列编号(Synchronize Sequence Numbers)栏有效。该标志仅在三次握手建立TCP连接时有效。它提示TCP连接的服务端检查序列编号,该序列编号为TCP连接初始端(一般是客户端)的初始序列编号。
    在这里,可以把 TCP序列编号看作是一个范围从0到4,294,967,295的32位计数器。通过TCP连接交换的数据中每一个字节都经过序列编号。
    在TCP报头中的序列编号栏包括了TCP分段中第一个字节的序列编号。

    *ACK:确认标志
    确认编号(Acknowledgement Number)栏有效。大多数情况下该标志位是置位的。TCP报头内的确认编号栏内包含的确认编号(w+1,Figure-1)为下一个预期的序列编号,同时提示远端系统已经成功接收所有数据。

    *RST:复位标志
    复位标志有效。用于复位相应的TCP连接。

    *URG:紧急标志
    紧急(The urgent pointer) 标志有效。紧急标志置位,

    *PSH:推标志
    该标志置位时,接收端不将该数据进行队列处理,而是尽可能快将数据转由应用处理。在处理 telnet 或 rlogin 等交互模式的连接时,该标志总是置位的。

    *FIN:结束标志
    带有该标志置位的数据包用来结束一个TCP回话,但对应端口仍处于开放状态,准备接收后续数据。

    TCP的几个状态对于我们分析所起的作用。在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG.其中,对于我们日常的分析有用的就是前面的五个字段。它们的含义是:SYN表示建立连接,FIN表示关闭连接,ACK表示响应,PSH表示有 DATA数据传输,RST表示连接重置。
    其中,ACK是可能与SYN,FIN等同时使用的,比如SYN和ACK可能同时为1,它表示的就是建立连接之后的响应,如果只是单个的一个SYN,它表示的只是建立连接。
    TCP的几次握手就是通过这样的ACK表现出来的。但SYN与FIN是不会同时为1的,因为前者表示的是建立连接,而后者表示的是断开连接。
    RST一般是在FIN之后才会出现为1的情况,表示的是连接重置。一般地,当出现FIN包或RST包时,我们便认为客户端与服务器端断开了连接;
    而当出现SYN和SYN+ACK包时,我们认为客户端与服务器建立了一个连接。
    PSH为1的情况,一般只出现在DATA内容不为0的包中,也就是说PSH为1表示的是有真正的TCP数据包内容被传递。TCP的连接建立和连接关闭,都是通过请求-响应的模式完成的。

    更多相关内容
  • wireshark分析TCP数据包

    万次阅读 2017-09-09 22:05:16
    TCP/IP协议不清楚请回看TCP/IP协议理论在虚拟机运行ubuntu,通过windows下的cuteftp连接ubuntu,利用wireshark进行抓包分析。出现如下数据帧(注意wireshark如何过滤消息): 其中47,48,49分别是三次握手对应的帧...

    TCP/IP协议不清楚请回看TCP/IP协议理论

    在虚拟机运行ubuntu,通过windows下的cuteftp连接ubuntu,利用wireshark进行抓包分析。出现如下数据帧(注意wireshark如何过滤消息):
    这里写图片描述
    其中47,48,49分别是三次握手对应的帧信息。

    三次握手

    47帧/握手1

    这里写图片描述
    这里写图片描述

    上面信息已经非常明确。这是一个客户机请求连接帧。只设置了SYN标志位。并且初始化序列号和确认应答号都为0.

    48帧/握手2

    这里写图片描述
    这里写图片描述

    信息明确,这是服务器到客户机的握手2,服务器将客户机的序列号+1作为确认序号,并将自己的序列号初始化为0.

    49帧/握手3

    这里写图片描述
    这里写图片描述

    三次握手仅仅交换IP数据报TCP的首部,当握手成功之后,就可以通过上层FTP协议交换信息了。

    展开全文
  • Wireshark数据抓包分析之传输层协议(TCP协议) 本实验主要介绍了利用wireshark进行数据抓包并分析TCP协议,通过本实验的学习,你能够熟悉并掌握Wireshark的基本操作,加深对常用网络协议的理解。 实验简介 实验所属...

    Wireshark数据抓包分析之传输层协议(TCP协议)

    本实验主要介绍了利用wireshark进行数据抓包并分析TCP协议,通过本实验的学习,你能够熟悉并掌握Wireshark的基本操作,加深对常用网络协议的理解。

    实验简介

    实验所属系列:Wireshark数据抓包分析

    实验对象: 本科/专科信息安全专业、网络工程

    相关课程及专业:TCP协议分析、网络编程实例教程、计算机网络

    实验时数(学分):4学时

    实验类别:实践实验类

    预备知识

    1.TCP协议的由来

    上一次的课程详细介绍了UDP协议,可以知道该协议实验非常简单,并且容易实现。但是其可靠性较差,一旦将数据包发出,将无法知道对方是否收到。为了解决这个问题,TCP协议就诞生了。使用TCP协议,可以提供网络的安全性。因为使用TCP协议传输数据时,每发送一个数据包都要求确认。如果有一个数据包丢失,就收不到确认包,发送方就知道应该重发这个数据包。这样,TCP协议就保证了数据的安全性。

    2.TCP端口

    TCP端口就是为TCP协议通信提供服务的窗口。所有TCP通信都会使用源端口和目的端口,而这些可以在每个TCP头中找到。端口就像是老式电话机上的接口,一个总计操作员会监视着一个面板上的指示灯和插头。当指示灯亮起的时候,它就会链接这个呼叫者,问它想要和谁通话,然后插一根电缆线将它和它的目的地址链接起来。每次呼叫都需要有一个源端口(呼叫者)和目的端口(接收者)。TCP端口大概就是这样工作的。

    为了能够将数据传输到远程服务器或者设备的特定应用中去,TCP数据包必须知道远程服务所监听的端口。如果想试着链接一个不同于所设置的端口,那么这个通信就会失败。这个序列中的源端口并不十分重要,所以可以随机选择。远程服务器也可以很简单的从发送过来的原始数据中得到这个端口。如下图所示,在图中列举两种服务使用的TCP端口。

    在这里插入图片描述

    图中表示客户端与Web服务器和邮件服务器的一个通信。从该图中,可以看到客户端与不同服务器建立连接时,使用的源端口和目标端口都不同。

    在使用TCP进行通信的时候,有65535个端口可供使用,并通常将这些端口分成两个部分,如下所示:

    1~1023:是标准端口组(忽略掉被预留的0),特定服务会用到这些通常位于标准端口分组中的标准端口。

    1024~65535:是临时端口组(尽管一些操作对此有着不同的定义),当一个服务想在任意时间使用端口进行通信的时候,操作系统都会随机选择这个源端口,让这个通信使用唯一的源端口。这些源端口通常就位于临时端口组。

    3.TCP三次握手

    在TCP/IP协议中,TCP协议提供可靠的链接服务,通过使用三次握手建立一个链接。所有基于TCP协议的通信都需要以两台主机的握手开始。下面将介绍TCP的三次握手。TCP的三次握手如下图所示:

    在这里插入图片描述

    上图描述了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的基本操作。

    2 加深对常用网络协议的理解,提高就业机会。

    3 培养学生理论联系实践的研究兴趣。

    实验环境

    在这里插入图片描述

    服务器:windows 系统,IP地址:10.1.1.33

    测试者:windows系统,IP地址:10.1.1.142

    在实验环境中,我们通过模拟局域网的两台机器之间的数据传输,来抓取和分析TCP协议数据。

    实验步骤一

    根据实验环境,本实验的步骤如下:

    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"来过滤出我们想要的数据,点击工具中的"连接"按钮。如下图

    在这里插入图片描述

    在点击"断开连接"后,会出现TCP的四次断开。全部的过程截图,如下:

    在这里插入图片描述

    如上图,如果还是觉得不方便分析协议的话,Wireshark还为我们提供了着色和指定的帧信息保存功能。左键点击某一帧,右键选择"Colorize Conversation",横向选择"TCP",横向再选择自己喜欢的颜色,操作如下图

    在这里插入图片描述

    结果如下

    在这里插入图片描述

    在这里插入图片描述

    从上面可以很容易的看出,10901,10904,10905帧是tcp的三次握手,906,907,916,917帧是四次断开的数据。如果你还想把三次握手和四次断开的数据包分别保存,Wireshark也提供了这样的功能,并且支持帧序号乱序的情况。下面,我们先来保存三次握手的数据包,因三次握手的帧是乱序,我们先右键点击帧,选择"Mark Packet(toggle)’,在依次选择帧,帧,如下图

    在这里插入图片描述

    在Wireshark的菜单栏中,依次选择FIle->Export Specified Packets 命令,打开如下所示页面

    在这里插入图片描述

    选择Marked packets,并选择保存名字和路径,即可。下面来保存四次断开的数据,在Wireshark的菜单栏中,依次选择FIle->Export Specified Packets 命令,打开如下所示页面

    在这里插入图片描述

    选择Range,输入序号的起始和结束数字,选择保存名字和路径即可。

    实验步骤二

    **任务描述:**通过实验一,我们已经获取了数据包,并且进行了分类保存,实验二将对TCP的三次握手进行详细分析

    1.TCP首部

    在分析TCP数据包之前,先介绍一下TCP首部格式,如下

    TCP首部格式

    在这里插入图片描述

    在上面的表中,TCP首部的各字段含义如下所示:

    源端口:用来传输数据包的端口。

    目标端口:数据包将要被发送到的端口。

    序号:该数字用来表示一个TCP片段。这个域用来保证数据流中的部分没有流失。

    确认号:该数字是通信中希望从另一个设备得到的下一个数据包的序号。

    保留:包括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的三次握手

    TCP三次握手是理解TCP协议最重要的部分,下面我们就以tcp-handshake.pcapng捕获文件为例,来分析TCP的三次握手

    2.1.第一次握手

    TCP第一次握手,捕获的数据包信息如下所示

    在这里插入图片描述

    从Wireshark的Packet List面板中的Info列可以看到显示的TCP标志位是SYN。所以该数据包是客户端向服务器发送的第一次握手连接。在Packet Details面板中,显示了该包的详细信息,下面详细介绍

    在这里插入图片描述

    以上信息,表示这是第1个数据帧的相信信息,并且该包的大小为60个字节。

    在这里插入图片描述

    以上内容是以太网帧头部信息,其实源MAC地址为fa:16:3e:12:07:5a,目标MAC地址为fa:16:3e:e2:22:7a。

    在这里插入图片描述

    以上内容是IPv4首部的详细信息。其中源IP是10.1.1.142,目的IP为10.1.1.33。

    在这里插入图片描述

    以上内容是传输层首部的详细信息,这里使用TCP协议,其中源端口为49698,目标端口为6000.下面对该首部中的每个字段进行详细介绍,

    在这里插入图片描述

    根据以上信息的描述,可以看出该包是客户端发送给服务器建立连接请求的一个数据包。建立连接的源端口号为56678,目标端口号为6000,确认编号为0。而且在标志位FLAGS(0x0002)中,只设置了SYN,也就是位同步标志,表示请求建立连接。选项是8个字节,里面的内容有最大段(MSS),大小为1460字节。

    我们将上面的信息,对应到TCP首部格式的每个字段,如下:

    第一次握手TCP首部

    在这里插入图片描述

    2.2.第二次握手

    TCP第二次握手捕获数据包相信信息,如下:

    在这里插入图片描述

    在该界面显示了第二次握手数据包的详细信息,其中位于TCP上面的信息与第一次握手时相近似,这里不做解释,重点看TCP协议部分,如下

    在这里插入图片描述

    以上描述的详细信息是服务器收到请求后,发给客户端的确认包(SYN+ACK)。根据以上描述,可以看到在该帧数据包中包含这个主机初始的序列号0,以及一个确认号1。这个确认号比之前那个数据包(1帧数据包)序列号大1,是因为该域是用来表示主机所期望得到的下一个序列号的值。

    我们将上面的信息,对应到TCP首部格式的每个字段,如下:

    在这里插入图片描述

    2.3.第三次握手

    TCP第三次握手捕获数据包相信信息,如下:

    在这里插入图片描述

    这里我们直接看重点的TCP协议部分

    在这里插入图片描述

    以上信息就是客户端向服务器发送的确认包。在以上信息中,序列号和确认号都是1。标志位中只设置了ACK,表示该数据包是一个确认包。这样就完成了TCP链接的建立阶段。此时没有Options字段。

    我们将上面的信息,对应到TCP首部格式的每个字段,如下:

    第三次握手TCP首部

    在这里插入图片描述

    实验步骤三

    **任务描述:**TCP的四次断开,也是TCP协议的主要工作之一。下面将通过捕获的tcp-break.pcapng文件,来分析TCP的四次断开。

    1.第一次断开

    TCP第一次断开连接的数据包,如下:

    在这里插入图片描述

    在该界面显示了TCP第一次断开,数据包的详细信息,我们具体来看下TCP部分

    在这里插入图片描述

    通过以上信息的描述,可以看到客户端向服务器发送FIN和ACK标志的数据包开始断开连接,其中FIN和ACK标志位都为1.

    我们将上面的信息,对应到TCP首部格式的每个字段,如下:

    第一次断开TCP首部格式

    在这里插入图片描述

    2.第二次断开

    TCP第二次断开连接的数据包,如下

    在这里插入图片描述

    在该界面显示了TCP第二次断开,数据包的详细信息,我们具体来看下TCP部分

    在这里插入图片描述

    通过以上信息的描述,可以看出该包是服务器向客户端发送的ACK包。其中ACK标志位为1.

    我们将上面的信息,对应到TCP首部格式的每个字段,如下:

    第二次断开TCP首部格式

    在这里插入图片描述

    3.第三次断开

    TCP第三次断开连接的数据包,如下

    在这里插入图片描述

    在该界面显示了TCP第三次断开,数据包的详细信息,我们具体来看下TCP部分

    在这里插入图片描述

    通过以上信息的描述,可以看出该包是服务器向客户端发送的FIN和ACK包。其中FIN和ACK标志位为1.

    我们将上面的信息,对应到TCP首部格式的每个字段,如下:

    第三次断开TCP首部格式

    在这里插入图片描述

    4.第四次断开

    TCP第四次断开连接的数据包,如下

    在这里插入图片描述

    在该界面显示了TCP第四次断开,数据包的详细信息,我们具体来看下TCP部分

    在这里插入图片描述

    通过以上信息的描述,可以看到客户端向服务器发送ACK的包。其中,ACK标志位都为1.

    我们将上面的信息,对应到TCP首部格式的每个字段,如下:

    第四次断开TCP首部格式

    在这里插入图片描述

    答案

    在这里插入图片描述

    分析与思考

    能否清楚的表述出三次握手和四次断开的原理

    在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接,如图1所示。 (SYN包表示标志位syn=1,ACK包表示标志位ack=1,SYN+ACK包表示标志位syn=1,ack=1)

    (1) 第一次握手:建立连接时,客户端A发送SYN包(SEQ_NUMBER=j)到服务器B,并进入SYN_SEND状态,等待服务器B确认。

    (2) 第二次握手:服务器B收到SYN包,必须确认客户A的SYN(ACK_NUMBER=j+1),同时自己也发送一个SYN包(SEQ_NUMBER=k),即SYN+ACK包,此时服务器B进入SYN_RECV状态。

    (3) 第三次握手:客户端A收到服务器B的SYN+ACK包,向服务器B发送确认包ACK(ACK_NUMBER=k+1),此包发送完毕,客户端A和服务器B进入ESTABLISHED状态,完成三次握手。

    完成三次握手,客户端与服务器开始传送数据。

    在这里插入图片描述

    ​ 图1 TCP三次握手建立连接

    由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

    (1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送(报文段4)。

    (2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1(报文段5)。和SYN一样,一个FIN将占用一个序号。

    (3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A(报文段6)。

    (4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1(报文段7)。

    TCP采用四次挥手关闭连接如图2所示。

    在这里插入图片描述

    ​ 图2 TCP四次挥手关闭连接

    1.为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?

    这是因为服务端的LISTEN状态下的SOCKET当收到SYN报文的连接请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可能未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。

    2.为什么TIME_WAIT状态还需要等2MSL后才能返回到CLOSED状态?

    这是因为虽然双方都同意关闭连接了,而且握手的4个报文也都协调和发送完毕,按理可以直接回到CLOSED状态(就好比从SYN_SEND状态到ESTABLISH状态那样);但是因为我们必须要假想网络是不可靠的,你无法保证你最后发送的ACK报文会一定被对方收到,因此对方处于LAST_ACK状态下的SOCKET可能会因为超时未收到ACK报文,而重发FIN报文,所以这个TIME_WAIT状态的作用就是用来重发可能丢失的ACK报文。

    1. 为什么不能用两次握手进行连接?

    我们知道,3次握手完成两个重要的功能,既要双方做好发送数据的准备工作(双方都知道彼此已准备好),也要允许双方就初始序列号进行协商,这个序列号在握手过程中被发送和确认。
    现在把三次握手改成仅需要两次握手,死锁是可能发生的。作为例子,考虑计算机S和C之间的通信,假定C给S发送一个连接请求分组,S收到了这个分组,并发送了确认应答分组。按照两次握手的协定,S认为连接已经成功地建立了,可以开始发送数据分组。可是,C在S的应答分组在传输中被丢失的情况下,将不知道S是否已准备好,不知道S建立什么样的序列号,C甚至怀疑S是否收到自己的连接请求分组。在这种情况下,C认为连接还未建立成功,将忽略S发来的任何数据分组,只等待连接确认应答分组。而S在发出的分组超时后,重复发送同样的分组。这样就形成了死锁。

    **补充:

    a. 默认情况下(不改变socket选项),当你调用close( or closesocket,以下说close不再重复)时,如果发送缓冲中还有数据,TCP会继续把数据发送完。

    b. 发送了FIN只是表示这端不能继续发送数据(应用层不能再调用send发送),但是还可以接收数据。

    c. 应用层如何知道对端关闭?通常,在最简单的阻塞模型中,当你调用recv时,如果返回0,则表示对端关闭。在这个时候通常的做法就是也调用close,那么TCP层就发送FIN,继续完成四次握手。如果你不调用close,那么对端就会处于FIN_WAIT_2状态,而本端则会处于CLOSE_WAIT状态。这个可以写代码试试。

    d. 在很多时候,TCP连接的断开都会由TCP层自动进行,例如你CTRL+C终止你的程序,TCP连接依然会正常关闭,

    TCP和UDP的区别

    TCPUDP
    是否连接面向连接面向非连接
    传输可靠性可靠的不可靠的
    应用场合传输大量的数据少量数据
    速度
    1. TCP协议在传送数据段的时候要给段标号;UDP协议不

    2. TCP协议可靠;UDP协议不可靠

    3. TCP协议是面向连接;UDP协议采用无连接

    4. TCP协议负载较高,采用虚电路;UDP采用无连接

    5. TCP协议的发送方要确认接收方是否收到数据段(3次握手协议)

    6. TCP协议采用窗口技术和流控制

    展开全文
  • 使用wireshark分析tcp报文

    万次阅读 多人点赞 2019-05-12 19:21:12
    在分析tcp网络协议报文时,借助当前强力的工具wireshark可以起到很好的辅助作用。 首先抓取了一个简单的http请求报文, 选取其中的一次完整请求,追踪tcp流: 可以在报文中看到tcp的3次握手,以及http 的request ...

    前言

    TCP协议在网络过程中,是一个最常见不过的协议了。在分析tcp网络协议报文时,借助当前强力的工具wireshark可以起到很好的辅助作用。


    首先抓取了一个简单的http请求报文,

    选取其中的一次完整请求,追踪tcp流:

    可以在报文中看到tcp的3次握手,以及http 的request 和 response ,还有tcp的4次断开。
    另外整个封包列表的面板中也有显示,编号,时间戳,源地址,目标地址,协议,长度,以及封包信息。 可以看到不同的协议用了不同的颜色显示,当然也可以在View ->Coloring Rules中修改显示颜色的规则。

    TCP 基本概念


    上图圈起来的就是封包详细信息(Packet Details Pane):
    这是最重要的信息,用来查看协议中的每一个字段。而OSI七层模型分别为:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
    在封包信息中,每行对应的含义及在OSI模型中的对应关系如下:
      Frame: 物理层的数据帧概况 ->对应OSI七层模型中的【物理层】
      Ethernet II: 数据链路层以太网帧头部信息 ->对应OSI七层模型中的【数据链路层】
      Internet Protocol Version 4: 互联网层IP包头部信息 ->对应OSI七层模型中的【网络层】
      Transmission Control Protocol: 传输层T的数据段头部信息,此处是TCP ->对应OSI七层模型中的【传输层】
    Hypertext Transfer Protocol: 应用层的信息,此处是HTTP协议 ->对应OSI七层模型中的【应用层】

    这根据报文的抓取的设备以及报文被封装的程度,会有不同的显示,比如截图里面的报文是在虚拟机上抓取的,就不会有物理设备的报文信息,在有些网络拓扑环境下,还会有封装成vlan或vxlan的报文,就可以在wireshark那里成功看到。
    不同的模型层和不同协议报文,对应的报文头部长度是不一致的,所以在计算报文的lengeth时,要考虑这些地方。

    tcp 3次握手和4次断开的报文梳理

    首先示例图来说明下tcp的连接/数据传输/断开的过程:

    百度百科解释TCP三次握手过程如下:

    第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN SENT状态,等待服务器确认;SYN:即是同步序列编号(Synchronize Sequence Numbers);

    第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN RECV状态;

    第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

    结合报文情况对比查看;
    client ----> SYN seq=480449269 ------> server
    Server -----> SYN seq=1569499109,ACK=480449270 ----> client
    Clinet (seq = 480449270) -----> ACK=1569499110 ------> server

    如下截图:

    这里的seq num 显示的是绝对值,所以在单纯分析本次请求流时,绝对值的seq num可能不易与阅读,可以调整wireshark配置,查看相对seq num。

    数据报文中,第1,2,3条数据包是进行tcp 3次握手,
    而,第4 到 9 是进行的数据传输,这里是完成了一次http 请求;
    第10,11,12,13 四条报文是进行了tcp的4次断开。

    在这里插入图片描述

    在数据传输中的报文,需要注意报文大小,length和 tcp传输窗口大小,大包/小包,切片/聚合等等,场景各种都有需要灵活分析,经验推理。

    tcp协议4次断开:

    关于断开请求的报文数据这一块,一般会主要关心是那端主要发起的FIN报文标记进行断开,非正常情况更会有RST报文标记。

    总之网络数据报文内容奇多无比,涉及到的知识和工具使用技巧都很多,在运维过程中,还是对运维过程有很大的帮助的。

    展开全文
  • wiresharktcp包并分析

    千次阅读 2021-11-30 10:52:08
    首先,我们要确认我们抓包网站的ip,这里用nslookup查看,这里要查看的原因是我们要分析tcp的包,要知道连接的两台机器的IP,不然你连IP都不知道还这么分析呢?(虽然你可以随便抓一个来分析);这里我们访问百度: ...
  • wireshark抓取TCP

    2021-05-08 14:18:33
    Wireshark抓包是抓取网卡的数据包,如TCP等 一、安装 Wireshark官网下载地址:https://www.wireshark.org 下载完成后直接安装 二、配置 1、只有当手机或其他客户端处于同一网络下,才能抓到包(电脑开启热点,手机...
  • 使用WireShark查看TCP的三次握手

    千次阅读 多人点赞 2020-08-15 19:14:12
        WireShark是一种非常方便的网络抓包工具,下面演示,使用WireShark来抓取TCP的三次握手过程。 一、TCP的三次握手过程如下:     1)客户端发送序列号为Seq = c的SYN数据包给服务器;     2)服务器接到该...
  • 使用WireShark查看TCP连接和断开过程

    千次阅读 2018-10-24 10:50:50
    TCP连接三次握手过程 机器A向机器B发送建立连接请求的过程: A向B发送: SYN=1 Seq=随机生成的数字i。A进入SYN_SENT状态。 B收到A发送的消息:从SYN=1知道A想要和B发送请求。于是B向A发送:SYN=1,ACK number= ...
  • 使用 wireshark 分析 TCP 通信流程 文章目录使用 wireshark 分析 TCP 通信流程一、wireshark是什么?二、使用步骤1.下载 wireshark2.启用 telnet 客户端2.启动 wireshark 并设置过滤器3.观察三次握手过程4.观察确认...
  • WireSharkTCP解析

    2020-09-29 19:43:00
    文章目录三次握手详解SYN字段ACK字段第一次握手MSSWin和WS(window scale 窗口缩放因子)SACK_PERM第二次第三次握手数据传输过程四次挥手 三次握手详解 利用WireShark抓包,追踪流,抓取到一个会话的数据包。前三个...
  • 使用tcpdump和wireshark分析tcp流 Tcpdump抓包 tcpdump -w packets.pcap -n -i eth0 tcp port 60 and dst host 10.22.47.66 -i: 指定网络接口 -n: 不做域名解析,使用ip -w: 抓包存储为可供wireshark解析的...
  • 实验五使用Wireshark分析TCP协议 一实验目的 分析TCP协议 二实验环境 与因特网连接的计算机操作系统为Windows安装有WiresharkIE等软件 三实验步骤 1捕获一个从你电脑到远程服务器的TCP数据 打开FTP客户端连接用TCP为...
  • WireShark网络协议解析器 Version 2.4.13 (v2.4.13-0-gf2c6a94a3f) 查询本地回环的工具RawCap 分析过程: 1、对TCP协议进行分析 (1)利用java编写TCP服务端和客户端(略) (2)打开抓包软件    &...
  • 本文章主要讲述使用VS2019编写C#程序,并通过UDP/TCP进行通信,使用Wireshark抓包软件抓取发送的包并分析数据结构,由于涉及到客户端和通信端,可以使用两台电脑,一台电脑编写客户端代码,一台电脑编写服务器端代码...
  • 使用Wireshark浅析Tcp三次握手

    千次阅读 2021-12-27 09:55:48
    Wireshark抓包工具分析TCP报文中大家比较关注的syn(Synchronize Sequence Numbers 同步序列号)和ack(ACKnowledge Character 确认字符)。 如果你不能简单的解释它,说明你还没有足够理解它 –爱因斯坦 1 什么是TCP...
  • Wireshark系列之6 数据流追踪 一文用到的资源 wireshark
  • Wireshark-TCP协议分析

    2021-01-09 12:15:34
    TCP:传输控制协议  TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。...应用数据被分割成TCP认为最适合发送的数据块。这和UDP完全不同,应用程序产生的数据报长度将保持不变。由TCP传递...
  • wireshark查看TCP三次握手四次挥手

    千次阅读 2018-06-13 14:32:56
    wireshark过滤表达式: 协议过滤 比如TCP,只显示TCP协议。 IP 过滤 比如 ip.src ==192.168.1.102 显示源地址为192.168.1.102, ip.dst==192.168.1.102, 目标地址为192.168.1.102 端口过滤 tcp.port ...
  • Wireshark 跟踪TCP

    万次阅读 2019-06-09 00:13:59
    在一个协议为TCP的包上右击,选择 追踪流-TCP;将进入TCP流追踪; 选择该菜单后,主面板上包列表里,仅列出本次TCP会话的包; 同时会在一个单独的窗口中显示TCP流; 看一下基本是乱码;大体能看出,是...
  • Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。  网络封包分析软件的功能可想像成"电工技师使用电表来量测电流、电压、电阻" 的工作,只是将场景移植到网络上,并将电线替换成网络线。在过去,网络...
  • wireshark 抓取的tcp 数据报文

    万次阅读 2017-07-29 11:34:32
    图1:wireshark 抓取的tcp 数据报文 0000 34 17 eb a9 73 88 58 69 6c 27 77 16 08 00 45 00 0010 00 34 00 00 40 00 3d 06 56 72 c0 a8 3d df c0 a8 0020 28 22 1f 98 ca 50 a3 e6 0a c4 74 47 e4 f7 80...
  • 查找 tcp 握手的三个包: 方法一:随便找一个 http 协议的包,观察其地址(不同于本机 IP 地址-192.168.……)的地址,查询输入 ip.src == 183.3.233.225 or ip.dst ==183.3.233.225 来搜寻相关包。在搜寻出来的包...
  • wireshark抓包分析TCP数据包

    千次阅读 2020-06-24 18:23:18
    1、直接从TCP的三次握手开始说起 三次握手就是客户与服务器建立连接的过程 客户向服务器发送SYN(SEQ=x)报文,然后就会进入SYN_SEND状态 服务器收到SYN报文之后,回应一个SYN(SEQ=y)ACK(ACK=x+1)报文,然后...
  • Wireshark 提示和技巧 | TCP 会话完整性分析
  • Wireshark 分析TCP 报文段

    千次阅读 2020-09-23 17:21:10
    wireshark官网下载TCP分析包:200722_win_scale_examples_anon.pcapng,使用wireshark打开200722_win_scale_examples_anon.pcapng,这里我们选择第4个TCP报文,数据长度len=6,这里主要是为了对应TCP 报文段的首部...
  • 使用wireshark分析tcp

    2020-06-25 01:08:24
    今天使用wireshark来分析一下tcp的一些原理。首先我们建立一个tcp服务器。 const net = require('net'); net.createServer().listen(11111); 再建立一个tcp客户端。 const net = require('net'); net.connect({port...
  • 使用wireshark分析TCP的连接和关闭

    千次阅读 2020-07-12 16:09:59
    这次我们使用 wireshark 这个抓包工具从报文段( 分组 )的角度进一步了解其报文传输过程,对所谓的三次握手和四次挥手有一个感性的认识。 1.简述三次握手过程 1). 主动开启者(通常称为客户端)发送一个 SYN 报文段...
  • Wireshark抓包对其字TCP段理解

    千次阅读 2022-02-13 13:24:44
    首先我们抓包,因为我们要分析TCP,所以wireshark中设置一下,...下图是TCP报文的头,一般是20个字节(不包含选项数据) 首先我们看到端口,端口是TCP/UDP协议中非常重要的一个字段,这个是传输层跟网络层沟通的一个非
  • wireshark——TCP&UDP协议

    千次阅读 2022-04-11 21:59:04
    在计算机网络OSI模型中,它完成第四层传输层所指定的功能,给数据提供可靠的端到端的传输,能够处理顺序传输和恢复错误,并且保证数据能够到达目的地。 端口号: 1、TCP段结构中端口地址都是16比特,可以有在0~...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 26,371
精华内容 10,548
关键字:

wireshark查看tcp数据