一、抓包
通过Wireshark这个抓包工具演示下正常能抓到tcp三次握手,能看到的内容是不是和上篇文章tcp三次握手中用图画出来的内容是一样的呢?
现在就抓个包详细得讲解下。先选择我上网的网卡,然后点击这个蓝色的小鲨鱼,开始抓包了。
现在它在开始抓包,我去访问一个页面。这是个https的连接,肯定是基于tcp的。
点击红色按钮暂停。
抓的是tcp协议,过滤下tcp协议的包。按下回车之后,这边就全是tcp的报文了:
因为刚刚都在这一块网卡上抓的,这块网卡可能有很多别的流量,所以抓到的流量不是很纯净。
随意看下某个tcp连接,它的三次握手的过程。
我就看这个,怎么过滤出来这一个连接呢?
右击这个包,选择追踪流(追踪整个这一个连接)-tcp流
将这个连接的所有的数据包都过滤出来了,就看不到其它的杂七杂八的连接。这是指这一个连接的tcp的报文。
二、详解tcp3次握手
第1个报文,请求连接消息:syn:
显示出来这是个syn包:
syn包用来发起连接请求的,客户端向服务器发起连接请求,syn标志位置1。看下标志位置1是什么样子的。双击这个包就可以打开。
看到一个详细的报文显示:
它会把网络中每一层的数据格式都显示在这里:
数据链路层
第2个报文:syn,ack
syn,ack是服务器给客户端返回的确认消息。
双击它,点开看下:
syn,ack包与syn包对比:
第3个报文,确认消息:ack
客户端发给服务器的:
seq=1,是因为syn,ack包中确认号是1,表示我希望你收到下一个包的序列号是1。(也就是第一个syn包的序列号加1。)
这个ack是1是因为给我发的syn,ack包中序列号是0,在这个基础上加1,所以这个包的确认号就是1。
第4个,http报文:
三次握手之后,直接是个http的报文:
传输层已经建立完tcp连接,那应用层才能去在它的这个连接基础上面,去发送http的请求。
以上就是tcp3次握手的过程。