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