目录
一,关于网络
二,协议
2.1 协议是什么,有什么用?
2.2 协议标准谁定的?
2.3 协议分层
2.4 OSI 七层模子
2.5 TCP/IP 四层模子
三,网络传输基本流程
3.1 局域网中两台主机通讯*
3.2 报文的封装与解包
3.3 以太网通讯
3.4 数据碰撞
3.5 跨网络的两台主机通讯*
四,网络中的所在管理
4.1 Mac所在
4.2 IP所在
五,补充
5.1 “以太网”名字的由来
5.2 集线器
5.3 怎样看待局域网
一,关于网络
独立模式:盘算机之间相互独立
在早期的时间,盘算机是相互独立的,但偶然一台盘算机难以完成某个大型盘算,所以必要多台盘算机协同完成业务,那么就只能等一台盘算机处置处罚完后再将数据传递给下一台盘算机,然后下一台盘算机再举行相应的业务处置处罚,服从比力低下
网络互联:多台盘算机相互独立
于是,为了更方便盘算机之间举行数据交互,于是就用一根数据线,将三台电脑连上一个总的盘算机,这个盘算机就叫做“服务器”,所以这时,就可以将共享的数据放到服务器中举行集中管理,此时各个盘算机就能获取到这些共享的数据了,所以各个业务在处置处罚时就能随时举行切换了
局域网LAN:盘算机的数目更多了,通过交换机和路由器毗连在一起
后来如许的网络雏形逐渐发展,连入这个网络中的机器变得越来越多,于是就有了局域网的概念
交换机的作用后面会先容
广域网WAN:将远隔千里的盘算机毗连在一起
各个局域网之间通过入口路由器和出口路由器相互毗连在一起,便组成了一个更大的网络布局,我们称之为“广域网”。广域网和局域网是相对的概念,也可以把广域网看作一个非常大的局域网
- 比如我们在学校里利用的校园网,就是一个在校园范围内建立的局域网,只在校园里有信号,出了校园就没了
二,协议
2.1 协议是什么,有什么用?
协议是一种约定。
两台盘算机利用网络毗连上后,相隔距离可能会变得非常长,而且数据也是有种别的,有些数据就单纯的就是数据,而有些数据是对另一台盘算机的请求指令,所以数据种别不同,对数据的处置处罚方式可能也会不同
场景:
- 以前家里只有座机,打电话时对方接了就要收费,对方没接就不收费
- 我在远方上大学,老爸在家里,于是我就和老爸约定:每次往家里打电话,响一声代表报安全,响两声代表必要打生活费,响三声才接电话
- 这种我和我爸对响几声有什么寄义体现我和我爸的一种约定,而这就叫做我和你爸达成的某种协议
问题:为啥要如许做?
解答:能镌汰沟通的成本,提高双方沟通的服从
问题:怎样保证你的数据能准确到达下一个设备?长距离传输的数据丢失怎样办理?怎样定位主机?接收方怎样处置处罚数据?
解答:前三个是数据问题,第四个是应用问题;丢包有tcp协议来办理,定位主机就通过ip协议来,数据能准确到达下一个设备用数据链路层来办理
上面全部的数据问题,归根结底就一点:单纯的传输距离变长了
场景:
- 我们收快递,我们只必要快递盒子内里的东西,但是我们买的东西都会有一个盒子包装起来,并且还贴上一张纸,这个盒子以及上面的那张纸,我们就称之为“协议”,(发给我们的东西比原来的东西多发给了我一些东西)
- 那张纸上面有很多信息,假如对应到代码上,就可以用布局体来体现
- 盘算机之间的传输媒介是光信号和电信号,通过“频率”和“强弱”来体现 0 和 1 如许的信息,要想传递各种不同的信息,就必要约定好双方的数据格式
总结:
- 协议就是双方的一种约定,最终它的体现形式就是布局体对象。两个主机有雷同的布局体对象,如许的话传输的时间另一个主机就能立马辨认到收到的布局体信息,提高数据传输服从
- 盘算机生产厂商有很多,OS也有很多,硬件设备也有很多,所以光光有协议也不够,所以必须要有一个硬件通讯标准,称为“行业标准”,硬件标准,软件协议,协议只是标准的一个子集
2.2 协议标准谁定的?
上面也说过了,现在的盘算机生产厂商很多,盘算机操作系统也很多,盘算机硬件更多,那么为了让如许的不同厂商的盘算机能够相互顺畅地利用网络通讯,那么就必要有一个代表站出来,与全部厂商约定一个共同地标准,并且要求各人都服从如许地标准,这就是“网络协议”。
而这个代表一样平常都是该范畴中地“大佬”,因为网络协议地定制就是“规则”的定制,比如5G标准就是华为定义的,因为华为在通讯范畴已经是“大佬”了,所以它就是通讯范畴的代表
正所谓“一流的企业做标准,二流的企业做品牌,三流的企业做产品”。标准的定制已不是是公益性,开源性的,制定标准的目的是为了更方便人们的生活的,同时在服务人们的同时,另有一部分是有肯定盈利性质的,就比如“专利”,毕竟人家也是要用饭的,能够理解
2.3 协议分层
- 操作系统里有多种协议,所以要举行协议管理 -- 先形貌,再组织
- 协议本质就是软件,软件是可以“分层”的(分层:比如在类内里编写成员方法,main函数去调用;或者C++有继承体系,每一层继承可以认为就是一层软件层,改子类不影响父类)
- 所以协议在设计的时间,就是被层状划分的
生活中的例子:我们打电话的时间,本质是你的手机在和对方的手机举行通讯,表面上是人在人的语言层上交换,底层则是两部电话用它们的方式来举行通讯,这也是一种分层
问题: 为什么要划分为层状布局呢?
解答:
- 场景逐渐变得复杂:比如前面打电话的例子,随着技能发展,人与人沟通从面对面沟通到远距离沟通,这也是应用场景变复杂的体现
- 功能解耦,便于人们举行各种维护:还是打电话的例子,人与人沟通,电话与电话沟通,两者之间不影响,而且便于维护是指假如出问题,只必要在人的层面或者电话层面找问题就好了,不消整体找)-->所以把网络协议也搞成了层状布局
总结: 协议为什么要分层呢?技能上,网络代码的规模太大,必要解耦;现实情况下,就是问题是分层的,而协议是为相识决问题的,所以协议也是分层的。
2.4 OSI 七层模子
- OSI(Open System Interconnection,开放系统互连)七层网络模子称为开放式系统互联参考模子, 是一个逻辑上的定义和规范。
- OSI把网络从逻辑上分为了7层. 每一层都有相关、相对应的物理设备,比如路由器,交换机。
- OSI 七层模子是一种框架性的设计方法,其最主要的功能使就是帮助不同范例的主机实现数据传输,比如手机和电视之间的数据传输
- 它的最大长处是将服务、接口和协议这三个概念明确地区分开来,概念清晰,理论也比力完整. 通过七 个层次化的布局模子使不同的系统不同的网络之间实现可靠的通讯
- 但是,由于OSI七层模子比力复杂并且不太实用,于是在后面具体实现的时间对其举行了跳转,于是就有我们现在看到的TCP/IP 五层模子(其中物理层我们做应用的暂不考虑,于是也可以称为四层模子)
分层名称
功能每层功能概览应用层针对特定应用的协议体现层通讯固有数据格式和网络标准格式的转换会话层通讯管理。负责建立和断开通讯毗连(数据流动的逻辑通路)。管理传输层以下的分层传输层管理两个节点之间的数据传输。负责可靠传输(确保数据被可靠地传送到目的所在)网络层所在管理与路由选择数据链路层互连设备之间传送和辨认数据帧物理层以 0/1 代表电压地高低以及灯光地山灭,界定毗连器地网线的规格 2.5 TCP/IP 四层模子
TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。TCP/IP通讯协议采用了5层的层级布局,每一层都呼叫它的下一层所提供的网络来完成自己的需求。
- 物理层: 负责 光/电 信号的传递方式。比如现在以太网通用的网线(双绞线)、早期以太网采用的的同轴电缆 (现在主要用于有线电视)、光纤,现在的wifi无线网利用电磁波等都属于物理层的概念。物理层的本领决 定了最大传输速率、传输距离、抗干扰性等。集线器(Hub)工作在物理层。
- 数据链路层: 负责设备之间的数据帧的传送和辨认. 例如网卡设备的驱动、帧同步(就是说从网线上检测 到什么信号算作新帧的开始)、冲突检测(假如检测到冲突就主动重发)、数据差错校验等工作。有以太网、令牌环网, 无线LAN等标准。交换机(Switch)工作在数据链路层。
- 网络层: 负责所在管理和路由选择。例如在IP协议中,通过IP所在来标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输的线路(路由)。路由器(Router)工作在网路层。
- 传输层: 负责两台主机之间的数据传输。如传输控制协议 (TCP),能够确保数据可靠的从源主机发送到目的主机。应用层:负责应用步伐间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络长途访问 协议(Telnet)等。我们的网络编程主要就是针对应用层
TCP/IP 四层模子和OSI七层模子的关系如下:
通讯的复杂水平,本质是和距离成正比的
问题:复杂体现在那里,是协议栈要办理的问题吗?
应用范畴:
- 怎样处置处罚数据 --> 应用层协议 --> 对应盘算机体系布局的“用户层”
- 丢包(我发出去的消息对方没接收到) --> 传输层协议 --> 对应OS层
- 定位问题(怎样快速定位对方的主机) --> 网络层协议 --> 也是OS层,这两个传输层和网络层协议,都对应这Linux内核中的模块
- 前两个问题办理了,但是两个主机相隔几千米,数据传输时会颠末很多路由器,所以要办理主机切换的问题(办理下一跳主机的问题) --> 数据链路层协议(另有物理层协议,但不是软件层的,所以临时不考虑) --> 对应驱动层(物理层对应硬件层)
这五种协议就称之为 --> TCP/IP协议的五层层状协议
问题:网络协议栈和我们之前学习的Linux系统有什么关系呢?
解答:
- 今后我们学习的网络层和传输层就是在OS内实现的,所以我们要花大量时间学习OS的知识。
- 网卡是一个硬件,所以网络通讯的本质就是用户在访问硬件,而我们写的各种代码本质也是在和硬件交换,所以网络通讯本质也是在访问硬件。
- 但是用户没资格直接访问硬件,因为OS是硬件的管理者,它不允许上层用户直接访问硬件。但是我们用户要想达成目的就必须得访问网卡等硬件,所以OS要给用户提供对应的相关系统调用接口。
所以操作系统有很多,但是网络都是一样的,都必须服从上面的网络标准,否则你这个操作系统就没法入网,网络协议栈都是一样的
网络通讯的本质: 就是贯穿协议栈的过程。
三,网络传输基本流程
3.1 局域网中两台主机通讯*
同一个局域网内的主机是可以不消跨网络直接通讯的,因为局域网最初的设计目的,就是为了让局域网内的主机举行快速通讯
局域网协议有很多,但是现在以太网是主流,以太网是属于局域网通讯标准的一种:
网络通讯的的本质就是贯穿协议栈的过程,所以当用户要将文件传输给另一台主机前,要对该文件数据贯穿网络协议栈举行封装:
- ①应用层(FTP协议):首先假如用户发送信息“你好”,首先对在“你好”前面加上应用层自己对应的报头,然后拼接起来,形成了在应用层的一个报文
- ②传输层(TCP协议):我们必要保证发送的消息有序,所以必要两个设备的传输层要有肯定的协商,所以传输层也要有自己的协议,然后给每一个报文信息加上序号,而这个必要由传输层自己实现
- ③网络层(IP协议):一样的再次在报文前面加上网络层它自己的报文信息(src,dst等)
- ④链路层(以太网协议):和上面一样的逻辑
像上面如许将信息自顶向下添加各自层报文的动作我们叫做“封装”的过程,每层都要添加的信息我们叫做“报头”,其中我们把去掉报头的剩下的部分称之为“有效载荷” --> 所以我们现在可以认为:报文 = 报头 + 有效载荷
我们把数据发出去后,开始是对方的网卡开始拿到数据,然后网卡把数据放到OS的内存里
问题:为什么要交到内存里?
解答:冯诺依曼体系布局如许规定的,外设拿到的数据要想被CPU处置处罚必须先放到内存里
通过以太网把报文从一个设备放到另一个设备的链路层,然后接收方再一层一层把报头去掉,把有效载荷向上交付,最后到应用层时,就能够把“你好”呈现给对方的屏幕上,完成一次局域网通讯过程。
去报头的过程叫做“解包”,而局域网两台设备通讯的过程,本质就是不停举行 封装 和 解包 的过程
3.2 报文的封装与解包
- 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报 (datagram),在链路层叫做帧(frame)。
- 应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装 (Encapsulation)。
- 首部信息中包罗了一些雷同于首部有多长,载荷(payload)有多长,上层协议是什么等信息。后面详细先容协议报头字段时会具体先容
- 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的 "上层协议字段" 将数据交给对应的上层协议处置处罚
下面是数据封装的过程:
下面是数据分用的过程:
重点:
封装的时间,也要考虑未来对方设备解包的问题,假如不考虑解包问题,那么就相当于把两杯水倒在一起容易,但是想从一杯水中分离原来两杯水就难。
- 险些任何层的协议,都要提供一种本领:将报头和有效载荷分离的本领
- 险些任何层的协议,都要在报头中提供:决定将自己的有效载荷交付给上层的哪一个协议的本领 --> 报文的分用的过程
上面两点是大部分协议的共性,未来我们具体学习协议的时间会常常涉及这两个问题,就和之前学习Linux的“先形貌,再组织”一样
3.3 以太网通讯
以太网办理的问题是:一台主机是怎么把数据准确交给另一台主机的?
场景:
- 一个课堂有很多人,老师叫张三站起来答问题,张三站起来了,但其他同砚没有,这时间,老师说的话全班都听到了,但是只有张三站起来了。
- 李四固然也听到了老师的话,所以李四对老师发的报文做提取,然后发现这个消息是要发给张三的,然后李四将自己的名字和张三做对比,发现自己不是张三,然后李四就把接收到的报文全部丢弃了。
- 然后老师问张三要作业,然后张三说他昨天交了,然后老师想起来昨天已经收了作业了,于是让张三坐下。张三说昨天交了的时间,全班同砚再次听到了张三发出的报文,但是仍然丢弃,因为这个报文是发给老师的,如许,老师就和张三在局域网中完成了一次通讯
以太网通讯和上面的场景雷同,一台主机发送报文的时间,其实全部的主机都接受到了消息,每个设备读取报文然后丢弃报文,但是只有指定的设备才会开始解包,丢弃报文的阶段在链路层就已经完成,上层不关心
像这种全部主机收到了报文,但是大部分都在数据链路层都丢弃了,只有指定设备才会继续解包,这种全部主机都服从的“约定”叫做“以太网协议”,以“以太网协议”构建的网络通讯叫做“以太网通讯”,保证以太网通讯的基础是Mac所在,后面先容
3.4 数据碰撞
场景:还是课堂的场景,在课间的时间,都会乱糟糟的,各人都在高声哗闹,张三对李四说的话李四可能都听不清晰。
所以局域网也和课堂雷同,每台主机都可以往网络中发送报文,同时每台主机也可以接收报文
但就和上面场景一样,当每台主机都往局域网中发送大量报文,就又可能发生“数据碰撞”,所以要想“搞掉”局域网,就可以直接往网络里塞大量垃圾报文,就可以增加碰撞概率,使全部数据失效
我们也把多台主机构成的局域网叫”碰撞域“。
所以发送方主机都要实行避免碰撞的算法,让可能会发送碰撞的数据等待随机时间再发
问题:我咋知道碰撞了?
解答:
- 最简单的例子,我们自己语言我们自己也能听到,数据发送也是同理。
- 当主机收到一个数据后将其与之前发送的数据做对比,假如收到的数据与之前发送的数据不一样,则可以盘算出发送过程中发送了碰撞
- 那么当检测到发生了碰撞之后,主机可以选择等待一段时间再重新发送该数据。就像现实生活中的两个人想要同时语言,此时会有一方说:“你先说吧”,这也是一种碰撞避免
留意:
- 大多数情况下,网卡会直接丢掉不属于自己的报文,但是网卡有一种工作模式叫做”混杂模式“,可以通过系统接口打开,这种模式下,网卡拿到报文之后,假如不是自己的报文也会交给上层去解包,而如许肯定会有安全问题。
- 但是我们一样平常不消担心,假如我们的数据在应用层做了加密,就算被抓包了,它也看不到,所以我们怕的就是没有加密的数据被抓包
- 在局域网中主机越多碰撞的概率越大,所以大的局域网都会有”交换机“这个设备,它的原理雷同把一个大的局域网再次分成了很多个小局域网,当一个小局域网的两台设备要举行数据交换的时间,只要在它的谁人小局域网内举行数据交换即可,防止了数据交换的进一步扩大。所以交换机的核心工作就是: 划分碰撞域。
3.5 跨网络的两台主机通讯*
局域网之间是通过路由器毗连起来的,路由器可以认为是局域网中的一台“特殊”主机;没错,路由器也是主机,它的“特殊”是因为路由器可以跨局域网与其他局域网的路由器举行数据通讯,因此路由器是跨网络两台主机通讯的基本保证。
上面的是路由器级联的两个采用雷同的通讯标准举行通讯的过程,但是被路由器级联的局域网可能采用的是不同的通讯标准,比如局域网1采用的是“以太网通讯”,而局域网2采用的是“令牌环网”通讯:
由于 以太网 和 令牌环 网采用的是不同的通讯表春,因此它们给数据添加的报头也是不一样的,所以令牌环网中的主机无法对以太网的数据帧举行解包
如许的问题一样平常是由路由器来办理的:
- 路由器也是局域网中的主机,当数据从局域网1发到局域网2时,开始是路由器的数据链路层收到报文
- 然后路由器先对报文举行解包,将以太网对应的报头去掉,然后交给上层网络层
- 网络层举行一系列数据分析后,再将数据向下交付给链路层,此时链路层会再次给报文添加上令牌环网对应的报头,然后再发送到局域网2中,如许就能使数据在令牌环网中传输了,具体过程如下图:
四,网络中的所在管理
4.1 Mac所在
- 前面在以太网通讯时提到了“怎样保证局域网中每台主机的唯一性”,就是通过Mac所在来的保证的
- 每一个网卡在出厂时都有一个48比特位的长度的序列号,并且在举世是唯一的(其实只要保证其在局域网的唯一性即可),然后这个序列就是Mac所在,不能修改。
在Linux中,利用 ifconfig 下令可以检察当前主机对应的网卡信息:
4.2 IP所在
场景:假如你是辽宁人,你要去云南玩,不坐飞机,就坐火车,边坐边玩,你们先到河北,然后再去山西,接着陕西,四川,最后云南。最后我们规划出来一条辽宁到四川的路线,而在每两个节点之间,都有两套所在:“上一站你从哪来,下一站要到那里去”。我们这个两站所在一直变革的,但是总旅程的不变,还是辽宁到云南。中央站变革的依据是“我要去那里”。当我们到四川时,问当地人问题,当地人会说:“你从那里来(辽宁)”,“你要去那里(云南)”,“你上一站从哪来(陕西)”
所以我们会有两套所在,一套是你从辽宁到四川,这个不变,另一套是你的临时所在,你的上一站和下一站,这个会根据你当前的位置一直变革,而前者我们不变的所在就叫做 “IP”所在,有原所在IP和目的IP所在,后者变革的所在就是Mac所在
问题:①IP所在是什么?②为什么要有IP所在?
解答:
- ①:IP所在是IPv4的简称,为四字节,32比特位的整数,雷同 192.168.1.1 如许的风格
- ②:可以引导我们举行路径规划,我们就可以拿着ip所在不停举行路径规划
IP所在的利用过程:
- ip协议加报头时,会加个srcip和dstip,体现发送地和接收地,然后继续往下交付给以太网驱动步伐,以太网也添加报头
- 然后我要把客户端C的数据转发给客户端S,假如目的ip和我在一个子网,就不给路由器了;假如不在一个子网,就要先把数据交给路由器1,而两者的本质是一样的:局域网通讯
- 当C要把数据给路由器1,就得先知门路由器1的Mac所在,假设路由器的ip所在是IP_R,Mac所在为Mac_R,所以以太网驱动加报头时,就把Mac_C和Mac_R加进去,然后扔到以太网去,然后就和前面的局域网通讯原理一样, 最后只有路由器1拿到了报文
- 然后路由器1做报头方面的剖析,然后辨认到ip协议报文中目的地S的ip,然后假如路由器查自己的路由表,发现刚好和S的ip相连,于是就把报文直接发到S所在局域网的路由器2
- 但是路由器2不能把数据直接交给S,要先向下交付交给令牌环驱动步伐,然后添加令牌环的报头,然后令牌环举行辨认,将报头和有效荷载分离,然后就和前面一样一层层向上交付,就到了S主机的应用层。在这个给过程中, 除了令牌环协议,每一层的收发结果是完全一样的
总结:
- 有了路由器,就保证了ip报文才可以在举世全部的子网当中自由通行,因为到一个子网当中,路由器会去掉老的报头,在封装个符合当前局域网的新的报头,如许的话,我们的局域网中以太网和令牌环网在整个网络中底层的差异就屏蔽了,因为路由器会更新报头,并且路由器要横跨两网络,所以路由器也必须有以太网驱动也要有令牌环驱动
- 所以报文在每个路由器跳转过程中,固然每个路由器都会对报文举行解包,但是都只是解包局部,然后重新封装时也是只封装局部
- 在路由器会重新解包和封装的过程之中,IP层往上全部的协议都可以做成一样的,底层协议可以有很大的差异,但正是因为有IP所在,再加上工作在IP层的路由器的存在,IP实现了举世主机的软件假造层的“一切皆是IP报文”,屏蔽了底层硬件的各种差别。
- Mac的使命就是在局域网中把数据从一个主机送到另一个主机,然后到下一个路由器时,会把旧的Mac所在丢掉,然后加上新路由器在它的局域网中的Mac所在,
ip尤其是目的ip,一样平常是不会改变的,协助我们举行路径选择;mac所在,出局域网之后,来源和目的都要丢弃,让路由器重新封装
五,补充
5.1 “以太网”名字的由来
“以太”这个名字来源于物理学,在20天下初,很多科学家认为“光的传播也是必要介质的”,那么科学家们就发现:光能从太阳颠末太空传播到地球上,那么地外空间的真空中肯定也有一种物质能使光传播,所以科学家们就把这个物质称为:“以太”
但是后面科学家们颠末实行发现,“以太”不可能存在,真空就是真空,内里没有任何东西;但值得一提的是,在这个故事线中,图灵和冯诺依曼也到场过这场讨论,因为它们不光仅是科学家,也是数学家
经事后面的发展,诞生了互联网,而互联网也必要有个名字,于是其时的人们将其命名为“以太网”,因为在物理学史上人们认为“以太”就是传送物质的介质,也就是说“以太”具有某种通讯本领,固然“以太”现实上不存在,诞生现在盘算机范畴出来了一个能够传输信息的“网络”,于是早期的局域网标准就被命名为“以太网”
5.2 集线器
集线器是工作在物理层上的一个设备
电磁信号在长距离传输过程中,信号是会衰减的,所以集线器的功能就是对接收到的信号举行再生整形放大,以扩大传输距离
必要留意的是,集线器属于纯硬件网络底层设备,基本上不具有雷同于交换机的“只能影象”本领和“学习”本领,也不具备交换机有的Mac所在表,所以它发送数据没有针对性,所以是采用广播方式发送,简单来说就是把数据包发送到与集线器相连的全部节点
5.3 怎样看待局域网
局域网某种水平上算是该局域网中全部主机的共享资源,任何时刻都只允许一个主机向局域网当中发数据,换句话说就是保证多台设备访问共享资源时的互斥访问,所以局域网可以看作多台设备共享的临界资源
未来我们往网络发送数据本质也是通过进程在网络读和网络写
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |