Linux网络基础1

目录

  • 计算机网络背景
  • 协议
  • OSI七层模型
  • TCP/IP五层(四层)模型
  • 网络传输基本流程
  • 以太网通信原理
  • IP地址理解

计算机网络背景

到目前为止,我们之前所有的编程都是单机的,不是多机互联。以前计算机被发明的时候是为了军事用途,计算导弹轨迹等等。在实验室里电脑有很多电脑,一个任务的完成肯定是多人协作完成的,所以每个人处理的数据必然是不同的,而且这些电脑是相互独立的,多台电脑联系起来十分的麻烦,所以网络的产生是必然的事,早期他们用的事软盘进行互联,即a拿到了数据并处理后,将这些数据拷贝到软盘,在将这个软盘交给b,b处理完后又将软盘交给c,这样的效率太慢了
在这里插入图片描述
后来,小松他们三人又添加了一台格外的计算机,专门用来服务的,并将他们所有的电脑用线连接起来,小松处理完数据了交给服务器,然后只用给小松说一声该你了,小松就可以直接操作。此时就已经有了一个网络计算机互联的雏形了。后来随着人类的发展,慢慢的向上面这种小型局域网就越来越多了。后面,什么贝尔实验室,清华大学实验室等也有可能需要展开协作,所以有了这个需求,就逐渐产生了一个区域的子网和另一个区域的子网能够互联接触。
在这里插入图片描述
在一个局域网内一台主机将数据交给交换机,交换机交给另一台主机,如果该数据的目的不再该局域网内,交换机则会交给路由器,让路由器去找。
后来,长距离传输则会产生一个问题,传输的信号是会衰减下来的,所以数据需要经过各种路由器,这样又会产生一个问题,如果正确的导向数据发送到哪个位置,又如何知道这个数据是从哪里来的。所以长距离传输会有各种各样的问题出现。
局域网和广域网的概念没有标准化,所以看情况去理解,比如你家的wifi可以看作局域网,比如你们村的所有网络也是由一个路由器而来的,所以也能看作一个局域网,我们整个中国也可以看作一个局域网,因为访问外网也需要经过路由器

我国的计算机技术还是可以的,有很多自主研发的科技。虽然上世纪我国用算盘打出了原子弹,确实上一代人非常的励志。两弹一星,还有氢弹,卫星呢?这些东西拿算盘打出来吗?这些再用算盘打的话难度太大了。美国人大概在八十年代末把阿帕网的网络技术公开,然后我国九二年就如公网了。不要觉得九二年怎么样,当时马云等你所知道的大部分人都没听过互联网,说明我国看待网络技术比大部分人要早,九二年之后我国就入公网了,当时是拉了一根网线,这网的宽带并不大,主要用户发送邮件,用于学术交流。到了九六年的时候,马云才去了国外在美国见到的互联网,像什么马化腾,网易的老板丁磊,还有搜狐老板张朝阳,现在不是在将张朝阳物理课,还有李彦宏,他们都算是早期听过互联网这个概念的,基本都是九六年到九九年之间,然后陆陆续续开始做互联网公司了。当时国家入网后,有人也开始搞网吧,最早九十年代在咖啡厅里的网吧,一个小时大概是10块、20块,现在这网费放到现在对于普通人来说都算偏贵的,何况九十年代的十块。这就是我们国家入网后,有了很多关于互联网的故事。所以其实我们国家在互联网发展这一块,其实并不比美国人晚,计算机技术虽然比美国人晚了十三年,但网络技术我们一点都没晚,更重要的是我们的网络技术,在互联网应用方面,我国做的是最好的,我们有支付宝,嘀嘀打车,美团,虽然这些互联网公司也被大家吐槽,市面上有人骂,但是不得不承认在互联网应用领域我国一点都不差,并且我国的网络技术上,还有部分内容是遥遥领先的,比如5G,比如无线通信技术,还有ipv6技术。

