Linux入门真经-040网络简述与网络硬件设备介绍

2024-03-04 17:48

本文主要是介绍Linux入门真经-040网络简述与网络硬件设备介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

网络技术是为了让计算机之间实现通信。计算机之间是需要“交流”的。否则,每个计算机就是一座孤岛,无法对外提供相关服务,也无法实现自我价值,最终会沦为自娱自乐的玩具。

就和人与人之间需要使用相同语言才能沟通一样,计算机之间也要遵循某种相同的协议,以便于理解对方发送过来的数据格式。

 

一般而言,两个主机之间交换数据时,这种数据都是流式数据。什么意思呢?比如主机A向主机B发送一个文件,这个文件会被抽成“丝”,变成二进制数据流(0101),有线网物理上以高低电压的方式传到另一端,无线网则以5GHZ或2.4GHZ的电磁波信号传递。

 

网络通信不仅仅是收发流式数据这么简单,还有很多亟待解决的问题。比如,B接收到A发来的流式数据,他如何将其还原为原来的文件?(数据的封装与解封)。如果数据传输过程中数据发生了丢失或错误怎么办?(纠错与重传机制)。如果发送方发得特别快,接收方来不及接收怎么办?(拥塞控制)。等等等等。。。。这些都需要一系列的协议去规范和约束。

 

现在网络世界的实际标准是TCP/IP协议栈(也成协议族)。它是一整个系列的协议,而非某个协议。为了解决计算机通信一系列复杂的问题,TCP/IP被分成了多个层次,每个层次负责解决不通类型的问题。有人认为TCP/IP分成了四层,有人认为分成了五层。但我个人认为这都没有什么问题。因为TCP/IP本身就不是一个设计非常规范的协议栈,层与层之间在具体实现的时候的界定比较模糊。相比之下,ISO组织推出的OSI七层模型则是一个非常规范的模型。但是这并不妨碍TCP/IP打败他并成为事实上的标准。至于OSI为何没有成为事实上的标准,众说纷纭:如TCP/IP已经流行已久、深入人心,若使用OSI对网络架构的改动工作量太大;OSI虽然规范,但在设计上过于冗杂,不便于软件的快速实现和高效运行,等等等等。不管如何,历史做出了他的选择。TCP/IP成为了实际的霸主,而OSI却成为了供初学者学习和理解网络分层理念的模型。

 

我们先介绍网络硬件设备,阐述现网架构。有了本节的基础,下一节学习分层模型事半功倍。另外,对于初学网络者,即使一开始看不太明白也没关系,前两篇写得较为宏观一些,是为了让读者对网络有整体认识。后面会将相关内容展开介绍。

 

1网卡与集线器

 

计算机对外通信依赖的接口设备是网卡。每一个网卡都有一个独特的标识,称之为为MAC。我们也叫他硬件地址,它出厂时就被烧录进ROM,理论上讲,全球每个网卡的MAC地址都是独一无二的。MAC由48位二进制数组成,由美国的ICANN机构注册分配。前24位MAC地址由ICANN分配给硬件厂商,后24位由硬件厂商自行分配。硬件厂商每向ICANN申请到一个24位的地址块,就意味着拿到了2^24个MAC号码(约1600万个)。

 

好的,计算机有了网卡,并且有了MAC这个标识,理论上就可以向其他计算机传输信号了了,尽管这种信号非常的底层。数据从A主机的MAC发往B主机的MAC。

 

但是需要通信的设备往往远远不止两台,这个时候我们就需要一个设备将他们连接起来,最早期的时候使用一种设备叫做集线器。设备的外观如下图

 

集线器的另一个功能是中继信号,因为网线有传输距离限制,超过一定的距离信号衰减很大,接线器可以起到中继信号并重新放大的作用,增加了通信距离

集线器有很大的毛病:

 

1、  工作在半双工模式(不能同时收数据和发数据)。如果两台计算机同时对外通信,会发生冲突,只能等其中一方一次通信完毕,另一方才能对外通信。因此我们把集线器所连接的网络称为一个冲突域。集线器是一种分时复用的设备。

2、  无差别的转发所有数据,也就是说,比如1口接收数据,但是集线器会转发到所有的端口,最后只有真正的接收这接收数据,其他人发现目的MAC不是自己,会把数据包丢弃,浪费带宽。

 

2交换机(switch)

 

出于以上原因,集线器慢慢被历史的潮流所淘汰,替换他的设备通常是交换机。如下图:

 

从外观上讲,交换机和集线器差不太多,但是交换机有着本质的提升:

1、  继承了集线器的所有功能优点:中继信号,放大通信距离;完成设备互联

2、  切割了冲突域,每一个端口都是一个冲突域,因此允许多个计算机同时对外通信

3、  具有学习功能。能够记录各个终端的MAC地址,将他们存放在CAM表中(Content Addressable Memery)。这张表记录了:当我要去往某个MAC地址的时候,交换机应该向哪个口转发。因此当明确知道接收端MAC是多少时,直接从对应的端口转发,而不像集线器一样无脑全端口转发。只有CAM表中找不到对应的MAC地址时,才会向所有的端口转发,大大降低了网络带宽。

 

当CAM表中没有目的MAC的记录时,交换机会将数据从所有的端口全部发出去,以期望数据包能够到达对应的MAC。这样的行为我们称之为泛洪,泛洪所能到达的最大范围为一个广播域。全1的mac地址(FFFF-FFFF-FFFF)也能引发交换机的泛洪,任何终端都能接收,我们称其为广播地址。

 

