【1】网络协议基础概念
【1】网络协议基础知识
- 1、互联网
- 2、为什么要学习网络协议
- 3、学习中需要搭建的环境
- 4、客户端-服务器
- 5、Java 的跨平台原理
- 6、C/C++的跨平台原理
- 7、一个简单的SpringBoot项目
- (1) pom.xml
- (2) application.yml
- (3) NetworkStudyApp.java
- (4) SwaggerConfig.java
- (5) HelloWorldController.java
- 8、什么是协议
- 9、网络互连模型
- 10、客户端传数据到服务器端
- 11、网络分层
- 12、计算机之间的通信基础
- 13、计算机之间的连接方式
- (1) 网线直连
- ① 使用交叉线连接两台计算机
- ② 设置两台计算机的IP地址
- ③ ping 测试是否连通
- ④ 使用仿真发数据包测试是否连通
- ⑤ ARP 广播协议
- (2) 同轴电缆(Coaxial)
- (3) 集线器(Hub)
- ① 三台计算机,一台集线器
- ② 计算机1向计算机2发数据
- ③ 集线器“没有智商”
- (4) 网桥(Bridge)
- (5) 交换机(Switch)
- (6) 路由器(Router)
1、互联网
🖊 互联网的出现,彻底改变了人们的生活方式,足不出户就可以购物、聊天、看电影、买车票、上班等

❓ 思考:数据是如何从一个设备传递到另一个设备的?
🖊 这一切都是由网络协议来规定的。没有网络协议,就没有今天的互联网。
2、为什么要学习网络协议
📕 互联网、移动互联网、物联网,都离不开网络协议
🖊 最熟悉的网络协议:HTTP
🖊 为了满足各种需求,产生了各式各样的网络协议(HTTPS、SMTP、MQTT、RTMP 等)
🖊 不同的网络协议有不同的应用场景
🍀 HTTP:HyperText Transfer Protocol:超文本传输协议
📕 随着物联网、音视频、直播等领域的发展,企业提高对开发人员网络基本功的要求,经常问网络协议的面试题
🖊 TCP和UDP的区别?说一下它们的报文格式?
🖊 TCP的流量控制和和拥塞控制?TCP如何实现可靠性传输?
🖊 为什么连接是3次握手,关闭是4次挥手?
🖊 7层模型与4层模型的区别?每一层的作用是什么?
🖊 交换机与路由器的区别?
🖊 …
3、学习中需要搭建的环境
📕 客户端-服务器开发环境
🖊 客户端:浏览器(HTML+CSS+JS)
🖊 服务器:Java
📕 网络抓包
🖊 浏览器(Chrome、Firefox)
🖊 抓包工具(Fiddler、Wireshark)
📕 模拟环境
🖊 xshell、packet-tracer、gns3
4、客户端-服务器


🖊 服务器软件(Tomcat)监听端口,端口(如 5200)和某个项目绑定
🖊 客户端通过端口和指定的项目交互
5、Java 的跨平台原理
📕 JVM(Java Virtual Machine):Java 虚拟机
📕 Java 的跨平台:一次编译,到处运行
🖊 编译生成跟平台无关的字节码文件(class 文件)
🖊 由对应平台的 JVM 把字节码解析为机器指令(010101)

📕 如果代码有语法错误,将编译失败,就不会生成字节码文件
🖊 那就不会去运行一个 JVM 程序。最后导致 Java 程序运行失败
6、C/C++的跨平台原理

