本文主要是介绍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网络简述与网络硬件设备介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!