一、wireshark :网络抓包工具


1.功能:抓取通过电脑网卡的网络数据

2.作用:排查故障、抓取数据做数据分析、

3.用法:

(1)sudo wireshark

(2)选择需要抓取的网卡====》any

(3)设置抓取的条件 ===》dup.port == 50010     然后按一下回车

(4)开始抓取

(5)进行一次网络通信

二、头部信息

1.udp 头部信息:8个字节

数据长度:真正发送的正文长度+8个字节的头部

2.tcp【头部信息】:可变长

(1)数据偏移:头部的长度;固定头部24字节+选项 :可变长的头部长度

(2)标志位:

  •     URG: 紧急指针标志, 为1时表示紧急指针有效, 该报文应该优先传送。
  •     ACK: 确认应答标志
  •     PSH:  表示发送数据,提示接收端从TCP接收缓冲区中读走数据,为接收后续数据腾出空间
  •    RST: 重置连接标志
  •      SYN: 表示请求建立一个连接
  •     FIN: finish标志, 表示释放连接

   (3) 滑动窗口大小:是TCP流量控制得一个手段。目的是告诉对方, 本端得TCP接受缓冲区还能容纳多少字节得数据,这样对方就可以控制发送数据的速度,从而达到流量控制,16bit,因而窗口最大65535.

(4)序号和确认序号

发送端:0-999;

接收端返回:1000;

if(没发全)

例如:

发送端:0-999;

接收端返回:500;

三、TCP 

1.TCPT特点:

(1)面向链接

(2)面向字节流

(3)安全可靠的传输协议,因为会先建立连接

(4)占用资源开销大,效率低,实时性不佳,机制复杂

2.安全可靠机制

(1)三次握手:【客户端发起】
指建立tcp连接时,需要客户端和服务端总共发送三次报文确认连接。(确保双方都已经 做好收发数据的准备)

ACK:响应报文

STN:请求建立一个连接


(2)四次挥手:【两端都可发起】
断开一个tcp连接,需要客户端和服务端发送四个报文以确认断开。(确保断开前双方都已经收发完毕)

FIN:finish标志,表示释放连接

(3) 应答机制

每一个tcp头部有个序列号和确认应答号,TCP给每一抱会有一个序列号,发送方会把第一个编号给序号,在接受方应答的时候,会把确认序列号置最后一个编号的下一个编号回应

通过序列号和确定序列号来确定收发的

(4)超时重传机制

3.编程

1.socket

   socket(AF_INET, SOCK_STREAM, 0);

 2.connect

 int connect(int sockfd, const struct sockaddr *addr,
socklen_t addrlen);

(1)功能: 发送三次握手链接请求
(2)参数:
sockfd:套接字文件描述符
addr:存放目的地址空间首地址
addrlen:目的地址长度
(3)返回值:
成功返回0 
失败返回-1

3.send

 ssize_t send(int sockfd, const void *buf, size_t len, int flags);

(1)功能:发送数据
(2)参数:
sockfd:套接字文件描述符
buf:存放数据空间首地址
len:数据长度
(3)返回值:
成功返回发送字节数
失败返回-1

4.recv

       ssize_t recv(int sockfd, void *buf, size_t len, int flags);

(1)功能:接收数据 
(2)参数:
sockfd:套接字文件描述符
buf:存放数据空间首地址 
len:最多接收数据长度 
flags:接收属性默认为0 
(3)返回值:
成功返回实际接收字节数
失败返回-1 
对方连接断开,直接返回,不在阻塞,没有数据返回0; 

    5.bind

int bind(int sockfd, const struct sockaddr *addr,
socklen_t addrlen);

6.listen

  int listen(int sockfd, int backlog);

(1)功能:监听三次握手链接请求
(2)参数:
sockfd:套接字文件描述符
backlog:最多允许等待尚未处理的三次握手链接个数
(3)返回值:
成功返回0 
失败返回-1 

10.accept

       int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

(1)功能::处理三次握手等待队列中的第一个请求并建立一个用来通信的新套接字
(2)参数:
sockfd:套接字文件描述符
addr:存放发送端IP地址空间首地址 
addrlen:想要接收的IP地址的长度 
(3) 返回值:
成功返通讯套接字
失败返回-1 

4.提高效率

(1)延迟应答

(2)捎带应答

(3)流量控制机制

发送端根据窗口的数据大小,去动态控制发送端的数据;0--65535,接收端根据自己的能力,去调整窗口的大小,65535的时候,接受端处理能力最强,发送端可以发快一点。

(4)滑动窗口

        滑动窗口大小:是TCP流量控制得一个手段。目的是告诉对方, 本端得TCP接受缓冲区还能容纳多少字节得数据,这样对方就可以控制发送数据的速度,从而达到流量控制,16bit,因而窗口最大65535.

        本质是一段缓冲区:通过指针把缓冲区分为几个部分:

        已发送并且收到应答的数据、已发送未收到应答的数据、未发送但在对方处理能力内的数据;未发送但不在对方处理能力内的数据;