试想一下,如果全世界的网络都用交换机连起来,那么如果目的MAC是一个不存在的地址,那岂不是全球的交换机都要疯狂地发送数据而不停歇了?这当然是不科学的。大量的广播资源疯狂的消耗带宽和网络设备CPU,我们把这种现象称为广播风暴。所以,我们需要采取一些措施将广播域切割成一小块一小块。路由器就是实现这样一种功能的设备。在路由器的基础上,网络具有了层次性,数据能够更好地去寻找接收方。

 

3路由器(router)

 

如上文所述,路由器切割了广播域。此时,以MAC为唯一通信标识的机制有时候就行不通了。比如我们看下面这幅图

 

 

路由器隔离了广播域,所以交换机1里必然没有MAC2的信息,交换机2里也必然没有MAC1的信息

当PC1知道PC2的MAC,想要和PC2通信时,由于交换机1里没有查到MAC2的信息,于是它广播泛洪,但是在广播域1的范围内并不能送达PC2,所以两台计算机没法通信。

 

所以跨广播域要实现通信,还得借助于另一个东西-----IP地址。

IP地址的出现并不是为了取代MAC地址,我们会在后面的小节去详细地介绍IP地址及相关协议。事实上,IP和MAC有着亲密无间的合作关系。

路由器通常用IP地址去标识每一个设备。

下一幅图来简述有了IP地址之后的通信过程。(此处我省略了非常多的通信细节。只是为了让你理解IP和路由器的作用,更细节的通信机制会在以后的小节详述)

 

如上图,路由器上与交换1相连的网卡IP地址为IP3,与交换2相连的网卡IP为IP4,PC1网卡的IP为IP1,PC2网卡的IP为IP2。IP可以跨广播域传播。

 

当PC1和PC2通信时,PC1一开始会企图去寻找IP2所对应的MAC地址,如果发现找不着PC2的MAC,它会企图把所有的数据发给IP3,此处我们就称IP3为PC1的网关。

 

IP3的接口和PC1同属一个广播域,PC1知道IP3对应的MAC是多少。PC1发送出的数据的目的MAC是MAC3,目的IP是IP2(PC2的IP)。数据经过交换1,交换1查找CAM表后把数据从与路由器相连的接口发出。

 

PC1将数据全部发到IP3之后,路由器会去查自己内部的一张表,我们称之为路由表。根据路由表他发现,如果要去往IP2,就从IP4所在的网卡发送出去。(这样一个动作我们称之为路由)。而且路由器IP4所在的接口与PC2同属于一个广播域,因此他知道IP2所对应的MAC是多少。因此数据从IP4所在的接口发出,目的IP是IP2,目的MAC是MAC2。

 

数据包经过交换2,交换2查到MAC2所在的接口,并把数据转发到了PC2。PC2成功接收。

 

遵循这样一种机制,交换机和路由器、MAC和IP协同工作,为我们实现了各个主机之间的通信与互联。

 

4套接字端口(socket port)

 

路由可以为我们实现不同广播域之间网络的互通,主机间的通信已经不成问题。那么我们接下来思考下一个问题:

 

我的电脑上同时开启了QQ、浏览器、微信。他们都要对外发送数据,我的电脑如何区分发出去或接收到的数据,哪些是QQ的,哪些是浏览器的,哪些是微信的呢?

 

这时候,套接字端口就起到作用了。

 

计算机本地会有一个叫做端口的软件概念。范围在1-65535。其中1-1024是知名端口,保留给一些一直的协议使用。比如,http默认使用80端口、https默认使用443端口等等。

 

大于1024的端口为非知名端口,可以由管理员指定分配给某个进程或者进程自行获取。

 

这样一来,进程发送数据时就可以指定往哪个IP的哪个端口发数据,接收方收到的时候,就知道要送给哪个端口所对应的进程。

 

5小结

 

总结一下

 

MAC:本地通信;范围:本地局域网(广播域内);

IP:跨广播域通信;范围:互联网;

Port:界定进程;范围:主机内部;

交换机:切割冲突域,查找CAM表,以MAC为标识转发本地数据

路由器:切割广播域,查找路由表,IP为标识转发数据

 

网络通信的细节非常复杂和繁琐,为了不吓跑新手,本文的通信过程做了很大的简化。但是没关系,现在你只要理解什么是交换机、什么是路由器、什么是MAC、什么是IP就可以了,更细化的通信细节会在后面为各位看官逐步展开。

 

几乎所有的书都会一开始就去讲分层模型,但是讲的时候又离不开这些专业的术语,对于各层的功能又是平铺直叙地干讲,个人觉得并不容易让新人理解。掌握了本文的内容,相信下一节讲述分层模型会非常顺畅。

 

 

关注本公众号获取最新更新

每周一、三、五稳定更新

这篇关于Linux入门真经-040网络简述与网络硬件设备介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/773962

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

图神经网络模型介绍(1)

我们将图神经网络分为基于谱域的模型和基于空域的模型,并按照发展顺序详解每个类别中的重要模型。 1.1基于谱域的图神经网络         谱域上的图卷积在图学习迈向深度学习的发展历程中起到了关键的作用。本节主要介绍三个具有代表性的谱域图神经网络:谱图卷积网络、切比雪夫网络和图卷积网络。 (1)谱图卷积网络 卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积,即F{f*g}

数论入门整理(updating)

一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题: