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

网络编程3

  • day3
    • 一、服务器模型
      • 1.循环服务器模型
        • 同一个时刻只能响应一个客户端的请求
      • 2.并发服务器模型
        • 2.1含义
          • 同一个时刻可以响应多个客户端的请求,常用的模型有多进程模型/多线程模型/IO多路复用模型。
        • 2.2多进程模型
          • 每来一个客户端连接,开一个子进程来专门处理客户端的数据,实现简单,但是系统开销相对较大,更推荐使用线程模型。
        • 2.3多线程模型(重点)
          • 每来一个客户端连接,开一个子线程来专门处理客户端的数据,实现简单,占用资源较少,属于使用比较广泛的模型。
    • 二、网络调试
      • 1.ping
        • 作为平时网络连通检测使用最多的命令,它的作用主要为:
        • ● 用来检测网络的连通情况;
        • ● 根据域名得到服务器IP;
        • ● 根据ping返回的TTL值来判断数据包经过路由器数量。
      • 2.netstat
        • 作用:测试网络状态
        • netstat -a //查看所有网络连接状态
        • netstat -at //查看tcp所有网络状态
        • netstat -au //查看udp所有网络状态
    • 三、网络协议头分析
      • 1.数据的封装与传递过程
      • 2.以太网帧完整帧格式
        • ●对于网络层最大数据帧长度是1500字节
        • ●对于链路层最大数据长度是1518字节(1500+14+CRC)
        • ●发送时候,IP层协议栈程序检测到发送数据和包头总长度超过1500字节时候,会进行自动分包处理,接收端在IP层进行包重组,然后才继续往上传递
    • 四、wireshark与包头分析
      • 1.步骤
        • 双击需要的网卡,开始抓包  
        • 捕获器选择:  
        • windows如果连接有线网络,选择本地连接/以太网;如果连接无线网络,选择WLAN;如果只是在本机上的通信,选择NPCAP Loopback apdater或Adapter for loopback traffic capture。
        • 过滤条件:  
        • 过滤端口:tcp.port == 502  
        • 过滤IP:ip.addr == 192.168.1.156(自己的ip地址)  
        • 以上条件同时过滤,通过&&连接
      • 2..wireshark与对应的OSI七层模型
      • 3.三次握手
        • 3.1过程
          • (1).第一次握手:客户端发送SYN包(SYN=1,seq=J),并进入SYN_SENT状态,等待服务器端返回确认包。
          • (2).第二次握手:服务器端收到SYN包,确认客户端的SYN,发送ACK包(ACK=1,ack = J+1),同时发送一个SYN包(SYN=1,seq=K),并进入SYN_RCVD状态。
          • (3).第三次握手:客户端收到服务器的SYN包以及ACK包,进入ESTABLISHED状态,同时向服务器端发送ACK包(ACK=1,ack=K+1)此时三次握手包发送完毕,服务器进入ESTABLISHED状态。
        • 3.2过程图
      • 4.四次挥手
        • 4.1过程
          • (1).第一次挥手:主动关闭方发送一个FIN包(FIN=1,seq=M)给被动方,进入FIN_WAIT_1状态
          • (2).第二次挥手:被动方接收到FIN包,给主动方发送一个ACK包(ACK=1,ack=M+1);并进入CLOSE_WAIT状态。主动方接收到ACK后进入FIN_WAIT_2状态.如果有数据没有发送完毕,则继续发送,直到发送完毕为止
          • (3).第三次挥手:被动方发送一个FIN包(FIN=1,seq=N),进入LAST_ACK状态。
          • (4).第四次挥手:主动方收到FIN包,回复一个ACK包(ACK=1,ack=N+1).被动方收到主动方的ACK包后关闭连接
        • 4.2过程图
          • 为什么客户端在TIME-WAIT阶段要等2MSL?
            • 为了确保服务器端能收到客户端发送的ACK,1MSL允许ACK到达服务端,另1MSL允许服务端重传的FIN到达客户端。
      • 5.TCP如何保证可靠性?
        • (1).通过三次握手建立可靠连接。
        • (2).通过应答确认机制和重传机制确认数据准确到达,通过给每个数据增加序列号,确保数据包达到不失序。
        • (3).通过四次挥手实现断开连接时数据的完整性。
    • 五、数据库编程
      • 1.手工创建
        • 使用sqlite3工具,通过手工输入SQL命令行完成数据库创建。用户在Linux的命令行界面中输入sqlite3可启动sqlite3工具
          • https://docs.qq.com/doc/DQ294RlF0YXBxTkxS?nlc=1
      • 2.代码

相关文章:

网络编程3

day3 一、服务器模型 1.循环服务器模型 同一个时刻只能响应一个客户端的请求 2.并发服务器模型 2.1含义 同一个时刻可以响应多个客户端的请求,常用的模型有多进程模型/多线程模型/IO多路复用模型。 2.2多进程模型 每来一个客户端连接,开一个子进程来专门…...

数字化时代下的工业物联网智能体开发平台策略

1. 引言 1.1 工业物联网智能体的发展背景 随着工业4.0的兴起和数字化转型的不断深入,工业物联网(IIoT)已成为推动制造业创新发展的关键技术之一。智能体作为工业物联网的核心组成部分,其开发平台的建设与应用对于实现智能化升级、提升生产效率、降低…...

[Java实战经验]异常处理最佳实践

一些好的异常处理实践。 目录 异常设计自定义异常为异常设计错误代码(状态码)设计粒度全局异常处理异常日志信息保留 异常处理时机资源管理try-with-resources异常中的事务 异常设计 自定义异常 自定义异常设计,如业务异常定义BusinessExce…...

海拔与大气压关系,大气压单位,气压传感器对比

mbmbar 毫巴(百帕) mbar 毫巴(百帕) hPa 百帕 1百帕1毫巴3/4毫米水银柱 1Kpa10百帕7.5毫米汞柱7.5mmhg 1Bar0.1MPa1000mba1000hpa100*7.5mmhg75mmhg1个大气压 HP303B HP303S HP203N BMP280...

探秘STM32如何成为现代科技的隐形引擎

STM32单片机原理与应用 前言:微型计算机的硅脑 在我们身边的每一个智能设备中,都隐藏着一个小小的"硅脑"——单片机。它们体积微小,却能执行复杂的运算和控制功能,就像是现代科技世界的"神经元"。STM32系列…...

Linux 进程概念补充 (自用)

进程概念 内核进程进程状态内存泄漏进程调度。Linux真实调度算法环境变量 内核 狭义上的操作系统指的是 内核就是进程管理进程调度,文件系统等等。 广义上的操作系统其实在外壳指令这些。封装了系统调用的东西。 进程 课本概念程序的一个基本实例 内核观点&#…...

动态调整映射关系的一致性哈希负载均衡算法详解

一、核心原理与设计要点 双重映射结构 一致性哈希负载均衡通过 哈希环 和 槽动态分配 实现双重映射关系: • 哈希环构建:将节点(物理或虚拟)和数据键(Key)通过哈希函数(如MD5、CRC32&#xff09…...

PyTorch - Tensor 学习笔记

上层链接:PyTorch 学习笔记-CSDN博客 Tensor 初始化Tensor import torch import numpy as np# 1、直接从数据创建张量。数据类型是自动推断的 data [[1, 2],[3, 4]] x_data torch.tensor(data)torch.tensor([[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])输出&am…...

Navicat、DataGrip、DBeaver在渲染 BOOLEAN 类型字段时的一种特殊“视觉风格”

文章目录 前言✅ 为什么 Boolean 字段显示为 [ ]?✅ 如何验证实际数据类型?✅ 小结 前言 看到的 deleted: [ ] 并不是 Prisma 的问题,而是数据库客户端(如 Navicat、DataGrip、DBeaver)在渲染 BOOLEAN 类型字段时的一种…...

基于 Vue3 + ECharts + GeoJson 实现区域地图钻取功能详解

文章目录 前言一、实现步骤1. 项目初始化2. 准备GeoJson数据3. 创建地图组件4. 创建主页面组件5. 使用组件 二、功能亮点三、性能优化建议四、常见问题解决五、结语六、实战demo七、资源下载 前言 在数据可视化领域,地图展示是一种非常直观的表现形式。而地图钻取&…...

安卓学习24 -- 网络

1 整体架构 (出处见水印) 这两张是能找到的比较清楚的图。目前可以看出,底层的网络业务,还是传统的linux内核提供。(注:这两个图我个人觉得不是非常对。。。) 在安卓上增加的两个比较重要的部…...

github新建一个远程仓库并添加了README.md,本地git仓库无法push

1.本地git仓库与远程仓库绑定 2.push时报错,本地的 main 分支落后于远程仓库的 main 分支(即远程有更新,但你本地没有),需要拉取远程的仓库--->在merge合并(解决冲突)--->push 3.但是git …...

Python:使用web框架Flask搭建网站

Date: 2025.04.19 20:30:43 author: lijianzhan Flask 是一个轻量级的 Python Web 开发框架,以简洁灵活著称,适合快速构建中小型 Web 应用或 API 服务。以下是 Flask 的核心概念、使用方法和实践指南 Flask 的核心特点: 轻量级 核心代码仅约…...

FTP协议命令和响应码

文章目录 📦 一、什么是 FTP 协议?🧾 二、FTP 常见命令(客户端发送)📡 三、FTP 响应码(服务端返回)📌 响应码分类(第一位)✅ 常见成功响应码&…...

*数字信号基础

数字信号基础:从采样到处理的完整解析 数字信号是离散时间、离散幅度的信号,与连续时间的模拟信号相对。它在现代通信、音频处理、图像识别等领域有广泛应用。以下是数字信号的核心概念、处理流程及关键技术。 1. 数字信号 vs. 模拟信号 特性模拟信号数…...

Kotlin delay方法解析

本文记录了kotlin协程(Android)中delay方法的字节码实现,并解析了delay方法如何实现挂起操作。 一、delay方法介绍 1.1、delay方法使用举例 class TestDelay {suspend fun testDelay() {Log.d("TestDelay", "before delay")delay(1000)Log.d…...

PHP框架在大规模分布式系统中的适用性如何?

随着互联网业务的指数级增长,大规模分布式系统已成为支撑高并发、高可用服务的核心技术架构,同时也成为众多互联网企业的首选架构。本文将带大家全面剖析PHP框架在分布式系统中的适用性,并结合实战案例帮大家提供技术选型建议。 一、PHP框架…...

【Vulkan 入门系列】创建描述符集布局和图形管线(五)

描述符集布局定义了着色器如何访问资源(如缓冲区和图像),是渲染管线配置的关键部分。图形管线定义了从顶点数据到最终像素输出的整个处理流程,包括可编程阶段(如顶点和片段着色器)和固定功能阶段&#xff0…...

Web前端:百度首页克隆 - 前端开发练习

一、项目概述 1.1 练习目标:通过实现百度首页经典布局掌握HTMLCSS基础布局能力 1.2 功能要求: 顶部导航栏布局中央搜索区布局底部信息栏布局基础交互效果 二、技术栈 HTML5 语义化标签CSS3 样式传统布局方案(浮动布局)基础CSS…...

mysql中in的用法详解

MySQL 中 IN 操作符用法详解 IN 是 MySQL 中用于多值筛选的高效操作符,常用于 WHERE 子句,可替代多个 OR 条件,简化查询逻辑并提升可读性。以下从基础语法、应用场景、性能优化、常见问题及高级技巧进行全方位解析。 一、基础语法与优势 1.…...

MySQL为什么默认使用RR隔离级别?

大家好,我是锋哥。今天分享关于【MySQL为什么默认使用RR隔离级别?】面试题。希望对大家有帮助; MySQL为什么默认使用RR隔离级别? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 MySQL 默认使用 RR(Repeatable Read)…...

施磊老师基于muduo网络库的集群聊天服务器(二)

文章目录 Cmake简单介绍Cmake与MakefileCmake配置CmakeLists.txt 编写完整cmake例子文件夹杂乱问题多级目录Cmakevscode 极其推荐 的 cmake方式 Mysql环境与编程mysql简单使用User表Friend表AllGroup表GroupUser表OfflineMessage表 集群聊天项目工程目录创建网络模块代码Chatse…...

Git拉分支技巧:从零开始创建并推送分支

Git拉分支技巧:从零开始创建并推送分支 在团队协作开发中,Git 分支管理是不可或缺的技能。合理地创建、同步和推送分支,不仅能提高开发效率,还能避免代码冲突。本文将基于以下技巧,详细讲解如何从零开始创建并推送一个…...

Kotlin实现Android应用保活方案

Kotlin实现Android应用保活优化方案 以下的Android应用保活实现方案,更加符合现代Android开发规范,同时平衡系统限制和用户体验。 1. 前台服务方案 class OptimizedForegroundService : Service() {private val notificationId 1private val channel…...

Mysql insert一条数据的详细过程

以下是MySQL在接收到INSERT语句后存储数据的详细过程解析,结合存储引擎(以InnoDB为例)和物理存储机制分步说明。 一、SQL解析与事务启动 1.语法解析 MySQL首先解析INSERT语句,验证字段是否存在、数据类型是否匹配、约束&#xf…...

线性DP:最长上升子序列(子序列可不连续,子数组必须连续)

目录 Q1:简单遍历 Q2:变式(加大数据量) Q1:简单遍历 Dp问题 状态表示 f(i,j) 集合所有以第i个数结尾的上升子序列集合-f(i,j)的值存的是什么序列长度最大值max- 状态计算 (其实质是集合的划分)…...

C语言之文本加密程序设计

🌟 嗨,我是LucianaiB! 🌍 总有人间一两风,填我十万八千梦。 🚀 路漫漫其修远兮,吾将上下而求索。 文本加密程序设计 摘要:本文设计了一种文本加密程序,旨在提高信息安…...

生成器模式深入解析与 Spring 源码应用

摘要 本文以生成器模式为研究对象,采用通俗易懂的表述方式,详细阐释其核心概念与运行机制。通过构建游戏角色创建、电商订单生成等实际 Java 案例,直观呈现该模式在复杂对象构建中的应用优势。同时,深入剖析 Spring 框架源码&…...

云效部署实现Java项目自动化部署图解

前言 记录下使用云效部署Java项目,实现java项目一键化自动化部署。 云效流程说明: 1.云效拉取最新git代码后 2.进行maven编译打包后,上传到指定服务器目录 3.通过shell脚本,先kill java项目后,通过java -jar 启动项…...

0801ajax_mock-网络ajax请求1-react-仿低代码平台项目

0 vite配置proxy代理 vite.config.ts代码如下图所示: import { defineConfig } from "vite"; import react from "vitejs/plugin-react";// https://vite.dev/config/ export default defineConfig({plugins: [react()],server: {proxy: {&qu…...