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

linux 网络:协议及Wireshark抓包工具的使用

一、TCP 协议(传输控制协议)

1. 特性

  • 面向连接:通信双方必须经过 "建立连接→数据传输→释放连接" 三个阶段
  • 可靠传输机制
    • 无丢失:通过确认应答和超时重传保证
    • 无失序:通过序列号机制保证数据按序到达
    • 无差错:通过校验和验证数据完整性
    • 无重复:通过序列号去重机制实现

2. 连接建立:“三次握手”

  • 具体过程
    1. 客户端发送 SYN 报文(SYN=1,seq=x),请求建立连接
    2. 服务器回复 SYN+ACK 报文(SYN=1,ACK=1,seq=y,ack=x+1),确认请求并同意建立连接
    3. 客户端发送 ACK 报文(ACK=1,seq=x+1,ack=y+1),确认收到服务器响应,连接正式建立
  • 目的:确保双方的发送和接收能力都正常,同步双方的初始序列号

3. 连接终止:“四次挥手”

  • 具体过程
    1. 客户端发送 FIN 报文(FIN=1,seq=u),请求关闭连接
    2. 服务器回复 ACK 报文(ACK=1,seq=v,ack=u+1),确认收到关闭请求
    3. 服务器发送 FIN 报文(FIN=1,ACK=1,seq=w,ack=u+1),表示准备关闭
    4. 客户端回复 ACK 报文(ACK=1,seq=u+1,ack=w+1),确认关闭,连接终止
  • 特点:服务器通常需要先处理完数据再发送 FIN,因此需要四次交互

4. TCP报文

标志位英文全称含义
URGUrgent Pointer紧急指针有效,指示报文包含紧急数据,应优先处理
ACKAcknowledgment确认标志,为 1 时表示确认号字段有效
PSHPush推送标志,接收方应立即将数据提交给应用层,而非缓存
RSTReset重置连接,用于强制关闭异常连接
SYNSynchronize同步序列号,用于建立连接时同步双方序列号
FINFinish结束标志,表示发送方已完成数据发送,请求关闭连接

5. 滑动窗口机制

  • 定义:接收方通过窗口大小字段告知发送方自己的接收缓冲区大小
  • 作用:实现流量控制,防止发送方发送速度过快导致接收方缓冲区溢出
  • 窗口大小:16 位字段,最大可表示 65535 字节
  • 工作原理:发送方可连续发送窗口大小范围内的数据,无需等待每个数据包的确认,大幅提高传输效率

6. 超时重传机制

  • 基本原理:发送方为每个数据包设置超时计时器,若超时未收到确认则重传该数据包
  • 超时时间:动态调整,通常为估算的往返时间 (RTT) 的 1.5~2 倍
  • 快速重传:当收到 3 个重复的 ACK 时,无需等待超时即重传对应数据包

7. 应用场景

  • 要求数据完整性的场景:文件传输(FTP)、电子邮件(SMTP)
  • 重要数据交换:银行交易、账户登录(QQ / 微信登录)
  • 大量数据传输:网页内容传输(HTTP 基于 TCP)

二、UDP 协议(用户数据报协议)

1. 核心特性

  • 无连接:通信前无需建立连接,发送数据后也无需释放连接,类似现实中的邮件投递
  • 不可靠传输
    • 不保证数据送达:无确认机制
    • 不保证按序到达:无序列号机制
    • 可能出现重复:无去重机制
  • 数据报传输:以独立的数据报为单位传输,每个数据报包含完整的源和目的地址

2. 首部结构共 8 字节)

字段长度详细说明
源端口16 位发送端应用程序的端口号,可选,为 0 时表示不需要回应
目的端口16 位接收端应用程序的端口号,必须填写
数据长度16 位整个 UDP 数据报的长度(首部 + 数据),最小值为 8(仅首部)
校验和16 位用于检测 UDP 数据报在传输过程中是否发生错误,覆盖首部和数据部分

3. 与 TCP 的对比

特性TCPUDP
连接性面向连接无连接
可靠性可靠传输不可靠传输
传输单位字节流数据报
首部开销20-60 字节固定 8 字节
速度较慢(因可靠性机制)较快(无额外开销)
拥塞控制
适用场景可靠性优先实时性优先

4. 应用场景详解

  • 实时通信:QQ / 微信即时消息、语音通话、视频会议(允许偶尔丢失,追求实时性)
  • 广播 / 组播
    • 广播:如局域网内的 ARP 协议
    • 组播:如视频会议中向多个参与者发送数据
  • 实时流媒体:IPTV、在线直播(延迟敏感,可容忍少量数据丢失)
  • 简单请求响应:DNS 查询(数据量小,对速度要求高)
  • 无线网络:在丢包率较高的无线环境中,重传机制效率低,UDP 更适合

三、HTTP 协议(超文本传输协议)

1. 基本特性

  • 应用层协议:基于 TCP 协议实现,属于请求 - 响应式协议
  • 无状态:服务器不保留客户端的任何信息,每次请求都是独立的
  • 面向文本:所有字段均由 ASCII 码构成,便于人类阅读和调试
  • 可扩展:通过头部字段支持扩展功能

