简介
计算机网络是个非常复杂的系统,互联网上每天都有大量的数据在传输,这么多的数据是怎么从一个终端传输到另一个终端的呢?下面介绍一个网络通信的五层模型TCP/IP模型。
TCP/IP是一个五层的网络通信模型,从上到下分别是应用层、传输层、网络层、数据链路层、物理层。在这个模型中,每一个上层对下层来说都是数据,每一个下层对上层来说都是服务。由于不同层有着不同的要求,每一层都有自己的协议来规定数据如何封装、解封装和传输。下层协议通过SAP(Service Access Point,服务访问点)为上层协议提供服务。在发送端,数据从上层到下层逐层封装,在接收端,数据再从下层到上层逐层拆解。
1.物理层
一台计算机要与另一台计算机通信,首先要将两台计算机连接起来。在物理层,我们使用光纤、电缆、双绞线等介质将两台计算机进行连接,然后进行通信。物理层中数据以比特流的形式传输,计算机通过高低电频来发送0,1电信号。
2.数据链路层
而物理层只是在物理上将两台计算机连接起来,并且在计算机之间传输0,1的电信号。只是这样的一串01数据计算机是读不懂的,因此,我们需要制定一套规则来进行0,1的传送。例如多少个电信号为一组啊,每一组信号应该如何标识才能让计算机读懂啊等等。
数据链路层将一组电信号组装成帧,每个帧由帧头和数据组成。帧头中存放了一些用来说明的数据,比如说数据是谁发送的,要发送到哪去。这里用于区分不同计算机的标志是mac地址,每个计算机的网卡都有唯一的mac地址。计算机之间的数据传送就是通过mac地址来唯一寻找、传送的。
3、网络层
那么问题来了,计算机 A 是如何知道计算机 B 的 MAC 地址的呢?这时就出现了ARP协议。计算机A想要向计算机B发送数据,首先,计算机A会向网络中广播询问计算机B的mac地址,其他计算机收到询问信息后会直接丢弃,计算机B收到询问消息后会回复自己的mac地址。这时,虽然计算机A已经知道了计算机B的mac地址,但是还是不能发送数据。
我们所处的巨大的互联网是由无数个子网组成的,计算机 A 不知道知道计算机 B 是分布在哪边路线上。我们如何区分哪些 MAC 地址是属于同一个子网的呢?为了解决这个问题,于是有了 IP 协议。每一台想要联网的计算机都会有一个IP地址。这个IP地址被分为两部分,前面一部分代表网络部分,后面一部分代表主机部分。并且网络部分和主机部分所占用的二进制位数是不固定的。假如两台计算机的网络部分是一模一样的,我们就说这两台计算机是处于同一个子网中。有了A、B两台计算机的IP地址,我们就可以判断出它们是否处于同一个子网之中了。在发送数据的时候,网络层将运输层的数据报文封装成包进行传送,报文的头部填写发送方的IP地址和接受放的IP地址。假如他们处于同一个子网之中,计算机A要给计算机B发送数据时。我们可以通过ARP协议来得到计算机B的MAC地址;假如两台计算机的IP不是处于同一个子网之中,我们就会把数据包发送给网关,然后让网关让我们进行转发传送。因此,网络层的功能是建立主机到主机的通信。
4、传输层
通过物理层、数据链路层、网络层的共同努力,成功将数据从计算机A传送到了计算机B。这时又有了新的问题,计算机里有各种各样的应用程序,怎么确定数据是送给哪个应用程序的?这个时候,就需要用到端口。我们在从计算机A传数据给计算机B的时候,还得指定一个端口,以供特定的应用程序来接受处理。传输层的功能就是建立端口到端口的通信,通过TCP、UDP或SCTP端口号为上层应用提供服务,不同的端口对应不同的应用或服务。传输层最常见的两大协议是 TCP 协议和 UDP 协议,其中TCP是面向连接的,可靠的数据传输服务,数据不会出现丢失的情况。UDP是面向无连接,但是数据传输可能会有丢包的情况出现。
5、应用层
应用层是体系结构中最高层,应用层协议定义的是应用进程间通信和交互的规则。虽然我们收到了传输层传来的数据,可是这些传过来的数据五花八门,有html格式的,有mp4格式的,各种各样。因此我们需要指定这些数据的格式规则,收到后才好解读渲染。
总结
数据在网络上发送时逐层封装,接收时再逐层解封,一步一步完善信息传递最后实现了数据从一个终端到另一个终端,在我们的视角只是很简单的一个动作,实际上在网络上经过了一层一层复杂的工作。