【1】网络协议基础概念

【1】网络协议基础知识

  • 1、互联网
  • 2、为什么要学习网络协议
  • 3、学习中需要搭建的环境
  • 4、客户端-服务器
  • [5、Java 的跨平台原理](#5、Java 的跨平台原理)
  • 6、C/C++的跨平台原理
  • 7、一个简单的SpringBoot项目
    • [(1) pom.xml](#(1) pom.xml)
    • [(2) application.yml](#(2) application.yml)
    • [(3) NetworkStudyApp.java](#(3) NetworkStudyApp.java)
    • [(4) SwaggerConfig.java](#(4) SwaggerConfig.java)
    • [(5) HelloWorldController.java](#(5) HelloWorldController.java)
  • 8、什么是协议
  • 9、网络互连模型
  • 10、客户端传数据到服务器端
  • 11、网络分层
  • 12、计算机之间的通信基础
  • 13、计算机之间的连接方式
    • [(1) 网线直连](#(1) 网线直连)
      • [① 使用交叉线连接两台计算机](#① 使用交叉线连接两台计算机)
      • [② 设置两台计算机的IP地址](#② 设置两台计算机的IP地址)
      • [③ ping 测试是否连通](#③ ping 测试是否连通)
      • [④ 使用仿真发数据包测试是否连通](#④ 使用仿真发数据包测试是否连通)
      • [⑤ ARP 广播协议](#⑤ ARP 广播协议)
    • [(2) 同轴电缆(Coaxial)](#(2) 同轴电缆(Coaxial))
    • [(3) 集线器(Hub)](#(3) 集线器(Hub))
      • [① 三台计算机,一台集线器](#① 三台计算机,一台集线器)
      • [② 计算机1向计算机2发数据](#② 计算机1向计算机2发数据)
      • [③ 集线器"没有智商"](#③ 集线器“没有智商”)
    • [(4) 网桥(Bridge)](#(4) 网桥(Bridge))
      • [① 设备搭建](#① 设备搭建)
      • [② 计算机1给计算机0发数据](#② 计算机1给计算机0发数据)
    • [(5) 交换机(Switch)](#(5) 交换机(Switch))
      • [① 设备搭建](#① 设备搭建)
      • [② 计算机1给计算机0发数据](#② 计算机1给计算机0发数据)
    • [(6) 路由器(Router)](#(6) 路由器(Router))
      • [① 网桥、交换机等连接的设备必须在同一网段](#① 网桥、交换机等连接的设备必须在同一网段)
      • [② 交换机跨网段传输数据](#② 交换机跨网段传输数据)
        • [🍀 【A】搭建设备](#🍀 【A】搭建设备)
        • [🍀 【B】设置网关的IP地址和设备的网关地址](#🍀 【B】设置网关的IP地址和设备的网关地址)
        • 🍀【C】传输数据

1、互联网

🖊 互联网的出现,彻底改变了人们的生活方式,足不出户就可以购物、聊天、看电影、买车票、上班等

❓ 思考:数据是如何从一个设备传递到另一个设备的?

🖊 这一切都是由网络协议来规定的。没有网络协议,就没有今天的互联网。

2、为什么要学习网络协议

📕 互联网、移动互联网、物联网,都离不开网络协议

🖊 最熟悉的网络协议:HTTP

🖊 为了满足各种需求,产生了各式各样的网络协议(HTTPS、SMTP、MQTT、RTMP 等)

🖊 不同的网络协议有不同的应用场景

🍀 HTTPH yperT ext T ransfer Protocol:超文本传输协议

📕 随着物联网、音视频、直播等领域的发展,企业提高对开发人员网络基本功的要求,经常问网络协议的面试题

🖊 TCP和UDP的区别?说一下它们的报文格式?

🖊 TCP的流量控制和和拥塞控制?TCP如何实现可靠性传输?

🖊 为什么连接是3次握手,关闭是4次挥手?

🖊 7层模型与4层模型的区别?每一层的作用是什么?

🖊 交换机与路由器的区别?

🖊 ...

3、学习中需要搭建的环境

📕 客户端-服务器开发环境

🖊 客户端:浏览器(HTML+CSS+JS)

🖊 服务器:Java

📕 网络抓包

🖊 浏览器(ChromeFirefox

🖊 抓包工具(Fiddler、Wireshark)

📕 模拟环境

🖊 xshellpacket-tracergns3

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 复制代码
<?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

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

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

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

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 地址

🖌 从而起到隔绝冲突域的作用


🖊 MAC地址表

网桥端口 MAC地址
LEFT 计算机6的MAC地址
RIGHT 计算机2的MAC地址
LEFT 计算机7的MAC地址

🖊 当网桥完全知道其每个端口那侧的所有设备的MAC地址的时候,每个接口那侧就是一个冲突域

🖊 当网桥知道目标地址是在接口的某一侧(如 LEFT)的时候,网桥就不会把数据发到 RIGHT

🖊 不同的冲突域的设备之间可以同时发数据

🖊 网桥只有2个接口,只能隔绝2个冲突域

🖊 同一冲突域内若有很多设备的话,这些设备之间是半双工通信


🍀 思科模拟器测试

① 设备搭建

② 计算机1给计算机0发数据

👆 计算机1发包给集线器0,集线器"没有智商",会把包广播给计算机0和网桥0

👆 网桥已经记录了计算0和计算1的MAC地址,若计算机0和计算机1再次互相发包,网桥不会把包发给它侧端口的设备

(5) 交换机(Switch)

🖊 相当于接口更多的网桥

🖊 全双工通信

🖊 比集线器安全(集线器"没有智商",数据包会到处发)

🖊 接口多(直接连设备,无需集线器)

❓ 思考:全球所有的设备都用交换机连接会是什么情况?

🖌全球的设备都必须在同一个网段,进而IP地址不够用(交换机连接的设备必须在同一网段

🖌第一次ARP广播获得MAC地址的时候会广播给全球所有的设备(广播风暴


🍀 思科模拟器测试

① 设备搭建

② 计算机1给计算机0发数据

(6) 路由器(Router)

📕 网线直连、同轴电缆、集线器、网桥、交换机

🖊连接的设备必须在同一网段

🖊连接的设备处在同一广播域

📕 路由器

🖊可以在不同网段之间转发数据

🖊隔绝广播域
🌼主机发数据之前,首先会判断目标主机的IP地址跟自己是否在同一网段❓

🖊 在同一网段:ARP获取MAC地址、通过交换机\集线器传递数据

🖊 不在同一网段:通过路由器转发数据,通过路由器的网关(Gateway)转发


① 网桥、交换机等连接的设备必须在同一网段



② 交换机跨网段传输数据

🍀 【A】搭建设备
🍀 【B】设置网关的IP地址和设备的网关地址
🍀【C】传输数据

🖊 ARP广播拿到网关的MAC地址

🖊 不同网段的设备连接需要使用路由器

相关推荐
sunfove9 小时前
光网络的立交桥:光开关 (Optical Switch) 原理与主流技术解析
网络
Kevin Wang72712 小时前
欧拉系统服务部署注意事项
网络·windows
min18112345612 小时前
深度伪造内容的检测与溯源技术
大数据·网络·人工智能
汤愈韬12 小时前
NAT策略
网络协议·网络安全·security·huawei
汤愈韬12 小时前
Full Cone Nat
网络·网络协议·网络安全·security·huawei
zbtlink13 小时前
现在还需要带电池的路由器吗?是用来干嘛的?
网络·智能路由器
桌面运维家13 小时前
vDisk配置漂移怎么办?VOI/IDV架构故障快速修复
网络·架构
dalerkd13 小时前
忙里偷闲叙-谈谈最近两年
网络·安全·web安全
汤愈韬14 小时前
NAT ALG (应用层网关)
网络·网络协议·网络安全·security·huawei
运维栈记15 小时前
虚拟化网络的根基-网络命名空间
网络·docker·容器