弄它!!使用Wireshark抓包软件抓取两台PC通信与断开的数据包,观察TCP的三次握手,四次挥手
实验环境:通过seCure-CRT软件远程连接虚拟机linux主机(绑定VM1网卡);用wireshark抓包软件进行抓包并查看主机与虚拟机TCP的三次握手和四次挥手需求描述将上述过程通过实验再现出来。查看数据包的三次握手和四次挥手推荐步骤1、VM15.5在虚拟机下安装一台centos7.6系统,使用vm1网卡,手动配置网络,并能ping通主机(尽量不要用VM8,数据包太多,不容易观察)
文章目录
一、传输层tcp介绍
TCP 提供面向有连接的通信传输,面向有连接是指在传送数据之前必须先建立连接,数据传送完成后要释放连接。
无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。在TCP/IP协议中,TCP协议提供可靠的连接服务,连接是通过三次握手进行初始化的。
同时由于TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议,TCP是全双工模式,所以需要四次挥手关闭连接
二、tcp与udp的区别
TCP 与 UDP 的区别相当大。它充分地实现了数据传输时各种控制功能,可以进行丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。而这些在 UDP 中都没有。
此外,TCP 作为一种面向有连接的协议,只有在确认通信对端存在时才会发送数据,从而可以控制通信流量的浪费。
根据 TCP 的这些机制,在 IP 这种无连接的网络上也能够实现高可靠性的通信( 主要通过检验和、序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现)
三、TCP头部
TCP的规范定义,它定义了TCP协议如何读取和解析数据
TCP首部承载这TCP协议需要的各项信息,下面我们来分析一下:
1、TCP端口号
TCP的连接是需要四个要素确定唯一一个连接:
(源IP,源端口号)+ (目地IP,目的端口号)
所以TCP首部预留了两个16位作为端口号的存储,而IP地址由上一层IP协议负责传递
源端口号和目地端口各占16位两个字节,也就是端口的范围是2^16=65535
另外1024以下是系统保留的,从1024-65535是用户使用的端口范围
2、TCP的序号和确认号:
32位序号 seq:Sequence number 缩写seq ,TCP通信过程中某一个传输方向上的字节流的每个字节的序号,通过这个来确认发送的数据有序,比如现在序列号为1000,发送了1000,下一个序列号就是2000。
32位确认号 ack:Acknowledge number 缩写ack,TCP对上一次seq序号做出的确认号,用来响应TCP报文段,给收到的TCP报文段的序号seq加1。
3、TCP的标志位
每个TCP段都有一个目的,这是借助于TCP标志位选项来确定的,允许发送方或接收方指定哪些标志应该被使用,以便段被另一端正确处理。
用的最广泛的标志是 SYN,ACK 和 FIN,用于建立连接,确认成功的段传输,最后终止连接。
SYN:简写为S,同步标志位,用于建立会话连接,同步序列号;
ACK: 简写为.,确认标志位,对已接收的数据包进行确认;
FIN: 简写为F,完成标志位,表示我已经没有数据要发送了,即将关闭连接;
PSH:简写为P,推送标志位,表示该数据包被对方接收后应立即交给上层应用,而不在缓冲区排队;
RST:简写为R,重置标志位,用于连接复位、拒绝错误和非法的数据包;
URG:简写为U,紧急标志位,表示数据包的紧急指针域有效,用来保证连接不被阻断,并督促中间设备尽快处理;
四、TCP的三次握手
流程图如下
第一次握手:客户端将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给服务器端,客户端进入SYN_SENT状态,等待服务器端确认。
第二次握手:服务器端收到数据包后由标志位SYN=1知道客户端请求建立连接,服务器端将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给客户端以确认连接请求,服务器端进入SYN_RCVD状态。
第三次握手:客户端收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给服务器端,服务器端检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,客户端和服务器端进入ESTABLISHED状态,完成三次握手,随后客户端与服务器端之间可以开始传输数据了。
五、TCP的四次挥手
四次挥手
中断连接端可以是客户端,也可以是服务器端。
**第一次挥手:**客户端发送一个FIN=M,用来关闭客户端到服务器端的数据传送,客户端进入FIN_WAIT_1状态。意思是说"我客户端没有数据要发给你了",但是如果你服务器端还有数据没有发送完成,则不必急着关闭连接,可以继续发送数据。
第二次挥手:服务器端收到FIN后,先发送ack=M+1,告诉客户端,你的请求我收到了,但是我还没准备好,请继续你等我的消息。这个时候客户端就进入FIN_WAIT_2 状态,继续等待服务器端的FIN报文。
第三次挥手:当服务器端确定数据已发送完成,则向客户端发送FIN=N报文,告诉客户端,好了,我这边数据发完了,准备好关闭连接了。服务器端进入LAST_ACK状态。
第四次挥手:客户端收到FIN=N报文后,就知道可以关闭连接了,但是他还是不相信网络,怕服务器端不知道要关闭,所以发送ack=N+1后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。服务器端收到ACK后,就知道可以断开连接了。客户端等待了2MSL后依然没有收到回复,则证明服务器端已正常关闭,那好,我客户端也可以关闭连接了。最终完成了四次握手。
六、实验抓包进行查看其过程
1、实验环境
通过seCure-CRT软件远程连接虚拟机linux主机(绑定VM1网卡);用wireshark抓包软件进行抓包并查看主机与虚拟机TCP的三次握手和四次挥手
2、需求描述
将上述过程通过实验再现出来。
查看数据包的三次握手和四次挥手
3、推荐步骤
1、VM15.5在虚拟机下安装一台centos7.6系统,使用vm1网卡,手动配置网络,并能ping通主机(尽量不要用VM8,数据包太多,不容易观察)
2、准备远程终端软件secure-CRT软件,手动连接虚拟机
3、打开wireshark抓取刚开始连接的数据包,查看其数据包里的三次握手
4、断开连接抓取数据包查看数据包里的四次挥手
这就是整个三次握手和四次挥手的示意图,观察其中参数的改变,从而了解三次握手四次挥手的具体情况
4、具体如下:
TCP的三次握手
这里发表一下我个人的总结,一般来说三次握手都在最上面,而且是SYN开头的
TCP的第一次握手
1、打开第一次握手的数据包,打开传输层数据包,观察SYN同步序号位,就是一堆0的那个,ACK是确认序号位,观察:
源ip 192.168.10.1
目标ip 192.168.50.1
源端口号:55426 目标端口号:22
Syn=1 ack=0
TCP的第二次握手
2、依次打开第二次握手,观察其变化
源ip 192.168.50.1
目标ip 192.168.10.1
源端口号:22 目标端口号:55426
Syn=1 ack=1
TCP的第三次握手
3、源ip 192.168.10.1
目标ip 192.168.50.1
源端口号:55426 目标端口号:22
Syn=0 ack=1
TCP的第一次挥手
二、下面开始抓取4次挥手的数据包 ,观察其中的参数变化,这里挥手的参数与握手的有所不同
一般挥都是在最下面,FIN开头的就是第一次挥手
具体如下:
1、第一次挥手确认号FIN=1
源ip 192.168.50.1
目标ip 192.168.10.1
源端口号:55426 目标端口号:22
fin=1 ack=1
TCP的第二次挥手
2、以此类推,观察四次挥手各个参数的变化
源ip 192.168.10.1
目标ip 192.168.50.1
源端口号:22 目标端口号:55426
fin=0 ack=1
TCP的第三次挥手
3.源ip 192.168.10.1
目标ip 192.168.50.1
源端口号:22 目标端口号:55426
fin=1 ack=1
TCP的第四次挥手
4、源ip 192.168.50.1
目标ip 192.168.10.1
源端口号:55426 目标端口号:22
fin=0 ack=1
更多推荐
所有评论(0)