利用wireshark抓包分析TCP协议三次握手

Wireshark分析三次握手

Wireshark是非常流行的网络封包分析软件,功能很强大。可以截取各种网络封包,显示网络封包的详细信息。使用wireshark的人必须了解网络协议,否则就看不懂wireshark了。
为了安全考虑,wireshark只能查看封包,而不能修改封包的内容,或者发送封包。

wireshark能获取HTTP,也能获取HTTPS,但是不能解密HTTPS,所以wireshark看不懂HTTPS中的内容,总结,如果是处理HTTP,HTTPS 还是用Fiddler, 其他协议比如TCP,UDP 就用wireshark.

1.Wireshark的基本使用

封包详细信息 (Packet Details Pane)

这个面板是我们最重要的,用来查看协议中的每一个字段。
各行信息分别为
Frame:   物理层的数据帧概况
Ethernet II: 数据链路层以太网帧头部信息
Internet Protocol Version 4: 互联网层IP包头部信息
Transmission Control Protocol:  传输层T的数据段头部信息,此处是TCP
Hypertext Transfer Protocol:  应用层的信息,此处是HTTP协议

封包详细信息与对应的OSI模型

2.TCP三次握手的基本了解

TCP三次握手过程图

第一次握手:

​ 建立连接时,客户端发送SYN包(Seq=x)到服务器,并进入SYN_SENT状态,等待服务器确认。

第二次握手:

​ 服务器收到SYN包,必须确认客户的SYN(ACK=x+1),同时自己也发送一个SYN包(Seq=Y),即SYN+ACK包,此时服务器进入SYN_RECV状态。

第三次握手:

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

TCP包的具体内容

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

TCP标志的意义

SYN:Synchronize,用于初始化和建立连接,它同时也用于同步设备之间的序列号(Seq)

ACK:Acknolowege,向另一方确认它已收到SYN

Seq:Sequence number,序列号,用于表示曾经发送过数据的字节数+1

Len:用于表示收到的字节大小,0表示本次没有收到数据

FIN:用于结束连接

注意:

  1. 即使Seq不为0,并不表示曾经一定发送过数据,是否发送过数据需要依据Len指令的值有没有大于0的来判断。

  2. 3次握手和4次挥手过程中一般是不会传送数据的,所以这个过程中Len指令都是0

3.三次握手分析:

1.打开wireshark, 输入捕获过滤器为:tcp,显示过滤器为:tcp.port == 80,选择我连接网络的网卡为:WLAN

2.点击右上角开始捕获分组,进入捕获界面

3.打开浏览器输入 http://www.aigony.com ,接下来即可看到捕获信息

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

第一次握手数据包

客户端向服务器发送连接请求包,标志位SYN(同步序号)置为1,序号Seq为X=0,如下图

第二次握手的数据包

服务器收到客户端发过来的报文,由SYN=1知道客户端要求建立连接。服务器发回确认包, 标志位SYN和ACK都置为1。 将确认序号(Acknowledgement Number)设置为客户端的Seq+1,即X+1= 0+1=1, 如下图

第三次握手的数据包

客户端收到服务器发来的包后检查确认序号(Acknowledgement Number)是否正确,即第一次发送的序号加1(X+1=1)。以及标志位ACK是否为1。若正确,客户端再次发送确认包(ACK),SYN标志位为0,ACK标志位为1。 确认序号(Acknowledgement Number)为Y+= 0+1= 1,发送序号Seq为X+1=1。服务器收到后确认序号值与ACK=1则连接建立成功,可以传送数据了。 如下图:

就这样通过TCP三次握手,建立了HTTP连接 。

本文参考

[1] Wireshark怎么抓包、wireshark抓包详细图文教程
[2] TCP 3-Way Handshake (SYN, SYN-ACK,ACK)
[3] OSI七层模型与TCP/IP五层模型
[4] Wireshark抓包分析 TCP三次握手/四次挥手详解

原文地址:https://www.cnblogs.com/sincere-ye/p/11922730.html