慢慢滑动,已发送并且收到的数据滑出。

四. TCP粘包问题【高频面试题】


TCP协议是面向字节流的协议,接收方不知道消息的界限,不知道一次提取多少数据,这就造成了粘包问题。

1. 粘包问题出现的原因: 

(1)发送端:需要等缓冲区满时才发送出去,造成粘包;发送数据太快

(2)接收端:不及时的接收缓冲区内的包,造成多个包接收。处理数据太慢导致数据在缓冲区缓存

2.避免粘包问题的方法:

(1)对于定长的包,保证每次都按固定大小发送和读取即可;//  结构体

        1)问题:

  •         结构体对齐问题:假设发送方和接收方分别32字节、64字节;在不同字节平台结构体对齐长度不一样;所以要确保双方结构体对齐方式一样;或者指定按照1个字节对齐,注意,结构体不可放指针;
  •         在双方通信时,发送方的发送数据类型不一样,接收很难确认和区分接受的大小;所以不适用于数据类型多样化;

(2) 对于变长的包,还可以在包和包之间使用明确的分隔符,这个分隔符是由程序员自己来定的,只要保证分隔符不和正文冲突即可。应用层根据分隔符进行解析

(3)自定义一个应用层的数据协议帧;

如果数据里面有帧头或者帧尾 ====》在帧头后面加入一个长度,这个长度规定,向后°多少个

首先找帧头和有效字节长度,向后读有效字节长度并且读完了看最后是不是帧尾

在后面加个校验

所以包含:帧头(AA)、帧尾(BB)、有效数据长度(len)、校验(例如8位和校验()、16位和校验、CRC校验、和其他复杂校验算法)

tcp和UDP:

1都是网络中传输层的传输协议

U叫做,无需建立链接、直接发送给接收方,需要对方的地址,面向数据包;存在丢包,尽最大努力叫覅,不安全不可靠;由于没有很多机制,头部小,资源开销打;要求实时性、不要求数据;

T需要建立TXP链接,面向字节流,有一系列机制可以确保安全机制,三次握手四次挥手、应答机制、流量控制、流动窗口、超时重传;由于很多机制。头部大。资源开销打,要求数据传输安全性高


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/92346.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/92346.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/92346.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数字护网:一次深刻的企业安全体系灵魂演练

🧩 引言:什么是“护网”?—— 不止是攻防,更是企业安全能力的年度大考 每年,由国家相关部门牵头的“护网行动”都如期而至,各大企事业单位的安全团队也随之进入高度戒备状态。然而,“护网”远非…

基于 NumPy 的高效数值计算技术解析与实践指引

在数据处理与科学计算领域,高效是核心诉求。NumPy 作为 Python 生态高效数值计算的基石,以高性能多维数组对象及配套函数,成为数据从业者的必备工具。其数组支持算术、比较、逻辑等丰富运算,通过向量化操作直接处理每个元素&#…

Kafka MQ 控制器 broker

Kafka MQ 控制器 broker 1 控制器broker的选举 在 Kafka 集群中会有一个或多个 broker,其中有一个 broker 会被选举为控制器(Kafka Controller)​,它负责管理整个集群中所有分区和副本的状态。当某个分区的leader副本出现故障时,由控制器负责为该分区选举新的leader副本…

50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | ImageCarousel(图片轮播组件)

&#x1f4c5; 我们继续 50 个小项目挑战&#xff01;—— ImageCarousel组件 仓库地址&#xff1a;https://github.com/SunACong/50-vue-projects 项目预览地址&#xff1a;https://50-vue-projects.vercel.app/ 使用 Vue 3 的 <script setup> 语法以及 Tailwind CSS …

基于springboot的智能物流管理系统(源码+论文)

一、开发环境 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器&#xff0c;基于SQL的客户/服务器模式的关系数据库管理系统。其特点包括&#xff1a; 功能强大&#xff1a;支持多用户、多线程操作。使用简单&#xff1a;管理方便&#xff0c;安全可靠性高。跨平…

Collection接口的详细介绍以及底层原理——包括数据结构红黑树、二叉树等,从0到彻底掌握Collection只需这篇文章

目录 Collection简介 Collection的遍历方式 迭代器遍历 增强for遍历 Lambda表达式遍历 List集合 List集合的遍历方式 列表迭代器遍历以及普通for循环 数据结构 栈 队列 数组 链表 单向链表 双向链表 二叉树 遍历方式 普通二叉树 二叉查找树 平衡二叉树 旋转…

《安顺棒垒球》世界十大运动·棒球1号位

Worlds Top 10 Sports for Newbies | 棒球排第几&#xff1f; 全球青训体系大揭秘 ⚾添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09;神王棒球世界十大运动排名 Top 10 Global Sports&#xff08;按参与度/商业价值/影响力综合排序&#xff09;足球 Footba…

