【网络基础知识铺垫】

文章目录

  • 1 :peach:计算机网络背景:peach:
    • 1.1 :apple:网络发展:apple:
  • 2 :peach:协议:peach:
    • 2.1 :apple:协议分层:apple:
    • 2.2 :apple:OSI七层模型:apple:
    • 2.3 :apple:TCP/IP模型:apple:
    • 2.4 :apple:TCP/IP模型与操作系统的关系:apple:
  • 3 :peach:网络传输基本流程:peach:
  • 4 :peach:网络中的地址管理:peach:
    • 4.1 :apple:MAC地址:apple:
    • 4.2 :apple:IP地址:apple:
    • 4.3 :apple:端口号:apple:


1 🍑计算机网络背景🍑

1.1 🍎网络发展🍎

独立模式: 计算机之间相互独立。
在这里插入图片描述
网络互联: 多台计算机连接在一起, 完成数据共享。
在这里插入图片描述局域网LAN: 计算机数量更多了, 通过交换机和路由器连接在一起。
在这里插入图片描述
广域网WAN: 将远隔千里的计算机都连在一起。
在这里插入图片描述所谓 “局域网” 和 “广域网” 只是一个相对的概念. 比如, 我们有 “天朝特色” 的广域网, 也可以看做一个比较大的局域网。


2 🍑协议🍑

我们知道计算机之间的传输媒介是光信号和电信号. 通过 “频率” 和 “强弱” 来表示 0 和 1 这样的信息. 要想传递各种不同的信息, 就需要约定好双方的数据格式。

计算机生产厂商有很多;,计算机操作系统, 也有很多;,计算机网络硬件设备, 还是有很多, 如何让这些不同厂商之间生产的计算机能够相互顺畅的通信? 就需要有人站出来, 约定一个共同的标准, 大家都来遵守, 这就是网络协议

2.1 🍎协议分层🍎

首先来举一个通俗易懂的栗子:比如我们打电话。
在这里插入图片描述
两个人互相拿着电话通信,在他们的视角上其实认为他们是直接在通信,但实际上并不是这样的,而是他们电话机之间的通信,也就是说此时电话机为用户提供了通信服务,并且用户不关心服务的具体实现,只关心如何使用服务,这样就把用户与电话机分在了不同层次,当哪一部分出现问题时就只处理那一部分就行了。

在这个例子中, 我们的协议只有两层; 但是实际的网络通信会更加复杂, 需要分更多的层次.分层最大的好处在于 “封装”。

2.2 🍎OSI七层模型🍎

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

在这里插入图片描述

2.3 🍎TCP/IP模型🍎

TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇.。
TCP/IP通讯协议采用了5层的层级结构 (本来TCP/IP通讯协议采用的是4层协议,但是为了教学完整便把物理层也加在了里面,所以为5层,但是我们讲解的重点并不在物理层,所以这里会讲的很简略) ,每一层都呼叫它的下一层所提供的网络来完成自己的需求。

  • 1️⃣物理层: 负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层.
  • 2️⃣数据链路层: 负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太网、令牌环网, 无线LAN等标准. 交换机(Switch)工作在数据链路层.
  • 3️⃣网络层: 负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层.
  • 4️⃣传输层: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机.
  • 5️⃣应用层: 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等. 我们的网络编程主要就是针对应用层。

在这里插入图片描述
一般而言对于一台主机, 它的操作系统内核实现了从传输层到物理层的内容;对于一台路由器, 它实现了从网络层到物理层;对于一台交换机, 它实现了从数据链路层到物理层;对于集线器, 它只实现了物理层;
但是并不绝对. 很多交换机也实现了网络层的转发; 很多路由器也实现了部分传输层的内容(比如端口转发)。

2.4 🍎TCP/IP模型与操作系统的关系🍎

我们可以用下图来表示CP/IP模型与操作系统的关系:
在这里插入图片描述我们知道操作系统的管理包含一下四个模块:进程管理,文件管理,内存管理,驱动管理。那么网络这部分是属于哪一个呢?其实在Linux中,对于网络这部分的管理是属于文件管理。为什么呢?因为在Linux下一切皆文件,那么也就说明我们未来学到的很多网络接口都跟文件是相关的。我们要学习的网络在本质上就是操作系统的一部分,我们在上图的右侧里面的系统调用(socket编程)就是操作系统为网络通信所创建的接口。


3 🍑网络传输基本流程🍑

同一个网段内的两台主机进行文件传输:
在这里插入图片描述两台计算机通过TCP/IP协议通讯的过程如下:
在这里插入图片描述跨网段的主机的文件传输.。数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器:
在这里插入图片描述
通过前面我们讲解打电话的栗子中我们不难知道在物理上"数据"的传输是从上到下,在从下到上的;但在逻辑上"数据"的传输可以认为是同层间直接进行交互

在这里我们简单讲解下以太网和令牌环的通信原理:

  • 以太网的通信原理:在发送数据的时候,站点将自己要发送的数据帧在这个信道上进行广播,以太网上的所有其他站点都能够接收到这个帧,他们通过比较自己的MAC地址和数据帧中包含的目的地MAC地址来判断该帧是否是发往自己的,一旦确认是发给自己的,则复制该帧做进一步处理。
  • 令牌环的通信原理:所有设备被连接成一个环状结构;一开始,一个固定数量的令牌在环上被初始化;这些令牌以一定的速率在网络上轮流传递,直到被使用完毕;设备只有在它拥有令牌时才能发送数据包;设备在发送数据包后将令牌返回到环上,以便其它设备可以使用它们。

数据包封装和分用
但是数据在传输过程中为了每一层能够正确接受的转发数据,我们还得进行数据包的封装和分用。
不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报 (datagram),在链路层叫做帧(frame).应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation).。
首部信息中包含了一些类似于首部有多长, 载荷(payload)有多长, 上层协议是什么等信息。
数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部, 根据首部中的 “上层协议字段” 将数据交给对应的上层协议处理。

在这里插入图片描述
在这里插入图片描述


4 🍑网络中的地址管理🍑

4.1 🍎MAC地址🍎

MAC地址用来识别数据链路层中相连的节点;

  • 长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些网卡支持用户配置mac地址)
  • 注意一台主机可能有多个mac地址。

4.2 🍎IP地址🍎

IP协议有两个版本, IPv4和IPv6. 我们整个的课程, 凡是提到IP协议, 没有特殊说明的, 默认都是指IPv4.

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

那么IP地址跟MAC地址有啥区别呢?
我们可以举一个简单的栗子来理解理解:
比如西天取经的栗子,唐僧在取经的路上盖通关文牒的时候,总是会被询问:你是从哪儿来的,要去往哪里?你的上一站是在哪里,下一站又要往哪里去?在这些问题中,MAC地址就是上一站地址和下一站地址,而源IP地址就是唐僧的出发点,目的IP地址就是唐僧的最终目的地。

4.3 🍎端口号🍎

端口号(port)是传输层协议的内容:

  • 端口号是一个2字节16位的整数;
  • 端口号用来标识一个进程, 告诉操作系统, 当前的这个数据要交给哪一个进程来处理;
  • IP地址 + 端口号能够标识网络上的某一台主机的某一个进程;
  • 一个端口号只能被一个进程占用,一个进程可以可以绑定多个端口号

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MybatisPlus存在 sql 注入漏洞(CVE-2023-25330)解决办法

首先我们了解下这个漏洞是什么? MyBatis-Plus TenantPlugin 是 MyBatis-Plus 的一个为多租户场景而设计的插件,可以在 SQL 中自动添加租户 ID 来实现数据隔离功能。 MyBatis-Plus TenantPlugin 3.5.3.1及之前版本由于 TenantHandler#getTenantId 方法在…

DeviceNet主站网关转ETHERCAT连接ethercat总线伺服如何控制

大家好,今天要和大家分享一款自主研发的通讯网关——捷米JM-ECTM-DNT。这款产品可是解决了不同协议设备数据交换的麻烦问题,让我们一起来看看它的神奇之处吧! 这款通讯网关有什么特别的呢?首先,它可以连接DEVICENET总…

火车头标题伪原创【php源码】

大家好,给大家分享一下python怎么读取文件中的数据,很多人还不知道这一点。下面详细解释一下。现在让我们来看看! 火车头采集ai伪原创插件截图: python是一门非常火爆且相对易学的编程语言,应用在各种场景。许多人想学…

electron+vue3全家桶+vite项目搭建【13.1】ipc通信的使用,主进程与渲染进程之间的交互

文章目录 引入IPC通信[主/渲染]进程对应渲染进程>主进程代码测试测试效果 主进程>渲染进程代码测试测试效果 双向通信代码测试测试效果 引入 electron项目常常由一个主进程和多个渲染进程构成,渲染进程之间是隔离的,而所有渲染进程都和主进程共享…

vscode 格式问题

1、EditorConfig for VS Code 插件 shift alt f 格式化文件(VS Code格式化按键),如下图,每个缩进4空格 代码如下 创建文件名 .editorconfig root true [*] charset utf-8 indent_style space indent_size 2 end_of_…

Docker 启动 Nacos 报错:No DataSource set

​ 👨🏻‍💻 热爱摄影的程序员 👨🏻‍🎨 喜欢编码的设计师 🧕🏻 擅长设计的剪辑师 🧑🏻‍🏫 一位高冷无情的编码爱好者 大家好,我是 …

Microsoft Message Queuing Denial-of-Service Vulnerability

近期官方公布了一个MSMQ的拒绝服务漏洞,可能因为网络安全设备的更新,影响业务,值得大家关注。 漏洞具体描述参见如下: Name: Microsoft Message Queuing Denial-of-Service Vulnerability Description: Microsoft Message Queuing…

java 版本企业招标投标管理系统源码+多个行业+tbms+及时准确+全程电子化tbms