2. 实现流程

  1. 建立 TCP 连接:客户端通过三次握手与服务器建立 TCP 连接
  2. 发送请求报文:客户端向服务器发送 HTTP 请求
  3. 处理请求:服务器解析请求,处理业务逻辑
  4. 返回响应报文:服务器将处理结果封装为响应报文返回
  5. 关闭连接:根据连接模式决定是否关闭 TCP 连接
    • 非持久连接:一次请求 - 响应后关闭连接
    • 持久连接:多个请求 - 响应复用同一连接(HTTP/1.1 默认)

3. 请求报文结构

请求行(Method Request-URI HTTP-Version CRLF)
请求头部(Header-Name: Header-Value CRLF)
...(多个头部字段)
空行(CRLF)
请求正文(可选)
  • 请求行示例GET /index.html HTTP/1.1

4. 响应报文结构

状态行(HTTP-Version Status-Code Reason-Phrase CRLF)
响应头部(Header-Name: Header-Value CRLF)
...(多个头部字段)
空行(CRLF)
响应正文(可选)
  • 状态行示例HTTP/1.1 200 OK

5. 常用请求方法

方法功能描述特点
GET请求获取指定资源参数在 URL 中,长度有限制,不安全
POST向指定资源提交数据参数在请求体中,长度无限制,相对安全
HEAD类似 GET,但只返回响应头用于获取资源元信息,不传输正文
PUT向指定资源上传数据用于创建或替换资源
DELETE请求删除指定资源永久删除服务器上的资源
OPTIONS询问服务器支持的方法跨域资源共享 (CORS) 中常用

6. 状态码完整分类

类别范围含义典型状态码
信息性100-199请求已接收,继续处理100 Continue(继续发送请求体)
成功200-299请求被成功处理200 OK(成功)、201 Created(创建成功)
重定向300-399需要进一步操作完成请求301 Moved Permanently(永久重定向)、302 Found(临时重定向)
客户端错误400-499请求有错误或无法完成400(语法错误)、401(未授权)、403(禁止访问)、404(资源不存在)
服务器错误500-599服务器未能完成合法请求500(服务器内部错误)、503(服务不可用)

四、Wireshark 抓包工具

1. 安装与启动

  • 安装命令sudo apt-get install wireshark
  • 启动命令sudo wireshark(需要 root 权限捕获所有数据包)<在终端进行该软件的启动>
  • 首次启动:会提示是否允许非 root 用户捕获数据包,可根据需要配置

2. 界面组成

  • 捕获接口列表:显示可用的网络接口,如 eth0(以太网)、wlan0(无线)、any(所有接口)
  • 过滤栏:用于设置捕获或显示过滤条件
  • 数据包列表:显示捕获的数据包摘要信息(编号、时间、源地址、目的地址、协议、长度、信息)
  • 数据包详情:显示选中数据包的分层详细信息(物理层、数据链路层、网络层、传输层、应用层)
  • 数据包原始数据:以十六进制和 ASCII 码显示数据包的原始字节

3. 常用过滤条件

  • 按协议过滤
    • tcp:只显示 TCP 数据包
    • udp:只显示 UDP 数据包
    • http:只显示 HTTP 数据包
  • 按端口过滤
    • tcp.port == 80:显示 TCP 80 端口的数据包
    • udp.port == 53:显示 UDP 53 端口(DNS)的数据包
  • 按 IP 地址过滤
    • ip.src == 192.168.1.1:显示源 IP 为 192.168.1.1 的数据包
    • ip.dst == 192.168.1.1:显示目的 IP 为 192.168.1.1 的数据包
  • 组合过滤
    • tcp && ip.src == 192.168.1.100:源 IP 为 192.168.1.100 的 TCP 数据包
    • http || dns:显示 HTTP 或 DNS 数据包
http://www.dtcms.com/a/355359.html

相关文章:

  • Elasticsearch冷热架构:性能与成本完美平衡
  • 《深入浅出 Node.js》分享精简大纲
  • linu 网络 :TCP粘包及UDP
  • 软件设计师备考-(五)计算机网络
  • 客户端是否都需要主动发送`FindService`报文来寻找服务
  • FPGA开发技能(12)matlab图片处理助力FPGA开发
  • 【温室气体数据集】GlobalView 数据概述
  • Kotlin 协程之Channel 的高阶应用
  • RAGFlow
  • plantsimulation知识点 一条轨道上多台RGV如何引用
  • 【Big Data】Presto db 一种语言、一个接口搭建可靠、高效数据湖仓
  • NineData 最新发布 SQL Server 双向实时同步功能
  • 手机上访问你电脑上的前端项目
  • Rust 登堂 之 类型转换(三)
  • 趣味学Rust基础篇(数据类型)
  • Python Discord Logo
  • 【SpringAI】快速上手,详解项目快速集成主流大模型DeepSeek,ChatGPT
  • 操作系统-基础知识面试常见篇
  • 算法之排序
  • java后端的各种注解
  • 基于 PyTorch 构建 Dataset 与 DataLoader:从 TXT 文件读取到新增类别全流程指南
  • AI大模型企业落地指南-笔记02
  • Spring 框架中事务传播行为的定义
  • 146. LRU缓存
  • python使用sqlcipher4对sqlite数据库加密
  • 【论文阅读】基于人工智能的下肢外骨骼辅助康复方法研究综述
  • 【电源专题】隐形守护者:防爆锂电池如何守护高危环境的安全防线
  • UE5提升分辨率和帧率的方法
  • 网站日志里面老是出现{pboot:if((\x22file_put_co\x22.\x22ntents\x22)(\x22temp.php\x22.....
  • Leetcode 深度优先搜索 (15)