如今使用过计算机的人们都接触过网络,但是网络究竟是什么,计算机又是怎样通过网络来进行互相之间通信的,这还需要我们深入了解。
目录
网络发展
初识协议
什么是协议
为什么需要协议?
网络协议初识
协议分层
为什么网络协议要分层呢?
OSI七层模型
TCP/IP五层(四层)模型
网络传输基本流程
协议报头
局域网
局域网通信过程
跨网络通信
数据包的封装和分用
数据包封装和分用的过程
封装过程
分用过程
网络中的地址管理
网络发展
最开始的时候,每一台计算机相互之间都是独立的,若是想互相通信或者共享数据,需要有人参与,通过一些二进制纸条,或者光盘,磁带之类的物品,将数据录入到上面,然后才能让另一个计算机读取上面的信息。
二进制纸条
但是有人参与的活动导致计算机通信很慢,而且远程通信成本很高,因而出现了网络。
比如这样,通过一个服务器使得多台计算机可以数据共享。
局域网LAN: 或者通过交换机和路由器,使得计算机可以远距离通信。
广域网LAN:可以将远隔千里的计算机都链接在一起:
这里的局域网和广域网实际上都差不多,广域网相当于一个更大的局域网。
初识协议
什么是协议
协议在日常生活中有许多,用一句话概括就是:协议是一种约定;
为什么需要协议?
想象一个场景,当两个人面对面说话时,可以很轻松的进行通信。
但是当两个人距离拉开的时候,就会有各种各样的问题导致难以通信。
若是相隔距离过远,再想通信就只能跑过去重新面对面才能通信,这样成本就太高了。
于是这两个人就可以互相之间约定好用其他方式来进行通信,比如打电话,写信,做暗号。
这样就约定好一个协议了。
而协议,就是为了减少通信的成本而存在的
而计算机之间是通过使用光信号或者电信号来通信的,想要使得计算机之间成功通信,就必须约定好不同的信息应该使用怎样的格式来表达,于是协议就产生了。
但是,两台主机只要约定好协议就可以成功通信了吗?
这不尽然,我们知道,计算机的生厂商有很多,计算机操作系统有很多,而厂商内部的计算机可以只用一个协议就能通信,但是厂商与厂商之间的计算机就不能成功通信了。
于是就需要有一个标准,让大家都遵守,这就是网络协议。
网络协议初识
协议分层
网络协议是分层的,那么什么是分层呢?举一个列子:
像我们打电话,我们和电话对面的人都是默认使用汉语说话,这就是一层语言层。
而电话机则是另一层,通信设备层。
为什么网络协议要分层呢?
网络协议分层的原因:
a. 软件层面的优势——低耦合
b.有些模块功能比较集中,耦合度比较高,这些模块放一层——高内聚
c.每一层都有需要解决的特定问题
而网络协议分层的原因就在其中,首先就是低耦合问题;
每一层都有自己特定的功能,最需要低耦合的就是其中应用层了。
应用层管理着针对不同应用的协议,如果没有分层,那么若是有新的应用协议出世,就要更新整个计算机,而有分层则只用针对应用层进行更新。
而分层的依据就是看哪些模块功能是否集中了,将功能集中的模块放在同一层。
其中每一层都要解决特定的问题。
特定问题
a.如何交付数据给下一台主机
b.如何选择去往下一台主机的路径
c.出现了错误应该如何纠错
d.解决应用方面的能力
OSI七层模型
当我们明白为什么网络需要进行分层后,我们就可以了解网络协议的标准模型了,其中一个就是OSI七层模型。
OSI(Open System Interconnection,开放系统互连)七层网络模型;
称为开放式系统互联参考模型, 是一个逻辑上的定义和规范;
是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输;
顾名思义,OSI七层模型将网络协议定为了七层,每一层都有对应的物理硬件,如交换机,路由器。
它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整. 通过七 个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯;
那么这七层是哪七层呢?
OSI将网络协议分为这七层,每一层都有不同的功能。
不过OSI七层模型虽然十分精细,但是它在实际的工程实践中并不常用。
接下来我们了解另外一个模型——TCP/IP五层(四层)模型
TCP/IP五层(四层)模型
TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。
TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求
物理层:负责光/电信号的传送
数据链路层:负责设备之间数据帧的传送和识别
网络层:负责地址管理和路由选择
传输层:负责两台主机之间的数据传输
应用层:负责应用程序之间的沟通
对于一台主机而言,它的操作系统内核实现了从传输层到物理层
对于路由器而言,它实现了从网络层到物理层
对于一台交换机而言,它实现了从链路层到物理层
对于一台集线器而言,它只实现了物理层
网络传输基本流程
想要了解网络传输的基本流程,先得明白一个概念——协议报头。
协议报头
每一层都有协议,而每一层协议的最终表现就是报头,每一层协议都是通过协议报头进行表达的。
就好比网购,我们不仅会收到产品,也会收到快递单等一些我们并没有购买的东西。
虽然这些快递单对我们没有用,但是对于快递公司来说,却是十分重要的,若是没有快递单,那么快递公司送快递的工作就会十分麻烦。
而报头则在网络传输中起着快递单的作用,不同的协议报头都需要对应的协议才能识别。
局域网
我们都知道,在局域网中的两台主机可以直接通信,而局域网通信是通过什么来辨别不同主机的呢?
实际上,局域网通信是通过网卡上的MAC地址来辨别不同主机的。
那么局域网内部通信过程是怎样的呢?
局域网通信过程
假设局域网内有多台主机,其中主机A要对主机B发送数据。
当主机A在局域网中发送一条信息后,实际上在局域网内部的所有主机都会收到这条信息。
但是所有主机都会根据MAC地址识别这条信息是发给哪台主机的,又是从哪里发出来的,因而只有B能成功收到这条信息。
但是B只要收到了信息就能够直接读取吗?其实并非如此。
当主机A发送数据时,计算机会从上往下根据每一层的协议给数据添加报头,然后放在以太网上。
然后通过MAC地址找到对应主机后,对应主机再一层层由下往上将报头去掉,最后获得数据。
在上图中,我们可以发现,同层协议所拥有的数据包都是相同的,于是我们可以这样理解:
同层协议在直接通信,也可以理解为向下交付。
讲完过程后,我们还要说一下协议的共性。
协议的共性
a.如何判断报头的位置和有效载荷的位置
b.如何判断自己的有效载荷要交给上层的哪一个协议
在上图中,我用几个图形来有效的表示报头和有效载荷的位置,但是实际上的报头和有效载荷的位置并没有这么明显的区别,都是需要协议自身内部来区分位置。
此外,在计算机内部每一层可能会有好几个协议,如何找到对应的协议也需要协议自身来控制。
跨网络通信
现实生活中肯定不会只有局域网通信,还有跨网络通信,其中局域网又分为以太网,令牌环网和无线LAN。
那么跨网络通信就需要解决不同局域网通信的问题。
其中路由器就是用来解决该问题的——屏蔽底层协议的差异。
实际上跨网络通信和局域网通信类似,只是在最后并不是将数据包传给对应主机,而是传给路由器。
当路由器收到数据包的时候,会根据数据包中的IP地址来选择对应主机,然后根据这个主机的局域网类型来选择对应的协议。
剩下的就由目标主机一层层解包。
数据包的封装和分用
不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报 (datagram),在链路层叫做帧(frame).
应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部,称为封装
首部信息中包含了一些类似于首部有多长, 载荷(payload)有多长, 上层协议是什么等信息.
数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部, 根据首部中的 "上层协议字段" 将数据交给对应的上层协议处理.
数据包封装和分用的过程
封装过程
我们可以看到,每一层给数据加完首部后,就会向下到下一层协议;
此外在最后的链路层会给数据包添加首部和尾部,需要注意。
分用过程
当主机接收到进入的帧后,会按上图来一层一层的解包,最终找到正确的协议。
网络中的地址管理
IP地址
IP地址是在IP协议中, 用来标识网络中不同主机的地址;
对于IPv4来说, IP地址是一个4字节, 32位的整数;
我们通常也使用 "点分十进制" 的字符串表示IP地址, 例如 192.168.0.1 ; 用点分割的每一个数字表示一个字节, 范围是 0 - 255;
MAC地址
MAC地址用来识别数据链路层中相连的节点;
长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些网卡支持用户配置mac地址).
那么这两个有什么区别呢?
在网络通信中,IP地址可以认为是一个指导大概方向的。
它告诉主机该数据源自哪里,目标又是哪里。
而MAC地址可以认为是细化了路径。
它告诉主机该数据从哪一台主机来,该去的下一台主机在哪里。
因此我们可以简单的认为,在网络的数据包中,IP地址应该是不变的,而MAC地址则是随时变化的。