目录标题
网络发展的简单认识
通过之前的学习我们知道计算机是给人提供服务的,有了计算机人可以更加高效的完成一些任务,但是人在处理很多场景的任务时是需要交流合作的,比如说有人负责获取数据,有人要分析数据,有人要验证数据,而人又是通过这些电脑来处理这些任务,所以人在使用电脑的时候要有合作的,所以在早期就有存在着这么一个问题,早期的计算机之间都是相互独立的,每个电脑都各种持有自己的客户数据,所以人想要访问这些数据就只能前往不同的电脑前面,一旦电脑被其他人使用就只能静静地等待,比如说下面的图片:
并且要想将数据传递给另外一个机器也只能先将数据导到软盘或者其他具有存储功能的设备然后再倒入到你需要的设备上,所以上面的做法就注定导致了数据的处理和传递十分的漫长,所以后来就有人发明了这样的方法,每台机器依然处理不同的任务,然后再用一台服务器将不同的机器链接起来,这样在上传数据的时候就可以将数据直接上传给服务器,然后在获取数据的时候就可以直接通过服务器从服务器里进行获取(当然现在的计算机已经可以不需要这个服务器了,在windows中已经有了主机发现这个功能),那么我们就可以把这样的数据称之为网络互联,
当计算机数量更多了就需要通过交换机和路由器将每个机器在一起,那么我们就把这个整体称之为局域网,比如说清华大学的实验室是中有很多的机器需要传递数据,所以使用路由器和交换机将这些机器链接起来,那么整个清华大学的实验室就可以看成一个局域网,同样的道理还有牛津大学的实验室,东京大学的实验室,某某城市,某某研究院,我们都可以将其看成一个局域网:
在早期局域网都是给某个区域提供网络的支持,但是随着人类文明的发展,科技的发展,必定会存在着需要多个不同的区域需要数据传递的情况,比如说东京大学的实验室需要和清华大学的实验室进行合作,清华大学的实验室要和麻省理工的实验室进行合作等等,所以就得存在一个技术能将相隔很远的局域网连接起来,那么这个技术就是广域网我们将连接起来的局域网称之为广域网
某个地区的网络到底是局域网还是广域网是无法确定的因为这是一个相对的概念,比如说整个武汉的网络可以看成是广域网,但是相对于整个中国来讲武汉的网络也只是一个局域网,中国的网络可以认为是广域网,但是相对于整个地球来说中国的网也可以认为是一个局域网,那么以上就是对网络发展的简单了解,接下来我们来谈谈网络协议的功能。
协议作用的理解
在生活中我们经常会面对面的跟人进行交流,在交流的时候我们可以通过对方的微表情肢体动作和语言反馈来得知对方到底有没有得知消息,但是将两个人的距离拉开让两个人通过网络进行交流的话我们是无法通过对方的肢体语言和面部语言来得知对方是否接收到了消息,以及是否接收到了完整的消息,网络传输数据就跟生活中快递运输一样可能会出现快递丢失快递损坏的情况,并且发货地和收货地相隔距离越长就越可能出现问题,所以随着网络通信的距离变长通过网络发送的数据也会出现问题比如说数据的丢失,数据数据传输部分丢丢失等等等,那么为了减少通信的成本就有了定制协议的这种解决方法,通过下面的图片我们便可以大致的理解协议和没协议的区别:
没协议的通信像走迷宫一样到处乱串,而有协议协议的通信井然有序方向性目的性都非常的明确,并且随着主机之间的距离越来越长通信的过程也就变得更加的复杂,有协议和没有协议的区别也就越来越来大,所以所有网络问题的本质就是主机之间的距离变长,而协议的作用就是降低主机之间通信的 成本减少错误发生的概率,不仅仅是网络中存在协议在我们使用的电脑当中也存在着各种各样的协议,我们都知道电脑是由各种各样的设备组成的,比如说cpu,显卡,显示器,内存,固态硬盘等等,我们可以把一台计算机内部看成一个小型的网络结构,这些设备并不是完全独立他们之间也会进行通信,而通信的时候也会用到各种协议,比如说内存在访问磁盘的时候得靠驱动程序访问硬件,那么这个驱动程序也是靠协议来进行访问的,我们可以将计算机进行拆分将特别多的硬盘放到一个地方,比如说在贵州搭载一个存储集群,这个存储集群里面含有成千上万个硬盘,这样我们使用的笔记本啥的就不需要硬盘了,只要我们的网速够快就可以将电脑上的数据全部放到存储集群里面,需要数据的时候就可以再从存储集群里面进行读取,同样的道理我们也可以将许多的cpu也放到一起形成一个计算集群,其他的原件也是一样的道理,所以从单个的角度来看这些都是零零散散的东西但是通过网络和协议将其连接起来然后站在宏观的角度来看这就是一台超级计算机,所以计算机体系结构中有网络,网络中也有体系结构。
协议的本质
通过上面的例子我们知道了协议的作用是降低网络通信的成本,那协议的本质又是什么呢?答案是协议的本质就是一个约定,我们可以通过下面的例子来进行理解,张三是一个学渣,李四是一个学霸,但是张三为了考试不挂科就私下跟李四讲我考试坐你旁边到时候你把选择题的答案传给我好吧,李四说这可不行,老师监考可严了我可不想被抓,被抓的话我的奖学金保研资格都没了,虽然张三不怎么学习但是张三是一个聪明人,他跟李四说:李四你别怕我们不传纸条等考试开始1个小时之后我们两对一下眼神,然后你用笔轻轻的敲击桌面来表示选择题的选项,A你就敲一下,B你就敲两下以此类推,每表示完一道题之后你就把笔放下来表示该题的答案已经描述完,李四一听这是一个好办法这样即很难被老师发现,即使被老师发现了老师也找不到什么实质性的证据,还可以帮兄弟度过考试,所以李四就答应张三这么做了,然后在考试的过程中他们就使用这样的方法来进行通信传递考试选择题的答案,最终张三通过了考试没有挂科,那么这里两人都同意的敲桌子通信的方法就是一个约定也就是协议,通过这个协议即降低了作弊被抓的风险,又可以起到清晰通信目的,那么这就是协议的本质,他就是一个双方都同意的约定,按照这个约定我们就可以达到某些目的。但是这里存在一个问题我们上面举的例子只是两个人之间的协议,但是计算机生产厂商有很多,计算机操作系统也有很多,计算机网络硬件设备还是有很多,那如何让这些不同厂商之间生产的计算机能够相互顺畅的通信?这就好比一个房间里面有来自五湖四海的人,有些人说着武汉话有些人说着天津话,有些人说着四川话等等等,如果大家都各说各的,那么每个人都听不懂其他人在说什么,所以为了能够让这些人流畅的交流下去就提出来了普通话这个概念,大家都说普通话那么每个人都能听的懂听的明白,那么网络也是同样的道理,大家约定一个共同的标准大家都来遵守,这样不同的设备系统硬件之间就可以流畅的通信,那么这个标准这就是网络协议。
什么是协议分层
我们通过打电话的例子来理解协议分层,平时打电话的时候即使两人相隔很远但是他们依然会认为是直接在和对方进行通话
但实际上并不是如此,A先将要说的话说给了电话,然后这部电话通过对应的电话协议将你说的话转化成为了一段数据然后传递了另外的一部电话,然后该电话根据对应的协议将数据转换成为对应的语音播报最终传递给了C,所以表面上看A是直接在和C进行沟通但是实际上A是在和下一层协议进行沟通。
那么这就是一个分层的现象,用户A和用户C可以看成语言层,他们两使用的电话就可以看成通信设备层,语言层之间使用汉语进行交流,通信设备层之间使用电话机协议来转换数据和传递数据,通过分层的方式就可以实现解耦,比如说语言层之间不再使用汉语进行交流而是使用英语交流那这会影响通信设备层吗?答案是不会的,在生活中从来没有听说过说中文必须用手机,说英文必须使用座机的情况:
同样的道理当通信设备层发生了更改会影响到语言层吗?比如说AC之间不再使用电话机进行通话而是使用无线电,通过无线电协议进行数据的转化和传递的呢?会影响到语言层吗?答案肯定也是不会的
那么这就是协议的分层,协议的分层实现了解耦层与层之间只有使用和被使用的关系,从而达到了某一层协议的改变并不影响另外一层协议的正常使用,也就是说某一层出现了问题那么该问题就仅限于这一层,我们可以对该层进行修复也可以使用其他层来对其进行替换,不管怎么样都不会影响其他层的正常使用,我们上面的协议只有两层但是实际的网络通信会更加复杂,需要分更多的层次。
网络通信所面对的问题
一个在深圳的主机A不能将一份数据直接发送给远在武汉的主机B,这就好比从深圳出发的高铁并不会一直行驶直到武汉才停车让乘客离开,而是会在开往武汉的路程中经过很多的城市,在这些城市中也停下让一些乘客下车让一些乘客上车,并且在行驶的过程中为了接收更多的乘客涉及更多的城市往往还会走一些远路,所以网络中发送数据也是相同的道理,主机A无法将数据直接发送给主机B,而是在发送的过程中借助其他机器一起帮忙不停的辗转最终将数据发送给了主机B,那么这么做虽然达到了目的但是同样会出现以下的几个问题:
- 我要发送的主机没有和我直接连接的,那如何先将数据发送给和自己直接相连的那一台主机呢?
- 全世界有很多的主机,数据在传输的过程中也会遇到很多的主机,但是哪一台主机是指向目的地的呢?就好比我人在武汉我是往北走能到达深圳还是往南走才能到达深圳呢?所以数据在发送的过程中得有路径选择的能力。
- 我们在旅游的过程中可能会遇到一些突发情况比如说坐高铁得使用身份证来检票,那我要是身份证丢了该怎么办呢?所以铁路局为了应对这种情况就想出来了临时身份证这一做法来应对这一突发情况,同样的道理数据在发送的过程中也会出现数据丢失的情况,所以在网络通信的过程中也得有容错纠错的能力。
- 数据平安无事的到达了目的地,但是他的任务完成了吗?答案是没有的这就好比我们去深圳旅游,到达了深圳并不是我们的目的去深圳玩才是我们的目的,所以数据发送到对应的主机之后还得存在对应的程序对数据进行处理从而实现一些目的,解决一些问题。
那么这就是网络通信所会遇到的4个问题,在网络设计的过程中我们将这四个问题每个都以高内聚低耦合的方式设计为层状结构并划分为诺干层,并且每一层都有自己所对应的协议,每一层协议都解决自己所对应的问题。
OSI七层模型
在之前的学习中我们知道为了让不同厂商之间生产的计算机能够相互顺畅的通信? 就需要有人站出来, 约定一个共同的标准大家都来遵守,那么这就是网络协议,而网络协议中的一个模型就是OSI七层模型,OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范,把网络从逻辑上分为了7层. 每一层都有相关、相对应的物理设备,比如路由器,交换机;OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输;它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整. 通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯,但是它既复杂又不实用,所以我们后面都是使用TCP/IP四层模型来讲解,我们来看看OSI七层模型的图长什么样:
OSI将网络通信分为了七层分别为:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。每一层都解决对应的问题,每一层都是一个约定各个厂商都按照这个约定来设计产品,虽然这里设计了有七层但是厂商在实际的设计过程中发现根本就用不了这么多层,只需要5层就满足了所以就有了后面的TCP/IP五层(或四层)模型,这个我后面再介绍,首先物理层主要解决的是硬件电路上的问题,比如说规定0 1表示灯光的闪灭电压的高低等等,数据链路层解决的就是互联设备之间传送和识别的数据帧,说简单点就是上面的问题一:如何将数据传递给与自己自接相连的主机,直接相连的主机也可以称为互联设备。网络层解决的就是上面的问题二,如何选择路由器将数据传递到目的地址。传输层解决的问题就是问题三,两个节点在传递数据的时候如何可靠的传输,如何检查数据是否存在丢失呢?丢失了该如何弥补呢?OSI的这4层跟我们上面提到的问题一一对应并且在实现的过程中中这几层也都实现了,但是该模型的问题却出现在了上三层:会话层(用于通信管理,负责建立和终端通信链接),表示层(设备固有的数据格式和网络标准数据格式的转换),应用层(针对特定应用的协议)在实现的过程中我们发现没有一种协议能够将上面的场景全部都覆盖掉总有些刺头在里面,所以在工程实践的过程中就将上面的三层压缩成了一层,压缩称为一层之后该层解决的问题就是上面的问题四:解决数据应用的问题。那么这就是OSI的7层结构模型。
TCP/IP模型
有了上面的七层模型再来了解TCP/IP模型就十分的容易,首先来看看这个协议对应的图片:
TCP/IP将网络分为了5层分别为:物理层,数据链路层,网络层,传输层,应用层。
- 物理层: 负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层。
- 数据链路层: 负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太网、令牌环网, 无线LAN等标准. 交换机(Switch)工作在数据链路层。
- 网络层: 负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层。
- 传输层: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机.
- 应用层: 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等. 我们的网络编程主要就是针对应用层
一般而言对于一台主机它的操作系统内核实现了从传输层到物理层的内容,这里的操作系统并不是指的linux或者ios而是所用的操作系统,他们实现的功能都是一样的。对于一台路由器它实现了从网络层到物理层。对于一台交换机它实现了从数据链路层到物理层。对于集线器它只实现了物理层。但是这也并不绝对很多交换机也实现了网络层的转发很多路由器也实现了部分传输层的内容(比如端口转发),通过之前的学习我们知道操作系统是不相信任何人的,而传输层的上层就是应用层,而传输层又归操作系统管理,所以应用层要想使用传输层的数据就必须通过操作系统提供的接口来进行访问,未来我们会学到很多有关于应用层的协议,那么这些协议的本质也就是调用操作系统调用的底层接口来进行实现,而这些接口在底层又是和文件系统相关联的(以后再介绍),那么这就是4层模型的介绍,TCP是传输层的协议,IP是网络层的协议,操作系统认为这两个协议分别是那两层中最具有代表性的,所以该模型就称之为TCP/IP模型。
协议报头的理解
协议每一层都有,而协议的具体表现就是每一层协议最终的表现就是协议都要有报头,那么接下来我们就通过快递的例子来理解报头。小王在京东上买了一个乐高积木但是商家在发货的时候并不是亲自将货物送到你手上,而是通过寄快递的方式先将物品给顺丰然后顺丰再将物品送到你的小区,最后你再去拿物品,但是当你取件的时候你只拿到了一盒乐高了吗?一定不会你肯定还会拿到一个纸盒子并且在纸盒子上还会贴一张纸条上面写满了各种信息,那么这个字条就是快递单,所以当我收到物品的时候这个物品往往会多一点,那么这个多出来的部分就是报头,那么这个报头的意义是什么呢?快递盒子上的快递单有什么意义呢?快递单上写满了东西但是这些东西并不是给我们用户看的,而是给快递员看的,快递员如果只看到了个乐高那么他不可能知道他是谁的,他要寄给谁目的地是哪里,联系电话是多少,所以得用个盒子包裹起来并贴上快递单,快递单上就写着详细的信息和一些看不懂的数字和符号,并且顺丰所有的快递的快递单都是这样固定的格式,哪里写收件人哪里写寄件人,这个数字表示什么意思,这个字符又表示什么意思等等等,每个顺丰快递单都得按照这样的格式进行填写,那么当一个快递从A送到B时,B点的顺丰快递站能够知道快递上的内容描述吗?答案是肯定可以的,因为顺丰的快递单是固定的每个顺丰的快递员工都认识所以不管这个物品发向了何处当地的顺丰员工都知道快递单子上的信息,这就是顺丰员工的共识,这个就是顺丰员工的约定,这就是顺丰公司所指定的协议,如果只有协议而没有快递单,那么即使顺丰的员工拿到了这个水杯他也不知道发向何处,谁来取件,而他要想知道这些问题还得通过打电话的方式来问上一个寄过来的站点这个水杯是发往何处的收件人是谁电话是多少,这样就固然降低了效率,所以协议通常是通过协议报头来进行表达的,就好比顺丰的物品运输协议是通过快递单号来进行表达的,在上面的介绍中我们知道网络通信是分层的并且每一层都有自己的协议,所以每一份数据在被发送或者在不同协议层中时都会添加对应的报头,这就好比乐高被顺丰邮寄到你手上时会多出来一个快递单号,但是乐高本身也有一个手册,这个手册上面写着物品的名称物品的生产日期,物品的拼接顺序操作方法等等等,那么这个手册的内容就是乐高公司的协议,这个手册就是该协议的报头,通过这个报头使用者就可以将许多零件拼成一个整体,并且乐高公司的包头和顺丰公司的包头没有任何的冲突和联系,即使哪天乐高公司通过其他快递公司进行运货也不会影响到属于用户层的那一份协议和报头,那么这就是我们之前所说的层与层之间解耦,某一层的协议发生了变化并不会影响到其他层的协议。
局域网通信
首先我们要知道每一台机器都有自己的名字,这里的名字指的是每一台主机都有自己的网卡,每一张网卡都有自己的地址我们把这里的地址称之为mac地址,在全球范围中每一张网卡都有一个类似序列号的东西也就是一个48位的二进制数据可以按16进制解释,解释完之后就是一个字符串,这个字符串能够表示网卡的唯一性就像每个中国人都有一个属于自己的省份证号一样,所以每一张网卡都有自己的mac地址,该地址是出厂的时候就写好了存放在网卡里面,当然有些技术能够虚拟出一个mac地址比如说虚拟机,那么这里我们就不考虑这种情况,虽然mac地址全球内唯一但是他不应用与全球,而是在局域网中标定特定主机的唯一性,这种序列号在我们的生活中并不少见比如说宝马汽车的发动机就有一个属于宝马公司的序列号,每一部手机也有一个属于该公司的序列号用来表示这部手机属于我们的公司等等等,所以mac地址的就是用来标识唯一性。那么有了上面的背景再来了解局域网的通信原理就非常的简单,我们可以把局域网现象成为一个教师,每个网卡都有一个mac地址,所以我们可以把不同的mac地址想象成为一个学生,比如说下面这个图片:
大方框就是一个教师,mac1就是老师,其他的mac地址就是学生,我们都知道声音是通过介质来进行传播,所以我们可以把上面相互连接的线现象成为介质,那么在上课的时候的mac1老师发现mac8的作业没有交于是老师就大声的说mac8你的作业为什么没有交啊!因为mac8也连接了介质,所以他能够听到老师说的话于是他就站起来回答道:我的作业已经交了啊要不你再查查。老师mac1听到之后回答到:好的我待会再去找找。那么这就是一个场景,教室中有很多的人,老师mac1和学生mac8在对话的时候其他的学生能听到吗?答案是可以的,但是老师mac1认为他是直接在跟学生mac8对话吗?学生mac8认为他是只回复老师mac1吗?答案是肯定是的,但是周围有很多的学生他们也能听到对话的内容,那为什么他们不站起来回复老师的问题呢?原因很简单老师没有叫他们啊!跟他们没关系他们的大脑在进行判断的时候直接将这段话忽略掉了所以没有反应,那么在网路通信的时候也是同样的道理mac1发出的报文其他的mac也能接收到,但是接收报文之后发现这个信息并不是发给我的是发给mac8的所以就直接将该报文丢弃了,等mac8接收到该报文的时候就发现这个刚好就是发给我的于是就对其进行处理,处理完了之后就发送一个新的报文给mac1用来作为回复,同样的道理其他的mac主机发现该信息不是发给他的也就不进行处理,那么这就是局域网的通信。
局域网通信基本原理
通过前面的学习我们知道了什么是包头,以及局域网在通信的时候可以通过mac地址来做唯一性标识,那么接下来我们就可以谈谈局域网通信的基本原理,我们来看看下面这张图片:
图片的左侧和右侧都代表着一台主机,局域网有一种标准叫做以太网,那么上面的两台机器就是通过太网标准来进行连接,我们知道网络是分层的每一层都有一个属于自己的协议,协议的表现就是对应的包头,那么当左边的主机想发送一个你好给右边的主机会经历什么样的过程呢?首先我们知道左边的数据肯定是先发送给应用层的,又因为应用层拥有自己的协议所以会将发送过来的数据添加对应的报头,但是左边的应用层是无法将数据直接发送给右边的应用层的,所以他就只能向下进行交付,比如说下面的图片:
三角形就是应用层对应的报头,数据传递到传输层时传输层也有自己的协议但是他无法直接交给右边的主机,所以他就只能向下传递
那么这个五边形就是传输层协议对应的报头,同样的道理网络层也有自己的协议所以也得添加对应的报头,并且网络层无法直接将数据传递给对面所以他也只能向下进行传递:
同样的道理链路层有自己的协议所以他会添加属于自己的报头,并且他可以通过以太网的协议将数据传递到右边的主机,所以该层就将数据丢到了以太网里面,通过之前的学习我们知道所有的主机都能够看到这里发送的数据但是这些机器都会将其抛弃,只有对应的右边的机器才会将其获取并进行处理:
爱心就是对应链路层的报头,通过图片我们可以看到数据发送给B的时候是机器的最底层先接收到了消息,但是数据在发送的时候从上到下的也就是说最底层是最后一个对数据进行封装添加报头的,也就是说发送数据的时候链路层的报头是在最外面的,然而数据在接收的时候也是链路层最先收到的,所以该层最先看到的报头就是属于自己那一层的包头,那么这就是一个典型的栈结构,右边的链路层接收到了数据就会对数据进行分析,将发过来的数据拆分成为报头和对应的有效载荷,所以报文=报头+有效载荷,当链路层获取到报头之后会将有效载荷发送给自己的上一层也就是网络,同样的道理最终将应用层的报头和数据发送到了应用层
应用层拿到了数据之后就会获取到对应的报头和有效载荷,然后便将有效载荷发送给了用户,而这个时候有效载荷就是你好,最终右边的用户就可以看到你好,通过上面的讲解我们不难发现在发送数据的时候是自顶向下,而在接收数据的时候是自底向上,那么我们把发送数据的过程称为封装,把接收数据的过程称为解包,不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报 (datagram),在链路层叫做帧(frame),应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation). 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部, 根据首部中的 “上层协议字段” 将数据交给对应的上层协议处理,比如说下面的图片:
所以在网络通信的过程中我们可以认为同层协议是直接通信的因为同层协议中看到有效载荷和包头都是一模一样的,但是我们也可以认为网络通信的过程中同层协议是不限连的因为需要向下进行交付,这是两种不同的认知。
报头的问题
报文=报头+有效载荷,虽然我们看到的是报文,但是底层实际上就是一些二进制数据,那么如何判断哪里是报头,哪里是有效载荷呢?并且每一层都有很多的协议,在向下交付的时候应该是没有问题,但是向上交付的时候我们怎么知道对应的协议是哪个呢?这就好比一个树状结构从子节点走到根节点简单,但是如何从根节点走到一个指定的子节点呢?那么这两个问题是每一层协议都必须要面对的必须要涵盖的,在制订每一个协议的时候都必须要解决上述的两个问题这是所有协议的共性,比如说有一种协议就是定层报头他规定死了前多少个字节的内容属于报头,这些字节中的多少到多少字节指的是传递给上层的哪个哪个协议等等,那么我们把这种寻找上层协议的行为称之为解包分用,比如说下面的图片:
局域网的特点
在生活中我们一定身处过一个十分嘈杂的环境,在这个环境里面我们能够听到各种各样的消息,这些消息有些不是对我说的,但是有些是对我说的,并且我说话的时候别人也不一定能够听见,所以处于这种环境中是很难进行通信的,那么局域网也是同样的道理,局域网通过一个网线进行连接,如果多台机器同时发送消息的时就会发送碰撞,那么在局域网中就将其称为碰撞域,所以站在系统的角度就可以将局域网中的网络资源称之为临界资源共享资源。
跨网的网络链接
路由器的一个作用就是实现数据包的跨网络转发,而一个设备至少要横跨两个网络才能实现数据包跨网络的转发,所以路由器必须要横跨至少两个网络所以路由器必须要有两个网络接口,比如说下面的图片:
通过这个图片大家不难发现这里的路由器既属于右边的机器又属于左边的机器,路由器工作于网络层,而以太网的数据不能直接发送到令牌环网,所以左边机器得先通过以太网将数据先向上解包发送给路由器,然后路由再添加令牌环网对应的报头发送到属于左边机器所在令牌环网里面,然后再向上解包分用,那么这就是跨网络链接的区别。路由器往上的协议都是一样的,但是路由器以下的协议可能就存在不同比如说以太网,令牌环往,无线LAN,而路由器解包封包的行为就敲好屏蔽了网络底层的差异,那么这就是路由器的一个意义。
如何查看mac地址
使用指令ifconfig便可以查看自己主机上的mac地址:
使用该指令之后便可以看到两个网络接口:一个是eth0,一个是lo,其中lo表示的本地环回这个我们后面再讲,etho就表示的我们主机的ip地址和mac地址,ether后面跟着的一串就是mac地址:
inet就是内网ip: