1)打开wireshark,双击Npcap Loopback Adapter
2)我们需要过滤多余的请求,直接选择tcp.port==8888,也就是我们上述的请求端口
3)发起一次请求
在浏览器中发起一次请求,url为http://localhost:8888/wireshark 。
需要注意的是:尽量新开浏览器发起请求,否则可能会重新TCP连接,无法观察到三次握手。
2.观察三次握手我们来依次看这三次请求
1)第一次握手
MSS值存放在可选项Options中,可以看到其值为65475字节。
总结:第一次握手,client向server发送SYN标志位,设定初始sequence number
2)第二次握手
总结:通过Flags标志位可以看到,server在确认收到数据的同时(设置ack bit位为1),也向client发送了自己的Seq(设置SYN bit位为1)
3)第三次握手
总结:第三次握手,客户端接收到SYN和ACK包,说明服务端已经收到客户端的数据,这个时候客户端也需要向服务端来确认已经收到数据(发送ACK确认包),客户端进入ESTABLISHED状态,服务端收到ACK确认包后也进入ESTABLISHED状态。到这里,三次握手结束,client与server连接成功,下面开始传送数据。
3.观察发送数据过程1)client发起http(GET类型请求)
我们可以很明显的看到,client端发起一次http请求,server端发送一次TCP请求,用于确认已收到该http请求。
我们来看下该http请求的详细数据:
可以看到,当前请求类型为HTTP,HTTP的下层协议为TCP。
HTTP的request URI为我们的请求url。
2)server返回响应值
下面看下响应值的详细信息:
这里就看下client发送断开连接标志的TCP请求:
后面的TCP信息就不再详述了。
总结下四次挥手的过程:
* client发送FIN标志,表示数据已经传送完毕,请求断开连接,此时client进入FIN_WAIT1状态,此时client不能再发送数据,但是能够发送ack数据到server;
* server接收到FIN标志,发送ack进行确认,server进入CLOSE_WAIT状态;
* server数据发送完成时,发送FIN标志给client,server进入LAST_WAIT状态,然后断开TCP会话连接,释放占用的服务端资源信息;
* client接收到FIN标志,返回ack进行确认,进入TIMED_WAIT状态,client在该状态下,等待一段时间后,没有数据到来,就认为server已经进入CLOSED状态,则client此时也断开TCP会话连接,释放资源。
总结:最后再配上一张全图来整体展示下TCP连接、发送数据、断开连接的全过程