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

相关文章

Linux内核定时器使用及说明

《Linux内核定时器使用及说明》文章详细介绍了Linux内核定时器的特性、核心数据结构、时间相关转换函数以及操作API,通过示例展示了如何编写和使用定时器,包括按键消抖的应用... 目录1.linux内核定时器特征2.Linux内核定时器核心数据结构3.Linux内核时间相关转换函数4.Linux内核定时

Linux镜像文件制作方式

《Linux镜像文件制作方式》本文介绍了Linux镜像文件制作的过程,包括确定磁盘空间布局、制作空白镜像文件、分区与格式化、复制引导分区和其他分区... 目录1.确定磁盘空间布局2.制作空白镜像文件3.分区与格式化1) 分区2) 格式化4.复制引导分区5.复制其它分区1) 挂载2) 复制bootfs分区3)

Android使用java实现网络连通性检查详解

《Android使用java实现网络连通性检查详解》这篇文章主要为大家详细介绍了Android使用java实现网络连通性检查的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录NetCheck.Java(可直接拷贝)使用示例(Activity/Fragment 内)权限要求

SpringCloud Stream 快速入门实例教程

《SpringCloudStream快速入门实例教程》本文介绍了SpringCloudStream(SCS)组件在分布式系统中的作用,以及如何集成到SpringBoot项目中,通过SCS,可... 目录1.SCS 组件的出现的背景和作用2.SCS 集成srping Boot项目3.Yml 配置4.Sprin

Linux服务器数据盘移除并重新挂载的全过程

《Linux服务器数据盘移除并重新挂载的全过程》:本文主要介绍在Linux服务器上移除并重新挂载数据盘的整个过程,分为三大步:卸载文件系统、分离磁盘和重新挂载,每一步都有详细的步骤和注意事项,确保... 目录引言第一步:卸载文件系统第二步:分离磁盘第三步:重新挂载引言在 linux 服务器上移除并重新挂p

Linux下屏幕亮度的调节方式

《Linux下屏幕亮度的调节方式》文章介绍了Linux下屏幕亮度调节的几种方法,包括图形界面、手动调节(使用ACPI内核模块)和外接显示屏调节,以及自动调节软件(CaliseRedshift和Reds... 目录1 概述2 手动调节http://www.chinasem.cn2.1 手动屏幕调节2.2 外接显

Linux(centos7)虚拟机没有IP问题及解决方案

《Linux(centos7)虚拟机没有IP问题及解决方案》文章介绍了在CentOS7中配置虚拟机网络并使用Xshell连接虚拟机的步骤,首先,检查并配置网卡ens33的ONBOOT属性为yes,然后... 目录输入查看ZFhrxIP命令:ip addr查看,没有虚拟机IP修改ens33配置文件重启网络Xh

linux实现对.jar文件的配置文件进行修改

《linux实现对.jar文件的配置文件进行修改》文章讲述了如何使用Linux系统修改.jar文件的配置文件,包括进入文件夹、编辑文件、保存并退出编辑器,以及重新启动项目... 目录linux对.jar文件的配置文件进行修改第一步第二步 第三步第四步总结linux对.jar文件的配置文件进行修改第一步进

Redis的安全机制详细介绍及配置方法

《Redis的安全机制详细介绍及配置方法》本文介绍Redis安全机制的配置方法,包括绑定IP地址、设置密码、保护模式、禁用危险命令、防火墙限制、TLS加密、客户端连接限制、最大内存使用和日志审计等,通... 目录1. 绑定 IP 地址2. 设置密码3. 保护模式4. 禁用危险命令5. 通过防火墙限制访问6.

SpringMVC配置、映射与参数处理​入门案例详解

《SpringMVC配置、映射与参数处理​入门案例详解》文章介绍了SpringMVC框架的基本概念和使用方法,包括如何配置和编写Controller、设置请求映射规则、使用RestFul风格、获取请求... 目录1.SpringMVC概述2.入门案例①导入相关依赖②配置web.XML③配置SpringMVC