🐱作者:一只大喵咪1201
🐱专栏:《网络》
🔥格言:你只管努力,剩下的交给时间!
今天起正式开始学习网络部分的知识,依托的环境是Linux操作系统,而且是建立在前面本喵对Linux学习的基础上。
这篇文章主要是来讲解网络中的一些名词,不讲解细节,只讲解大概,让我们对网络整体先有一个认知,然后在后面的学习中会逐步深入到每个细节中去。
网络基础
- 一、 认识网络
- 二、 认识协议
- 2.1协议的作用
- 三、 协议分层
- 3.1 OSI七层模型
- 3.2 TCP/IP四层(五层)模型
- 四、 网络通信原理
- 4.1 协议报头
- 4.2 局域网
- 4.3 跨网络
- 五、 网络中的地址
- 5.1 认识MAC地址
- 5.2 认识IP地址
- 六、 总结
一、 认识网络
我们当今生活在互联网时代,每天都在使用网络,那么网络到底是什么呢?
- 计算机就是一种网络。
如上图所示计算机示意图,在计算机内部存在很多模块,比如CPU,显卡,磁盘,网卡等等。这些不同的模块协同工作,一台计算机才能够正常运行。
多个模块之间势必会有数据等信息的传送,而这些信息是通过各个模块之间的线传送的,这些线通常都是各种各样的总线,但是线是实实在在存在的,是在物理上存在的。
- 各个模块以及线就形成了一个网状结构,被叫做网络。
一台计算机就可以看作是一个小型的网络,所以经常在画网络示意图的时候,经常使用计算机来代表网络。
独立模式:计算机之间相互独立:
如上图所示,此时有3台计算机A,B,C,每台计算机上都有各自的客户数据,并且每台计算机所处理的任务也不相同。
此时有小松,小竹,小梅三个人来协同完成处理客户数据的任务,当小松在计算机A上运行1的时候,可以移动到计算机B上运行业务2,之后可以移动到计算机C上运行业务3。
而在小松操作计算机的时候,另外两个人只能静静的等待小松处理完,然后才能轮到自己去使用计算机完成任务。
上面例子中,虽然安排了3个人在完成任务,但是三个人之间并没有协作,而且还存在计算机的竞争,效率低下。
- 计算机是为人服务的。
- 人和人之间是要进行协作的。
- 所以计算机之前势必也要进行协作。
计算机之间是不能之间传送数据的,在物理上就不允许,要想让计算机之间互相传送数据进行协作,就需要用线将计算机连起来,让不同的计算机之间通过线来互相传送数据。
- 连接计算机之间的线就被叫做网线。
互联网络:多台计算机连接在一起,进行数据共享:
此时,用网线将三台计算机连起来,并且再将一个业务1~3使用到的服务器也和它们连接起来。
此时小松,小竹,小梅三个人就可以各自使用一台计算机,从服务器中拿取自己业务所需要的数据进行处理,当三人各自完成自己的工作时,整个任务也就完成了。
这种互联网络模式下,业务1,2,3不仅能够随时自由切换,而且可以通过服务器实现数据共享,实现了高效的协作工作。
局域网LAN:计算机数量更多了,通过交换机和路由器连接在一起:
路由器左边的计算机通过网线以及交换机连接在了一起,实现了互相之间数据的直接传送。同样,路由器右边的计算机也可以直接传送数据。
路由器左边或则右边的计算机各自单独看来都属于局域网,两个小的局域网通过路由器连接在一起,如上图黑色框中所示,就形成一个大的局域网。
- 局域网之内的计算机之间可以之间传送数据。
广域网WAN:将远隔千里的计算机都连接在一起:
如上图所示,将每个城市中由计算机和网线组成的局域网通过路由器相连,实现不同局域网之间的数据传送。
比如东京和洛杉矶距离相隔千里,但是它们却通过网络连接在了一起,可以进行数据传输。
- 由不同局域网组成的这个大“局域网”就叫做广域网。
根据上面介绍可以看出,所谓“局域网”和“广域网”只是一个相对的概念,可以将一个国家多个城市组成的广域网看做是这个国家的局域网。不同国家之间形成的广域网,可以看作地球的局域网。
二、 认识协议
假设现在你要去上大学了,但是没有手机,而且家里也只有一个座机,为了节省电话费,你在走之前和父母做了个约定:
- 当家里的座机响一声,说明你很好,不用它们担心。
- 当家里的座机响两声,说明你没钱了,需要服务给你通过信用社或者邮寄打钱。
- 当家里的座机响三声,说明你有其他事情,需要你父母接起电话来和你交流。
- 你和父母双方之间做的约定,就是协议。
计算机之间的传输媒介是光信号和电信号,通过 “频率” 和 “强弱” 来表示 0 和 1 这样的信息,要想传递各种不同的信息,就需要约定好双方的数据格式。
- 比如收到1表示对方开始发送数据,这一位之后的内容就是对方要发送的数据。
- 再收到0表示对方介绍发送数据,这一位之后的内容并不是对方要方式的数据,可以舍弃掉。
在计算机之间也是一样,协议就是一种约定,双方之间无需解释就动的约定。
- 只要通信的两台计算机之间约定好协议就可以进行通信了吗?
再比如,两台计算机之间约定好了,收到”天王盖地虎“,就回复”宝塔镇河妖“,但是,一台计算机的用户是个外国人,它给你发了”The king of heaven and the tiger of earth(天王盖地虎)“,此时他并没有违背协议,只是用的语言不一样,但是还是根据协议来的。
那么你收到这句话后,该按照他遵守协议回复”宝塔镇河妖“呢还是不搭理他呢?
除此之外,计算机的生产厂商也有很多,计算机的操作系统也有很多,计算机的网络硬件设备也有很多,计算机的之间通过网络进行通信,虽然都按照一定的协议进行,但是表现方式确有可能不同,此时就会导致混乱,所以就很有必要规定必须使用中文,或者必须使用英文。
在网络通信中,有人就站出来约定了一个共同的标准——网络协议。所有进行网络通信的计算机之间必须按照这个网络协议来进行。
这里仅是理解网络协议是什么,具体的协议内容再之后本喵会详细讲解。
2.1协议的作用
如上图所示,如果通信双方距离比较近,仅有10m,那么通信双方的障碍就比较小,通信的内容也不容易出错,就好比两个人面对面聊天,说的话可以很清楚的传递给对方。
而在网络中,通信双方的距离会很远,就会引入很多障碍,也就是通信问题,比如信号在传输过程中受到的各种干扰,导致信号丢失一部分,或者多了一些干扰信号。
- 所有网络问题的本质:传输距离变长了!
就好比两个人之间相隔一千米,如上图所示,说的话就很难让对方听清楚,就算是喊的声音非常大,也会由于声波的衰减以及各种空气的阻力,导致很难直接交流。
而此时通信双方通过协议来通信就可以很大程度上客服远距离传输带来的问题,可以很大程度上减少通信成本。
对于上面打电话的例子,电话铃声响不同的声数代表不同的意义,响一声和两声的时候都不用接通电话,还省了电话费!!!
在计算机的网络通信中,协议同样可以降低通信成本。
- 协议的定制就是为了降低通信成本。
三、 协议分层
如上图所示,两个人在通过座机打电话,通话的流程,双方建立联系后:
- A对着电话说话,电话将A的信息采集到。
- 再将采集到的信息传给C的电话。
- C的电话再将从A的电话传过来的信息放给C听。
对于打电话的A和C来说,他们认为自己是直接和对方通话的,而对于两台电话机来说,它们认为是它两之间互相传递信息的。
这样一来,就将整个通话的过程分为了两层:
- 语言层,A和C。
- 通信设备层,A的电话机和C的电话机。
这两层的每一层都有各自的协议,对于语言层,通话双方是汉语协议,两人使用汉语来交流,可以互相明白对方的意思。
对于通信设备层,双方是电话机协议,两台电话机通过接收约定好的信号来做出不同的反应。
如上图右边箭头指向的内容,现在两个打电话的人变成了两个说英语的人,两人之间同样可以进行通话,仅是语言层的协议从汉语变成了英语,通信设备成不需要改变。
再如上图左边箭头指向的内容,不再使用电话机通话,而是使用手机来通话,此时仅是通信设备成的协议变成了无线电协议,语言层不需要改变,仍然使用汉语协议。
- 当两层中的某一层发生改变时,并不影响另一层。
这个例子中,协议只分两层(语言层和通信设备层),在实际的网络通信中,分的层数更多,情况也更复杂。
对分层的理解:
- 在软件设计方面的优势:低耦合,某一层发生变化并不影响其他层。
- 分层的依据:功能比较集中,耦合度比较高的模块就可以分为一层——高内聚。
- 每一层都要解决特定的问题。
在网络通信中,通信双方要解决的问题有什么呢?
- 如何把数据交付给和自己直接相连的下一台主机。
- 要有路径选择的能力,因为网络通信过程中存在很多节点。
- 容错纠错的能力,当通信信息发送错误时,能够处理。
- 当信息递达以后,具体的应用问题。
3.1 OSI七层模型
- OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范。
OSI模型共分为上图所示的七层,每一层都有自己的作用,并且有对应的协议。
- 把网络从逻辑上分为了7层.,每一层都有相关、相对应的物理设备,比如路由器,交换机;
- OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输;
- 它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整,通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯;
我们学习的网络编程中,不用考虑物理层,因为这是底层电路的事情,剩下的六层都要学习。
- 5,6,7三层到目前为止都没有完全统一的协议标准,因为情况复杂多变,所以将这三层都归于应用层。
3.2 TCP/IP四层(五层)模型
TCP/IP模型也遵循OSI规则,但是就像上面说的,将上三层合并成了一层,叫做应用层,所以还剩下五层,再加上不考虑物理层,剩下的就是四层。
- 在后面的学习中,如果没有特别说明物理层,那么TCP/IP模型就只有四层。
来看下这五层的作用分别是什么:
- 物理层: 负责光/电信号的传递方式。
比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。
物理层的能力决定了最大传输速率、传输距离、抗干扰性等,集线器(Hub)工作在物理层。
背景知识:
- 集线器:信号在传送的过程中会衰减,集线器的作用就是将衰减的信号再次放大。
- 调制解调器:俗称光猫,它的作用就是将网线传过来的模拟信号转换成数字信号来供我们的联网设备通信。
- 物理层的设备都是由运营商来维护的,是它们将信号基站遍布全球的,所以网络通信才能在大范围实现。
- 数据链路层: 负责设备之间的数据帧的传送和识别。
例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。
有以太网、令牌环网, 无线LAN等标准,交换机(Switch)工作在数据链路层.
背景知识:
- 以太网:“以太”是一种假设存在的介质,猜想光传送的介质是以太。
如上图所示的局域网中,存在多台计算机,采用的网是以太网。
- 以太网在任何一个时刻只允许一台计算机在局域网中发送消息,否则发生碰撞,此时的局域网也被叫做碰撞域,发生碰撞后局域网中的信息都舍弃,然后计算机重新发送信息。
- 令牌环网:在局域网的中存在一张令牌,只有持有令牌的计算机才能在局域网中发生消息,这张令牌是在所有计算机之间传递的,和信号量类似。
- 以太网,令牌环网等是一种局域网中计算机之间的通信规则,相当于不同的通信协议。
- 局域网是一种共享资源,局域网中的所有计算机都能看到,所以在局域网中传输信息也需要互斥。
- 交换机:局域网中的所有计算机都是通过交换机互相建立链接的,所以和计算机直接相连的设备就是交换机。
- 网络层: 负责地址管理和路由选择。
例如在IP协议中, 通过IP地址来标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输的线路(路由), 路由器(Router)工作在网路层。
背景知识:
- 路由器:作用就是用来进行路径规划,因为网络通信中,一台计算机发送信息到另一台计算机的信息传递过程中,路径上会有很多的节点,而通过路由器规划后,信息就能准确的发到另一个计算机上。
- 传输层: 负责两台主机之间的数据传输,如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机,也就是有容错纠错的能力。
- 应用层: 负责应用程序间沟通,如简单电子邮件传(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。
抛开物理层的层中,数据链路层,网络层,传输层在干的工作就是将信号从一台计算机传送到另一台计算机。
应用层就是具体使用已经接收到的数据,属于应用,我们网络编程就是在这一层。
如上图,将TCP/IP模型和OSI模型进行对比,可以看到,OSI的上三层在TCP/IP中都归为应用层。TCIP/IP中的网卡层就是数据链路层。
对照Linux系统层次:
- 数据链路层是驱动层。
- 网络层和传输层是内核层,具体的实现是由Linux内核实现的,同样会提供相应的系统调用接口供我们调用。
- 应用层就是具体的代码逻辑了。
四、 网络通信原理
4.1 协议报头
假设本喵在网上买了一个水杯,这个水杯并不是商家直接给到本喵手里的,它需要经历以下几个步骤:
- 商家将它打包好,交给快递公司。
- 快递公司贴上快递单,然后发在本喵地址附近的快递点。
- 快递点通知本喵,本喵去快递点拿。
本喵拿到水杯的时候,它不仅仅只有一个水杯,还会多出来一些东西,比如包装盒,已经上面贴着的快递单。
- 多出来的快递单就相当于协议报头。
快递单上写着本喵的地址,姓名,联系电话等信息,快递站根据这些信息就可以将水杯送到本喵手里。
快递单上的信息对于快递站来说就是一种协议,这是快递公司指定的协议,快递点只需要按照协议上的信息联系本喵就行。
- 网络通信中,协议每一层都有,而每一个协议的最终表现就是协议要有协议报头。
- 协议通常是通过协议报头来表达的。
- 每一份数据在被发送或者处于不同的协议层中,都要有自己的报头。
4.2 局域网
局域网中的两台计算机之间可以直接通信,不需要通过路由器。
上图局域网中存在两台计算机进行网络通信,使用的是TCP/IP模型。
- 报文 = 报头 + 有效载荷,在不同的层,有效载荷和报头都是不同的。
- 用户A发送你好:
- 字符串“你好”先被交给应用层,应用层在“你好”前面加一个协议报头,如上图所示的圆圈。
- 应用层再将加了报头的报文交给传输层,传输层再在前面加一个协议报头,如上图所示的四角星。
- 传输层再将加了报头的报文交给网络层,网络层再在前面加一个协议报头,如上图所示的六角星。
- 网络层再将加了报头的报文交给链路层,链路层再在前面加一个协议报头,如上图所示的云朵。
- 链路层再将加了报头的报文交给物理层,也就是局域网。
每一层都有自己的协议,所以每一层加的协议报头都不同。用户发送“你好”到报文传送到物理层的过程,称为封装,从图中也可以看到,报文都是下一层继承上一层。
- 用户B接收你好:
- 用户B的物理层接收到用户A物理层传送过来的报文,物理层将报文交给链路层。
- 链路层再将报文中链路层的协议报头去掉(云朵),将剩余的有效载荷交给网络层。
- 网络层再将报文中网络层的协议报头去掉(六角星),将剩余的有效载荷交给传输层。
- 传输层再将报文中传输层的协议报头去掉(四角星),将剩余的有效载荷交给应用层。
- 应用层再将报文中应用层的协议报头去掉(圆圈),将剩余的有效载荷交给用户,此时用户就收到了“你好”。
接收的过程中,每一层中的协议和发送方每一层的协议是相同的,从用户B的物理层接收到报文到用户收到“你好”的过程叫做解包分用。
- 解包:将对应层中报文的协议报头去掉。
- 分用:将解包后的有效载荷交给上一层对应的协议,因为每一层中存在不只一个协议。
在局域网通信的过程中,封装是上层传送给下层,解包分用是下层传送给上层,但是对于每一层而言,可以看作是层与层之间的直接通信,因为它们的协议都是一样的。
衡量一个协议是否可用,就看他能不能解决两个问题:
- 如何判断哪里是报头,哪里是有效载荷?
- 如何判断自己的有效载荷要交给上一层的哪一个协议?
数据处于不同的层,它的名称也不一样:
所在层 | 数据名称 |
---|---|
网络层 | 数据段 |
传输层 | 数据报 |
链路层 | 数据帧 |
4.3 跨网络
跨网络通信也就是“广域网”,需要通过一个或者多个路由器来实现。
如上图所示是两台处于不同局域网中的计算机进行网络通信,这里不再考虑物理层。
- 用户A发送你好,用户B接收你好:
- 对“你好”进行封装,直到以太网的链路层。
- 以太网的链路层将报文进行解包,去掉以太网协议的报头,将剩余下的有效载荷交给路由器。
- 路由器再将报文封装,加上令牌环网协议的报头,再将报文交给令牌环网的链路层。
- 链路层进行解包和分用,最终将“你好”交给用户B。
可以看到,在路由器中实现了一次重新封装,将以太网的报文进行解包分用,将有效载荷交给路由器,路由器封装成令牌环网的报文。
- 可以认为路由器中有两张网卡,也就是两个网络接口。
- 以太网的网卡接收来自以太网解包分用后的有效载荷,令牌环网的网卡将报文封装加上令牌环网的报头,并交给链路层。
- 报文在路由器中的身份是数据报,也就是没有链路层的报头。
路由器的作用之一就是屏蔽底层网络的差异。
在跨网络通信中,同一层协议可以认为是在直接通信,虽然实际上是有封装和解包分用的过程,但是由于同一层的协议相同,所以就可以认为是在直接通信。
- 路由器同时处于两个局域网中。
上图所示是两个跨很多个网络的计算机在进行通信的示意图,报文从用户A开始向下封装,再经过多个路由器的解包分用以及封装,最后从用户B的物理层解包分用,传递到用户A处。
- 路由器处于网络层,所以网络层之下的也都有,所以它包括两层(不算物理层)。
- 集线器处于链路层,所以它包括一层(不算物理层)。
五、 网络中的地址
5.1 认识MAC地址
- 局域网中的每一台计算机都有自己的名字。
局域网中计算机的名字可以理解为,每台计算机都有一个网卡,而每张网卡都有一个独一无二的序列号,表面自己在局域网中的唯一性,这个序列号就被叫做MAC地址。
使用ifconfig
指令就可以看到当前机器的MAC地址,ether
表示以太,在它后面的由冒号隔开的6个16进制数就是MAC地址。
- MAC地址用来识别数据链路层中相连的节点。
- 长度为48位, 及6个字节, 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
- 在网卡出厂时就确定了, 不能修改,mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突,也有些网卡支持用户配置mac地址)。
- 全球范围内计算机的MAC地址都是独一无二的,但是它仅用在局域网中。
一台计算机在寻找与它直接相连的另一计算机时,靠的就是MAC地址。
5.2 认识IP地址
- 在整个广域网中,每一台计算机也有自己的名字。
广域网中有非常多的路由器,基站,仅靠MAC地址是无法路由的,所以每台计算机都有一个IP地址来标识它的唯一性,这个IP地址就是计算机在广域中的名字。
使用ifconfig
指令就可以看到当前机器的MAC地址,inet
后面的由冒号隔开的几个16进制数就是IP地址。
- IP地址是在IP协议中, 用来标识网络中不同主机的地址。
- 对于IPv4来说, IP地址是一个4字节, 32位的整数。
- 我们通常也使用 “点分十进制” 的字符串表示IP地址, 例如 192.168.0.1 ,用点分割的每一个数字表示一个字节, 范围是 0 - 255。
- IP协议有两个版本, IPv4和IPv6,后面凡是提到IP协议, 没有特殊说明的, 默认都是指IPv4。
如何理解这两套地址呢?
如上图所示,是网络通信时,报文从用户A到用户B的流向示意图。
- 计算机和路由器中都有物理层,也就说都有网卡,所以就都有MAC地址,并且它们的地址不一样。
- 用户A的IP地址被叫做源地址。
- 用户B的IP地址被叫做目的地址。
在报文从用户A走向用户B的过程中:
- 报文先从MAC地址为12:34:56:78:9A:BB处走向MAC地址为12:34:56:78:9A:BC的路由器处。
- 然后再走下MAC地址为12:34:56:78:9A:BD的路由器处。
- 如此下去,沿着MAC地址直接相连的路由器走下去,直到用户B的MAC地址。
在这个过程中,MAC地址是在不停变化的,而源IP地址和目标IP地址是没有变化的。
- 每个路由器中,都会根据源IP地址和目标IP地址规划路线,给出下一个路由器的MAC地址,使得报文越来越接近目标。
IP地址就相当于报文传送过程中的灯塔,在指引着方向,MAC地址就是报文途中经过的地点,具体指引下一步的走向。
六、 总结
这篇文章中没有一句代码,讲解的是整个网络的一个概况,让我们对网络有一个框架性的认识,好在之后的学习中有更好的把握。