Wireshark数据抓包分析之传输层协议(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"来过滤出我们想要的数据,点击工具中的"连接"按钮。如下图

 在发送区域输入"hetinlabtcp"点击发送,会持续的更新TCP数据。

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

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

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

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

 选择Marked packets,并选择保存名字和路径,即可。下面来保存四次断开的数据,因428-431为连续的序号,所以在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个数据帧的相信信息,并且该包的大小为62个字节。

以上内容是以太网帧头部信息,其实源MAC地址为02:00:04:78:01:7b,目标MAC地址为02:00:7b:16:02:43。

    

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

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

 

Source Port: 56678 (56678)                   #源端口号

Destination Port: 6000 (6000)                  #目标端口号

Stream index: 0                             #流节点号

TCP Segment Len: 0                        #分段长度

Sequence number: 0    (relative sequence number)   #序列号

Acknowledgment number: 0                      #确认编号

Header Length: 28 bytes                       #首部长度

.... 0000 0000 0010 = Flags: 0x002 (SYN)            #标志,这里是SYN

     000. .... .... = Reserved: Not set

     ...0 .... .... = Nonce: Not set

     .... 0... .... = Congestion Window Reduced (CWR): Not set

     .... .0.. .... = ECN-Echo: Not set

     .... ..0. .... = Urgent: Not set                #紧急指针            

     .... ...0 .... = Acknowledgment: Not set       #确认编号

     .... .... 0... = Push: Not set                 

     .... .... .0.. = Reset: Not set

     .... .... ..1. = Syn: Set                    #设置SYN标志位,值为1

    Expert Info (Chat/Sequence): Connection establish request (SYN): server port                      

      6000                               #专家信息   

         Connection establish request (SYN): server port 6000   #消息

         Severity level: Chat                              #安全级别

         Group: Sequence                            #组

.... .... ...0 = Fin: Not set                       #FIN标志位

Window size value: 8192               #窗口大小

Calculated window size: 8192              #估计的窗口大小

Checksum: 0x16d3 [validation disabled]        #校验和

   Good Checksum: False                 

Bad Checksum: False

Urgent pointer: 0

Options: (8 bytes), Maximum segment size, No-Operation (NOP), No-Operation (NOP), SACK permitted                      #选项

    Maximum segment size: 1460 bytes                 #最大段大小

       Kind: Maximum Segment Size (2)

       Length: 4

       MSS Value: 1460

No-Operation (NOP)                            #无操作指令

       Type: 1

             0... .... = Copy on fragmentation: No

             .00. .... = Class: Control (0)

             ...0 0001 = Number: No-Operation (NOP) (1)

No-Operation (NOP)                     #无操作指令

         Type: 1

              0... .... = Copy on fragmentation: No

              .00. .... = Class: Control (0)

              ...0 0001 = Number: No-Operation (NOP) (1)

TCP SACK Permitted Option: True           #TCP SACK允许选项

        Kind: SACK Permitted (4)

        Length: 2

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

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

第一次握手TCP首部

2.2.第二次握手

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

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

Source Port: 6000(6000)                   #源端口号

Destination Port: 56678(56678)                  #目标端口号

Stream index: 0                             #流节点号

TCP Segment Len: 0                        #分段长度

Sequence number: 0    (relative sequence number)   #序列号

Acknowledgment number: 1    (relative ack number)         #确认编号,值为1

Header Length: 28 bytes                       #首部长度

.... 0000 0001 0010 = Flags: 0x012 (SYN,ACK)    #标志位,此处为(SYN,ACK)

    000. .... .... = Reserved: Not set

    ...0 .... .... = Nonce: Not set

     .... 0... .... = Congestion Window Reduced (CWR): Not set

     .... .0.. .... = ECN-Echo: Not set

     .... ..0. .... = Urgent: Not set                           

     .... ...1 .... = Acknowledgment: Not set       #确认编号已设置

     .... .... 0... = Push: Not set                

     .... .... .0.. = Reset: Not set

     .... .... ..1. = Syn: Set                    #请求位

Expert Info (Chat/Sequence): Connection establish request (SYN): server port                 

6000                               #专家信息   

Connection establish request (SYN): server port 6000   #消息

     Severity level: Chat                              #安全级别

     roup: Sequence                                  #组

     .... .... ...0 = Fin: Not set                               #FIN标志位

Window size value: 8192               #窗口大小

Calculated window size: 8192              #估计的窗口大小

Checksum: 0x5bf8 [validation disabled]        #校验和

Good Checksum: False                 

Bad Checksum: False

Urgent pointer: 0

Options: (8 bytes), Maximum segment size, No-Operation (NOP), No-Operation (NOP), SACK permitted               #选项

Maximum segment size: 1460 bytes                 #最大段大小

     Kind: Maximum Segment Size (2)

     Length: 4

     MSS Value: 1460

No-Operation (NOP)                            #无操作指令

     Type: 1

          0... .... = Copy on fragmentation: No

          .00. .... = Class: Control (0)

          ...0 0001 = Number: No-Operation (NOP) (1)

No-Operation (NOP)                     #无操作指令

       Type: 1

        0... .... = Copy on fragmentation: No

        .00. .... = Class: Control (0)

        ...0 0001 = Number: No-Operation (NOP) (1)

TCP SACK Permitted Option: True           #TCP SACK允许选项

   Kind: SACK Permitted (4)

   Length: 2

SEQ/ACK analysis                  #序列号/确认编号分析

This is an ACK to the segment in frame: 1

The RTT to ACK the segment was: 0.002362000 seconds

iRTT: 0.002387000 seconds

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

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

第二次握手TCP首部

2.3.第三次握手

TCP第三次握手捕获数据包相信信息

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

Source Port: 56678(56678)                  #源端口号

Destination Port: 6000(6000)                  #目标端口号

Stream index: 0                             #流节点号

TCP Segment Len: 0                        #分段长度

Sequence number: 1   (relative sequence number)   #序列号

Acknowledgment number: 1    (relative ack number)         #确认编号,值为1

Header Length: 20 bytes                       #首部长度

.... 0000 0001 0000 = Flags: 0x010  (ACK)           #标志位,此处为(ACK)

     000. .... .... = Reserved: Not set

     ...0 .... .... = Nonce: Not set

     .... 0... .... = Congestion Window Reduced (CWR): Not set

     .... .0.. .... = ECN-Echo: Not set

     .... ..0. .... = Urgent: Not set                          

     .... ...1 .... = Acknowledgment: Not set       #确认编号已设置

     .... .... 0... = Push: Not set                

     .... .... .0.. = Reset: Not set

     .... .... ..0. = Syn: Set                    #请求位

     .... .... ...0 = Fin: Not set                               #FIN标志位

Window size value: 64240               #窗口大小

Calculated window size: 64240                   #估计的窗口大小

Window size scaling factor: -2 (no window scaling used)  #窗口大小缩放比例因素

Checksum: 0x16cb [validation disabled]        #校验和

    Good Checksum: False                 

    Bad Checksum: False

Urgent pointer: 0

SEQ/ACK analysis                  

    This is an ACK to the segment in frame: 2

The RTT to ACK the segment was: 0.000025000 seconds

iRTT: 0.002387000 seconds

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

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

第三次握手TCP首部

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

1.第一次断开

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

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

Source Port: 56678(56678)                  #源端口号

Destination Port: 6000(6000)                  #目标端口号

Stream index: 0                         #流节点号

TCP Segment Len: 0                        #分段长度

Sequence number: 1   (relative sequence number)       #序列号

Acknowledgment number: 1    (relative ack number)         #确认编号

Header Length: 20 bytes                       #首部长度

.... 0000 0001 0001 = Flags: 0x011 (FIN,ACK)    #标志位,此处为(FIN,ACK)

     000. .... .... = Reserved: Not set

     ...0 .... .... = Nonce: Not set

     .... 0... .... = Congestion Window Reduced (CWR): Not set

     .... .0.. .... = ECN-Echo: Not set

     .... ..0. .... = Urgent: Not set                          

     .... ...1 .... = Acknowledgment: Not set       #确认编号已设置

     .... .... 0... = Push: Not set                

     .... .... .0.. = Reset: Not set

     .... .... ..0. = Syn: Set                    #请求位

     .... .... ...1 = Fin: Not set                               #FIN标志位

Expert Info (Chat/Sequence): Connection finish (FIN)       #专家信息

     Connection finish (FIN)          #消息内容,连接完成(FIN)

     Severity level: Chat           #安全级别

     Group: Sequence

Window size value: 64240               #窗口大小

Calculated window size: 64240                   #估计的窗口大小

   Window size scaling factor: -1 (unknown)      #窗口大小缩放比例因素

Checksum: 0x16cb [validation disabled]        #校验和

   Good Checksum: False                 

   Bad Checksum: False

Urgent pointer: 0

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

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

第一次断开TCP首部格式

2.第二次断开

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

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

Source Port: 6000(6000)                  #源端口号

Destination Port: 56678(56678)                  #目标端口号

Stream index: 0                             #流节点号

TCP Segment Len: 0                        #分段长度

Sequence number: 1   (relative sequence number)    #序列号

Acknowledgment number: 2    (relative ack number)         #确认编号

Header Length: 20 bytes                       #首部长度

.... 0000 0001 0000 = Flags: 0x010(ACK)    #标志位,此处为(ACK)

     000. .... .... = Reserved: Not set

     ...0 .... .... = Nonce: Not set

     .... 0... .... = Congestion Window Reduced (CWR): Not set

     .... .0.. .... = ECN-Echo: Not set

     .... ..0. .... = Urgent: Not set                          

     .... ...1 .... = Acknowledgment: Not set       #确认编号已设置

     .... .... 0... = Push: Not set                

     .... .... .0.. = Reset: Not set

     .... .... ..0. = Syn: Set                    #请求位

     .... .... ...0= Fin: Not set                               #FIN标志位

Window size value: 64240               #窗口大小

Calculated window size: 64240                   #估计的窗口大小

Window size scaling factor: -1 (unknown)      #窗口大小缩放比例因素

Checksum: 0xadbe [validation disabled]        #校验和

    Good Checksum: False                 

    Bad Checksum: False

Urgent pointer: 0

SEQ/ACK analysis

     This is an ACK to the segment in frame: 1

     The RTT to ACK the segment was: 0.000369000 seconds

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

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

第二次断开TCP首部格式

3.第三次断开

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

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

Source Port: 6000(6000)                  #源端口号

Destination Port: 56678(56678)                  #目标端口号

Stream index: 0                             #流节点号

TCP Segment Len: 0                        #分段长度

Sequence number: 1   (relative sequence number)      #序列号

Acknowledgment number: 2    (relative ack number)         #确认编号

Header Length: 20 bytes                       #首部长度

.... 0000 0001 0001 = Flags: 0x010(FIN,ACK)    #标志位,此处为(FIN,ACK)

     000. .... .... = Reserved: Not set

     ...0 .... .... = Nonce: Not set

     .... 0... .... = Congestion Window Reduced (CWR): Not set

     .... .0.. .... = ECN-Echo: Not set

     .... ..0. .... = Urgent: Not set                          

     .... ...1 .... = Acknowledgment: Not set       #确认编号已设置

     .... .... 0... = Push: Not set                

     .... .... .0.. = Reset: Not set

     .... .... ..0. = Syn: Set                    #请求位

     .... .... ...1= Fin: Not set                     #FIN标志位

Expert Info (Chat/Sequence): Connection finish (FIN)    #专家信息

      Connection finish (FIN)

      Severity level: Chat

      Group: Sequence

Window size value: 64240               #窗口大小

Calculated window size: 64240                   #估计的窗口大小

Window size scaling factor: -1 (unknown)   #窗口大小缩放比例因素

Checksum: 0xadbe [validation disabled]        #校验和

   Good Checksum: False                 

   Bad Checksum: False

Urgent pointer: 0

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

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

第三次断开TCP首部格式

4.第四次断开

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

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

Source Port: 56678(56678)                  #源端口号

Destination Port: 6000(6000)                  #目标端口号

Stream index: 0                          #流节点号

TCP Segment Len: 0                        #分段长度

Sequence number: 2   (relative sequence number)      #序列号

Acknowledgment number: 1    (relative ack number)         #确认编号

Header Length: 20 bytes                       #首部长度

.... 0000 0001 0000 = Flags: 0x010 (ACK)    #标志位,此处为(ACK)

     000. .... .... = Reserved: Not set

     ...0 .... .... = Nonce: Not set

     .... 0... .... = Congestion Window Reduced (CWR): Not set

     .... .0.. .... = ECN-Echo: Not set

     .... ..0. .... = Urgent: Not set                          

     .... ...1 .... = Acknowledgment: Not set       #确认编号已设置

     .... .... 0... = Push: Not set                

     .... .... .0.. = Reset: Not set

     .... .... ..0. = Syn: Set                    #请求位

     .... .... ...1 = Fin: Not set                               #FIN标志位

Window size value: 64240               #窗口大小

Calculated window size: 64240                   #估计的窗口大小

Window size scaling factor: -1 (unknown)      #窗口大小缩放比例因素

Checksum: 0x16cb [validation disabled]        #校验和

    Good Checksum: False                 

    Bad Checksum: False

Urgent pointer: 0

SEQ/ACK analysis

    This is an ACK to the segment in frame: 3

    The RTT to ACK the segment was: 0.000040000 seconds

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

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

第四次断开TCP首部格式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/888840.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【目标检测】【反无人机目标检测】使用SEB-YOLOv8s实时检测未经授权的无人机

Real-Time Detection of Unauthorized Unmanned Aerial Vehicles Using SEB-YOLOv8s 使用SEB-YOLOv8s实时检测未经授权的无人机 论文链接 0.论文摘要 摘要:针对无人机的实时检测,复杂背景下无人机小目标容易漏检、难以检测的问题。为了在降低内存和计算…

Flume基础概念

目录 作用组件构成ClientFlowAgentSourceSinkEvent 和Log4j的区别与定位事务传出流程输入到sourcesource端输入Channel 接收输入到SinkSink输出 作用 Flume可以从各种来源(如日志文件、消息队列、网络数据、文件系统、数据库等)收集数据,并将…

Unity 设计模式-观察者模式(Observer Pattern)详解

观察者模式 观察者模式(Observer Pattern)是一种行为型设计模式,它定义了对象之间的一对多依赖关系。当一个对象的状态发生变化时,它的所有依赖者(观察者)都会收到通知并自动更新。这种模式用于事件处理系…

论文:IoU Loss for 2D/3D Object Detection

摘要:在2D/3D目标检测任务中,IoU (Intersection-over- Union)作为一种评价指标,被广泛用于评价不同探测器在测试阶段的性能。然而,在训练阶段,通常采用常见的距离损失(如L1或L2)作为损失函数,以最小化预测值…

vue.js学习(day 20)

综合案例:购物车 数据渲染 构建cart购物车模块 准备后端接口服务环境 请求数据存入vuex cart.js // 新建购物车模块 import axios from axios export default {namespaced: true,state () {return {// 购物车数据 [{},{}]list: []}},mutations: {updateList (…

RAG系统分类、评估方法与未来方向

分享一篇RAG综述:Retrieval-Augmented Generation for Large Language Models: A Survey,主要想了解一下RAG的评估方法,分享给大家。 文章目录 一、RAG分类二、评估方法三、未来方向 一、RAG分类 RAG分类:Navie RAG、Advanced RA…

美国大选后,用HMM模型做特斯拉股价波动解析

作者:老余捞鱼 原创不易,转载请标明出处及原作者。 写在前面的话:本文主要探讨如何利用高斯隐马尔可夫模型(HMM)预测股票价格,我们将分步进行说明:包括数据准备、特征选择、训练 HMM 模型、最后…

VSCode(四)CMake调试

1. 工具准备 1.1 C环境插件 1.2 CMake插件 2. Cmake工程 2.1 创建项目文件夹 ex:CMAKE_TEST 2.2 创建CMake工程 (shift ctl P), 选择"CMAKE: Quick Start": 2.3 填写project name: (ex: test_cmake) 2.4 选择”Executable“ 项目文件内会自动…

从 HTML 到 CSS:开启网页样式之旅(七)—— CSS浮动

从 HTML 到 CSS:开启网页样式之旅(七)—— CSS浮动 前言一、浮动的简介1.没有浮动的代码和效果2.加入浮动的代码和效果 二、元素浮动后的特点1. 脱离文档流2.宽高特性:3.共用一行:4.margin 特性:5.区别于行…

微信小程序实现图片拖拽调换位置效果 -- 开箱即用

在编写类似发布朋友圈功能的功能时,需要实现图片的拖拽排序,删除图片等功能。 一、效果展示 **博主的小程序首页也采用了该示例代码,可以在威信中搜索:我的百宝工具箱 二、示例代码 1.1、在自己的小程序中创建组件 1.2、组件…

通过 FRP 实现 P2P 通信:控制端与被控制端配置指南

本文介绍了如何通过 FRP 实现 P2P 通信。FRP(Fast Reverse Proxy)是一款高效的内网穿透工具,能够帮助用户突破 NAT 和防火墙的限制,将内网服务暴露到公网。通过 P2P 通信方式,FRP 提供了更加高效、低延迟的网络传输方式…

php7.4安装pg扩展-contos7

今天接到一个需求,就是需要用thinkphp6链接pg(postgresql)数据库。废话不多说,直接上操作步骤 一、安装依赖 yum install -y sqlite-devel libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel libcurl libcurl-devel libjpeg libjpeg-dev…

CentOS7.X 安装RustDesk自建服务器实现远程桌面控制

参照文章CentOS安装RustDesk自建服务器中间总有几个位置出错,经实践做个记录防止遗忘 一 环境&工具准备 1.1 阿里云轻量服务器、Centos7系统、目前最高1.1.11版本rustdesk-server-linux-amd64.zip 1.2 阿里云轻量服务器–安全组–开放端口:TCP(21…

TCP Analysis Flags 之 TCP Spurious Retransmission

前言 默认情况下,Wireshark 的 TCP 解析器会跟踪每个 TCP 会话的状态,并在检测到问题或潜在问题时提供额外的信息。在第一次打开捕获文件时,会对每个 TCP 数据包进行一次分析,数据包按照它们在数据包列表中出现的顺序进行处理。可…

Java线程的interrupt中断、wait-notify/all(源码级分析)

实例方法: interrupt()方法是设置结束阻塞(sleep、wait等),并且设置中断标记true isInterrupted()判断当前是否中断 静态方法: Thread.interrupted():调用这个方法的线程中断标记位还原为false 那么好,既然上面的方法作用是清…

Burp Suite 实战指南:Proxy 捕获与修改流量、HTTP History 筛选与分析

声明! 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&a…

12月第1周AI资讯

阅读时间:3-4min 更新时间:2024.12.2-2024.12.6 目录 OpenAI CEO Sam Altman 预告“12天OpenAI”系列活动 腾讯HunyuanVideo:130亿参数的开源视频生成模型 李飞飞的World Labs发布空间智能技术预览版 中科院联手腾讯打造“AI带货王”AnchorCrafter OpenAI CEO Sam Alt…

从零开始学TiDB(1) 核心组件架构概述

首先TiDB深度兼容MySQL 5.7 1. TiDB Server SQL语句的解析与编译:首先一条SQL语句最先到达的地方是TiDB Server集群,TiDB Server是无状态的,不存储数据,SQL 发过来之后TiDB Server 负责 解析,优化,编译 这…

记录一次使用git无权限的问题排查

正常的配置了公私钥之后,在gitlab中也存储了配对的公钥,但当使用git clone 时,总是报无权限 由于在这台机器中添加了多个公私钥,有点复杂,我们可以使用命令 ssh -vvvT 调试一下 ssh -vvvT yourGitlabAddr

python调用GPT-4o实时音频 Azure OpenAI GPT-4o Audio and /realtime

发现这块网上信息很少,记录一下 微软azure入口 https://learn.microsoft.com/zh-cn/azure/ai-services/openai/realtime-audio-quickstart?pivotsprogramming-language-ai-studio sdk文档 https://github.com/azure-samples/aoai-realtime-audio-sdk?tabread…