一、TCP三次握手连接建立过程
Step1:客户端发送一个SYN数据包(SYN=1,Seq=X,ACK=0)给服务端,请求进行连接,这是第一次握手;
Step2:服务端收到请求并且允许连接的话,就会发送一个SYN+ACK的数据包(SYN=1,Seq=Y,ACK=X+1)给发送端,告诉它,可以通讯了,并且让客户端发送一个确认数据包,这是第二次握手;
Step3:服务端发送一个ACK数据包(SYN=1,Seq=Z,ACK=Y+1)给客户端,告诉它连接已被确认,这就是第三次握手。TCP连接建立,开始通讯。
二、抓包过程
我们以访问网站:fanyi-pro.baidu.com为例,在Edge下使用开发工具查看网络对应的IP:
得到网站对应的IP为:180.101.49.50 端口号为80
在过滤器中输入过滤表达式:
ip.addr==180.101.49.58&&tcp.port==80
图中可以看到wireshark截获到了三次握手的三个数据包。第四个包才是HTTP的, 这说明HTTP的确是使用TCP建立连接的。
三、分析
在分析之前可以开启或关闭Wireshark工具的默认相对序列号,以此显示实际序列号,比如在包1中产生的实际序列号为:2159471844,开启默认序列号为0,按需更改:
1.第一个握手数据包
SYN=1:标志位置1,表示请求建立连接
Seq=2159471844:随机序列号
Ack=0:初始建立连接值为0,表示当前没有接收到数据
2.第二个握手数据包
SYN=1:标志位置1,表示请求连接
Seq=2865270383
ACK=2159471844:请求包中的随机顺序号X+1
3.第三次握手的数据包
SYN:标志位,表示已经收到记录
Seq =2159471845 :随机顺序号Z
Ack = 2865270384:请求包中的随机顺序号Y+1
就这样通过了TCP三次握手,建立了连接。开始进行数据交互
数据包的关键属性如下:
其中,对于我们日常的分析有用的就是前面的五个字段。
它们的含义是:
SYN表示建立连接,
FIN表示关闭连接,
ACK表示响应,
PSH表示有DATA数据传输,
RST表示连接重置。