天天看点

利用WireShark分析握手协议

一、三次握手

第一次握手: 客户端向服务器发送连接请求包,标志位SYN(同步序号)置为1,序号为X=0

第二次握手: 服务器收到客户端发过来报文,由SYN=1知道客户端要求建立联机。向客户端发送一个SYN和ACK都置为1的TCP报文,设置初始序号Y=0,将确认序号(Acknowledgement Number)设置为客户的序列号加1,即X+1 = 0+1=1, 如下图:

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

二、四次挥手

第一次挥手:客户端向服务器端发送一段TCP报文,其中将标志位FIN和ACK置为1,序号为Seq=X=1665,确认序号为ack=Z=673。

第二次挥手:服务器收到FIN后,发回一个ACK(标志位ACK=1),确认序号为收到的序号加1,即ack=X=1665+1=1666。序号为收到的确认序号Seq=Z=673。

第三次挥手:服务器关闭与客户端的连接,发送一个FIN。标志位FIN和ACK置为1,序号为Seq=Y=673,确认序号为ack=X=1666。

第四次挥手:客户端收到服务器发送的FIN之后,发回ACK确认(标志位ACK=1),确认序号为收到的序号加1,即ack=Y+1=674。序号为收到的确认序号Seq=X=1666。

三、应用层HTTP流程协议分析

HTTP协议(超文本传输协议HyperText Transfer Protocol),它是基于TCP协议的应用层传输协议,简单来说就是客户端和服务端进行数据传输的一种规则。

HTTP请求报文分析:

HTTP响应报文分析:

四、SSL握手

TLS是一种密码学协议,用于保证两者之间的会话安全。

ClientHello为握手的第一条消息,发送的内容有如下图:

ServerHello消息的意义是将服务器选择的连接参数传送回客户端,结构与ClientHello类似:

Certificate 该部分是服务器返回给客户端的证书链:

ServerKeyExchange 该消息的目的是携带密钥交换的额外数据

ServerHelloDone 消息表明服务器已经将所有预计的握手消息发送完毕。

Client Key Exchange 消息携带客户端为密钥交换提供的所有信息,内容随着不同的协商密码套件而不同。

ChangeCipherSpec 消息表明发送端已取得用以生成连接参数的足够信息,已生成加密密钥,并且将切换到加密模式,此后客户端的数据均为协商密钥加密的密文。

Encypted Handshake Message(finish) 为结合所有当前的通信参数信息生成一段数据,并使用协商密钥加密后的内容

New Session Ticket 会话标识符,解决会话缓存问题。