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

网络——入门基础

目录

协议    

网络协议

OSI七层模型

网络传输基本流程

网络传输流程图

局域网通信

数据包的封装和解包

广域网通信

网络地址管理

IP地址

MAC地址


协议

        关于什么是局域网,什么是广域网,我这里就不过多赘述了,我们直接来谈一下什么是协议。

        “协议”其实就是一种约定,双方想要通信就需要做某种约定,通过这种约定来完成某种特定事情。比如小时候和同学做的约定,敲一下门要做什么,敲两下要做什么。

        网络协议就是通信计算机双方必须共同遵守的约定,所以用计算机语言将这种约定表达出来,双方计算机才能识别约定的相关内容。但是计算机之间的传输媒介是光信号和电信号,可能有的通过频率或者强弱来表示0或1这样的信息,有的可能通过不同的策略,因为计算机只认识0和1,所以各个做硬件的厂商也要共同遵守某种约定,让不同的计算机识别的信息是一样的。

        那么操作系统要不要进行协议管理呢,那就又是先描述再组织。协议本质上就是一个软件,那么软件是可以“分层”的,什么是分层呢?曾经我们写过的各种类,在类外中我们叫做使用这个类中的方法,在类中就是方法的实现,使用和实现就是两层;面向对象的多态,实现多态就要有继承体系,每个继承体系就可以叫做一层软件层。


网络协议

        所以协议在设计的时候也是要分层的。

        两个人在打电话的时候,你并没有直接跟对面的人说话,而是把你的声音交给了手机,你的手机把声音交给了对方的手机,对方才能在手机中听到你的声音。

        为什么要分层呢?原因就是以后的通信场景变得很复杂了,我们将功能解耦,更便于维护,某一层出了问题只需要解决某一层,其他层不会受到影响。

        这些都是分层的好处,为了让网络通信也变的更好,也对网路协议进行了分层。


OSI七层模型

        我们通信的复杂程度主要和通信的距离是正相关的,从通信的方面来说:

  • 如果两个人的通信距离过远,会有没收到的情况,这就叫做丢包
  • 在发送的时候,如何找到对方主机的位置,这就是定位问题
  • 通信距离远的时候,我们的信息不可能直接发给对方,需要通过多个路由器帮我们跳转,那怎么保证下一个路由器是正确的
  • 不管是发送还是接收信息,都是通过信号的频率或强弱来识别的,也要有硬件的支持

        再从我们应用的方面来说:

  • 为了实现通信,我的数据一定是经过一些处理才发给对方的,对方收到了也是要经过处理才能看得懂,那如何处理数据也是一个问题。

        为了解决上面的这些问题,就有了网络协议的层状结构,这些问题对应的层分别是:传输层、网络层、数据链路层、物理层、应用层。

        我们也把左边的网络协议层也叫做TCP/IP协议。

        未来我们也是使用传输层提供的系统调用接口进行网络编程。

物理层:
        负责光电信号的传递,他决定了最大传输速率、传输距离等。

数据链路层:

        负责设备之间的数据帧的传送和识别,例如网卡驱动,交换机就工作在数据链路层。数据链路层和物理层就负责数据的发送过程。

网络层:
        负责地址的管理和路由的选择,路由器工作在网络层。

传输层:
        负责两台主机的数据传输,确保数据的可靠发送。比如传输过程中可能会出现丢包问题。

应用层:
        负责应用程序之间的沟通,应用层需要根据通信的目的,对数据进行分析与处理,达到某种业务性的目的。

        这一层一层的结构也叫做网络协议栈,网络协议栈的下三层主要的完成就是信息传输,而应用层完成的就是数据分析和业务处理。

        但其实最开始提出的协议层并不是TCP/IP协议,而是OSI七层模型。

  • OSI(Open System Interconnection,开放系统互联)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范。
  • 把网络从逻辑上分为了7层,每一层都有相关、相对应的物理设备,比如路由器工作在网络层,交换机工作在数据链路层。
  • OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输。
  • 它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整。通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯。
  • 但是, 它既复杂又不实用,所以我们都是使用TCP/IP四层或五层模型,物理层也不会考虑太多。


网络传输基本流程

网络传输流程图

局域网通信

同一个局域网下的两台主机的通信流程就是这样的:

        这幅图举个例子就很好理解了,你住在一栋楼的10楼,你现在要给另一栋也住在10楼的小伙伴送个东西,那你一定要一层一层的下楼,然后跑到他的楼下,再一层一层的上楼,这样你才能把东西送给他,他也不会管你是怎么来的。

        所以局域网中的两台主机是可以直接通信的。那我们接下来就要再说一下网络的概念:

  • 每层都有自己的协议定制方案。
  • 每层协议都要有自己的协议报头
  • 从上到下交付数据的时候要添加报头
  • 从下到上拿到数据的时候要去掉报头

        再来举个例子说一下什么是报头,我们买东西的时候一定是在网上给卖家说我要买这个,经过一系列的操作,卖家要被快递交给物流,物流拿到东西之后一定要给这个快递贴上快递的信息,再经过一系列操作到了楼下的快递站,我们从快递站拿到这个快递,拆开就能用了。这个快递中的物品就好比是数据,这个快递信息就好比是协议报头,通过这个报头就可以送到我楼下的快递站,我拿到了快递再拆开去掉协议报头就拿到了里面的数据。

数据包的封装和解包

  • 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报 (datagram),在数据链路层叫做帧(frame)
  • 应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(报头),称为封装
  • 首部信息中包含了一些类似于首部有多长,有效载荷有多长,上层协议是什么等信息。
  • 数据封装成帧后发到传输介质上,到达目的主机后每层协议再将报头和有效载荷分离,根据首部中的 "上层协议 字段" 将数据交给对应的上层协议处理,这叫做解包

        这次就不是快递了,比如我们给同学发微信:

        通过对数据一层一层的封装,送到另一台主机后再一层一层的解包,所以两台主机在每一层都以为自己在和另一台主机的相同层在逻辑上直接通信,所以不可能把以太网帧直接发给网络层或者其它层。

        在同一个局域网中。除了当前正在通信的主机A和主机F还有其他主机,那怎么只有主机F收到了呢?

        实际主机A发数据给主机F的时候,其他主机也都收到了该数据,只不过除了主机F以外,其他主机识别到该数据并不是发给自己的,此时其他主机就把收到的数据丢弃了

        如果主机A不仅在和主机F通信,还和别的主机也在通信,但是同一个局域网中使用的都是同一个通信信道,每个主机发出的数据就可能会相互干扰

        每个局域网也可以看做一个碰撞域,如果某个主机发送出去的数据与其他主机发送的数据之间产生了干扰,这两台主机在该碰撞域中就发生了碰撞

        那么如何判断发生了碰撞呢?当一个主机将数据发送到局域网,它自己也可以收到这个数据,收到后与之前发送的数据进行比较,如果不同就说明发生了碰撞。

        想要处理碰撞其实很简单,当一个主机发送出去的数据产生了碰撞,那么该主机可以选择等一段时间后,再重新发送该数据。但是计算机处理的速度很快,所以发生的概率不是很大。

广域网通信

        上面说了局域网通信,那我们再来说一下广域网通信,前面我们提到过,我要给很远的一台主机发送信息,要先遵守应用层的协议,通过传输层稳定的把数据发送过去,通过网络层确定是那一台主机,通过数据链路层和物理层发送和接收信号。

        局域网之间都是通过路由器连接起来的,一个路由器至少能够横跨两个局域网。这些被路由器连接的局域网都认为该路由器就是本局域网内的一台主机,所以路由器可以和这些局域网内的任意一台主机进行直接通信。

        主机A使用自己的MAC地址封装报头,到了路由器时解包向上交付,路由器看到IP地址后就知道要转发到哪一个主机下。所以在使用TCP/IP协议时,IP及其向上的协议看到的报文都是一样的,只有数据链路层的MAC会变成不同的,这里只有一个路由器,但事实上是会有很多路由器才能跳转到对应的主机的。


网络地址管理

IP地址

  • IP地址是在IP协议中标识网络中不同主机的地址。
  • 对于IPv4来说,IP地址是一个4字节,32位的整数。
  • 我们通常也使用“点分十进制”的字符串表示IP地址,例如192.168.16.1,用点分割的每一个数字表示一个字节,范围是0-255。

        需要注意的是,IP协议有两个版本,分别是IPv4和IPv6。IPv4用32个比特位来标识IP地址,而IPv6用128个比特位来标识IP地址。

MAC地址

  • MAC地址用来识别数据链路层中相连的节点。
  • 长度为48位,及6个字节,一般用16进制数字加上冒号的形式来表示(例如:00:16:3e:03:92:10)。
  • 在网卡出厂时就确定了,不能修改。MAC地址通常是唯一的(虚拟机中的MAC地址不是真实的MAC地址,可能会冲突,也有些网卡支持用户配置MAC地址)。

        那我们再来重新看一下广域网通信。

        如果我在北京,我要给上海的朋友发消息,所以我在北京的主机的IP地址就叫做源IP,上海的朋友的主机的IP地址就叫做目的IP,比如这个信息要先传给当前地区的路由器,这条信息封装了MAC地址,这就是源MAC地址,通过自己家里的路由器放到当前地区的路由器,这就是下一站的MAC地址

        从消息发出到收到消息,源IP和目的IP都是不会变的,他要给下一站提供方向,会变化的就是MAC地址,通过当前地区的路由器就知道下一个路由器在哪里,继续封装MAC地址,这样一步步把消息传递过去。

        上述的源IP和目的IP、源MAC和下一站MAC都分别保存在对应层的报头中。

        在Linux中查看自己的MAC地址就要使用ifconfig命令。

这个ether就有以太的意思。

相关文章:

网络——入门基础

目录 协议 网络协议 OSI七层模型 网络传输基本流程 网络传输流程图 局域网通信 数据包的封装和解包 广域网通信 网络地址管理 IP地址 MAC地址 协议 关于什么是局域网,什么是广域网,我这里就不过多赘述了,我们直接来谈一下什么…...

二、yocto 集成ros2(基于raspberrypi 4B)

yocto 集成ros2 yocto 集成ros21. 下载ros layer2. 编译集成ros3. 功能验证 yocto 集成ros2 本篇文章为基于raspberrypi 4B单板的yocto实战系列的第二篇文章。 一、yocto 编译raspberrypi 4B并启动 本节我们将ros2机器人操作系统移植到我们的yocto系统里面。 1. 下载ros laye…...

html--bug

文章目录 html html <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>老师</title><style>body {background-color: #008000;margin: 0px;cursor: none;overflow: hidden;}</style></head><bod…...

Java基础学习笔记三

环境变量CLASSPATH classpath环境变量是隶属于java语言的&#xff0c;不是windows操作系统的&#xff0c;和PATH环境变量完全不同classpath环境变量是给classloader&#xff08;类加载器&#xff09;指路的java A 。执行后&#xff0c;先启动JVM&#xff0c; JVM启动classload…...

Linux快速入门,上手开发 01.学习路线

少时曾许凌云志&#xff0c;当取世间第一流 再见少年拉满弓&#xff0c;不惧岁月不飓风 —— 24.3.20 1.Linux的发展历史 2.VM虚拟机的Linux初体验 3.图形化页面设置系统——快速上手 4.命令行操作——向专业前进 5.核心操作命令——必知必会&#xff08;管理企业级权限/定位b…...

JSX return里面如何用if判断

在JSX中,由于不能直接使用传统的JavaScript ​​if​​ 语句,但可以通过条件渲染来实现类似的效果。以下是一些方法: 1. 三元运算符(Ternary Operator) 最简单的条件渲染方式是使用三元运算符: return (<div>{condition ? <ComponentIfTrue /> : <Com…...

Vulnhub靶机渗透:DC-7打靶记录

前言 自信自强&#xff0c;来自于不怕苦、不怕难的积淀。宝剑锋从磨砺出&#xff0c;梅花香自苦寒来&#xff1b;任何美好理想&#xff0c;都离不开筚路蓝缕、手胼足胝的艰苦奋斗&#xff01; 靶场介绍 DC-7是一个初中级的靶场&#xff0c;需要具备以下前置知识&#xff1a;…...

目标检测---IOU计算详细解读(IoU、GIoU、DIoU、CIoU、EIOU、Focal-EIOU、SIOU、WIOU)

常见IoU解读与代码实现 一、✒️IoU&#xff08;Intersection over Union&#xff09;1.1 &#x1f525;IoU原理☀️ 优点⚡️缺点 1.2 &#x1f525;IoU计算1.3 &#x1f4cc;IoU代码实现 二、✒️GIoU&#xff08;Generalized IoU&#xff09;2.1 GIoU原理☀️优点⚡️缺点 2…...

探索并发编程:深入理解线程池

文章目录 前言一、线程池是什么&#xff1f;二、如何创建线程池1.使用Executors类2.使用ThreadPoolExecutor类手动配置线程池 总结 前言 随着计算机系统的不断发展和进步&#xff0c;我们需要处理更多的并发任务和复杂的操作。而线程池作为一种高效的线程管理机制&#xff0c;…...

html5cssjs代码 023 公制计量单位进位与换算表

html5&css&js代码 023 公制计量单位进位与换算表 一、代码二、解释 这段HTML代码定义了一个网页&#xff0c;用于展示公制计量单位的进位与换算表。 一、代码 <!DOCTYPE html> <html lang"zh-cn"> <head><meta charset"utf-8&quo…...

UE5.3 StateTree使用实践

近期浏览UE的CitySample&#xff08;黑客帝国Demo&#xff09;&#xff0c;发现有不少逻辑用到了StateTree学习一下&#xff0c;StateTree是多层状态机实现&#xff0c;以组件的形式直接挂载在蓝图中运行。 与平时常见的一些FSM库不同&#xff0c;StateTree并不会返回给外界当…...

【09】进阶JavaScript事件循环Promise

一、事件循环 浏览器的进程模型 何为进程? 程序运行需要有它自己专属的内存空间,可以把这块内存空间简单的理解为进程 每个应用至少有一个进程,进程之间相互独立,即使要通信,也需要双方同意。 何为线程? 有了进程后,就可以运行程序的代码了。 运行代码的「人」称之…...

蓝桥备赛----基本语法总结

文章目录 输入输出知识点总结 输入 单个 #单个输入n input() #无参数 默认返回字符串n input("有提示参数的输入") #有提示性输入语句的输入&#xff0c;仍是以str类型返回n int(input()) #根据给定的类型输入&#xff0c;返回值类型intn float(input()) #根据…...

基于 Echarts + Python Flask ,我搭建了一个动态实时大屏监管系统

一、效果展示 1. 动态实时更新数据效果图 2. 鼠标右键切换主题 二、确定需求方案 支持Windows、Linux、Mac等各种主流操作系统&#xff1b;支持主流浏览器Chrome&#xff0c;Microsoft Edge&#xff0c;360等&#xff1b;服务器采用python语言编写&#xff0c;配置好python环…...

针对教育行业的网络安全方案有哪些

智慧校园”是教育信息化进入高级阶段的表现形式&#xff0c;比“数字校园”更先进。集体知识共融、共生、业务应用融合创新、移动互联网物联网高速泛在是其重要特征。特别是在互联网教育的大环境下&#xff0c;为了更好的发挥智慧化教学服务和智慧化教学管理功能&#xff0c;需…...

C++ 编程入门指南:深入了解 C++ 语言及其应用领域

C 简介 什么是 C&#xff1f; C 是一种跨平台的编程语言&#xff0c;可用于创建高性能应用程序。 C 是由 Bjarne Stroustrup 开发的&#xff0c;作为 C 语言的扩展。 C 为程序员提供了对系统资源和内存的高级控制。 该语言在 2011 年、2014 年、2017 年和 2020 年进行了 4…...

latex变量上下加自适应长度箭头

latex变量上下加自适应长度箭头 在变量上加箭头的代码如下 % 在上 \overrightarrow{A B} \overleftarrow{A B} % 在下 \underrightarrow{A B} \underleftarrow{A B}得出的结果依次如下 A B → , A B ← , A B → , A B ← \overrightarrow{A B},\overleftarrow{A B}, \under…...

鸿蒙4.0ArkUI快速入门(一)应用模型

ArkUI篇 应用模型Stage模型FA模型模型对比 应用模型 应用模型是HarmonyOS为开发者提供的应用程序所需能力的抽象提炼&#xff0c;它提供了应用程序必备的组件和运行机制。 HarmonyOS先后提供了两种应用模型&#xff1a; FA&#xff08;Feature Ability&#xff09;模型&…...

C++ UML类图

参考文章&#xff1a; &#xff08;1&#xff09;C UML类图详解 &#xff08;2&#xff09;C基础——用C实例理解UML类图 &#xff08;3&#xff09;C设计模式——UML类图 &#xff08;4&#xff09;[UML] 类图介绍 —— 程序员&#xff08;灵魂画手&#xff09;必备画图技能之…...

Java SE入门及基础(44)

目录 I / O流(上) 1. 什么是I / O流 过程分析 I / O的来源 Java 中的 I / O流 2. 字节流 OutputStream 常用方法 文件输出流 FileOutputStream 构造方法 示例 InputStream 常用方法 文件输入流 FileInputStream 构造方法 示例 综合练习 字节流应用场景 Java SE文…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候&#xff0c;遇到了一些问题&#xff0c;记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战&#xff0c;克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...

GitHub 趋势日报 (2025年06月06日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...