互联网发展这么快,你总得拉网线、建光纤吧,建服务器、得建机房吧,还要建各种信号塔,这玩意儿在国家层面就必须要有地去建,拉网线搞个路由器交换机,怎样架设个网络,这些都是谁的工作啊?我想告诉大家每个国家都有他自己的叫做电信运营商。像我们中国典型的就是中国联通、中国电信、中国移动,现在包括华为也算是了,现在的华为业务是否广泛了。美国人有高通,欧洲有诺基亚。互联网发展一定是由国家支持的,如果自己这能够赚到钱,这一定有私人企业去弄,他们会花钱去盖基站,但是因为这是亏钱的事,所以最开始的时候运营商不愿意做些事,都是国家政策上的扶持才搞起来的
所以互联网能够快速的发展,是因为大部分稍微靠前点的国家呢。都会有自己的电信业务提供商,都会给自己的内部去建基站,拉网线,做光纤去做这个事情。所以非洲没有,非洲的互联网就是不行吧。中东地区的互联网也不行吧,为什么呢?就是因为他们当地的运营商。可能是因为特殊原因,最后没有办法把这些基站什么东西建起来,所以他们不可能有互联网公司。

那么后面呢关于网络的部分的故事呢还是非常多的。那么后面呢我给大家再慢慢展开。

协议

一台计算机内部本质也是一个小型网络,计算机体系结构中有网络,网络中也有体系结构。长距离传输必然会有很多成本,为了降低成本,所以有了协议的产生,什么叫做协议?协议就是一种约定,下面我来给大家讲个故事,来帮助大家理解什么是协议
在以前,电话费对贫困的家庭来说也算是一笔不小的消费,所以你和你爸约定,电话响一声:代表你平安,电话响两声:表示我没钱了,电话响三声:表示有事情需要和你讲话。
这声响,每一声都有不同的含义,而这个含义不用解释,双方早就已经有了共识。目的:尽可能减少通信成本。
长距离通信会产生以下问题,所以以下每一层都有该层的协议:
1.如何定位主机? -------ip协议
2.你怎么保证数据能准确的到达下一个设备?--------数据链路层
3.如果设备故障数据丢失了怎么办? ------------tcp协议
4.传送数据不是目的,能应用数据才是目的,你怎么处理发来的数据?---------http、https、ftp、smtp协议…
这些问题,不仅发送方有,接收方也同样有

如何具体理解协议是个什么东西呢?在我们收快递的时候,不仅有你要收的东西还会有一个东西—快递单。
在这里插入图片描述在快递员路由快递的时候,和你收快递的时候你都能根据这个快递单判断出这个快递是不是自己的。所以一个物品要被发出去,必须有快递单被包裹起来。这个快递单也叫做协议报头,
那具体用C语言是怎么实现的呢?是用结构体实现的,发送的信息属性填进去,再将你要发的内容给拷贝进来就成为了协议报文

网络是分层的,为什么是分层的?因为能分层,耦合度低,维护成本就会低,每层之间不会相互影响,我坏了不会影响你的操作。如何理解分层呢?给大家举个例子:
我和你打电话的时候,我和你是通过中国话(协议)来交流的,在通讯设备层在用光电信号进行交流,如果是两个外国人用英语(另一种协议)来交流,在通讯设备层并不需要改变该层的协议
在这里插入图片描述

OSI七层模型

具体是如何分层的呢?
因为是协议,需要人制定,所以就有组织站出来定制网络分层,组织叫做OSI,在定制的时候需要考虑诸多问题,而OSI就制定的很好,把网络分为了7层,每一层都有相关、相对应的物理设备,比如路由器、交换机;OSI七层模型是一种框架性的设计方法,其主要功能就是帮助不同类型的主机实现数据传输。它最大的优点是将服务、接口和协议这三个概念明确地区分开来,通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯。
在这里插入图片描述

但是呢,有几层工程实践的时候发现写不到操作系统里面,有两层在操作系统中设计不合适,将三层表示为一层在应用层比较合适,所以就有了TCP/IP五层模型,但我们只讲四层,物理层主要是硬件知识不讲,所以也可以叫TCP/IP四层模型

TCP/IP五层(四层)模型

以下介绍只需大致知道是干什么的即可
物理层: 负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器(发热众多因素会导致传输效率降低,该功能就是放大光电信号)工作在物理层.
数据链路层: 负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太网、令牌环网, 无线LAN等标准. 交换机(Switch)工作在数据链路层.
网络层: 负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层
传输层: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机.(如果发送失败了怎么办?这就这一层解决的)
应用层: 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等. 我们的网络编程主要就是针对应用层(接收数据,转化为图像和声音被用户看到)

