首页 > 其他分享 >(图文并茂,权威最详细)Wireshark抓包分析 TCP三次握手/四次挥手详解

(图文并茂,权威最详细)Wireshark抓包分析 TCP三次握手/四次挥手详解

时间:2024-09-27 10:48:04浏览次数:1  
标签:协议 图文并茂 ACK 确认 TCP 序号 连接 抓包

本文结合wireshark抓包,对TCP协议的三次握手和四次挥手进行详细的讲解。大家要认真看完,这可能是全网讲得最详细的文章了。

01 TCP/IP协议族

TCP/IP是一个协议族,通常分不同层次进行开发,每个层次负责不同的通信功能。包含以下四个层次:

1. 链路层,也称作数据链路层或者网络接口层,通常包括操作系统中的设备驱动程序和对应的网络接口卡。处理与物理层传输介质(如电缆)之间的物理接口细节。

2. 网络层,也称作网际层,处理数据包分组在网络中的活动,例如分组的选路和转发等。网络层协议包括IP协议(网际协议)、ICMP协议(Internet互联网控制报文协议),以及IGMP协议(Internet组管理协议)等。

3. 传输层,提供两台主机上的应用程序端到端的通信。协议主要包括:TCP(传输控制协议)和UDP(用户数据报协议)。TCP为两台主机提供高可靠性的数据通信。而 UDP 提供尽力而为的通信,通信的可靠性需要应用层来提供。

4. 应用层,负责处理特定的应用程序逻辑。包括Telnet(远程登录)、FTP(文件传输协议)、SMTP(简单邮件传送协议)以及SNMP(简单网络管理协议)等。

wireshark抓到的包与对应的协议层如下图所示:

抓包界面显示的结果和协议栈的层次关系正好相反,最上面的是物理层,最下面是应用层。具体的对应关系如下:

  1. Frame: 物理层的数据帧概况
  2. Ethernet II: 数据链路层以太网帧头部信息
  3. Internet Protocol Version 4: 互联网层IP包头部信息
  4. Transmission Control Protocol: 传输层的数据段头部信息,此处是TCP
  5. Hypertext Transfer Protocol: 应用层的信息,此处是HTTP协议

02 TCP协议

TCP是一种面向连接(连接导向)的、可靠的基于字节流的传输层通信协议。TCP将用户数据打包成报文段,发送后会启动一个定时器,然后另一端收到的数据进行确认、对失序的数据重新排序、丢弃重复数据。

TCP的特点有:

  1. TCP是面向连接的运输层协议
  2. 每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的
  3. TCP提供可靠交付的服务
  4. TCP提供全双工通信。数据在两个方向上独立的进行传输。因此,连接的每一端必须保持每个方向上的传输数据序号。
  5. 面向字节流。面向字节流的含义:虽然应用程序和TCP交互是一次一个数据块,但应用程序交下来的数据仅仅是一连串的无结构的字节流

TCP报文首部,如下图所示:

  • 源端口号:数据发起者的端口号,16bit
  • 目的端口号:数据接收者的端口号,16bit
  • 序号:32bit的序列号,由发送方使用
  • 确认序号:32bit的确认号,是接收数据方期望收到发送方的下一个报文段的序号,因此确认序号应当是上次已成功收到数据字节序号加1。
  • 首部长度:首部中32bit字的数目,可表示15*32bit=60字节的首部。一般首部长度为20字节。
  • 保留:6bit, 均为0
  • 紧急URG:当URG=1时,表示报文段中有紧急数据,应尽快传送。
  • 确认比特ACK:ACK = 1时代表这是一个确认的TCP包,取值0则不是确认包。
  • 推送比特PSH:当发送端PSH=1时,接收端尽快的交付给应用进程。
  • 复位比特(RST):当RST=1时,表明TCP连接中出现严重差错,必须释放连接,再重新建立连接。
  • 同步比特SYN:在建立连接是用来同步序号。SYN=1, ACK=0表示一个连接请求报文段。SYN=1,ACK=1表示同意建立连接。
  • 终止比特FIN:FIN=1时,表明此报文段的发送端的数据已经发送完毕,并要求释放传输连接。
  • 窗口:用来控制对方发送的数据量,通知发放已确定的发送窗口上限。
  • 检验和:该字段检验的范围包括首部和数据这两部分。由发端计算和存储,并由收端进行验证。
  • 紧急指针:紧急指针在URG=1时才有效,它指出本报文段中的紧急数据的字节数。
  • 选项:长度可变,最长可达40字节

wireshark捕获到的TCP包中的每个字段如下图所示:

03 TCP三次握手

TCP建立连接时,会有三次握手过程,如下图所示,wireshark截获到了三次握手的三个数据包。第四个包才是http的,说明http的确是使用TCP建立连接的。

下面来逐步分析三次握手过程:

第一次握手: 客户端向服务器发送连接请求包,标志位SYN(同步序号)置为1,序号为X=0

第二次握手: 服务器收到客户端发过来报文,由SYN=1知道客户端要求建立联机。向客户端发送一个SYN和ACK都置为1的TCP报文,设置初始序号Y=0,将确认序号(Acknowledgement Number)设置为客户的序列号加1,即X+1 = 0+1=1, 如下图:

第三次握手: 客户端收到服务器发来的包后检查确认序号(Acknowledgement Number)是否正确,即第一次发送的序号加1(X+1=1)。以及标志位ACK是否为1。若正确,客户端再次发送确认包,ACK标志位为1,SYN标志位为0。确认序号(Acknowledgement Number)=Y+1=0+1=1,发送序号为X+1=1。服务器收到后确认序号值与ACK=1则连接建立成功,可以传送数据了。

