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:用于结束连接
注意:
即使Seq不为0,并不表示曾经一定发送过数据,是否发送过数据需要依据Len指令的值有没有大于0的来判断。
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三次握手/四次挥手详解
最新评论