网络协议栈和我们之前学的操作系统有什么关系?
在这里插入图片描述
和操作系统的分层结构一样,用户不能够直接访问底层,必须从上到下的贯穿访问
在这里插入图片描述
所以网络通信的本质就是贯穿协议栈的过程
在这里插入图片描述

网络传输基本流程

两台主机通过TCP/IP协议通讯的过程如下
在这里插入图片描述
两态主机底层通过以太网进行通信。
为什么叫做以太网?这名字是怎么由来的?声音传播是要介质的,科学家假说出光的传播也要介质,宇宙中一定存在我们看不到的介质,取名为以太,所以科学家们信心满满去证明,却证明出宇宙大部分是真空的,没有这种介质,为了纪念人类这次实验,在计算机中实现了将光电信号从这台主机传到另一台主机,刚好网络的初衷也是传播,就将这种网络称为了以太网

我们之前提到了网络协议栈结构中,每一层都有协议,数据包是如何封装和分用的呢?
如何理解我们以发送微信消息为例:
在这里插入图片描述
在网络协议栈中,有两种不同的认知,我们可以认为同层协议在直接通信,也可以理解成为向下交付。这就像在生活中我们使用微信一样,认为直接在和对方沟通,实际上通信的过程是不断的解包和分用
基于以上过程,我们能够推断出:
1.几乎任何层的协议,都要提供一种能力,将报头和有效载荷分离的能力
2.几乎任何层的协议,都要在报头中提供,决定将自己的有效载荷交付给上层的哪一个协议能力–分用
这是大部分协议的共性,为了我们学习具体协议的时候,都会有这两个问题,这样我们面对封装和解包,才不会困惑

以太网通信原理

以太网通信:每台主机上都要有唯一一个自己的标识符
给大家举个例子帮助大家理解
在这里插入图片描述
老师叫张三,是只有张三自己听到了这句话吗?所有人都会听到(收到),会在大脑里判断老师是不是叫的自己,不是自己就不用执行老师的指令,会抛弃掉这条信息。张三发现是自己,就会和老师搭上话(建立了连接)

以太网同一原理:
Mac地址:每一张网卡都有自己的地址,Mac地址(全球唯一)能在局域网中标明自己的唯一性
在这里插入图片描述
每个主机收到后,在数据链路层进行判断,发现不是发给自己的就会丢弃,而我们用户只在乎用户层,所以我们用户感觉不到。
站在系统的角度看待,这网络资源也是共享资源,如果有两台机器同时向以太网中发数据则会发送数据碰撞,会发送的碰撞的区域也被叫做碰撞域。那需要我们互斥访问,以太网互斥访问的方式并不是加锁,而是有一套自己的避免碰撞的算法,如果我发送消息发现了会碰撞,则会重新发送
那这样会产生一个问题:主机越多,碰撞的概率越大,这也就解释了一个现象,你家里的wifi有很多人连接后会很卡,在学校的运动会大型会议的时候,数据网络也很卡。
如何解决这个问题呢?交换机能划分碰撞域
在这里插入图片描述
交换机发现消息目的地不在左边的区域,则会将消息发送到右边区域。这样一定程度上缓解了数据碰撞问题。

IP地址理解

上面讲的是在一个局域网内的通信原理。现在有多个局域网,如果我们想将信息传到另一个局域网,那些设备是怎么知道信息要传到另一个局域网呢?
他们通过IP地址来判断,IP地址能标识在全网中的唯一性。那IP地址和Mac地址有什么区别呢?
给大家举个例子:假如说你要从吉林长春到四川成都旅游
在这里插入图片描述
其中你第一步可以先从长春到北京,第二步从北京到西安,第三步从西安到成都。
源IP地址->目的IP地址就是从长春到成都,源Mac地址->目的Mac地址就是第一、二、三步。
IP地址:为我们未来每一个阶段,提供方向目标,方便进行路径选择
Mac地址:上一站从哪里来,下一站到哪里去。该类地址,一直在变化

