当前位置:   article > 正文

wireshark分析tcp协议(一)三次握手【理论 + 实操】_wireshark三次握手

wireshark三次握手

在开始前,请确保你已经安装了wireshark

安装参考地址:wireshark 安装与使用

知识背景

问题一:什么是tcp?

tcp全称为传输控制协议(Transmission Control Protocol),是一种 面向连接、可靠的 ,基于字节流的传输层协议。

问题二:什么是传输控制协议?

要想了解传输控制协议,我们就需要知道网络之间到底是怎么通信的?当你在浏览器输入URL之后,是怎么

获取到页面的?也就是说浏览器是怎么知道你要访问哪个位置的?为什么他就能返回给你,而不是其他人?

首先,在 客户端服务器 间的通信协议就是TCP/IP协议

请添加图片描述

此时,客户端产生数据,需要发送出来,但是此时并不知道需要请求的端口号

于是有了,数据控制层

数据在应用层产生后,对应的应用会有其对应的端口号——源端口号

数据在产生后,需要清楚需要访问服务器上的哪个端口的进程(也就是将数据给哪个程序)

在有了源端口号目标端口号后,我们还是无法进行请求,因为不知道真实的服务器地址在哪里

网络层

在知道了两个对应的应用程序后,浏览器知道了自己要请求哪个端口,但是需要将本机IP目的IP添加上去

到这里,浏览器就能确定你需要访问的哪个位置了,在经过链路层后,打包成0/1数据流传递到服务器的对应端口上。

请添加图片描述

至此,浏览器就知道了我们是需要访问哪个位置的,而且只会将你所需要的数据返回给你,而不是别人,因为你告诉了服务器,你的本机IP

所以,我们大概就知道了到底什么是传输控制协议?

传输控制协议,见名知意,当然就是用于控制传输的协议,在过程中,涉及到端口号对应ip

问题三:为什么tcp是面向连接的,是可靠的?

  • 校验和
  • 应答确认
  • 超时重传
  • 流量控制
  • 乱序重排
  • 丢弃重复数据

在这其中,应答确认就是保证消息传递可靠性的关键手段,即三次握手

三次握手,就是存在三次交互,存在三次TCP报文的传输。

请添加图片描述

你需要和一个你看不见的人建立联系。

  • 首先,你需要给对方发送一个信息——第一次握手

    此时,你并不知道对方到底有没有收到

  • 然后,对方也会发送一个信息回来(中间包括你发送过去的)——第二次握手

    这时候,你知道对方收到了你的信息了,因为他把你的信息+1了

    此时,对方也发送了一个他的信息给你,因为他不知道你有没有收到他的信息

  • 此时,你最后回复一句,我也收到你的消息拉——第三次握手

这样,你们就可以开始交互数据,因为此时你们已经确定你->他,和他->你,两端的通信是没有问题的。

三次握手操作步骤

1.确认当前活动的网络

打开wireshark软件后,出现以下页面

请添加图片描述

这里将会显示当前你电脑中所有的曾保存过的网络配置,选择一个当前正在活动的网络

在这里,我一直在波动的就是以太网

一般情况下,连接了网线直接选择以太网即可

当出现一直在跳动的连接时,表示已经成功

请添加图片描述

2.确认你所需要分析的网站地址

这里我直接对局域网 内部署的网站进行分析

注意点1:ping

ping www.baidu.com
  • 1

若需要分析如百度等地址的,需要进行ping命令,发现其真实ip地址

注意点2:keep-alive

这里可能出现的一个问题就是当你访问这个地址时,没有发送tcp的三次握手包

因为在TCP协议中存在keep-alive的机制,无需每次都先建立连接后访问(建立连接后,可保持一段时间)

3.过滤显示当前连接情况

在知道你所要访问的ip地址后,在wireshark上,输入

ip.addr == ip地址 && tcp
  • 1

例如,当前我确定的IP地址为10.6.3.104,因此限制为

请添加图片描述

4.访问网站,进行分析

在选择过滤好ip地址后,切换至浏览器访问地址

切换会wireshark观察数据的变化

请添加图片描述

一般情况下头部的三个为tcp的三次握手过程

5.第一次握手——请求连接(syn) SYN_SENT

在第一次握手时,我们主动向对应的地址发送连接请求

我们双击查看第一条报文

这里会显示当前网络中每一层的数据

  • 应用层
  • 传输控制层——加上源端口 + 目的端口
  • 网络层——加上源IP + 目的IP
  • 数据链路层——转换成二进制流,确定MAC地址

请添加图片描述

我们开始分析传输控制层的具体信息

请添加图片描述

  • 源端口:7347,目的端口:8080

打开后,我们查看当前协议中的Flags

请添加图片描述

此时syn为1,是一个发起连接请求

  • 同步位SYN = 1
  • 初始序号Seq = 627790078
  • 不能携带数据,消耗一个序号

6.第二次握手——服务器响应请求(syn,ack)SYN_RCVD

我们双击点开第二个报文

请添加图片描述

  • 源端口号:8080,目的端口号:7347
  • 服务器相对seq = 0——第一次发送
  • 服务器绝对seq = 239445313
  • ack = 1
  • ACK = 上一次发送过去的seq(627790078) + 1 = 627790079

请添加图片描述

此时syn = 1 ,ack = 1,是一个确认接受连接请求

  • 同步位SYN = 1
  • 服务端初始序号 = 239445313
  • ACK = 1
  • 确认号ack = 627790079 = (627790078) + 1

7.第三次握手——服务器确认请求(ack)ESTABLISHED

我们双击打开第三个报文

请添加图片描述

  • 源端口:7347,目的端口:8080
  • 客户端 相对seq = 1——第二次发送报文
  • 客户端 绝对seq = 627790079
  • ACK = 1
  • ack = 服务端seq(239445313) + 1 = 239445314

请添加图片描述

此时ack = 1 ,是一个确认请求

自此,服务端与客户端可以进行正常的数据传输了

根据上面的三次握手,我们可以得到当前TCP三次握手的真实示意图
在这里插入图片描述

8.验证数据传输——http报文

在完成三次握手后,本机通过GET方法请求HTTP报文

我们点击第四个报文进行查看

请添加图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/639207
推荐阅读
相关标签
  

闽ICP备14008679号