网络基础(一)【网络发展/认识协议/网络 VS 系统/以太网通信原理/重谈协议/网络中的地址管理】
网络基础(一)
- 1. 网络的发展
- 2. 认识协议
- 3. 网络 VS 系统
- 4. 以太网通信原理
- 5. 重谈协议
- 6. 网络中的地址管理
1. 网络的发展
最开始时,计算机之间相互独立。

但是为了协作完成一些任务,就产生了计算机之间相互通讯的需求,于是,网路诞生了。

局域网:参与通讯的主机越来越多,形成一个更大的网络。各个计算机通过交换机和路由器连接在一起。

广域网:参与通讯的计算机更多了,远隔千里的计算机也能相互通讯了。路由器将各个子网连接在一起。

所谓 “局域网” 和 “广域网” 只是一个相对的概念。
2. 认识协议
1. 什么是协议?
- 计算机生产厂商有很多;
- 计算机操作系统,也有很多;
- 计算机网络硬件设备,还是有很多;
- 网络一定要保证,各种不同的机器,都能够无障碍进入互联网,所以从硬件到软件上,都要制定一些统一的约定;
- 这些约定就是 网络协议。
2. 跨网络通讯存在的问题(新技术带来新问题)
- 单台机器中,各个硬件之间也要相互通讯,他们通过各种电路连接到一起。所以单台机器,其实也是一个网络结构。
- 两台机器跨网络通讯的本质,是一台机器的网卡和另一台机器的网卡之间相互通讯。单台机器硬件间相互通讯时,因为距离短,所以很容易实现。
- 跨网络通讯由于距离很长,所以产生了如下几个新问题:
- 数据丢包了怎么办?
- 目标机器如何定位?
- 如何保证,我们的报文,在经历了无数个设备之后,还能准确的把数据推送到远端机器?
- 协议的制定,也解决了上述三个问题。
3. 协议分层

- 在打电话的场景中,我们的直观感受是,自己在和人说话,而不是在跟手机说话。而实际场景是,我们所说的话,需要通过电话先转成电信号,再传递给对方的手机,由对方的手机解析该信号,转化成语音。
- 人是无法直接跟手机说话的,因为人无法识别电信号,手机也无法识别语音信号。可以理解为,人和人之间,有一种协议,大家都说语音信号,所以可以相互沟通;手机和手机之间也有一种协议,大家都使用电信号,所以也可以相互沟通。
- 当人和人之间的协议变化时,比如大家都改说英文,是不影响下层手机的协议的;当手机由座机变为移动手机时,下层协议变为无线电协议,不影响上层人和人之间的协议。
- 协议只适用于同层之间相互通信,不能上下层通信,这样的设计理念就是协议分层。
3. 网络 VS 系统
1. 网络通讯存在的问题,更具体
- a. 怎么保证把数据给下一跳主机;
- b. 在转发中,如何进行路径选择,目标主机定位的问题;
- c. 如果报文中间出现错误或丢失,如何解决;
- d. 对于送达的数据,还要解决如何使用数据的问题。
- 上述abcd中的每一个问题,都要由协议解决,由此可以知道,协议有很多。
2. 网络的解决方案 —— 网络的层状结构
-
理论模型:OSI参考模型
- OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范;
- 把网络从逻辑上分为了7层,每一层都有相对应的物理设备,比如路由器,交换机;
- OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输;
- 它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整,通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯;
- 但是,它只是理论上的模型,既复杂也不实用。实际运用中,我们常采用 TCP/IP4 层网络模型。
-
实际运用模型:TCP/IP四层(或五层)模型
- TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。
- 物理层:负责光/电信号的传递方式,比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤,现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub)工作在物理层;
- 数据链路层:负责设备之间的数据帧的传送和识别,例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。有以太网、令牌环网,无线LAN等标准。交换机(Switch)工作在数据链路层;
- 网络层:负责地址管理和路由选择。例如在IP协议中,通过IP地址来标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输的线路(路由)。路由器(Router)工作在网路层;
- 传输层:负责两台主机之间的数据传输。如传输控制协议 (TCP),能够确保数据可靠的从源主机发送到目标主机;
- 应用层:负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。我们的网络编程主要就是针对应用层。

绝大部分优秀的软件,结构都是层状的。
3. 网络协议栈(TCP/IP协议栈)

- 每一层都有对应的协议;每一层都解决一个网络传输中的具体问题。
4. 网络和系统的关系

- 如图所示,网络协议栈和系统的各层级有一一对应关系。TCP/IP协议是存在在系统内核中的。
- 对于不同的操作系统,如Windows、Linux、MacOS,他们的左边系统部分是不同的,实现上甚至有很大差别。但是他们的右边网络部分,必须相同。所以在不同的操作系统中,网络的系统调用接口大同小异。
4. 以太网通信原理
在同一个局域网中,两台主机可以直接通信,每一个网卡都有一个mac地址,这个mac地址是全球唯一的(mac地址也可以虚拟,例如虚拟机的mac地址就是虚拟出来的)
利用ifconfig命令可以查看Linux操作系统的mac地址:

同一个局域网中的主机,连接在同一个网线中,如果主机A想向主机B发送一个消息“你好”,只需要知道主机A和主机B网卡的mac地址即可,这个信息携带着主机A和主机B网卡的mac地址,发送到了网线上,所有连接在这个网线上的主机都收到了这个信息,只是有的主机解析该信息后,发现mac地址不是自己的,也就不是发给自己的,就把这个信息丢弃了。

不难看出,要想正确的发送数据,任何时刻,只允许一台主机在局域网中发消息,不然就会发生数据碰撞。我们也将会发生数据碰撞的地方叫做碰撞域。局域网就是一个基于碰撞检测和碰撞避免的通信网络。
如果从系统的角度来看,局域网就是一个临界资源,要保证对临界资源的互斥访问。
以太网名字的由来:以太网就是局域网,上个世纪,物理学家认为,既然声音的传播需要介质,那么光的传播也是需要介质的。学者们把这种假想出来的介质称为“以太”,并认为宇宙中一定充满了“以太”。后来经过实验证明,“以太”这种物质不存在,但是“以太”这个名词被计算机领域使用了,也就有了最早的“以太”网。
5. 重谈协议
1. 生活小例子

- 在快递的场景中,一个完整的快递件,是由快递单号+快递内容组成的。作为用户,我们实际上并不关心快递具体是怎么送达的(不会去看快递单号),只关心最后拿到的快递内容;
- 快递单本身就是一种约定,是一种协议,它详细记录了寄件人和收件人的信息,以保证快递能正确的送到收件人手中;
- 如果我们用计算机语言来表示这个快递单,它实际上就是一个结构体数据。协议通常就是由结构体字段表征的,这个结构体字段定义的对象,我们叫做协议报头。
2. 数据包的封装和分用

- 假如现在有两台主机在通信(假设两天主机在同一局域网内),主机A给主机B发送了一条消息:你好。实际的传输过程如上图所示。
- “你好”消息在主机A中,需要对其逐层添加报头,封装数据包;B首先拿到的是封装了各种报头的数据帧,随后开始对这个数据帧进行逐层的解包和分用,返回给最上层用户的就是最原始的数据“你好”。
- 应用层封装的数据叫request&response,传输层封装的数据叫数据段,网络层封装的数据叫数据报,数据链路层封装的数据叫数据帧。
3. 只要有封装,就一定要考虑后续解包的过程,今后在学习协议时,绕不开的两个问题
- 如何将报文中的报头和有效载荷进行分离;
- 任何协议,都要解决如何将自己的有效载荷,交付给上层的哪一个协议的问题。
6. 网络中的地址管理
1. 认识IP地址
- IP协议有两个版本,IPv4和IPv6。我们整个的课程,凡是提到IP协议,没有特殊说明的,默认都是指IPv4。
- IP地址是在IP协议中,用来标识网络中不同主机的地址,最大的意义在于路径选择;
- 对于IPv4来说,IP地址是一个4字节,32位的整数;
- 我们通常也使用 “点分十进制” 的字符串表示IP地址,例如 192.168.0.1 ;用点分割的每一个数字表示一个字节,范围是 0 - 255。
- 在实际的网络传输中,IP地址是以整数形式传递的;在编程角度,也可以以字符串形式使用IP;IP地址是可以在整数和字符串之间相互转化的。
- Linux下的IPV4地址如下:

- Windows下的IPV4地址如下:

- IP地址又分为:a.公网IP b.内网IP(这个后面再详谈)。
- 可以通过一个
struct结构体,来描述IP:
struct ip_struct
{uint8_t p1;uint8_t p2;uint8_t p3;uint8_t p4;
};
2. 认识MAC地址
-
MAC地址用来识别数据链路层中相连的节点;
- 长度为48位,及6个字节。一般用16进制数字加上冒号的形式来表示(例如:08:00:27:03:fb:19)
- 在网卡出厂时就确定了,不能修改。mac地址通常是全球唯一的(虚拟机中的mac地址不是真实的mac地址,可能会冲突;也有些网卡支持用户配置mac地址)。
-
Linux下的MAC地址:

- Windows下的MAC地址:

3. IP地址 VS MAC地址
- IP地址用来标识数据的发出地和目的地;
- MAC地址用来标识数据上一站从哪里来,以及下一站到哪里去。
就好比唐僧要去西天取经,起始地是大唐长安,目的地是大雷音寺;此时唐僧到了女儿国,上一站是火焰山,下一站是黑风岭。
4. 模拟跨网络传输

- 假设两台机器在不同的局域网中,A发送了一条消息“你好”给机器B;
- 该消息首先要进行封装,在网络层封装时,报头处必然要携带发送方主机A的IP地址,和接收方主机B的IP地址;
- 连接局域网和局域网的设备是路由器,所以消息“你好”首先要转发到这个路由器中。在数据链路层,报头处封装了主机A的MAC地址,和要到达的下一跳主机路由器R的MAC地址;
- 路由器拿到该消息后,首先进行解包,然后再进行封装。虽然我们不了解令牌环这种局域网,但是我们知道,该协议报头必然携带路由器R的MAC地址和主机B的MAC地址;
- 数据链路层,关于MAC地址的报头一直在变化,网络层关于IP的报头则一直不变(起始IP可能会变)。
令牌环网络:拿到临牌的主机才可以通信,同一时刻只能有一个主机拿到令牌,令牌按照一定规则轮流交给每个主机。从系统的角度看,令牌就是一把锁。
5. 网络通信整体轮廓

相关文章:
网络基础(一)【网络发展/认识协议/网络 VS 系统/以太网通信原理/重谈协议/网络中的地址管理】
网络基础(一) 1. 网络的发展2. 认识协议3. 网络 VS 系统4. 以太网通信原理5. 重谈协议6. 网络中的地址管理 1. 网络的发展 最开始时,计算机之间相互独立。 但是为了协作完成一些任务,就产生了计算机之间相互通讯的需求,…...
支付宝当面付java,php,sdk下载
SDK & Demo 获取 - 支付宝文档中心 开放平台服务端 SDK 为了帮助开发者调用开放接口,支付宝提供了开放平台服务端 SDK,包含 Java、PHP、NodeJS、Python 和 .NET 等语言版本,DEMO 中封装了签名 & 验签、HTTP 接口请求等基础功能。 详…...
学习threejs,Animation、Core、CustomBlendingEquation、Renderer常量汇总
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️Animation常量汇总1.1.1 循…...
常用无功功率算法的C语言实现(二)
0 前言 尽管数字延迟法和积分移相法在不间断采样的无功功率计算中得到了广泛应用,但它们仍存在一些固有缺陷。 对于数字延迟法而言,其需要额外存储至少1/4周期的采样点,在高采样频率的场景下,这对存储资源的需求不可忽视。而积分移相法虽然避免了额外的存储开销,但为了抑制…...
易基因特异性R-loop检测整体研究方案
大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。 01.技术简述 R-loop是由DNA:RNA 杂交体和被置换的单链DNA组成的三链核酸结构,广泛参与基因转录、表观遗传调控及DNA修复等关键生物学过程。异常的R-loop积累会导致基因组不稳…...
装饰器模式--RequestWrapper、请求流request无法被重复读取
目录 前言一、场景二、原因分析三、解决四、更多 前言 曾经遇见这么一段代码,能看出来是把request又重新包装了一下,核心信息都不会改变 后面了解到这叫 装饰器模式(Decorator Pattern) :也称为包装模式(Wrapper Pat…...
STM32-I2C通信协议
目录 一:什么是I2C通信协议 二:I2C通信 三:I2C时序图 四:面试常见问题 一:什么是I2C通信协议 I2C(Inter-Integrated Circuit)协议是一种串口通信协议,用于在集成电路之间传输数…...
Unity开发——CanvasGroup组件介绍和应用
CanvasGroup是Unity中用于控制UI的透明度、交互性和渲染顺序的组件。 一、常用属性的解释 1、alpha:控制UI的透明度 类型:float,0.0 ~1.0, 其中 0.0 完全透明,1.0 完全不透明。 通过调整alpha值可以实现UI的淡入淡…...
头歌作业-mysql数据库系统(全部)
每个作业只包含重要的建表代码,需要先进入数据库,创建基本的数据库之后才能使用下述命令创建表结构 MySql数据库-初识MySql 第一关:创建数据库 create database MyDb;第二关:创建表 create table t_emp(id int,name varchar(32…...
DeepSeek开启AI办公新模式,WPS/Office集成DeepSeek-R1本地大模型!
从央视到地方媒体,已有多家媒体机构推出AI主播,最近杭州文化广播电视集团的《杭州新闻联播》节目,使用AI主持人进行新闻播报,且做到了0失误率,可见AI正在逐渐取代部分行业和一些重复性的工作,这一现象引发很…...
mitt 依赖库详解
一、概述 mitt 是一个极其轻量级的 JavaScript 事件发射器库,实现了发布-订阅模式。该模式允许对象间松散耦合,一个对象(发布者)可以发布事件,而其他对象(订阅者)可以监听这些事件并作出响应。…...
C语言100天练习题【记录本】
C语言经典100题(手把手 编程) 可以在哔哩哔哩找到(url:C语言经典100题(手把手 编程)_哔哩哔哩_bilibili) 已解决的天数:一,二,五,六,八…...
DeepSeek【部署 03】客户端应用ChatBox、AnythingLLM及OpenWebUI部署使用详细步骤
DeepSeek客户端应用 1.ChatBox2.AnythingLLM3.OpenWebUI4.总结 客户端软件提供可视化的模型及参数配置,人性化的对话窗口及文件上传功能,大大降低了大模型的使用门槛。 1.ChatBox Chatbox AI 是一款 AI 客户端应用和智能助手,支持众多先进的…...
Python图形编程之EasyGUI: msgbox的用法
1 EasyGUI: msgbox的用法 1.1 基础用法:只显示信息 示例代码: from easygui import * msgbox("Hello, world!")效果: 1.2 扩展用法1:设置标题 示例代码: from easygui import * msgbox("Hello, …...
计算机底层知识一——从编程语言到可执行程序
好久没写博客了,近段时间事情比较杂,最近终于有时间回归了。其余代码写久了就会遇到许多奇奇怪怪的问题,这些问题绕不开许多底层知识,比如缺少动态依赖库、idea编译失败等等,虽然通过百度等搜索引擎,亦或是…...
中性点直接接地电网接地故障Simulink仿真
1.模型简介 本仿真模型基于MATLAB/Simulink(版本MATLAB 2017Ra)软件。建议采用matlab2017 Ra及以上版本打开。(若需要其他版本可联系代为转换) 2.系统仿真图: 3.中性点直接接地电网接地故障基本概念(本仿…...
解决Jenkins默认终止Shell产生服务进程的问题
1、Windows环境 Jenkins进行Build steps的使用Execute Windows batch command启动微服务(Jar包),Jenkins会默认终止Shell产生的服务进程,而在命令行能够正常运行的服务进程。 1.1 使用命令行启动服务是正常 使用命令行执行 正常…...
Spring Boot 项目中 Redis 常见问题及解决方案
目录 缓存穿透缓存雪崩缓存击穿Redis 连接池耗尽Redis 序列化问题总结 1. 缓存穿透 问题描述 缓存穿透是指查询一个不存在的数据,由于缓存中没有该数据,请求会直接打到数据库上,导致数据库压力过大。 解决方案 缓存空值:即使…...
STM32 I2C驱动开发全解析:从理论到实战 | 零基础入门STM32第五十步
主题内容教学目的/扩展视频I2C总线电路原理,跳线设置,I2C协议分析。驱动程序与调用。熟悉I2C总线协议,熟练调用。 师从洋桃电子,杜洋老师 📑文章目录 引言一、I2C驱动分层架构二、I2C总线驱动代码精析2.1 初始化配置&a…...
RuleOS:区块链开发的“破局者”,开启Web3新纪元
RuleOS:区块链开发的“破冰船”,驶向Web3的星辰大海 在区块链技术的浩瀚宇宙中,一群勇敢的探索者正驾驶着一艘名为RuleOS的“破冰船”,冲破传统开发的冰层,驶向Web3的星辰大海。这艘船,正以一种前所未有的姿…...
manus本地部署使用体验
manus部署 https://github.com/mannaandpoem/OpenManus git clone https://github.com/mannaandpoem/OpenManus.git 或者手工下载zip包解压,包很小,只有几百K。 cd OpenManus-main #创建python环境,有python3的可以用python3 python -m ven…...
OpenCV 拆分、合并图像通道方法及复现
视频讲解 OpenCV 拆分、合并图像通道方法及复现 环境准备:安装 OpenCV 库(pip install opencv-python) 内容: 1. 读取任意图片(支持 jpg/png 等格式) 2. 使用 split () 函数拆解成 3 个单色通道…...
manus本地部署方法研究测试
Manus本地部署方法,Manus邀请码实在太难搞了,昨晚看到有一个团队,5个人3个小时,一个完全免费、无需排队等待的OpenManus就做好了。 由于也是新手,找了好几轮,实在是没有找到合适的部署方法,自己…...
基于Python实现的智能旅游推荐系统(Django)
基于Python实现的智能旅游推荐系统(Django) 开发语言:Python 数据库:MySQL所用到的知识:Django框架工具:pycharm、Navicat 系统功能实现 总体设计 系统实现 系统首页模块 统首页页面主要包括首页,旅游资讯,景点信息…...
C++--迭代器(iterator)介绍---主要介绍vector和string中的迭代器
目录 一、迭代器(iterator)的定义 二、迭代器的类别 三、使用迭代器 3.1 迭代器运算符 3.2 迭代器的简单应用:使用迭代器将string对象的第一个字母改为大写 3.3 将迭代器从一个元素移动到另外一个元素 3.4 迭代器运算 3.5 迭代器的复…...
SpringCloud——Consul服务注册与发现
一、为什么要引入服务注册中心 (1)为什么引入 微服务硬编码 IP / 端口的核心问题总结 环境变更敏感:当支付微服务的 IP 或端口修改时,订单微服务必须同步修改所有调用该支付服务的代码或配置,否则将无法正常通信无法…...
C语言_数据结构总结5:顺序栈
纯C语言代码,不涉及C 想了解链式栈的实现,欢迎查看这篇文章:C语言_数据结构总结6:链式栈-CSDN博客 这里分享插入一下个人觉得很有用的习惯: 1. 就是遇到代码哪里不理解的,你就问豆包,C知道&a…...
人工智能之数学基础:正交矩阵
本文重点 正交矩阵是线性代数中一个重要的特殊矩阵,它在许多领域都有广泛的应用。 什么是正交矩阵 如图所示,当矩阵A满足如上所示的条件的时候,此时我们就可以认为是正交矩阵,需要注意一点矩阵A必为方阵。 正交矩阵的充要条件 …...
前端打包优化相关 Webpack
前端打包优化相关 Webpack 打包时间的优化(基于 Vue CLI 4 Webpack 5) 1. Webpack 配置减少打包时间 1.1 对 JS 配置:排除 node_modules 和 src 中的打包内容 在开发环境下,修改 Webpack 的 JS 规则,排除 /node_m…...
抓包分析工具介绍
什么是抓包分析工具? 抓包分析工具,也称为网络数据包嗅探器或协议分析器,用于捕获和检查网络上传输的数据包。这些数据包包含了网络通信的详细信息,例如请求的资源、服务器的响应、HTTP 头信息、传输的数据内容等等。通过分析这些…...