📕 使用平台相关的编译器生成对应平台的可执行文件
🖊 JS 是解释型语言,由对应平台的浏览器执行JS代码
7、一个简单的SpringBoot项目
(1) pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.5</version><relativePath/></parent><groupId>com.guoqing</groupId><artifactId>network-study</artifactId><version>1.0.0</version><properties><springfox-swagger.version>3.0.0</springfox-swagger.version><swagger-models-version>1.6.2</swagger-models-version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>${springfox-swagger.version}</version></dependency><dependency><groupId>io.swagger</groupId><artifactId>swagger-models</artifactId><version>${swagger-models-version}</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency></dependencies>
</project>
(2) application.yml
server:port: 5200
spring:mvc:pathmatch:matching-strategy: ANT_PATH_MATCHER
springfox:documentation:enabled: true # 是否启用Swagger功能open-api:enabled: true # 是否启用Swagger的open-apiswagger-ui:enabled: true # 是否启用Swagger的WebUI
(3) NetworkStudyApp.java
@SpringBootApplication
public class NetworkStudyApp {public static void main(String[] args) {SpringApplication.run(NetworkStudyApp.class, args);System.out.println("服务启动成功✌");System.out.println("✌Swagger地址:http://localhost:5200/swagger-ui/index.html");}
}
(4) SwaggerConfig.java
@Configuration
public class SwaggerConfig {@Beanpublic Docket docket(Environment env) {return new Docket(DocumentationType.SWAGGER_2).ignoredParameterTypes(HttpSession.class,HttpServletResponse.class,HttpServletRequest.class) // 忽略参数.apiInfo(apiInfo()).select().apis(RequestHandlerSelectors.withClassAnnotation(RestController.class)).build();}private ApiInfo apiInfo() {return new ApiInfoBuilder().title("学习网络").description("原万事顺心").contact(new Contact("张国庆", null, "3465764450@qq.com")).version("1.0").build();}
}
(5) HelloWorldController.java
@Api(tags = "网络协议学习")
@RestController
@RequestMapping("/hello/world")
public class HelloWorldController {@ApiOperation(value = "模拟登录", notes = "模拟登录")@PostMapping("/login")@ApiImplicitParams({@ApiImplicitParam(name = "username", value = "用户名"),@ApiImplicitParam(name = "password", value = "密码")})public String login(@RequestParam(defaultValue = "张思睿") String username,@RequestParam(defaultValue = "zgq666") String password) {if ("张思睿".equals(username) && "zgq666".equals(password))return "张思睿 登录成功🍀";return username + " 登录失败😟";}
}
8、什么是协议

🖊 协议是一个约定
🖊 网络协议约定客户端可以发什么数据到服务器,服务器可以返回什么数据到客户端,约定数据格式等
9、网络互连模型
📕 为了更好地促进互联网络的研究和发展,国际标准化组织 ISO 在 1985 年制定了网络互连模型
🖊 OSI 参考模型(Open System Interconnect Reference Model),具有 7 层结构【国际标准】

10、客户端传数据到服务器端

11、网络分层

12、计算机之间的通信基础
📕 需要得知对方的 IP 地址
📕 最终是根据 MAC 地址(网卡地址)输送数据到网卡,被网卡接收
🖊 如果网卡发现数据的目标 MAC 地址是自己,就会将数据传递给上一层进行处理
🖊 如果网卡发现数据的目标 MAC 地址不是自己,就会将数据丢弃,不会传递给上一层进行处理
13、计算机之间的连接方式
(1) 网线直连

🌼 通过交叉线连接(不是直通线)
👇 使用思科模拟器(Cisco Packet Tracer)模拟
① 使用交叉线连接两台计算机

② 设置两台计算机的IP地址



③ ping 测试是否连通


④ 使用仿真发数据包测试是否连通



⑤ ARP 广播协议
🖊 ARP 协议是广播
🖊 广播只在同一网段进行
🖊 广播的目标MAC地址是 FFFF.FFFF.FFFF,表示同一网段的设备的网卡都会收到广播信息
🖊 ARP 是有缓存的


(2) 同轴电缆(Coaxial)
🖊 多台计算机互联

🖌 半双工通信( 同一时间只能一个设备向另一个设备发数据 )全双工通信:同一时间,A设备可以向B设备发数据,B设备也可以向A设备发数据
🖌 容易冲突
🖌 不安全
🖌 中间断了,则整个瘫痪
🖌 同轴电缆"没有智商"(会向所有的设备发广播)
(3) 集线器(Hub)

🖌 半双工通信
🖌 容易冲突
🖌 不安全
🖌 根同轴电缆一样:没有智商(会向所有的设备发广播)
👇 使用思科模拟器(Cisco Packet Tracer)模拟
① 三台计算机,一台集线器

② 计算机1向计算机2发数据


③ 集线器“没有智商”

(4) 网桥(Bridge)

🖌 能够通过自学习得知每个接口那侧的 MAC 地址
🖌 从而起到隔绝冲突域的作用
(5) 交换机(Switch)

🖊 相当于接口更多的网桥
🖊 全双工通信
🖊 比集线器安全
❓ 思考:全球所有的设备都用交换机连接会是什么情况?
(6) 路由器(Router)

📕 网线直连、同轴电缆、集线器、网桥、交换机
🖊连接的设备必须在同一网段
🖊连接的设备处在同一广播域
📕 路由器
🖊可以在不同网段之间转发数据
🖊隔绝广播域
相关文章:
【1】网络协议基础概念
【1】网络协议基础知识 1、互联网2、为什么要学习网络协议3、学习中需要搭建的环境4、客户端-服务器5、Java 的跨平台原理6、C/C的跨平台原理7、一个简单的SpringBoot项目(1) pom.xml(2) application.yml(3) NetworkStudyApp.java(4) SwaggerConfig.java(5) HelloWorldControll…...
flutter 中 GetxController 和 GetxService 的区别和使用场景
区别: GetxController: GetxController 用于管理特定页面或 widget 的状态。每个页面或 widget 可以拥有一个或多个 GetxController,用于管理其自身的状态和逻辑。GetxController 是短暂存在的,通常与页面或 widget 的生命周期相关…...
Python+Django+Yolov5路面墙体桥梁裂缝特征检测识别html网页前后端
程序示例精选 PythonDjangoYolov5路面墙体桥梁裂缝特征检测识别html网页前后端 如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助! 前言 这篇博客针对《PythonDjangoYolov5路面墙体桥梁裂缝特征检测识别html网页前…...
uniApp使用XR-Frame创建3D场景(7)加入点击交互
上篇文章讲述了如何将XR-Frame作为子组件集成到uniApp中使用 这篇我们讲解如何与场景中的模型交互(点击识别) 先看源码 <xr-scene render-system"alpha:true" bind:ready"handleReady"><xr-node><xr-mesh id"…...
单元测试11213123231313131231231231
使用技术 junit Mockito s[romg 示例代码: SpringBootTest(classes启动类.class) public class AbstractTes{ MockBean protected A a; } AutoConfigureMockMvc(printOnlyOnFailure false) public abstract class AbstractWebTes extends AbstractTes imple…...
libVLC 捕获鼠标、键盘事件
在实现播放器的时候,我们需要捕获键盘、鼠标事件进行视频快进、快退,或者双击全屏/退出全屏窗口、鼠标右键弹出菜单栏。默认情况下,在使用libVLC库的时候,我们无法捕获这些事件,因为我们将Qt的视频窗口传递给了libVLC。…...
京东云0基础搭建帕鲁服务器_4核16G和8核32G幻兽帕鲁专用服务器
使用京东云服务器搭建幻兽帕鲁Palworld游戏联机服务器教程,非常简单,京东云推出幻兽帕鲁镜像系统,镜像直接选择幻兽帕鲁镜像即可一键自动部署,不需要手动操作,真正的新手0基础部署幻兽帕鲁,阿腾云atengyun.…...
OpenCV 如何使用 XML 和 YAML 文件的文件输入和输出
返回:OpenCV系列文章目录(持续更新中......) 上一篇:如何利用OpenCV4.9离散傅里叶变换 下一篇: 目标 本文内容主要介绍: 如何使用 YAML 或 XML 文件打印和读取文件和 OpenCV 的文本条目?如何对 OpenCV …...
playbook的介绍、应用与实施
playbook的介绍、应用与实施 文章目录 playbook的介绍、应用与实施1. 实施playbook1.1 Ansible Playbook与临时命令1.2 格式化Ansible Playbook1.3 运行playbook1.4 提高输出的详细程度1.5 语法验证1.6 执行空运行 2. 实施多个play2.1 缩写多个play2.2 play中的远程用户和特权升…...
uniApp使用XR-Frame创建3D场景(5)材质贴图的运用
上一篇讲解了如何在uniApp中创建xr-frame子组件并创建简单的3D场景。 这篇我们讲解在xr-frame中如何给几何体赋予贴图材质。 先看源码 <xr-scene render-system"alpha:true" bind:ready"handleReady"><xr-node><xr-assets><xr-asse…...
阿里云CentOS7安装Hadoop3伪分布式
ECS准备 开通阿里云ECS 略 控制台设置密码 连接ECS 远程连接工具连接阿里云ECS实例,这里远程连接工具使用xshell 根据提示接受密钥 根据提示写用户名和密码 用户名:root 密码:在控制台设置的密码 修改主机名 将主机名从localhost改为需要…...
78.子集90.子集2
78.子集 思路 又回到了组合的模板中来,这道题相比于前面的题省去了递归终止条件。大差不差。 代码 class Solution {List<List<Integer>> result new ArrayList<>();LinkedList<Integer> listnew LinkedList<>();public List<…...
基于Ubuntu的Linux系统安装jsoncpp开发包过程
执行以下命令: sudo apt update sudo apt install libjsoncpp-dev有可能出现的问题: 1.如果在执行sudo apt update时出现以下信息 Hit:1 http://mirrors.aliyun.com/ubuntu bionic InRelease Hit:2 http://mirrors.aliyun.com/ubuntu bionic-security…...
葵花卫星影像应用场景及数据获取
一、卫星参数 葵花卫星是由中国航天科技集团公司研制的一颗光学遥感卫星,代号CAS-03。该卫星于2016年11月9日成功发射,位于地球同步轨道,轨道高度约为35786公里,倾角为0。卫星设计寿命为5年,搭载了高分辨率光学相机和多…...
Jenkins升级中的小问题
文章目录 使用固定版本安装根据jenkins页面下载war包升级jenkins重启jenkins报错问题解决 K8s部署过程中的一些小问题 ##### Jenkins版本小插曲 在Jenkins环境进行插件安装时全部清一色飘红,发现是因为Jenkins版本过低导致,报错的位置可以找到更新je…...
Apache Hive的基本使用语法(二)
Hive SQL操作 7、修改表 表重命名 alter table score4 rename to score5;修改表属性值 # 修改内外表属性 ALTER TABLE table_name SET TBLPROPERTIES("EXTERNAL""TRUE"); # 修改表注释 ALTER TABLE table_name SET TBLPROPERTIES (comment new_commen…...
基于单片机16位智能抢答器设计
**单片机设计介绍,基于单片机16位智能抢答器设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机16位智能抢答器设计是一个结合了单片机技术、显示技术、按键输入技术以及声音提示技术的综合性项目。其设计…...
idea默认代码生成脚本修改
修改了下idea自带的代码生成脚本,增加了脚本代码的注释,生成了controller,service,impl,mapper,里面都是空的,具体可以根据自己的代码习惯增加 代码生成脚本的使用可以看下使用 idea 生成实体类…...
StarRocks实战——多点大数据数仓构建
目录 前言 一、背景介绍 二、原有架构的痛点 2.1 技术成本 2.2 开发成本 2.2.1 离线 T1 更新的分析场景 2.2.2 实时更新分析场景 2.2.3 固定维度分析场景 2.2.4 运维成本 三、选择StarRocks的原因 3.1 引擎收敛 3.2 “大宽表”模型替换 3.3 简化Lambda架构 3.4 模…...
jmeter总结之:Regular Expression Extractor元件
Regular Expression Extractor是一个后处理器元件,使用正则从服务器的响应中提取数据,并将这些数据保存到JMeter变量中,以便在后续的请求或断言中使用。在处理动态数据或验证响应中的特定信息时很有用。 添加Regular Expression Extractor元…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...
C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...
tomcat指定使用的jdk版本
说明 有时候需要对tomcat配置指定的jdk版本号,此时,我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...