什么是“差分“?

1. 什么是"差分"&#xff1f;想象两个人在玩跷跷板&#xff1a;当两人同时向上跳&#xff08;同向移动&#xff09;→ 跷跷板不动 → 这叫"共模"当一人向上&#xff0c;另一人向下&#xff08;反向移动&#xff09;→ 跷跷板倾斜 → 这叫"差分"差…

4.组合式API知识点(2)

10 组合式API - 模版引用模板引用的概念如何使用&#xff08;以获取dom为例 组件同理&#xff09;组件实例对象defineExpose()11 组合式API - provide和inject作用和场景跨层传递普通数据跨层传递响应式数据跨层传递方法需求解决思考

GitLab企业版部署与许可证生成完整指南

GitLab企业版部署与许可证生成完整指南一、背景二、环境准备三、部署步骤1. 创建目录结构2. 生成GitLab许可证2.1 克隆许可证生成器2.2 修改生成器脚本2.3 构建Docker镜像2.4 生成许可证文件3. 创建Docker Compose配置文件4. 启动GitLab容器4.1 初始启动4.2 修改GitLab配置4.3 …

Jenkins 不同节点间文件传递:跨 Job 与 同 Job 的实现方法

在日常的 DevOps 运维实践中&#xff0c;Jenkins 通常被用于串联多个自动化流程&#xff0c;而这些流程往往需要在不同的构建节点&#xff08;agent&#xff09;上执行。例如&#xff0c;在以下场景中&#xff1a; &#x1f4cc; 场景需求描述&#xff08;实际问题&#xff09;…

Java中AQS原理

一、核心架构&#xff1a;AQS抽象队列同步器二、AQS核心机制1. 三大核心组件&#xff1a;state状态变量&#xff1a;volatile int&#xff0c;表示锁状态&#xff08;0未锁定&#xff0c;≥1锁定/重入次数&#xff09;CLH队列&#xff1a;双向链表实现的线程等待队列Node节点&a…

深入理解程序链接机制:静态链接、ELF加载与动态库实现原理

目录 一、静态链接 1、静态链接的基本概念 1. 静态链接实例分析 2. 目标文件分析 3. 关键观察 4. 重定位机制 5. 注意事项 2、静态链接过程详解 1. 目标文件反汇编分析&#xff08;上面已分析&#xff09; 2. 符号表分析 code.o 符号表 hello.o 符号表 3. 链接后的…

python基础复习

复习python基础语法,最好能做到使用python 写一些简单的算法。 1基础基础语法 1.0 输入输出 一个实用的print:format函数print(站点列表 {0}, {1}, 和 {other}。.format(Google, Runoob, other=Taobao)) 站点列表 Google, Runoob, 和 Taobao。print("a", "b…

ZLMediaKit 入门

什么是ZLMediaKit&#xff1f; ZLMediaKit 是一个基于C11的高性能流媒体服务器框架&#xff0c;支持RTSP/RTMP/HLS/HTTP-FLV/WebSocket-FLV等多种流媒体协议。它具有以下特点&#xff1a; 跨平台支持&#xff08;Linux、Windows、macOS&#xff09; 高性能&#xff0c;支持高…

接口测试Postman工具高级使用技巧

目录 一、环境与变量的深度应用 多环境动态切换 动态变量与脚本生成 二、Pre-request Script 的妙用 参数签名/加密 接口依赖处理 三、Test Script 的进阶断言 复杂 JSON Schema 校验 数据库断言 四、数据驱动测试 CSV/JSON 文件驱动 动态生成测试用例 环境与变量的…

ZooKeeper学习专栏(四):单机模式部署与基础操作详解

文章目录前言一、单机模式部署架构图部署流程&#xff1a;二、zkCli.sh命令行工具基础操作三、ACL权限控制实践学习资源前言 本文是Zookeeper学习系列的第四篇&#xff0c;将详细讲解Zookeeper的单机模式部署过程以及基础命令行操作&#xff0c;包括节点管理、Watcher机制和AC…

静态登录界面

代码&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>用户登录</title><st…

Three.js 全景图(Equirectangular Texture)教程:从加载到球面映射

全景图(Equirectangular Texture)是一种特殊的 2D 图像,能通过数学转换模拟 360 环绕视角,常用于创建沉浸式环境(如虚拟全景、天空盒替代方案)。本文将通过完整示例,带你掌握 Three.js 中全景图的加载、映射原理与实际应用。 什么是全景图(Equirectangular Texture)?…

Rocky Linux 9 快速安装 Node.js

Rocky Linux 9 快速安装 Node.js 大家好&#xff0c;我是星哥&#xff01;今天给大家带来 Rocky Linux 9 环境下 Node.js 的安装教程。 本文将详细介绍两种安装方法&#xff0c;帮你快速搭建稳定的 Node.js 环境。 Node.js 是一个非常流行的 JavaScript 运行时环境&#xff…