Linux学习记录——이십팔 网络基础(1)

文章目录

  • 1、了解
  • 2、网络协议栈
  • 3、TCP/IP模型
  • 4、网络传输
    • 1、同一局域网(子网)
    • 2、局域网通信原理
    • 3、跨一个路由器的两个子网
    • 4、其它


详细的网络发展历史就不写了

1、了解

为什么会出现网络?一开始多个计算机之间想要共享文件,就得一点点存起来,然后给另一个计算机读取,久而久之,这样就是个麻烦事,所以出现了网络,将几台机器都处于一个网络环境下,就可以更好地通信了。当这个范围不断扩大,越来越大的区域都可以用网络了,之后网络开始往民间发展,各个地区之间,各个国家之间也就都能通过网络联系了。

几台机器通过网络形成通信,这也就组成了一个局域网,两个局域网通过交换机,路由器等相互连接,就形成了一个广域网,也可以说成一个更大的局域网。网络能连接如此多的个体,必然要有规则来约束其沟通,也就出现了协议。网络间的协议为什么存在?这就像两个人之间形成某种约定一样,本质上是为了更高效地沟通效率。一个协议通常由行业中的顶级组织来决定,提出规则后,并不一定要由提出者来完成整个协议的实现,而是由行业内顶级的团队来做。

如果要发信息到欧洲,传输距离变得很长,只有两台机器之间发送是很难保证成功的,所以会通过很多中间机器来传输信息,这也就保证信息的不丢失,但即使这样,如何保证就一定能不丢失,并且还能准确地发送到对应的主机上呢?这个问题之后会写。出现上述事实的原因就是传输距离变长了,所以问题是有前后上下关系的,所以在设计网络功能时,不同的功能设计成不同的模块,这就是低耦合;有了问题,就有了需求,就需要解决,网络通信还有很多不同性质的问题,要高效地解决它们,需要把相关的问题放在一起,做出解决方案,不相关的不要放在一起,这就是高内聚。通过高内聚,低耦合,可以设计出很多模块,这些模块被设计成层状结构,体现了前后关系。

传输距离的变长,衍生出新的问题,需要制定网络协议来约束信息的传输
协议被设计成层状结构,各种问题按照高内聚,低耦合的方式组织成层状结构,方便维护代码和方案的设计

分层设计,这种设计在学习C++时学到过,就是继承体系,一个基类可以有多个派生类,用基类指针指向不同派生类对象,就可以使用对应派生类对象的方法,在外部看来,只有基类,但内部却有很多派生类,这就是一切皆基类;C语言库中,用FILE结构体来封装了各种文件的系统接口,用户只需要使用FILE就可以调用系统接口,通过这个结构体来屏蔽了各种接口之间的差异,这也是种分层思想;每个进程都有虚拟地址空间,它们以同样的视角来看待自己要使用的空间,地址空间里屏蔽了硬盘,内存等硬件,而是通过页表,地址空间来访问它们,这也是分层结构,硬件在下面,地址空间在上面,进程在更上面;所以分层可以屏蔽软件,也可以屏蔽硬件,任何计算机问题都可以添加软件层来解决。

协议分层有什么好处?层与层之间通过接口进行交互,比如打电话,人和人之间属于一层,通信设备属于一层,还有电话的协议,语言等层,拨电话就像是给电话传参,通信时就是使用设备来输入输出。上层不关心下层的实现,任何一层出现问题,都不会直接影响另一层,减少后期开发者的维护成本,各层解决各层的功能,就是高内聚,不同层只通过接口交互,没有其它操作,就是低耦合。

分层有好处,但也可以不分层。分层是一种选择。

2、网络协议栈

OSI定义了网络协议层,这是一个七层结构。从低到高,物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。这个协议层是很完美的一个设计,不过实际应用中,因为很多细节不能在OSI的这个模型中实现出来,它的很多模块功能不能由网络协议层来实现,它的协议层不是全由操作系统来实现,会话、表示、应用没有实现,这三层会被压缩成应用层,因为会话表示应用要自己实现出来,而在我们使用中,不考虑物理层,所以总体就是四层。我们实际使用的就是TCP/IP五层模型,包括应用层,传输层,网络层,链路层,物理层。

OSI定制了标准,但不是OSI实现出来的。