04 TCP四次挥手

TCP断开连接时,会有四次挥手过程,如下图所示,wireshark截获到了四次挥手的四个数据包。

下面来逐步分析四次挥手过程:

第一次挥手: 客户端给服务器发送TCP包,用来关闭客户端到服务器的数据传送。将标志位FIN和ACK置为1,序号为X=1,确认序号为Z=1。

第二次挥手:服务器收到FIN后,发回一个ACK(标志位ACK=1),确认序号为收到的序号加1,即X=X+1=2。序号为收到的确认序号=Z。

第三次挥手:服务器关闭与客户端的连接,发送一个FIN。标志位FIN和ACK置为1,序号为Y=1,确认序号为X=2。

第四次挥手:客户端收到服务器发送的FIN之后,发回ACK确认(标志位ACK=1),确认序号为收到的序号加1,即Y+1=2。序号为收到的确认序号X=2。

OK,以上就是利用 wireshark 抓取 TCP 三次握手和四次挥手的过程,图文并茂,这次再不理解就来打我

标签:协议,图文并茂,ACK,确认,TCP,序号,连接,抓包
From: https://www.cnblogs.com/linjiaxin/p/18435220

相关文章

  • TCP编程:从入门到实践
    本文将带领大家了解TCP编程的基本概念、原理及其在实战中的应用。通过学习本文,读者可以掌握TCP编程的核心技术,并在实际项目中熟练运用。一、引言TCP(传输控制协议)是一种面向连接、可靠、基于字节流的传输层通信协议。在互联网、局域网等网络环境中,TCP编程具有广泛的应用。掌握......
  • 常见抓包工具配置抓取HTTPS
    一、wireshark抓取https1.配置SSLKEYLOGFILE环境变量2.关闭Chrome浏览器后重新打开,确认sslkey.log文件已经添加3.配置wireshark  编辑–首选项–protocols–TLS4.开启wireshark抓包 二、Fiddler抓取https 1.Fiddler配置点击Tools>Options>HTTPS,勾选DecryptHTTPSTraff......
  • tcpdump抓包命令详解
    一、参数介绍-A以ASCII格式打印出所有分组,并将链路层的头最小化。-c在收到指定的数量的分组后,tcpdump就会停止。-C在将一个原始分组写入文件之前,检查文件当前的大小是否超过了参数file_size中指定的大小。如果超过了指定大小,则关闭当前文件,然后在打开一个新的文件。参数fi......
  • CH395 tcp客户端 热拔插
    CH395做tcp客户端,实现网线拔掉后tcp断开,网线插上后tcp连接。目前提供三种思路:芯片测试版本:0x49,测试工具:TCPIPDebug做服务器1.第一种思路(1)代码:(在CH395的tcp_client例程的超时终端和PHY_Change中断中加上下面的代码即可)1u8sock_sta[2];2u8i;3if(init_status&GINT......
  • TCP网络编程概述超详解
    文章目录TCP网络编程概述1.TCP协议的特点2.TCP与UDP的差异3.TCP编程流程TCP网络编程相关函数详解1.`socket()`:创建套接字参数说明:返回值:示例:2.`connect()`:客户端连接服务器参数说明:返回值:示例:3.`bind()`:服务器绑定地址和端口参数说明:返回值:示例:4.`listen()`:监......
  • 计算机网络实验2——利用Wireshark对上网操作抓包并进行相关协议分析(实验部分)
    五、实验过程1.安装并启动Wireshark。选择菜单栏上捕获->选项,勾选WLAN网卡。点击Start,进行抓包 Wireshark处于抓包状态中 2.打开浏览器,在地址栏中输入教师指定的web服务器地址。(http://202.113.78.39)为了确保连通性,先ping一下服务器 打开cmd Ping 202.113.78.......
  • 阿里云ecs使用nginx部署mqtt服务的tcp转发
    一、什么是MQTT?MQTT(MessageQueuingTelemetryTransport)是一种轻量级、基于发布-订阅模式的消息传输协议,适用于资源受限的设备和低带宽、高延迟或不稳定的网络环境。它在物联网应用中广受欢迎,能够实现传感器、执行器和其它设备之间的高效通信。二、为什么MQTT是适用于物联网的最......
  • 揭秘 ARMxy 嵌入式控制器的 ModbusTCP 通信协议实战案例
    引言随着工业4.0概念的普及,越来越多的企业开始寻求将传统设备与现代信息技术相融合的方法,以提升生产效率和管理水平。在这个过程中,ModbusTCP作为一种成熟的工业通信协议,因其简单易用、兼容性好而在工业自动化领域得到广泛应用。与此同时,Node-Red作为一种开放源码的可视化编程工具,......
  • 简测网络端口小工具Tcping
    简介:使用该工具可以快速的测试端口网络连通情况1.下载Tcping.exe应用程序网站:tcping.exe-pingoveratcpconnection(elifulkerson.com)2.全局适用将下载好的Tcping.exe应用程序,移动到C:\Windows\System32文件夹下3.CMD窗口测试网络口段连通情况win+R:打开运行对话......
  • TCP协议三次握手的个人理解
    TCP协议的核心是可靠的数据传输,而保证传输是可靠的那就要求客户端和服务端双方都具备正常的收发功能。基于此,第一次握手的时候,当服务端接收到这个SYN请求时,表明客户端要进行TCP连接,同步序列号seq=x,那么从服务端的角度来看:1、客户端的发送能力是正常的;服务端接收到请求后,那么也......