目录
- 计算机网络背景
- 协议
- OSI七层模型
- TCP/IP五层(四层)模型
- 网络传输基本流程
- 以太网通信原理
- IP地址理解
计算机网络背景
到目前为止,我们之前所有的编程都是单机的,不是多机互联。以前计算机被发明的时候是为了军事用途,计算导弹轨迹等等。在实验室里电脑有很多电脑,一个任务的完成肯定是多人协作完成的,所以每个人处理的数据必然是不同的,而且这些电脑是相互独立的,多台电脑联系起来十分的麻烦,所以网络的产生是必然的事,早期他们用的事软盘进行互联,即a拿到了数据并处理后,将这些数据拷贝到软盘,在将这个软盘交给b,b处理完后又将软盘交给c,这样的效率太慢了
后来,小松他们三人又添加了一台格外的计算机,专门用来服务的,并将他们所有的电脑用线连接起来,小松处理完数据了交给服务器,然后只用给小松说一声该你了,小松就可以直接操作。此时就已经有了一个网络计算机互联的雏形了。后来随着人类的发展,慢慢的向上面这种小型局域网就越来越多了。后面,什么贝尔实验室,清华大学实验室等也有可能需要展开协作,所以有了这个需求,就逐渐产生了一个区域的子网和另一个区域的子网能够互联接触。
在一个局域网内一台主机将数据交给交换机,交换机交给另一台主机,如果该数据的目的不再该局域网内,交换机则会交给路由器,让路由器去找。
后来,长距离传输则会产生一个问题,传输的信号是会衰减下来的,所以数据需要经过各种路由器,这样又会产生一个问题,如果正确的导向数据发送到哪个位置,又如何知道这个数据是从哪里来的。所以长距离传输会有各种各样的问题出现。
局域网和广域网的概念没有标准化,所以看情况去理解,比如你家的wifi可以看作局域网,比如你们村的所有网络也是由一个路由器而来的,所以也能看作一个局域网,我们整个中国也可以看作一个局域网,因为访问外网也需要经过路由器
我国的计算机技术还是可以的,有很多自主研发的科技。虽然上世纪我国用算盘打出了原子弹,确实上一代人非常的励志。两弹一星,还有氢弹,卫星呢?这些东西拿算盘打出来吗?这些再用算盘打的话难度太大了。美国人大概在八十年代末把阿帕网的网络技术公开,然后我国九二年就如公网了。不要觉得九二年怎么样,当时马云等你所知道的大部分人都没听过互联网,说明我国看待网络技术比大部分人要早,九二年之后我国就入公网了,当时是拉了一根网线,这网的宽带并不大,主要用户发送邮件,用于学术交流。到了九六年的时候,马云才去了国外在美国见到的互联网,像什么马化腾,网易的老板丁磊,还有搜狐老板张朝阳,现在不是在将张朝阳物理课,还有李彦宏,他们都算是早期听过互联网这个概念的,基本都是九六年到九九年之间,然后陆陆续续开始做互联网公司了。当时国家入网后,有人也开始搞网吧,最早九十年代在咖啡厅里的网吧,一个小时大概是10块、20块,现在这网费放到现在对于普通人来说都算偏贵的,何况九十年代的十块。这就是我们国家入网后,有了很多关于互联网的故事。所以其实我们国家在互联网发展这一块,其实并不比美国人晚,计算机技术虽然比美国人晚了十三年,但网络技术我们一点都没晚,更重要的是我们的网络技术,在互联网应用方面,我国做的是最好的,我们有支付宝,嘀嘀打车,美团,虽然这些互联网公司也被大家吐槽,市面上有人骂,但是不得不承认在互联网应用领域我国一点都不差,并且我国的网络技术上,还有部分内容是遥遥领先的,比如5G,比如无线通信技术,还有ipv6技术。
互联网发展这么快,你总得拉网线、建光纤吧,建服务器、得建机房吧,还要建各种信号塔,这玩意儿在国家层面就必须要有地去建,拉网线搞个路由器交换机,怎样架设个网络,这些都是谁的工作啊?我想告诉大家每个国家都有他自己的叫做电信运营商。像我们中国典型的就是中国联通、中国电信、中国移动,现在包括华为也算是了,现在的华为业务是否广泛了。美国人有高通,欧洲有诺基亚。互联网发展一定是由国家支持的,如果自己这能够赚到钱,这一定有私人企业去弄,他们会花钱去盖基站,但是因为这是亏钱的事,所以最开始的时候运营商不愿意做些事,都是国家政策上的扶持才搞起来的
所以互联网能够快速的发展,是因为大部分稍微靠前点的国家呢。都会有自己的电信业务提供商,都会给自己的内部去建基站,拉网线,做光纤去做这个事情。所以非洲没有,非洲的互联网就是不行吧。中东地区的互联网也不行吧,为什么呢?就是因为他们当地的运营商。可能是因为特殊原因,最后没有办法把这些基站什么东西建起来,所以他们不可能有互联网公司。
那么后面呢关于网络的部分的故事呢还是非常多的。那么后面呢我给大家再慢慢展开。
协议
一台计算机内部本质也是一个小型网络,计算机体系结构中有网络,网络中也有体系结构。长距离传输必然会有很多成本,为了降低成本,所以有了协议的产生,什么叫做协议?协议就是一种约定,下面我来给大家讲个故事,来帮助大家理解什么是协议
在以前,电话费对贫困的家庭来说也算是一笔不小的消费,所以你和你爸约定,电话响一声:代表你平安,电话响两声:表示我没钱了,电话响三声:表示有事情需要和你讲话。
这声响,每一声都有不同的含义,而这个含义不用解释,双方早就已经有了共识。目的:尽可能减少通信成本。
长距离通信会产生以下问题,所以以下每一层都有该层的协议:
1.如何定位主机? -------ip协议
2.你怎么保证数据能准确的到达下一个设备?--------数据链路层
3.如果设备故障数据丢失了怎么办? ------------tcp协议
4.传送数据不是目的,能应用数据才是目的,你怎么处理发来的数据?---------http、https、ftp、smtp协议…
这些问题,不仅发送方有,接收方也同样有
如何具体理解协议是个什么东西呢?在我们收快递的时候,不仅有你要收的东西还会有一个东西—快递单。
在快递员路由快递的时候,和你收快递的时候你都能根据这个快递单判断出这个快递是不是自己的。所以一个物品要被发出去,必须有快递单被包裹起来。这个快递单也叫做协议报头,
那具体用C语言是怎么实现的呢?是用结构体实现的,发送的信息属性填进去,再将你要发的内容给拷贝进来就成为了协议报文
网络是分层的,为什么是分层的?因为能分层,耦合度低,维护成本就会低,每层之间不会相互影响,我坏了不会影响你的操作。如何理解分层呢?给大家举个例子:
我和你打电话的时候,我和你是通过中国话(协议)来交流的,在通讯设备层在用光电信号进行交流,如果是两个外国人用英语(另一种协议)来交流,在通讯设备层并不需要改变该层的协议
OSI七层模型
具体是如何分层的呢?
因为是协议,需要人制定,所以就有组织站出来定制网络分层,组织叫做OSI,在定制的时候需要考虑诸多问题,而OSI就制定的很好,把网络分为了7层,每一层都有相关、相对应的物理设备,比如路由器、交换机;OSI七层模型是一种框架性的设计方法,其主要功能就是帮助不同类型的主机实现数据传输。它最大的优点是将服务、接口和协议这三个概念明确地区分开来,通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯。
但是呢,有几层工程实践的时候发现写不到操作系统里面,有两层在操作系统中设计不合适,将三层表示为一层在应用层比较合适,所以就有了TCP/IP五层模型,但我们只讲四层,物理层主要是硬件知识不讲,所以也可以叫TCP/IP四层模型
TCP/IP五层(四层)模型
以下介绍只需大致知道是干什么的即可
物理层: 负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器(发热众多因素会导致传输效率降低,该功能就是放大光电信号)工作在物理层.
数据链路层: 负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太网、令牌环网, 无线LAN等标准. 交换机(Switch)工作在数据链路层.
网络层: 负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层
传输层: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机.(如果发送失败了怎么办?这就这一层解决的)
应用层: 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等. 我们的网络编程主要就是针对应用层(接收数据,转化为图像和声音被用户看到)
网络协议栈和我们之前学的操作系统有什么关系?
和操作系统的分层结构一样,用户不能够直接访问底层,必须从上到下的贯穿访问
所以网络通信的本质就是贯穿协议栈的过程
网络传输基本流程
两台主机通过TCP/IP协议通讯的过程如下
两态主机底层通过以太网进行通信。
为什么叫做以太网?这名字是怎么由来的?声音传播是要介质的,科学家假说出光的传播也要介质,宇宙中一定存在我们看不到的介质,取名为以太,所以科学家们信心满满去证明,却证明出宇宙大部分是真空的,没有这种介质,为了纪念人类这次实验,在计算机中实现了将光电信号从这台主机传到另一台主机,刚好网络的初衷也是传播,就将这种网络称为了以太网
我们之前提到了网络协议栈结构中,每一层都有协议,数据包是如何封装和分用的呢?
如何理解我们以发送微信消息为例:
在网络协议栈中,有两种不同的认知,我们可以认为同层协议在直接通信,也可以理解成为向下交付。这就像在生活中我们使用微信一样,认为直接在和对方沟通,实际上通信的过程是不断的解包和分用
基于以上过程,我们能够推断出:
1.几乎任何层的协议,都要提供一种能力,将报头和有效载荷分离的能力
2.几乎任何层的协议,都要在报头中提供,决定将自己的有效载荷交付给上层的哪一个协议能力–分用
这是大部分协议的共性,为了我们学习具体协议的时候,都会有这两个问题,这样我们面对封装和解包,才不会困惑
以太网通信原理
以太网通信:每台主机上都要有唯一一个自己的标识符
给大家举个例子帮助大家理解
老师叫张三,是只有张三自己听到了这句话吗?所有人都会听到(收到),会在大脑里判断老师是不是叫的自己,不是自己就不用执行老师的指令,会抛弃掉这条信息。张三发现是自己,就会和老师搭上话(建立了连接)以太网同一原理:
Mac地址:每一张网卡都有自己的地址,Mac地址(全球唯一)能在局域网中标明自己的唯一性
每个主机收到后,在数据链路层进行判断,发现不是发给自己的就会丢弃,而我们用户只在乎用户层,所以我们用户感觉不到。
站在系统的角度看待,这网络资源也是共享资源,如果有两台机器同时向以太网中发数据则会发送数据碰撞,会发送的碰撞的区域也被叫做碰撞域。那需要我们互斥访问,以太网互斥访问的方式并不是加锁,而是有一套自己的避免碰撞的算法,如果我发送消息发现了会碰撞,则会重新发送
那这样会产生一个问题:主机越多,碰撞的概率越大,这也就解释了一个现象,你家里的wifi有很多人连接后会很卡,在学校的运动会大型会议的时候,数据网络也很卡。
如何解决这个问题呢?交换机能划分碰撞域
交换机发现消息目的地不在左边的区域,则会将消息发送到右边区域。这样一定程度上缓解了数据碰撞问题。
IP地址理解
上面讲的是在一个局域网内的通信原理。现在有多个局域网,如果我们想将信息传到另一个局域网,那些设备是怎么知道信息要传到另一个局域网呢?
他们通过IP地址来判断,IP地址能标识在全网中的唯一性。那IP地址和Mac地址有什么区别呢?
给大家举个例子:假如说你要从吉林长春到四川成都旅游
其中你第一步可以先从长春到北京,第二步从北京到西安,第三步从西安到成都。
源IP地址->目的IP地址就是从长春到成都,源Mac地址->目的Mac地址就是第一、二、三步。
IP地址:为我们未来每一个阶段,提供方向目标,方便进行路径选择
Mac地址:上一站从哪里来,下一站到哪里去。该类地址,一直在变化
一个信息具体是如何从一个局域网传到另一个局域网的呢?
局域网的通信方式有:以太网,令牌环网(加锁的思想防止的数据碰撞),无线LAN(手机)
我们也能从上图看到,尽管IP层以下局域网的通信方式不同,IP层协议屏蔽了底层网络的差异化,靠的就是工作在IP层的路由器。IP协议实现了全球主机的软件虚拟层,一切皆是IP报文,这也就是为什么网络能很快席卷全球,能够让手机、电脑等通用起来
网络通信的基本脉络图
在传输层协议报文我们把它叫做:数据段或数据报。在网络层协议报文我们把它叫做:数据段。在链路层协议报文叫做:数据帧
ifconfig指令可查看网卡情况