一个信息具体是如何从一个局域网传到另一个局域网的呢?
在这里插入图片描述
局域网的通信方式有:以太网,令牌环网(加锁的思想防止的数据碰撞),无线LAN(手机)
我们也能从上图看到,尽管IP层以下局域网的通信方式不同,IP层协议屏蔽了底层网络的差异化,靠的就是工作在IP层的路由器。IP协议实现了全球主机的软件虚拟层,一切皆是IP报文,这也就是为什么网络能很快席卷全球,能够让手机、电脑等通用起来

网络通信的基本脉络图
在这里插入图片描述
在传输层协议报文我们把它叫做:数据段或数据报。在网络层协议报文我们把它叫做:数据段。在链路层协议报文叫做:数据帧
ifconfig指令可查看网卡情况
在这里插入图片描述

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

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

相关文章

RAG (Retrieval Augmented Generation)简介

1. 背景 目前大模型很多,绝大部分大模型都是通用型大模型,也就是说使用的是标准的数据,比如wikipedia,百度百科,。。。。 中小型企业一般都有自己的知识库,而这些知识库的数据没有在通用型的大模型中被用到…

openGauss学习笔记-219 openGauss性能调优-确定性能调优范围-硬件瓶颈点分析-网络

文章目录 openGauss学习笔记-219 openGauss性能调优-确定性能调优范围-硬件瓶颈点分析-网络219.1 查看网络状况 openGauss学习笔记-219 openGauss性能调优-确定性能调优范围-硬件瓶颈点分析-网络 获取openGauss节点的CPU、内存、I/O和网络资源使用情况,确认这些资源…

C# CAD2016 宗地生成界址点,界址点编号及排序

1 、界址点起点位置C# CAD2016 多边形顶点按方向重新排序 2、 界址点顺时针逆时针走向 C# CAD2016 判断多边形的方向正时针或逆时针旋转 3、块文件插入 //已知块文件名称 GXGLQTC //块文件需要插入的坐标点 scaledPoint// 插入块到当前图纸中的指定位置ObjectId newBlockId;B…

重复导航到当前位置引起的。Vue Router 提供了一种机制,阻止重复导航到相同的路由路径。

代码&#xff1a; <!-- 侧边栏 --><el-col :span"12" :style"{ width: 200px }"><el-menu default-active"first" class"el-menu-vertical-demo" select"handleMenuSelect"><el-menu-item index"…

python-分享篇-五子棋

文章目录 代码效果 代码 """五子棋之人机对战"""import sys import random import pygame from pygame.locals import * import pygame.gfxdraw from checkerboard import Checkerboard, BLACK_CHESSMAN, WHITE_CHESSMAN, offset, PointSIZE 3…

JVM(1)基础篇

1 初始JVM 1.1 什么是JVM JVM 全称是 Java Virtual Machine&#xff0c;中文译名 Java虚拟机。JVM 本质上是一个运行在计算机上的程序&#xff0c;他的职责是运行Java字节码文件。 Java源代码执行流程如下&#xff1a; 分为三个步骤&#xff1a; 编写Java源代码文件。 使用…

Android实现底部导航栏方法(Navigation篇)

Navigation实现底部导航栏 前言导入和基本使用导入基础使用创建nav文件编辑Nav文件添加页面&#xff08;代码版&#xff09;添加页面&#xff08;图解版&#xff09; 创建导航动作 action创建action&#xff08;代码版&#xff09;创建action&#xff08;图解版&#xff09; 编…

「C++ 类和对象篇 12」static成员

目录 一、static成员是什么&#xff1f; 二、为什么需要static成员&#xff1f; 三、怎么使用static成员&#xff1f; 1. 定义static成员变量 2. 定义static成员函数 3. 访问static成员 四、特性 【面试题】 【总结】 一、static成员是什么&#xff1f; 被static修饰的类成…

品牌之门:概率与潜力的无限延伸

在品牌的世界里&#xff0c;每一个成功的推广都像是打开一扇门&#xff0c;从未知走向已知&#xff0c;从潜在走向显现。这扇门&#xff0c;既是品牌的起点&#xff0c;也是品牌发展的无限可能。 品牌&#xff0c;就像一扇紧闭的门&#xff0c;它静静地矗立在那里&#xff0c;…

微信强制分享红包裂变系统源码

