当前位置: 首页 > article >正文

TCP协议与wireshark抓包分析

一、tcp协议格式

1. 源端口号 :

发送方使用的端口号

2. 目的端口号 :

接收方使用的端口号

3. 序号:

数据包编号 , tcp 协议为每个数据都设置编号,用于确认是否接收到相应的包

4. 确认序列号 :

使用 tcp 协议接收到数据包,会根据这个接收到这个数据包编号发送一个应答包,一般为上一次的数据包的编号加上长度,如果是 SYN或者FIN ,则是上一次的数据包的编号 加1

5. 标志位: 用于标识

URG: 表示紧急指针是否有效ACK : 表示确认号是否有效。称携带ACK标志的tcp报文段位确认报文段PSH : 提示接收端应用程序应该立即从tcp接受缓冲区中读走数据,为接受后续数据腾出空间(如果应用程序不将接收的数据读走,它们就会一直停留在tcp缓冲区中)

RST: 表示要求对方重新建立连接。携带RST标志的tcp报文段为复位报文段。

SYN: 表示请求建立一个连接。携带SYN标志的tcp报文段为同步报文段。

FIN: 表示通知对方本端要关闭连接了。携带FIN标志的tcp报文段为结束报文段。

6. 窗口大小:

用于 tcp 进行流量控制,这里的窗口用于向发送端说明当前 tcp 接收缓冲区还能存储的数据大小

7. 校验和:

用于接收端用于校验接收的数据是否正确,由发送端进行填充,计算校验和主要包括 tcp 协议头与数据区校验的方式为 CRC 校验

二、tcp三次握手


1. 设置 wireshark 使用绝对数据包编号


 

 2. 选择网卡,并设置tcp端口过滤,开启抓包

 3. 启动tcp服务器,并使用网络调试助手连接服务器

 

 4. 查看抓包结果

 第一次握手 : 客户端给服务器发送 SYN 数据包

Flags标志设置为 SYN ,数据包编号为 2968294989

第二次握手 : 服务器给客户端发送 SYN + ACK 的数据包
 

 

Flags 标志: 设置为 SYN + ACK

数据包应答编号为 2968294990,相当是 SEQ_SYN + 1

数据包编号为 672472624

第三次握手 : 客户端给服务器发送 ACK 数据包

 

Flags 标志 : ACK

数据包应答编号为 672472625,是第二个数据包的编号加1

数据包编号为 2968294990


 三、tcp 四次挥手

TCP(传输控制协议)的四次挥手是用于关闭一个已经建立的TCP连接的过程。它确保了数据的可靠传输,并且能够让双方安全地断开连接。以下是四次挥手的详细过程:

1. 第一次挥手(FIN):主动方发起关闭请求

  • 操作:假设客户端(A)想要关闭连接,它会发送一个带有FIN标志的TCP报文给服务器(B)。这个FIN报文表示客户端已经没有数据要发送了,但仍然可以接收来自服务器的数据。

  • 状态变化:客户端进入FIN_WAIT_1状态,等待服务器的响应。

2. 第二次挥手(ACK):被动方确认关闭请求

  • 操作:服务器(B)收到客户端(A)的FIN报文后,会发送一个带有ACK标志的TCP报文作为确认。这个ACK报文的确认号是客户端FIN报文序列号加1,表示服务器已经收到了客户端的关闭请求。

  • 状态变化:客户端收到ACK后,进入FIN_WAIT_2状态;服务器进入CLOSE_WAIT状态。此时,服务器可能还有数据要发送给客户端。

3. 第三次挥手(FIN):被动方发起关闭请求

  • 操作:当服务器(B)完成数据发送后,它会发送一个带有FIN标志的TCP报文给客户端(A),表示服务器也没有数据要发送了,希望关闭连接。

  • 状态变化:服务器进入LAST_ACK状态,等待客户端的最终确认。

4. 第四次挥手(ACK):主动方确认关闭请求

  • 操作:客户端(A)收到服务器(B)的FIN报文后,会发送一个带有ACK标志的TCP报文作为确认,确认号是服务器FIN报文序列号加1。此时,客户端进入TIME_WAIT状态,等待2个最大报文段寿命(2MSL)的时间,以确保最后一个ACK报文能够被服务器收到。

  • 状态变化:服务器收到客户端的ACK后,进入CLOSED状态,完成关闭过程。客户端在2MSL时间后也进入CLOSED状态。

为什么需要四次挥手

  • 确保数据完整传输:TCP是一个面向连接的协议,需要确保数据的可靠传输。四次挥手确保了双方都明确知道对方已经没有数据要发送,并且双方都收到了对方的关闭请求。

  • 防止资源泄露:通过四次挥手,可以优雅地关闭连接,释放系统资源,避免连接长时间占用资源。

TIME_WAIT 状态的作用

  • 确保最后一个ACK报文能够被对方收到:在第四次挥手时,客户端发送的ACK报文可能会丢失。服务器在等待ACK超时后会重新发送FIN报文。客户端进入TIME_WAIT状态后,可以重新发送ACK,确保连接能够正确关闭。

  • 防止老的连接干扰新的连接:在2MSL时间内,网络中可能还残留着旧连接的报文。TIME_WAIT状态可以防止这些报文干扰新的连接。

TCP四次挥手是TCP协议中非常重要的机制,它确保了连接的可靠关闭,是TCP协议可靠性的关键体现之一。


http://www.kler.cn/a/623251.html

相关文章:

  • 现代优雅杂志海报徽标设计手写英文字体安装包 Attomes – Brush Handwritten Font
  • 【Prompt实战】邮件意图分类助手
  • git | 版本切换的相关指令
  • 深度学习入门(二):从感知机到神经网络
  • (三)物理设备
  • 创作领域“<em >一</em><em>分</em><em>快</em><em>3</em><em>官</em><em>网
  • 关于参加CSP-J/S认证需符合年龄条件的公告(2025年起)
  • 漏洞挖掘---灵当CRM客户管理系统getOrderList SQL注入漏洞
  • 保存预测图像时出现的文件名错误
  • Kubernetes 存储
  • NQA 网络质量分析协议
  • uniapp uni-swipe-action滑动内容排版改造
  • 未来已来,机器人周边行业和配套业务方向
  • QtWebApp使用
  • Cursor软件设置中文版教程
  • 五.ubuntu20.04 - ffmpeg推拉流以及Nginx、SRS本地部署
  • 知能行综测
  • 马达加斯加企鹅字幕
  • Epub转PDF软件Calibre电子书管理软件
  • 人工智能之数学基础:幂法和反幂法求特征值和特征向量