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脚本(shell)的使用方式

《Linux脚本(shell)的使用方式》:本文主要介绍Linux脚本(shell)的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述语法详解数学运算表达式Shell变量变量分类环境变量Shell内部变量自定义变量:定义、赋值自定义变量:引用、修改、删

MybatisPlus service接口功能介绍

《MybatisPlusservice接口功能介绍》:本文主要介绍MybatisPlusservice接口功能介绍,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录Service接口基本用法进阶用法总结:Lambda方法Service接口基本用法MyBATisP

Linux链表操作方式

《Linux链表操作方式》:本文主要介绍Linux链表操作方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、链表基础概念与内核链表优势二、内核链表结构与宏解析三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势六、典型应用场景七、调试技巧与

详解Linux中常见环境变量的特点与设置

《详解Linux中常见环境变量的特点与设置》环境变量是操作系统和用户设置的一些动态键值对,为运行的程序提供配置信息,理解环境变量对于系统管理、软件开发都很重要,下面小编就为大家详细介绍一下吧... 目录前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变

MySQL复杂SQL之多表联查/子查询详细介绍(最新整理)

《MySQL复杂SQL之多表联查/子查询详细介绍(最新整理)》掌握多表联查(INNERJOIN,LEFTJOIN,RIGHTJOIN,FULLJOIN)和子查询(标量、列、行、表子查询、相关/非相关、... 目录第一部分:多表联查 (JOIN Operations)1. 连接的类型 (JOIN Types)

Linux系统中的firewall-offline-cmd详解(收藏版)

《Linux系统中的firewall-offline-cmd详解(收藏版)》firewall-offline-cmd是firewalld的一个命令行工具,专门设计用于在没有运行firewalld服务的... 目录主要用途基本语法选项1. 状态管理2. 区域管理3. 服务管理4. 端口管理5. ICMP 阻断

Linux实现线程同步的多种方式汇总

《Linux实现线程同步的多种方式汇总》本文详细介绍了Linux下线程同步的多种方法,包括互斥锁、自旋锁、信号量以及它们的使用示例,通过这些同步机制,可以解决线程安全问题,防止资源竞争导致的错误,示例... 目录什么是线程同步?一、互斥锁(单人洗手间规则)适用场景:特点:二、条件变量(咖啡厅取餐系统)工作流

Linux中修改Apache HTTP Server(httpd)默认端口的完整指南

《Linux中修改ApacheHTTPServer(httpd)默认端口的完整指南》ApacheHTTPServer(简称httpd)是Linux系统中最常用的Web服务器之一,本文将详细介绍如何... 目录一、修改 httpd 默认端口的步骤1. 查找 httpd 配置文件路径2. 编辑配置文件3. 保存

Linux使用scp进行远程目录文件复制的详细步骤和示例

《Linux使用scp进行远程目录文件复制的详细步骤和示例》在Linux系统中,scp(安全复制协议)是一个使用SSH(安全外壳协议)进行文件和目录安全传输的命令,它允许在远程主机之间复制文件和目录,... 目录1. 什么是scp?2. 语法3. 示例示例 1: 复制本地目录到远程主机示例 2: 复制远程主

java中BigDecimal里面的subtract函数介绍及实现方法

《java中BigDecimal里面的subtract函数介绍及实现方法》在Java中实现减法操作需要根据数据类型选择不同方法,主要分为数值型减法和字符串减法两种场景,本文给大家介绍java中BigD... 目录Java中BigDecimal里面的subtract函数的意思?一、数值型减法(高精度计算)1.