这是一款新型的微信裂变引流系统源码&#xff0c;支持试看、直播、朋友圈转发、分享任务、 邀请入群、群聊、红包等多种裂变引流方式&#xff0c;让你的广告流量引流、吸粉变现更加高效。 该系统源码还优化了整个页面&#xff0c;减少了繁重多余的代码&#xff0c;让访问速度…

【51单片机】直流电机驱动(PWM)(江科大)

1.直流电机介绍 直流电机是一种将电能转换为机械能的装置。一般的直流电机有两个电极,当电极正接时,电机正转,当电极反接时,电机反转 直流电机主要由永磁体(定子)、线圈(转子)和换向器组成 除直流电机外,常见的电机还有步进电机、舵机、无刷电机、空心杯电机等 2.电机驱动…

对(一维)数组与指针的深入理解(1)

目录 1.数组名的理解2.使用指针访问&#xff08;一维&#xff09;数组3.&#xff08;一维&#xff09;数组传参的本质 1.数组名的理解 以前我们在使用指针访问数组内容时&#xff0c;有这样的代码&#xff1a; #include <stdio.h>int main() {int arr[10] { 1,2,3,4,5…

详解Qt多线程(包含:什么是CPU,单核处理器和多核处理器,举餐厅和QQ音乐的例子详解进程和线程,Qt多线程案例)

目录 一.什么是CPU&#xff1f;二.单核处理器与多核处理器三.什么是进程和线程&#xff1f;3.1 定义3.2 以餐厅为例子解释进程和线程3.2 以QQ音乐为例子&#xff0c;解释QQ音乐里面的进程和线程 四.Qt中的多线程五.Qt多线程案例任务描述案例演示设置显示内容的字体大小和位置运…

pands常用操作

1.导入库和文件读取和文件分信息分析 import pandas as pd import numpy as np csvf pd.read_csv(D:/各个站程序版本说明.csv) csvf.info() <class pandas.core.frame.DataFrame> RangeIndex: 51 entries, 0 to 50 Data columns (total 6 columns):# Column Non-Nul…

java面试题整理

2023.2.14&#xff08;第二天&#xff09; 数组是不是对象&#xff1f; 在Java中&#xff0c;数组是对象。数组是一种引用类型&#xff0c;它可以存储固定大小的相同类型的元素序列。在Java中&#xff0c;数组是通过new关键字创建的&#xff0c;它们在内存中被分配为对象&…

「数据结构」MapSet

&#x1f387;个人主页&#xff1a;Ice_Sugar_7 &#x1f387;所属专栏&#xff1a;Java数据结构 &#x1f387;欢迎点赞收藏加关注哦&#xff01; Map&Set &#x1f349;概念&#x1f349;模型&#x1f349;Map&#x1f34c;TreeMap和HashMap的区别&#x1f34c;Map常用方…

2048游戏C++板来啦!

个人主页&#xff1a;PingdiGuo_guo 收录专栏&#xff1a;C干货专栏 大家好呀&#xff0c;我是PingdiGuo_guo&#xff0c;今天我们来学习如何用C编写一个2048小游戏。 文章目录 1.2048的规则 2.步骤实现 2.1: 初始化游戏界面 2.1.1知识点 2.1.2: 创建游戏界面 2.2: 随机…

Days 31 ElfBoard 自启脚本中打开看门狗

1.在开机自启脚本中打开看门狗 rootELF1:~# vi /etc/rc.local 2.在自启脚本中添加上之后&#xff0c;然后在咱们的QT界面中找到看门狗应用&#xff0c; 发现显示打开看门狗失败&#xff1a; 3.修改看门狗源码&#xff0c;设置了超时时间后&#xff0c;关闭/dev/dev/watchdog节…

【Tomcat】:One or more listeners failed to start.报错解决方案

报错信息:One or more listeners failed to start. Full details will be found in the appropriate container log file. 具体就是web.xml此配置报错: 服务器启动错误Tomcat:One or more listeners failed to start.报错解决方案 IDEA:在使用IDEA运行SSM项目的时候 , Tomcat运…

error MSB8008: 指定的平台工具集(v143)未安装或无效。请确保选择受支持的 PlatformToolset 值解决办法

右击解决方案&#xff0c;选择属性 将工具集为143的修改为其他&#xff0c;如图 重新编译即可运行