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

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

相关推荐
写bug的小屁孩44 分钟前
websocket身份验证
开发语言·网络·c++·qt·websocket·网络协议·qt6.3
chenjingming6661 小时前
网络技术-定义配置ACL规则的语法和命令
网络
Dynadot_tech1 小时前
使用API有效率地管理Dynadot域名,列表形式查看账户whois联系人信息
网络·api·域名注册·dynadot
网安-轩逸2 小时前
【网络安全】身份认证
网络·安全·web安全
石牌桥网管2 小时前
OpenWrt广播DNS到客户端
网络·openwrt
想成为高手4992 小时前
网络基础概念与应用:深入理解计算机网络
网络·计算机网络
专注VB编程开发20年3 小时前
WebSocket和HTTP协议的性能比较与选择
websocket·网络协议·http
Aiden_SHU3 小时前
Wireshark中的length栏位
服务器·网络·wireshark
叫我龙翔4 小时前
【计网】实现reactor反应堆模型 --- 多线程方案优化 ,OTOL方案
linux·运维·网络
群联云防护小杜5 小时前
服务器被挂马怎么办?——解决服务器被挂马的方法和步骤
运维·服务器·网络协议·tcp/ip·安全·ddos