​ 功能描述 1、门户管理:所有用户可在门户页面查看所有的公告信息及相关的通知信息。主要板块包含:招标公告、非招标公告、系统通知、政策法规。 2、立项管理:企业用户可对需要采购的项目进行立项申请,并提交审批,查…

静态页面与动态页面的区别及部署jpress应用

简述静态网页和动态网页的区别 静态网页: 1、首先是静态网页,静态网页每个网页中都有一个固定的URL,网页URL以htm、HTML、jpg、.gif、.mp4等常见形式为后缀,而且不含有问号; 2、静态网页内容一经发布到网页服务器上…

Java 8:让你的代码更简洁、高效和灵活的新特性

Java 8 ——企业中使用最普遍的版本,那么了解它的新特性是非常有必要的 目录 一、函数式接口 二、Lamdba表达式 三、方法引用 四、Stream API 3.1 创建 方法一:通过集合 方法二:通过数组 方法三:通过Stream的of() 方法四…

《JeecgBoot系列》JeecgBoot(ant-design-vue) 识别字段中指定内容并修改该行文字颜色

JeecgBoot(ant-design-vue) 识别字段中指定内容并修改该行文字颜色 需求&#xff1a;将生产工厂是配件工厂的行改变颜色标注 一、修改table组件内容 在<a-table></a-table>内添加:rowClassName"tableRowClass" <a-table>...:rowClassName"t…

【Linux】从0到1实现一个进度条小程序

个人主页&#xff1a;&#x1f35d;在肯德基吃麻辣烫 我的gitee&#xff1a;gitee仓库 分享一句喜欢的话&#xff1a;热烈的火焰&#xff0c;冰封在最沉默的火山深处 文章目录 前言一、理解回车 \r 和换行 \n二、初步认识缓冲区1. 认识第一个函数&#xff1a;sleep2.观察缓冲区…

Hive终端命令行打印很多日志时,如何设置日志级别

示例&#xff1a;use test; 切换到test数据库时&#xff0c;输出很多日志信息不方便看结果&#xff0c;如下图。 解决方法&#xff1a; 退出hive命令行界面&#xff08;ctrlC&#xff09;执行“vi /usr/local/apache-hive-3.1.2-bin/conf/log4j.properties”命令&#xff0c;创…

Windows环境下VSCode安装PlatformIO Cero报错ERROR: HTTP error 403 while getting

安装PlatformIO插件成功&#xff0c;初始化失败 错误信息判断问题尝试访问https://pypi.tuna.tsinghua.edu.cn/simple/platformio/成功点击文件后报错如下&#xff1a; 解决问题- 换源 &#xff08; Windows下有两个地方需要更改&#xff09;cmd命令行Pip文件 总结&#xff1a;…

Python自动化测试之用Robot Framework进行自动化测试详解

概要 你还在手动测试&#xff1f;不妨了解一下更高效、准确且简单的测试方法——使用Python的Robot Framework进行自动化测试。 什么是Robot Framework&#xff1f; Robot Framework是一款开源的Python自动化测试框架&#xff0c;它基于关键字驱动的思想&#xff0c;具有易读、…

Autoware.ai1.14.0自动驾驶-Demo运行

Autoware.ai1.14.0自动驾驶-Demo运行 数据准备 下载数据&#xff1a; wget https://autoware-ai.s3.us-east-2.amazonaws.com/sample_moriyama_data.tar.gz wget https://autoware-ai.s3.us-east-2.amazonaws.com/sample_moriyama_150324.tar.gz一定要注意解压文件是在.auto…

比较 Java Enterprise Architecture 中的 MongoDB 和 Couchbase

​MongoDB和Couchbase是两种常用的NoSQL数据库&#xff0c;用于在Java实现的企业架构中存储和管理数据。以下是它们之间的主要差异、比较和权衡。 在当今快速发展的企业架构领域&#xff0c;MongoDB和Couchbase已经成为NoSQL数据库中两个重要的竞争者。本文全面探讨了这两个强…

【链表OJ 1】移除链表元素val

大家好&#xff0c;欢迎来到我的博客&#xff0c;此题是关于链表oj的第一题&#xff0c;此后还会陆续更新博客&#xff0c;如有错误&#xff0c;欢迎大家指正。 来源:https://leetcode.cn/problems/remove-linked-list-elements/description/ 题目: 方法一:定义prev和cur指针…

Prometheus服务器、Prometheus被监控端、Grafana、Prometheus服务器、Prometheus被监控端、Grafana

day03 day03Prometheus概述部署Prometheus服务器环境说明&#xff1a;配置时间安装Prometheus服务器添加被监控端部署通用的监控exporterGrafana概述部署Grafana展示node1的监控信息监控MySQL数据库配置MySQL配置mysql exporter配置mysql exporter配置prometheus监控mysql自动…

ApplicationContent 和BeanFactory的关系

选中这个类&#xff0c; ctrl alt u 从springboot的启动类说起 我们知道这个启动类返回值呢是哟个configurableApplicationContent 类型 我们查看她的类图 从图中我们可以看出&#xff0c;configurableApplicationContent是见解的继承了BeanFactory接口&#xff0c;扩展了他…