弄它!!使用Wireshark抓包软件抓取两台PC通信与断开的数据包,观察TCP的三次握手,四次挥手

一、传输层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在这里插入图片描述

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值