引言
计算机网络这里有很多协议,很多硬件,相关算法,相关模型,总之,理论与抽象很多;
所以,从数据这个角度出发,分析整个传输过程,然后来发现每次划分,每个硬件,每个算法存在的意义;
写下这些的目的是想用一条线把所有的核心点串起来,其余那些更多的是在为这个框架服务,以不同形式来实现;
应用层
用户使用各种应用程序,产生一些需要传输的数据;
产生数据后,打算向目标发送,但是中间隔着万千机器,也不知道对方用的是什么程序接收;
所幸,程序不一样,但是依照的协议和端口还是一样的;
然后,就把双方的IP、端口和数据组装成一个新的数据,递交给了传输层;
传输层
传输层接收到应用层数据之后,打算要向目标的应用进程发送生成的这个新数据;
但是数据在之后的传输过程可能会出现问题,所以在这一层要保证数据传输的可靠;
在这里把应用层数据重新进行分块拆分,并打上了一些头部标签来保证其可靠,这里有两种方式用来重新组装应用层数据;
TCP方式
UDP方式
网络层
网络层接收到传输层数据之后,打算要向目标发送生成的这个新数据;
但是后面负责传输数据的各个网络类型、路由器、还有协议都不一样,所以这一层要保证数据能够传输过去;
首先本机网络层硬件先加一个头部标签,然后传递给临近的硬件设备;
之后的网络层的各个硬件(网桥、路由器、网关)对其它硬件传输过来的数据,去除他们打上头部标签,然后打上自己的头部标签,再传递给下一个硬件;
这里简单罗列几种传输过程中的数据;
本机网络层处理后
本机发现和路由器连接使用的是LLC
路由器发现下一个路由器使用的X25
数据链路层
数据链路层接收到网络层数据之后,也根据网络层告诉的路由选择知道下一个要传递给谁,现在打算要向后面的硬件设备发送生成的这个新数据;
但是传输过程中可能会有乱序、丢失等现象,所以这一层要保证数据的可靠传输;
在这一层,网络层传递的数据已经变成了01串,数据链路层就是要把这堆01串分批次发送给下一个硬件,同时在首尾加上一些头部标签来保证数据可靠性,另外每次发送数据量的单位叫帧;
当然,不同协议或不同硬件的帧格式是不同的,下面是几种帧格式数据;
HDLC帧格式 —— FAC-I-FCS-F
PPP帧格式 —— FAC-PI-FCS-F
物理层
物理层接收到数据链路层数据之后,就开始真正的传输数据了,现在的数据就是纯粹的01字符串;
但是用于传输数据的硬件是无法传输0和1,但是他们可以传输其它的信号来代替0和1,然后接受到信号的硬件再把那些信号转化为0和1;
下面是几种根据不同硬件对0和1的编码方式:
- 单极性不归零码:0-半幅电平以下;1-半幅电平以上;
- 双极性不归零码:0-负电流;1-正电流;
- 单极性归零码:0-无电流;1-正电流;
- 双极性归零码:0-负脉冲;1-正脉冲;
小结
其实数据真实的流转就是在一台电脑生成数据后,转化为01串,转化为物理信号,由一台机器传给另一台机器,最后传递到目标电脑;
数据在本机电脑就经历了 应用层-传输层-网络层-数据链路层-物理层 的数据改造,然后经由物理设备传输至附近的路由器;
路由器将电信号(或光信号)转化为01串,再向上改造为 物理层-数据链路层-网络层 的数据,然后找到下一个物理设备,向下改造为 网络层-数据链路层-物理层 的数据,然后传递具体的物理信号;
最后到达目标主机,物理信号转化为01串,再向上把数据改造为 物理层-数据链路层-网络层-传输层-应用层 的数据,找到具体程序和端口,转化为用户可以理解的展示形式;
通过数据流这个角度来看,可以更好的理解计算机网络中那些抽象出来的概念,因为计算机网络的核心目的就是要传输数据;
那么,跟随着数据的流动,就能知道每一层都在干什么,也知道那些每一层的具体体现在哪里,有哪些设备,用了哪些协议,实现了哪些功能