wireshark使用教程及TCP三次握手实例

安装后,选择对应访问网络的网卡,即可看到下面的主界面

 

封包详细信息 (Packet Details Pane)

这个面板是我们最重要的,用来查看协议中的每一个字段。

各行信息分别为

Frame:   物理层的数据帧概况

Ethernet II: 数据链路层以太网帧头部信息

Internet Protocol Version 4: 互联网层IP包头部信息

Transmission Control Protocol:  传输层的数据段头部信息,此处是TCP

Hypertext Transfer Protocol:  应用层的信息,此处是HTTP协议

TCP包的具体内容

 从下图可以看到wireshark捕获到的TCP包中的每个字段。

看到这, 基本上对wireshak有了初步了解, 现在我们看一个TCP三次握手的实例

 三次握手过程为

  SYN: 表示同步序号,用来建立连接;

  Ack: 确认标志,表示应答域有效

  Seq: 序列号;(占 4 字节,序号范围[0,2^32-1],序号增加到 2^32-1 后,下个序号又回到 0)

解释:

第一次握手:

  第一次握手建立连接时,客户端向服务器发送SYN报文(Seq = x,SYN = 1),并进入SYN_SENT 状态,等待服务器确认;

第二次握手:

  第二次握手实际上是分两步进行的,即 SYN+ACK(请求和确认)报文;

  1、服务器收到了客户端的请求,向客户端回复了一个确认信息(Ack = x+1)(即第一次握手中的Seq = x,在此基础上+1)

  2、服务器再向客户端发送一个SYN包(Seq = y)建立连接的请求,此时服务器进入SYN_SYN_RECV状态

第三次握手:

  客户端收到服务器的回复(SYN+ACK报文)。此时,客户端也要向服务器发送确认包(ACK),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手!

 

通过实例来更加清晰的认识TCP三次握手

通过浏览器访问任意网站,例:https://www.cnblogs.com/wanghaokun/

 

图中可以看到wireshark截获到了三次握手的三个数据包。第四个包才是HTTP的, 这说明HTTP的确是使用TCP建立连接的。

第一次握手数据包

客户端发送一个TCP,标志位为SYN;发送的seq值为0, 代表客户端请求建立连接(实际中此值不一定为0)。

第二次握手的数据包

此时分两步

1、服务器发回确认包, 标志位为 SYN, ACK。将确认序号(Acknowledgement Number)设置为客户端的Seq+1.即ACK=1 

2、服务端端向客户端发送一个SYN包(seq=0),因为是服务端发给请求端的一个新的seq,所以值为0(实际中此值不一定为0)

 

第三次握手的数据包

客户端收到服务器的回复(SYN+ACK报文)。客户端要向服务器发送确认包ACK(SYN标志位为0,ACK标志位为1)。(发送的seq值为1,因为第一次握手时它发送给服务端的seq为0,要在此基础上+1)。Ack=1,值为第二次握手时请求端发来的seq+1,所以为1

 

以下是我抓取的tcp三次握手样例,可以和上面相互参考验证

第一次握手:

 

第二次握手:

 

第三次握手

 

扩展:

确认位即ACK,为1即为确认进行连接
同步位即SYN,从第一次握手时,此位就为1

下面是网上找到的三次握手的标志图,供参考:

第一次握手的标志位
我们可以看到标志位里面只有个同步位,也就是在做请求(SYN)

第二次握手的标志位
我们可以看到标志位里面有个确认位和同步位,也就是在做应答(SYN + ACK)

第三次握手的标志位
我们可以看到标志位里面只有个确认位,也就是再做再次确认(ACK)

 

tcp传输时,可用到的标记位有URG、ACK、PSH、RST、SYN、FIN 这六种

URG:紧急标志。此标志表示TCP包的紧急指针域有效,用来保证TCP连接不被中断,并且督促中间层设备要尽快处理这些数据;

ACK:确认标志。此标志位有两个值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包,就表明这台计算机上没有打开这个端口,但是这台计算机是存在的;如果这台计算机没有反馈回来任何数据包,就表明,这台被扫描的计算机存在这个端口

 

posted on 2020-06-16 15:28  步留痕  阅读(1183)  评论(0)    收藏  举报

导航