像TCP/IP五层模型,OSI七层模型就是协议栈。

对于计算机来说,它也有分层,最下面是硬件层,往上走,驱动层,系统层,系统层里的最上方有系统调用层,应用层/用户层。使用计算机的时候就是在通过操作系统给的系统调用来操作硬件,网络也是一样,它也有系统给到它的系统调用,用户通过系统调用来操作网络。

网络的分层和计算机分层相对应,物理层对物理层,比如有网卡硬件,链路层对驱动层,网络层和传输层对系统层,应用层对用户层。传输层和网络层属于操作系统,网络的应用层对应计算机的用户层,由用户来实现,用户也包括开发人员,程序员这些,传输层最具有代表性的是TCP协议,网络层最具有代表性的是IP协议。系统层里的系统调用层有网络的系统调用,还有很多其他东西的系统调用。网络本质就是系统的一部分,网络的核心部分属于操作系统,所以网络协议栈会被叫做TCP/IP协议栈,取核心来起名的。对于系统来说,一切皆文件,网卡也是文件,而协议栈就属于文件系统的一部分,系统也会用管理文件的方式来管理他们,所以很多网络接口,和文件也有关系。操作系统的种类非常多,但网络只有一种,不管系统如何,网络协议栈的实现都一样。

3、TCP/IP模型

TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。

在这里插入图片描述

数据链路层是负责传送数据帧和检查的,物理层发出来的信息,要通过数据链路层来识别出来,才可以被使用。链路层有很多局域网通信标准,比如以太网,无线LAN,但网络不是只有一种吗?链路层的标准不只有一个,链路层的实现是在网卡驱动内部实现的,所以链路层会有不同的标准,而网络只有一种指的是操作系统层的,那里只有TCP/IP,但链路层可以有不同,由驱动程序内部实现,但这些标准也遵守TCP/IP协议。

网络层就有IP地址,win + R,输入cmd,然后输入ipconfig就可以查看到自己电脑的IP地址,无线局域网中IPv4地址。而Linux中,输入命令ifconfig,在第二行inet后面的地址是云服务器的内网地址/私有IP。网络层可以指定某一个主机。路由器工作在网络层。

网络层让主机之间有能力传送过去数据,但不一定做得到,而传输层就是保证传输成功的。

应用层解决数据如何使用的问题,也就诞生了很多软件。

在这里插入图片描述

工作在哪一层,就一定拥有下面的所有层,通常不会使用在上面的层,比如路由器不会使用传输层,不过现在的硬件来讲,很多都集成了上层的东西,比如有的路由器也有应用层的方法。

4、网络传输

1、同一局域网(子网)

同一局域网的两台机器,可以直接通信。两个主机通信的本质,是两个主机的OS与网络协议栈在通信。

在这里插入图片描述

每一层都有自己的协议,协议的表现形式是协议报头,也就是每一层都有自己的协议报头,这个报头相当于一个说明书。聊天发送信息,信息在应用层,信息前加上应用层的报头,传给传输层,应用层报头+信息整体,再加上传输层报头,传给网络层,直到最后的物理层,信息前面就有四个报头。根据冯诺依曼体系,用户发送的信息会先给硬件,然后由硬件,再交给收信息的人的链路层,网络层,一层层向上传,每一层都识别自己的报头。每一层都把上一层交付给自己的数据当作自己的有效载荷,当前层给有效载荷添加报头就是在做封装。而且可以发现,发送者和接收者的每一层得到的数据都是一样的,所以在逻辑上,同层协议都认为自己在和对方的同层协议在通信。并且同层协议都能够互相认识对方的报头,就能够将报头和有效载荷分离,将有效载荷交付给上层的哪一个具体协议。==每一层的协议都得能分离报头和有效载荷以及交付给上层有效载荷。==有效载荷交付给上层的功能叫做数据报分用;用户发的信息,通过每一层加报头传给硬件,这是封装;硬件逐一给到上面的层,每一层都会解包,以及数据分用,就会成功发出信息。这也就是数据如何在两台主机之间流通。

2、局域网通信原理

数据在主机中的运作已经了解了,那么在局域网中,还没到主机前数据是如何被运作的?

