💖作者:小树苗渴望变成参天大树🎈
🎉作者宣言:认真写好每一篇博客💤
🎊作者gitee:gitee✨
💞作者专栏:C语言,数据结构初阶,Linux,C++ 动态规划算法🎄
如 果 你 喜 欢 作 者 的 文 章 ,就 给 作 者 点 点 关 注 吧!
文章目录
- 前言
- 一、计算机网络发展的背景
- 1.1、网络发展
- 1.2认识 "协议"
- 1.3网络和系统之间的联系
- 1.4网络传输的基本流程图
- 1.5 以太网的通信原理(MAC地址)
- 1.6路由器(IP地址的讲解)
- 二、总结
前言
今天我们开始进入网络的讲解,网络是一个挺伟大的发明,他的版本很单一,不像操作系统有许多版本,你在市面找到任何关于网络的知识都是一样的套路,知识点都是一样的,所以学起来不容易有干扰,但是前期的概念还是有点不太好理解的,博主这篇就是来大家更好的学习网络的概念,希望大家可以理解。
本节重点
1.了解网络发展背景, 对局域网/广域网的概念有基本认识;
2.了解网络协议的意义, 重点理解TCP/IP五层结构模型;
3.学习网络传输的基本流程, 理解封装和分用;
一、计算机网络发展的背景
在学习了之前的所有知识,大家应该都知道博主讲解的思路了,计算机网络可以说是一个伟大的发明,真正的诠释了地球是一个大家园,在家里我们和家人交流是非常简单的,有了网络后我们不管在地球哪里,都几乎接近于面对面交流了,克服了区域的问题,那网络是怎么发展的呢??
1.1、网络发展
我们计算机一开始创造出来的是计算数据运算的,而且是用于军事方面的,每台计算机之间都是相互独立的,这样就导致每台计算机的数据只能有自己独享的,如果想要将两台计算机实现数据交换,只有通过将硬盘给对方,对方在读取数据,这样两台计算机才可以实现数据协作,但是交换硬盘的方式太麻烦而且效率低,所以这时候就有来看网络的想法,使用网络快速的将数据进行交换,导致网络互联是历史发展的必然,
我们通过这些网络将多台计算机连接起来,就可以进行互相通信了。计算机通过网络进行通信都是通过网卡实现第一步交互,用户想要获取对方的数据还有好几层步骤,一会介绍。
局域网和广域网:
上面那幅图就是我们看到的局域网,通过一根总线进行连接,广域网就是将多个局域网连接起来,形成广域网,局域网内的计算机是可以直接通信的,我们所说的直接通信是网卡直接直接通信,因为不在同一个局域网之间的计算机是不能直接通信的,需要通过路由器,这样就导致不在同一个局域网的计算机之间进行通信的话,网卡之间不能直接通信了,必须经过路由器,上面的一些名词大家先不用理解,知道个大概就行了,后面都会介绍的。
所谓 “局域网” 和 “广域网” 只是一个相对的概念. 比如, 我们有 “天朝特色” 的广域网, 也可以看做一个比较大的局域网.
给大家讲一些故事,大家有没有发现近几年,国外对我们中国的评价越来越高,像高楼大厦,交通,饮食都非常的羡慕,为什么呢?首先这些东西的产生让我们生活变得特别的方便,而且这些东西的发明是让别人所震撼的,其次这里面少不了互联网的出现,它使我们吃穿住用行都可以通过计算机去完成,网络一开始是由美国人发明的,大约在上个世纪40年代,而我们中国网络的发展大约在上个世纪50年代,建国初就开始注重这方面的发展,据说我们国家的网络比美国仅仅晚了13年,也不是很久远,大家应该都听过两弹一星,中国是用算盘打出来的,但实际上那些数据全靠算盘算出来几乎很难,所以大家可以想想哪个时候计算机有没有对于两弹一星有所帮助,所以说我们国家的网络并不差,有句话说,你不是一开始就跟上别人的步伐的话,后面想追上就很难,就好比科技的发展,我们中国比美国晚了很久,所以追上去还是有点难度的,但是网络我发展比你晚不了多久,所以还是可以赶超你的。
通过上面的图,我们局域网是通过一根总线进行数据通信的,而局域网之间通过路由器进行通信的,那是怎么做到的呢,大家听说过城市的网络发达,山区没有网络,为什么这么说:原因是我们网络想要进行传输依靠的是我们中国的运营商(移动联通电信,以及现在的华为)在中国地区大量的建造基站,山区没有基站,自然就没有网络,我们平时上网,连接无线网或者流量,只是总线的一种,当你用有线把你家电脑和网连接也是可以上网的,这不过把有线改成无线技术,这和我们网络没什么关系,我们一会讲解的都是有线的,这样方便展示。这也侧面的展示,我们国家的互联网公司都是依靠我们的运营商去发展的,没有这些基础设施,你软件写的再好,也使用不了。
一个国家的网络的发展不仅依靠基础设施,而且还需要很多人去使用它,而我们中国网络之所以发展好原因是我们网民多,这些就会导致网络看到的红利就多,就会有更多的人去做这件事,必然导致它往好的方向发展,这也需要国家政策的大力支持,我们互联网公司基本上不去做基础设施,只要会去使用就好了,因为基础设施它回收周期长,成本高,所以国家的政策的支持。
说了这些大家对于网络的发展应该有了更深的理解,对于局域网的概念也了解了一些,如果没有无线技术,我们所有要上网的计算机必须要使用网线才可以进行通信,所以为什么叫网络,因为它看上去就像一张巨大的网
上面说了这些只是让大家可以更好的进入网络的学习,接下来我们来认识协议
1.2认识 “协议”
两台计算机想要进行通信,需要一根线进行连接通信,也可以通过无线技术,那我们以有线为例,我们计算机之间的传输媒介是光信号和电信号,通过频率和强弱来表示0或1这样搞的信息,要想传递1各种不同的信息,就需要约定好双方的数据格式—协议
来讲解一个小例子,大家应该还记得座机,打电话对方接了就要钱,否则都不要钱,假设小明第一次去上大学,它为了省钱,在上大学之前,跟家里人说,我到时候会往家里打电话,电话响一声就表示我一切都好,电话响两声就是要钱要生活费,电话响三声就是接电话有别的事情。上面的故事说明的就是小明和家里人定了一个协议,双方都知道,到时候遵守这个协议。
只有协议就可以了吗??答案是不行的
计算机生产厂商有很多;
计算机操作系统, 也有很多;
计算机网络硬件设备, 还是有很多;
如何让这些不同厂商之间生产的计算机能够相互顺畅的通信? 就需要有人站出来, 约定一个共同的标准,大家都来遵守, 这就是 网络协议;
一会再来介绍怎么在系统方面怎么理解协议。
我们有了协议还应该考虑哪些问题:
- 怎么保证你的数据可以准确的发送给下一个设备??
- 如何定位目标主机?
- 数据丢失了怎么办?
- 将计算机的数据传给另一台计算是目的吗?答案不是的,目的是要将收到的数据进行处理,如何处理??
通过上面的问题,我们发现我么你要解决的问题很多,这样就导致我们网络需要按照层状结构去解决我们的问题。
- 数据链路层
- 网络层
- 传输层
- 应用层
每一层都需要有自己的协议。接下来我将通过一张图来带大家去理解协议分层:
为什么要分层: 我们的操作系统就是层状的,我们的继承多态本质也是层状的,层状结构的好处,就是层与层之间联系性不大,维护成本低,耦合度低,那我们协议分层的原因是我们有许多问题,问题本身就是层状,一层解决一个问题,方便设计也方便解决
上图理解: 我们进行打电话交流时,我们说汉语,对方也说,对于我和对方这个人来说,汉语就是我们之间的协议,但是我们说话是要通过电话机去实现和对方进行交流的,而电话机听不懂汉语啊,所以需要转换成电话能识别的数据,但是两台电话机直接想要获取对方的数据,也必须指定协议,然后再把收到的数据转换成汉语,在逻辑这一层,我们认为是人和人在进行交流,电话机和电话机进行交流,但真实情况是我们人和电话在沟通,电话在与电话沟通,电话再与人沟通。但是对于每一层,我们都是收到了对方可以识别的数据,一会再具体介绍。
那协议具体是什么呢??
大家应该都买过快递,大家买快递时候会发现,我们收到快递之后不仅收到我们所买的物品,还有对应的快递单,这个单子上有许多信息,标识这个快递是要给你的,这个单子上管理这许多数据,再本身的物品上,你还会收到多一点的物品,而这个快递号就是双方的约定,也叫协议 ,管理数据怎么做??先描述在组织,用结构体来定义协议,里面有方法,两台主机对应的协议的定义都是相同的代码,基于结构体快速建立通信,两台主机实现相同结构体,一台发送一个方法,另一台立马就认识了。电话机无论怎么变化,转换到上一层都是一样的,协议的本质就是软件
从技术上不分层也是可以的,但是就做不到高内聚低耦合了,维护成本高。
1.3网络和系统之间的联系
我们上面说了那么多协议要分层,那我们看看协议的分层吧
- OSI七层模型:
OSI(Open System Interconnection,开放系统互连) 七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范;
把网络从逻辑上分为了7层. 每一层都有相关、相对应的物理设备,比如路由器,交换机;
OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输;
它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整. 通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯;
但是, 它既复杂又不实用; 所以我们按照TCP/IP四层模型来讲解:
TCP/IP四层模型:
TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇.
TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求.
- 物理层: 负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层.
- 数据链路层: 负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太网、令牌环网, 无线LAN等标准. 交换机(Switch)工作在数据链路层.
- 网络层: 负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层.
- 传输层: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机.
- 应用层: 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等. 我们的网络编程主要就是针对应用层
我们的ISO其实再当初设计的时候考虑的是非常的周到的,但是再最终实现的时候发现会话层和表示层再内核里面实现不了,所以少了两层,物理层是硬件方面的,就是网卡,而其余的下三层都是写进内核中的,但是会话层和表示层不是没有了,而是写进了应用层了,只不过不是再内核当中实现的,再应用层面实现的,所以我们后面讲解的都是TCP/IP模型,物理层没什么好讲的,我们只讲解四层。这四层里面最重要的两个部分就是网络层和传输层,再网络层是要的协议通常是IP协议,而传输层通常使用的是TCP协议,所以以这两个协议的名字命名这个模型。
协议本身就是软件,上面我们说的是数据链路层,网络层,传输层是写进内核里面是最好的,而应用层是每个应用要完成的事情,需要开发对应的软件公司去考虑,但是他们实现的软件也必须和它最接近的一层,也就是传输层可以实现数据转换。那网络的层状结构再我们内核里面到底是怎么体现了呢?
大家还记得这幅图吗??
对于网卡之间怎么通信的,这是硬件需要关心的,网卡只需要把数据传给对方就好,此时对方的网卡收到的数据我们用户不知道,需要一层一层往上进行解包,分析,相当于快递到这个地方就重新天单子,覆盖上面的单子,快递员,需要一层层的撕开单子,看到最终的快递内容。进行去派送。
网络通信的本质就是贯穿协议栈的过程
1.4网络传输的基本流程图
上面我们说了很多概念,那我们网络具体怎么通过协议,使得同层之间可以无差别交流的呢,我们来看示意图:
以太网的由来
通过上图的分析,因为我们每一层的协议不止一种,所以我们需要进行分用,但我们发送数据的时候,每一层都要进行添加报头,达到网卡这一层,整体当成数据通过网线啊,无线技术,传到对方的网卡上,再一步步的将刚才封装的报头去掉。
报头就是协议,报文=报头+数据(有效载荷),网络通信的本质就是封装和解包的过程
封装:
分用:
扩展理解:
- 几乎任何层的协议都要提供一种能力,将报头和有效载荷分离的能力
- 几乎任何层的协议都要再报头种提供决定将自己的有效载荷交付给上层哪一个协议的能力(分用)
这样面对封装和解包,才不会困惑,这是大部分协议的共性。
1.5 以太网的通信原理(MAC地址)
我们上面说过以太网就是一个局域网,而局域网内的网络都是可以直接进行通信的,我们来画一个以太网的示意图。
我们一共有8台主机,通过一根总线连接着,以太网通信:每台主机在局域网上,都要有自己唯一的一个标识,这个标识就是MAC地址,MAC地址用来识别数据链路层中相连的节点;
长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些网卡支持用户配置mac地址).
在局域网中,我们的主机之间可能用总线连接,也可能用无线连接,我们演示的是总线连接,小故事: 在一个班级里面,我们老师突然让小明把作业拿出来检查,此时小明站起来把作业交给老师了,在这个过程,我们老师相当于一个主机,小明相当于一个主机,他们建立了通信,但是此过程中,班上是所有人都听到老师这句话,说明老师说的这句话所有人都收到了,但是他们听到消息之后,识别不是叫自己,就忽略老师说出来的消息,只有小明识别成功才会站起来,上面的小故事,就是说明了一个局域网内多态计算机进行通信时的特点。
- 在一个局域网内,发送的信息是不安全的,但我们目标主机不匹配的时候,网卡收到消息就会直接丢包,上层也就获取不到消息,但你数据不加密通过专业手段从网卡层面就可以获取你的消息,当你加密了,别人就算获取了也看不懂。所以就有了网络安全。
- 在一个局域网中,难免会发生数据的碰撞,因为只有一根总线,所以我们局域网内部就会有数据碰撞避免算法,反正其他主机在通信时,去破坏听他们直接的通信,这个读者自己去搜搜怎么做到的,想要破坏一个局域网,就向局域网中发送许多垃圾信息。大家会议一下,大学军训在操场玩手机的时候就会很卡,人少的时候就不卡,原因是主机数量变多了,数据碰撞概率加大了。
- 网卡工作模式一般分成两种:正常模式&混杂模式,正常模式遇到不属于自己的数据包,就会丢弃,但是混杂模式不会丢弃,所以一会抓包软件就是使用这样的方式。
- 局域网尽量小点,这样网络才不会太差。
交换机:我们的交换机可以划分碰撞域
但我们H1向H6发数据时,我们交换机发现都在左侧,数据就不会往右侧传输了,减少碰撞,也相当于划分碰撞域了,所以大的局域网可以使用这样的办法。
总结:
- 任何时刻只有一台主机向局域网发送信息
- 任何主机都可以向局域网中发送消息。
- 通过前两点,我们发现局域网时所有主机的共享资源(临界资源),每台主机进行互斥访问局域网,不是通过加锁的方式去实现互斥的,而是保证一台主机在发的时候,其他主机不往里面发送数据
- 每台主机的背后就是进程,其实也就是进程间在进行通信,这个后面再讲解端口号的时候再说。
1.6路由器(IP地址的讲解)
上面说过MAC地址,是全球唯一的,它只要保证再局域网内唯一性就可以,而IP地址要保证全网唯一,这个怎么理解呢??一会画图介绍,先来将一个小故事:
假设你在辽宁,想自行车去云南玩,你需要先经过河北再到山西,然后去陕西,往四川走,最后到云南,上面的路线,不变的目的地,再变的是你下一站在哪,当前站在哪,我们把一个省当成一个局域网
- 地址1:上一站哪来,下一站哪去(MAC地址,随着局域网的变化源MAC地址和目的mac地址会发生改变)
- 地址2:从哪来到哪里去(IP地址,它的源和目的都会不发生改变,指导我们进行路径选择)
跨网段传输数据:
- 路由器是两个局域网连接的桥梁
- 我们要上网必须连接路由器,原因是你上网的软件的服务端和你不在一个局域网,连接无线网或者流量就相当于连接了路由器。
- 我们上面三层,在收发的过程看到的报文都是一样的,所以说IP协议屏蔽了在底层网络的差异化,靠的就是工作在IP层的路由器,IP实现了全球主机的软件虚拟层,一切皆是IP报文。和当初的struct file类似。底层可以有差异,但是上三层可以写成一样的。也体现了网络层状的优越性。
- 由第三点可以,同一个局域网的底层必须要一样的,但是两个不同的局域网底层可以不一样,通过令牌环驱动程序,完成跨网段底层的封装。所以手机和电脑都可以访问同一个软件,他们之间也可以相互通信,手机和电脑底层就是不同的,但是还是可以通信的,就是因为IP协议的存在。
IP VS MAC
IP地址:尤其是目的IP,一般不会改变,协助我们进行路由选择。
MAc地址:出局域网后,源和目的都要丢弃,让路由器重新封装(看图)
这也是上面说的MAC地址保证局域网内唯一性就行,IP要保证全网唯一性的原因。
网络通信的基本脉络图:
IP的定义:
IP协议有两个版本, IPv4和IPv6. 我们整个的课程, 凡是提到IP协议, 没有特殊说明的, 默认都是指IPv4
IP地址是在IP协议中, 用来标识网络中不同主机的地址;
对于IPv4来说, IP地址是一个4字节, 32位的整数;
我们通常也使用 “点分十进制” 的字符串表示IP地址, 例如 192.168.0.1 ; 用点分割的每一个数字表示一个字节, 范围是 0 - 255;
二、总结
上面总结了对于网络的概念,让我们大致知道网络是怎么去实现让世界上所有计算机可以实现互相通信,等我们具体学习到某个协议的时候的,博主在细细的跟大家进行讲解,我们下篇直接上代码,让大家感受一样。