TCP/IP协议抓包分析

目录

一、TCP/IP协议在协议中分层的位置

二、TCP三次握手流程

三、打开wireshark抓包

四、TCP三次握手分析

1、TCP第一次握手

五、四次挥手流程

六、四次挥手抓包分析


一、TCP/IP协议在协议中分层的位置

二、TCP三次握手流程

1、客户端向服务端发送⼀个SYN=1(请求建立连接),并生成一个序列号seq=j。

2、服务端接收到SYN=1后,给客户端发送⼀个SYN=1与ACK=1;并将ack置为j+1;同时生成一个序列号seq=k。

3、客户端接收到会检查ack是否为j+1与ACK是否为1,如果是,则会给服务端发送一个ACK=1与ack=k+1,以及自己的序列号seq=j=1; 服务端接收到会检查ACK是否为1与ack是否为k+1,如果是则代表连接建立成功,两者间可以传递数据。

三、打开wireshark抓包

本地IP:10.168.1.112

百度IP:39.156.66.18

筛选规则:tcp and ip.addr==10.168.1.112 and tcp.port==50830

封包详细信息用来查看协议中的每个字段,各行信息显示对应的不同层级,如下图所示,分别是物理层、数据链路层、网络层、传输层,如果有应用层数据会显示第五层

四、TCP三次握手分析

1、TCP第一次握手

客户端向服务端发送⼀个SYN=1(请求建立连接),并生成一个序列号seq=j(实验中j=0)

源端口50830 ---->目标端口36688

2、服务端接收到SYN=1后,给客户端发送⼀个SYN=1与ACK=1;并将确认序列号ack置为j+1(即SYN+1=0+1=1);同时生成一个序列号seq=k(实验中k=0)

3、客户端接收到会检查服务端回复的确认序列号ack是否为j+1(即SYN+1=0+1=1)与ACK是否为1,如果是,则会给服务端发送一个ACK=1与ack=k+1(即第二次握手时服务端生成的序列号seq,k+1=0+1=1),以及自己的序列号seq=j=1; 服务端接收到会检查ACK是否为1与ack是否为k+1,如果是则代表连接建立成功,两者间可以传递数据

4、也可直接通过标志位看三次握手的数据包

 

五、四次挥手流程

1、Client端发起中断连接请求,也就是发送FIN报文。意思是说"我Client端没有数据要发给你了",但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。

2、Server端接到FIN报文后,发送ACK,告诉Client端,“你的请求我收到了,但是我还没准备好,请继续你等我的消息"。这个时候Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文。

3、当Server端确定数据已发送完成,则向Client端发送FIN报文,告诉Client端,”好了,我这边数据发完了,准备好关闭连接了"。

4、Client端收到FIN报文后,就知道可以关闭连接了,但是他还是不相信网络,怕Server端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传

Server端收到ACK后,就知道可以断开连接了。

Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,我Client端也可以关闭连接了。Ok,TCP连接就这样关闭了!

六、四次挥手抓包分析

抓包过程中,四次挥手只抓到了三个包的报文,查询了相关资料,说是因为服务器端在给客户端传回的过程中,将两个连续发送的包进行了合并。以下是基于抓到的三个包做的分析,如有错误请指正

1、第一次挥手:Client端发起中断连接请求,也就是发送FIN报文。意思是说"我Client端没有数据要发给你了",但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据

将标志位FIN和ACK置为1,序号seq=306,确认序号ack=21

2、第二次挥手:Server端接到FIN报文后,发送ACK,告诉Client端,“你的请求我收到了,但是我还没准备好,请继续你等我的消息"。这个时候Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文

此时,服务端回复客户端:FIN和ACK(标志位FIN=1,ACK=1),确认序列号ack为收到的序列号(即第一次挥手携带的SYN)加1,即ack=306+1=301。序列号seq为收到的确认序列号21

(抓包时第二次挥手和第三次挥手合并了)

3、第四次挥手:Client端收到FIN报文后,就知道可以关闭连接了,但是他还是不相信网络,怕Server端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传

客户端收到服务器发送的FIN之后,发回ACK确认(标志位ACK=1),确认序列号为收到的序号加1,即21+1=22。序列号为收到的确认序列号307

Server端收到ACK后,就知道可以断开连接了。Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,Client端也可以关闭连接了。Ok,TCP连接就这样关闭了!

猜你喜欢

转载自blog.csdn.net/lyouhuan/article/details/125074220