发送的信息每一个主机都会接收,然后封装交给自己的网卡,网卡会去解包,如果发现不是和自己有关的数据,就会丢弃,是自己的就继续传给上一层。不过网卡可以设置成混杂模式,这个模式什么数据都接收,都向上传,这也就是抓包工作的做法。

任何时刻,局域网中只允许一个人向局域网中发送消息,如果有很多人发,就有可能导致数据碰撞问题,比如很多人都去一个网站抢考试位置,这个网站就有可能崩掉。但局域网是怎么让很多人发信息的?不是只让一个人吗?这个问题后续再写。

任何人要通信,需要有唯一的一个标识符,比如自己的名字。机器也是一样,每台计算机都有网卡,网卡在出厂时就在网卡内部写入了网卡的sn号,也就是MAC地址,这个号是全球唯一的标识符。

3、跨一个路由器的两个子网

首先认识路由器。路由器有3层功能,第一层是网络层,第二层是链路层,第三层是物理层。路由器也是一台主机(节点),路由器至少连接两个子网,至少有两个网络接口。

在这里插入图片描述

以太网和令牌环是局域网通信的两个标准,对应着不同的链路层实现方案,链路层处于驱动程序中,也就是两者的驱动就不一样。路由器有两个子网,一个连接以太网,一个连接令牌环。

用户发送信息后,添加报头,一直传到最下面一层,但以太网,令牌环都不是只有路由器这一个主机,它们可能还有其它主机,那么为什么就可以指定给到路由器?每一个主机都会被标识,通过主机的IP地址来标识,也就是IPv4地址,这是一个4字节的整数,我们电脑上的IP地址是从0.0.0.0到255.255.255.255的,每个位置能表示0~255(2^8),总共8个比特位,总共32个比特位,4个字节。这种字符串风格的点分十进制方案的地址是给人看的,但机器不认它,机器要把它转成4字节,每一个字节8个比特位,就能取出这个字符串IP地址。网络协议栈的核心TCP/IP协议是在网络层和传输层,这两个层在操作系统中,所以TCP/IP是内核中的,内核是C语言实现的,TCP/IP也是C语言实现的。这个转换是用位段来实现的。

struct ip
{int patr1: 8;int part2: 8;int part3: 8;int part4: 8;
}int srcIp = xxx;
struct ip *p = (struct ip*)&srcIp;
p->part1;//这样就能找到每一部分的数字
p->part2;
...

IP地址能够唯一标识公网环境下的主机。网络层有一个路由表,也就是IP协议所在的那一层。用户在发消息时,也会被加上要发给谁的信息,传到了网络层时,会根据接收者IP地址和路由表来判断发给谁。发送者只知道自己在哪个网络中以及接收者的IP地址,路由表也不知道发给谁,但它知道数据不是发给自己所在网络的其他主机的,比如它知道不是发给以太网中其他主机的。数据到了网络层,网络层会添加一个目的报头,是接收者的IP地址,然后给到路由器,路由器通过路由表知道了要发给谁,路由器再把这些信息给自己的链路层,链路层会添加一个目的报头,是接收者的MAC地址,到了这里这个数据就有了目的地的IP和MAC地址。

目的IP地址是为报文定制的最终目标,根据该地址来进行路径选择,目的MAC地址会变化,根据路径选择的结果,来选择下一个主机。不只有两个子网,可能要跨多个子网才能找到接收信息的一方。

当在以太网的某个主机发的信息,来到路由器,又往下传,来到以太网,以太网的所有主机都收到了这个信息,但只有路由器发现这是属于它的信息,所以其他主机抛弃掉,让路由器来处理。报头中发送者的主机的网卡的MAC地址,把这个分离后,来到网络层,路由器查看信息的目的IP地址,查看路由表,知道要选择哪条路径,比如如果就是发给令牌环网某个主机的,那么路由器就会往下传给自己的链路层,加上接收者主机的令牌环网的MAC地址,向下传给令牌环网,令牌环网的所有主机都收到后,发现这个MAC地址不是自己就弃掉,只有一个主机接收了这个地址,交给链路层,去掉MAC地址报头,交给网络层,网络层查看目的IP地址发现是自己的信息,然后就分离IP地址,逐渐上传,最终给到接收者。这个过程中,同层的都认为是和对方同层的在交流,只是链路层的信息不一样。

IP协议往上,也就是网络层往上,是没有信息变化的,发什么收什么,差别发生在链路层。IP地址屏蔽了底层子网机制的差异,这是路由器+IP地址共同作用的结果。正是因为如此,IP地址是全球网络的底层基础。所以任何一个软硬件问题,都可以通过添加一层软件层来解决,比如网络里,这个软件层就是IP地址所在的网络层。

4、其它

发送的数据包,在传输层叫做数据段,在网络层叫做数据报,在链路层叫做数据帧。每一层的信息交给每一层来处理,就是分用。

Linux中用ifconfig命令

在这里插入图片描述

第一个inet后面的地址是内网的IP地址,不是公网的。ether则是基于以太网的MAC地址,它有48位,每一位都用16进制表示,用冒号分隔。

结束。

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

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

相关文章

DirectX12(d3d12)初始化

一、前置要求 Windows 10及以上(安装有DirectX12)VisualStudio 2022 二、DirectX12入门 1.引用头文件 #include<Windows.h> #include<d3d12.h> #include<dxgi1_4.h>2.注册窗口类并初始化窗口 这里我们调用Windows API 通过应用程序的句柄来注册一个唯一…

uniapp视频播放功能

UniApp提供了多种视频播放组件&#xff0c;包括视频播放器&#xff08;video&#xff09;、多媒体组件&#xff08;media&#xff09;、WebView&#xff08;内置Video标签&#xff09;等。其中&#xff0c;video和media组件是最常用的。 video组件 video组件是基于HTML5 vide…

default 和 delete 与默认构造函数 的使用

前言 使用default和delete关键字来干预编译器自动生成的函数。让我详细解释一下这些知识点&#xff1a; 正文 编译器生成的默认构造函数&#xff1a; 如果类A没有定义任何构造函数&#xff0c;那么编译器会自动生成一个无参的默认构造函数 A()。这个默认构造函数实际上是一个…

【AI视野·今日CV 计算机视觉论文速览 第248期】Mon, 18 Sep 2023

AI视野今日CS.CV 计算机视觉论文速览 Mon, 18 Sep 2023 Totally 83 papers &#x1f449;上期速览✈更多精彩请移步主页 Interesting: &#x1f4da;Robust e-NeRF,处理高速且大噪声事件相机流的NERF模型。(from NUS新加坡国立) 稀疏噪声事件与稠密事件数据的区别&#xff1a;…

阿里云无影云电脑和传统PC有什么区别?

阿里云无影云电脑和传统电脑PC有什么区别&#xff1f;区别大了&#xff0c;无影云电脑是云端的桌面服务&#xff0c;传统PC是本地的硬件计算机&#xff0c;无影云电脑的数据是保存在云端&#xff0c;本地传统PC的数据是保存在本地客户端&#xff0c;阿里云百科分享阿里云无影云…

计数排序与基数排序

计数排序与基数排序 计数排序 计数排序&#xff1a;使用一个数组记录序列中每一个数字出现的次数&#xff0c;将该数组的下标作为实际数据&#xff0c;元素的值作为数据出现的次数。例如对于序列[3,0,1,1,3,3,0,2]&#xff0c;统计的结果为&#xff1a; 0出现的次数&#xf…

Redis模块二:缓存分类 + Redis模块三:常见缓存(应用)

缓存大致可以分为两大类&#xff1a;1&#xff09;本地缓存 2&#xff09;分布式缓存 目录 本地缓存 分布式缓存 常见缓存的使用 本地缓存&#xff1a;Spring Cache 分布式缓存&#xff1a;Redis 本地缓存 本地缓存也叫单机缓存&#xff0c;也就是说可以应⽤在单机环…

ffmpeg编译 Error: operand type mismatch for `shr‘

错误如下&#xff1a; D:\msys2\tmp\ccUxvBjQ.s: Assembler messages: D:\msys2\tmp\ccUxvBjQ.s:345: Error: operand type mismatch for shr D:\msys2\tmp\ccUxvBjQ.s:410: Error: operand type mismatch for shr D:\msys2\tmp\ccUxvBjQ.s:470: Error: operand type mismatch…

[JAVAee]Spring项目的创建与基本使用

目录 Spring项目的创建 Spring中Bean对象的存储与获取 存储Bean对象 获取并使用Bean对象 getBean方法的重载 本文章介绍了Spring项目创建与使用的过程与一定的注意事项. Spring项目的创建 首先在IDEA中,新建一个Maven 第二步,在pom.xml中写入spring的依赖. pom.xml是mav…

情侣飞行棋 情侣小游戏 2023 抖音

飞行棋网站地址:https://effect.guoyaxue.top/fxq/index.html#/ 以及各种新版来袭&#xff1a; 以及各种情侣小游戏合集 https://fxnew.guoyaxue.top/#/

【微信小程序】swiper的使用

1.swiper的基本使用 <jxz-header></jxz-header> <view class"banner"><swiperprevious-margin"30rpx"autoplayinterval"2000"indicator-dotsindicator-color"rgba(0,0,0,0.3)"indicator-active-color"#bda…

一百七十九、Linux——Linux报错No package epel-release available

一、目的 在Linux中配置Xmanager服务时&#xff0c;执行脚本时Linux报错No package epel-release available 二、解决措施 &#xff08;一&#xff09;第一步&#xff0c;# wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm &#xff08;二&…

uniapp项目实践总结(十七)实现滚动触底加载

导语&#xff1a;在日测的开发过程中&#xff0c;经常会碰到页面需要渲染大量数据的情况&#xff0c;这时候就需要用到滚动加载功能&#xff0c;下面总结一下方法。 目录 原理分析实战演练案例展示 原理分析 使用scrolltolower事件来监听滚动到底部&#xff0c;然后加载下一…

idea之maven的安装与配置

我们到maven的官网里下载maven&#xff0c;地址&#xff1a;https://maven.apache.org/download.cgi下载完成后解压即可配置环境变量 此电脑–>右键–>属性–>高级系统设置–>环境变量–>系统变量&#xff08;S&#xff09;–>新建一个系统变量 变量名&…

短效代理IP与长效代理IP:应用场景与选择方法

随着互联网的迅速发展&#xff0c;越来越多的网站开始采取反爬虫措施&#xff0c;以保护自己的数据安全。而作为一种常见的反爬虫工具&#xff0c;代理IP也被广泛应用。代理IP分为短效代理IP和长效代理IP两种类型&#xff0c;本文将介绍它们的区别和应用场景。 一、短效代理IP …

数据结构-----队列

目录 前言 队列 定义 队列的定义和操作方法 队列节点的定义 操作方式 顺序表实现队列&#xff08;C/C代码&#xff09; 链表实现队列&#xff08;C/C代码&#xff09; Python语言实现队列 前言 排队是我们日常生活中必不可少的一件事&#xff0c;去饭堂打饭的时候排队&a…

彩色相机工作原理——bayer格式理解

早期&#xff0c;图像传感器只能记录光的强弱&#xff0c;无法记录光的颜色&#xff0c;所以只能拍摄黑白照片。 1974年,拜尔提出了bayer阵列&#xff0c;发明了bayer格式图片。不同于高成本的三个图像传感器方案&#xff0c;拜尔提出只用一个图像传感器&#xff0c;在其前面放…

tensorflow基础

windows安装tensorflow anaconda或者pip安装tensorflow&#xff0c;tensorflow只支持win7 64系统&#xff0c;本人使用tensorflow1.5版本&#xff08;pip install tensorflow1.5&#xff09; tensorboard tensorboard只支持chrome浏览器&#xff0c;而且加载过程中可能有一段…

K8S pod资源、探针

目录 一.pod资源限制 1.pod资源限制方式 2.pod资源限制指定时指定的参数 &#xff08;1&#xff09;request 资源 &#xff08;2&#xff09; limit 资源 &#xff08;3&#xff09;两种资源匹配方式 3.资源限制的示例 &#xff08;1&#xff09;官网示例 2&#xff0…

机器学习第七课--情感分析系统

分词 分词是最基本的第一步。无论对于英文文本&#xff0c;还是中文文本都离不开分词。英文的分词相对比较简单&#xff0c;因为一般的英文写法里通过空格来隔开不同单词的。但对于中文&#xff0c;我们不得不采用一些算法去做分词。 常用的分词工具 # encodingutf-8 import …