【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 等)
🖊 不同的网络协议有不同的应用场景

🍀 HTTPHyperText 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-api
    swagger-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 {
    @Bean
    public 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)

在这里插入图片描述

📕 网线直连、同轴电缆、集线器、网桥、交换机
🖊连接的设备必须在同一网段
🖊连接的设备处在同一广播域

📕 路由器
🖊可以在不同网段之间转发数据
🖊隔绝广播域

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/497090.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CXL系统架构

CXL系统架构 CXL支持三种设备类型&#xff0c;如下图。Type 1支持CXL.cache和CXL.io&#xff1b;Type 2支持CXL.cache&#xff0c;CXL.mem和CXL.io&#xff1b;Type 3支持CXL.mem和CXL.io。无论哪种类型&#xff0c;CXL.io都是不可缺少的&#xff0c;因为设备的发现&#xff0…

Deconstructing Denoising Diffusion Models for Self-Supervised Learning解读(超详细)

论文题目&#xff1a;Deconstructing Denoising Diffusion Models for Self-Supervised Learning 原文链接&#xff1a;https://arxiv.org/html/2401.14404v1 本文是对何凯明老师的新作进行的详细解读&#xff0c;其中穿插了一些思考&#xff0c;将从以下四个方面对这篇工作进…

3723. 字符串查询:做题笔记

目录 思路 代码 注意点 3723. 字符串查询 思路 这道题感觉和常见的前缀和问题不太一样&#xff0c;前缀和的另一种应用&#xff1a;可以统计次数。 这道题我们想判断一个单词的其中一段子序列A是否可以通过重新排列得到另一段子序列B。 我看到这道题的时候想着可能要判…

Gitlab 实现仓库完全迁移,包括所有提交记录、分支、标签

1 方案一&#xff1a;命令 cd <项目目录> git fetch --all git fetch --tags git remote rename origin old-origin #可以不保留 git remote add origin http://***(项目的新仓库地址) #git remote set-url origin <项目的新仓库地址> git push origin --all git…

Qt 多线程QThread的四种形式

重点&#xff1a; 1.互斥量&#xff1a;QMutex配套使用&#xff0c;lock(),unlock(),如果一个线程准备读取另一个线程数据时候采用tryLock()去锁定互斥量&#xff0c;保证数据完整性。 QMutexLocker简化版的QMutex,在范围区域内使用。 QMutex mutex QMutexLocker locker(&…

达梦数据库新手上路排坑

数据库安装 这个没啥说的&#xff0c;按照官网教程操作&#xff0c;我使用的是docker进行安装 下载文件docker文件 官方下载地址- load -i dm8****.tar (注意修改为当前下载的文件)达梦官方文档注意修改为当前版本 docker run -d -p 5236:5236 --name dm8 --privilegedtrue -…

程序员口才提升技巧:从技术到沟通的进阶之路

程序员口才提升技巧&#xff1a;从技术到沟通的进阶之路 在数字化时代&#xff0c;程序员作为推动技术发展的关键角色&#xff0c;其专业能力的重要性不言而喻。然而&#xff0c;除了编程技能外&#xff0c;良好的口才同样是程序员职业生涯中不可或缺的一部分。本文将探讨程序…

学透Spring Boot — [二] Spring 和 Spring Boot的比较

欢迎关注我们的专栏 学透 Spring Boot 一、创建一个简单Web应用 本篇文章&#xff0c;我们将会比较 Spring 框架和 Spring Boot 的区别。 什么是 Spring? 也许你在项目中已经可以很熟练的使用 Spring 了&#xff0c;但是当被问到这个问题时&#xff0c;会不会犹豫一下&#…

2024-3-28 市场情绪强修复

这一轮退潮负反馈都修复了&#xff0c; 艾艾精工 博信股份 安奈尔 永悦科技 大理药业 &#xff0c;高新发展 也补跌了&#xff0c;收尸队也干活了&#xff0c;情绪不修复不接力得最好写照。这轮周期 宁科生物 已经7板&#xff0c;已经追平了 博信股份7板&#xff0c;看明天溢…

永磁同步电机速度环滑膜控制(SMC)

文章目录 1、前言2、滑膜控制基本原理2.1 滑膜控制的定义2.2 趋近率 3、滑膜控制器的设计与参数4、二阶滑膜速度控制器的设计5、二阶速度环滑膜控制仿真5.1 模型总览5.2 电机及系统参数5.3 滑膜控制模块5.4 控制效果对比 参考 写在前面&#xff1a;本人能力、时间、技术有限&am…

广场舞团系统的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)

本项目包含可运行源码数据库LW&#xff0c;文末可获取本项目的所有资料。 推荐阅读100套最新项目持续更新中..... 2024年计算机毕业论文&#xff08;设计&#xff09;学生选题参考合集推荐收藏&#xff08;包含Springboot、jsp、ssmvue等技术项目合集&#xff09; 目录 1. 系…

明天线上见!DPU构建高性能云算力底座——DPU技术开放日最新议程公布!

算力&#xff0c;是数字经济时代的新质生产力。随着人工智能、智算中心建设等需求不断拓展&#xff0c;DPU在各行各业数据中心的应用逐步深入。异构算力代表DPU在新质生产力建设中&#xff0c;能否给出别开生面的答案&#xff0c;应战算力难题&#xff1f;DPU技术在不同行业中的…

详细解析记忆泊车的顶层技术原理

详细解析记忆泊车的顶层技术原理 附赠自动驾驶学习资料和量产经验&#xff1a;链接 相对于记忆行车而言&#xff0c;记忆泊车 MPA&#xff08;Memory Parking Assist&#xff09;可以看成是停车场区域内的一个自动驾驶功能&#xff0c;可帮助用户按记忆的路线自动巡航并泊入车…

Vue2 与 Vue3的面试题

1.Promise有几种状态 pending(进行中) fulfilled(已成功) rejected(已失败) data(){return{}},create(){const result this.ganaretor()result.next.value.then((res)>{console.log(res);}) // 解决一直.then()方法问题},methods:{* ganaretor(){yield axios.get(httpts)…

vulnhub靶场之driftingblues-3

一.环境搭建 1.靶场描述 get flags difficulty: easy about vm: tested and exported from virtualbox. dhcp and nested vtx/amdv enabled. you can contact me by email for troubleshooting or questions. This works better with VirtualBox rather than VMware 2.靶场…

【前端面试3+1】01闭包、跨域、路由模式

一、对闭包的理解 定义&#xff1a; 闭包是指在一个函数内部定义的函数&#xff0c;并且该内部函数可以访问外部函数的变量。闭包使得函数内部的变量在函数执行完后仍然可以被访问和操作。 特点&#xff1a; 闭包可以访问外部函数的变量&#xff0c;即使外部函数已经执行完毕。…

天锐绿盾|公司如何防止员工拷贝电脑资料?

#天锐绿盾# 天锐绿盾是一款针对企业数据安全设计的终端安全管理软件&#xff0c;用来防止员工拷贝电脑资料的具体措施包括&#xff1a; www.drhchina.com PC地址&#xff1a; https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee 1. **文件透明加密…

10.对象的使用,遍历

什么是对象 其实就是map那种键值对的存储形式&#xff0c;别的语言也有&#xff0c;老规矩&#xff0c;和别的语言差不多的就在给pink老师打一波广告。 常见的对象操作&#xff0c;其实没啥直接上代码吧 <!DOCTYPE html> <html> <head><meta charset&…

网络套接字补充——UDP网络编程

五、UDP网络编程 ​ 1.对于服务器使用智能指针维护生命周期&#xff1b;2.创建UDP套接字&#xff1b;3.绑定端口号&#xff0c;包括设置服务器端口号和IP地址&#xff0c;端口号一般是2字节使用uint16_t&#xff0c;而IP地址用户习惯使用点分十进制格式所以传入的是string类型…

【常见面试题】JS 发布者、订阅者模式

面试中经常出现问到如何实现JS 发布者、订阅者模式。下面是ES5实现发布订阅模式。 1、直接上代码。 function EventEmitter() {this.events {}; }; // 订阅者 EventEmitter.prototype.on function(ename, callback) {if (!this.events[ename]) {// 初始化创建订阅&#xff…