TCP三次握手与四次挥手详细讲解
首先我们先来了解一下WireShark这款工具。
WireShark这款工具最初的名字是Ethereal,该工具于2006年就开始使用。现在作为一款网络工程师必备的一款抓包工具。
该工具支持能够抓网络环境的各种包,并对相应的包进行分析。
WireShark安装好后,界面是这样的:
接着,选择你现在能够使用的网卡,完成后界面如下:
注意:选择完网卡后就会自动抓包,点击箭头所标识的地方,可以停止抓包。
TCP三次握手
下面我们来说说TCP三次握手的过程。
(1) 源主机首先向目标主机发送报文段,其中SYN=1,定义seq=x。完成第一次握手。
(2) 目标主机接受到后向源主机返回一个报文,其中报文的SYN=1,ACK=x+1,定义seq=y。完成第二次握手。
(3) 源主机接收到目标主机的报文段后,向目标主机再次发送报文段,此时ACK=y+1,seq=x+1。完成第三次握手从而建立连接。
完下面我们用实例来说明TCP建立链接的三次握手过程。
1、打开浏览器,输入一个网址,点击链接跳转
2、使用Wireshark进行抓包,然后在过滤器输“http”,过滤出http包
3、找到GET类型的包,然后及info为/http/1.1的包
4、在这个包上鼠标点击右键,选择“追踪流–TCP流”,及追踪到这个HTTP包的TCP包,可以看出该HTTP包上面有三个TCP包,并在info上看到SYN,基本可以确定这三个TCP包就是建立链接的三次握手过程
5、分析第一个TCP包:
看出源主机向目标主机已经发送数据报,此时的SYN=0,seq=0说明已经完成第一次握手。
6、分析第二个TCP包
看出目标主机向源主机发送了数据包,并且定义此处的序号seq=0,并且携带ACK=seq+1=1。此时已完成第二次握手。
7、分析第三个TCP包
此时,源主机向目标主机发送数据报,,定义此处的seq=1,携带ACK=seq+1=1.。此时完成第三次握手。并完成TCP的建立。
TCP四次挥手
在刚才实例中,TCP已经建立连接。下面我们看看TCP四次挥手的过程,即TCP断开连接。
首先我们看一下“四次挥手”的原理。
(1) 首先源主机向目标主机发送请求关闭的报文段,此时FIN=1,seq=u;
(2) 目标主机接收到源主机的报文段后,向源主机返回一个报文段,此时seq=v,ack=u+1;
(3) 同时,目标主机向源主机发送FIN=1,seq=w,ack=u+1的报文。
(4) 源主机收到目标主机的返回的报文后,向目标主机发送最后的报文,此时seq=u+1,ack=w+1,然后等待时间目标主机结束连接。
同样,我们用实例来看看“四次挥手”的过程。
1、在刚才打开的链接上,点击关闭或者返回上一页。
2、用Wireshark开始抓包。
3、同理刚才筛选包的方法找到info有SYN的包。
4、分析第一个TCP包
可以看出来此时FIN=1,是由目标主机向源主机发送,此时置seq=284。第一次挥手完成。
5、分析第二个TCP包
此时,源主机收到请求后向目标主机发送了一个数据包,其中ACK=seq+1=285,置seq=392。完成第二次挥手。
6、分析第三个包
此时,源主机继续向目标主机发送数据包,其中ACK=第三个包的ACK=seq+1=285,置seq=392,此时,FIN=1,完成第三次挥手。
7、分析第四个包
此时,能看到,目标主机向源主机发送数据包,其中ACK=seq+1=393,而此时序号seq=上一个ACK=285.。至此,完成第四次挥手,并断开连接。