前端人之网络通信概述
前端人之网络通信概述
- 介绍
- 网络七层模型
- 物理层
- 链路层
- 网络层
- 传输层
- 应用层
介绍
互联网的核心技术就是一系列协议,总称“互联网协议”,对电脑如何连接和组网作出详细的规定,理解了这些协议就理解了互联网的原理。
网络七层模型
互联网完成数据传输需要经过七层模型,每一层都是为了完成一种功能,为了实现这些功能,就需要大家遵守共同的规则,这个共同的规则就叫做“协议”。下面介绍每一层的功能,主要就是介绍每一层的主要协议。
物理层
“物理层”就是把两个电脑连接起来的物理手段(用电缆、光缆、双绞线、无线电波等方式),主要规定了一些电气特性,作用是负责传输0和1的电信号。
链路层
单纯的0和1是没有任何意义的,必须规定解读方式。比如:多少个电信号为一组?每个信号位有何意义?这就是链路层的功能,确定了0和1的分组方式。
早期不同厂商对电信号的分组方式都不同,后来逐渐的一种叫以太网的协议占据了主导地位,它规定一组信号构成一个数据包,叫做“帧(Frame)”,每一帧分成两个部分,标头(Head)和数据(Data):
- Head:包含数据包的一些说明项,比如发送者、接收者、数据类型等。固定长度为18字节。
- Data:数据包的具体内容,最短为46字节,最长为1500字节。
因此,一个帧最长为1518字节,如果数据很长,就必须分割成多个帧发送。
以太网规定,进入网络的所有设备,都必须具有“网卡”接口,数据包必须从一块网卡传送到另一块网卡,网卡的地址就是数据包的发送和接收地址,这个地址就是MAC地址。每块网卡出厂时都会有一个全球独一无二的MAC地址,长度为48个二进制位,通常用12个十六进制数表示,比如:00-B0-D0-86-BB-F7
。在数据包 Head 中有了这个MAC地址,就可以定位网卡和数据包的路径了。
一块网卡如何去寻找另一块网卡的MAC地址呢?以及如何将数据准确发送到接收方呢?
以太网采用一种很原始的方:向本网络内所有计算机发送,让每台计算机自己判断是否为接收方,判断 Head 的接收方MAC地址与自身MAC地址是否相同,是就接收否就丢弃,这种方式就叫做广播。有了数据包的定义,网卡的MAC地址,广播的发送方式,链路层就可以在多台计算机之间传送数据了。
网络层
原理上,已知接收方的MAC地址其实应该就可以精准的将数据直接发送过去,广播的方式不仅效率低,而且局限在发送者和接收者都在同一个局域网内(这种设计是合理的,否则互联网上每一台计算机都会收到所有包)。因此需要找到一种方法,能够区分哪些MAC地址属于同一个子网络,如果是就采用广播方式发送,否则就采用路由方式发送。MAC地址显然做不到这一点,因为不同厂商出产的网卡他们的MAC地址只与厂商有关,与所处网络无关。
这就导致了网络层的诞生,它的作用是引进一套新的地址,,使得我们能够区分不同的计算机是否属于同一个子网络,这套地址就叫做网络地址,简称网址。于是,网络层出现以后,每台计算机有了两种地址:MAC地址和网络地址(两种地址之间没有任何联系)。
规定网络地址的协议就叫做IP协议,它所定义的地址被称为IP地址,由32个二进制位组成。IP协议的作用有两个:一是为每台计算机分配IP地址,另一个是确定哪些地址在同一个子网络中。通过IP地址就能找到对应的子网络,通过MAC地址对子网络里的计算机进行广播发送,将数据发送出去。
传输层
有了MAC地址和IP地址,就可以在互联网上的任意两台计算机建立通信。接下来的问题是,同一台主机上有很多程序都需要接收网络数据(比如同时聊天和网购),当一个数据包从互联网上发来的时候如何知道这个数据包是来自哪个程序呢?
也就是说还需要一个参数,表示这个数据包到底供那个程序(进程)使用,这个参数就叫做端口,它其实是每一个使用网卡的程序的编号,每个数据包都发到主机的特定端口,所有不同的程序就能取到自己所需要的数据,应用程序会随机选用一个端口。
因此,传输层的功能就是建立端口到端口的通信,相比之下网络层是建立主机到主机的通信。
现在,必须在数据包中加入端口信息,这就需要新的协议,最简单的实现就叫做UDP协议,也是由标头和数据两部分组成,Head 主要定义发出端口和接收端口,Data 包含具体内容。整个UDP数据包放入IP数据包的 Data 部分,IP数据包又是放在以太网数据包中,所以整个以太网数据包现在是这样了:
由于UDP协议没有办法知道对方是否接收到了数据,没办法保证数据传输的完整性和一致性,是不可靠的。因此出现了TCP协议,是一种面向连接的,可靠的基于字节流的传输层通信协议,保证了数据的可靠性。
不是说TCP协议可靠就在任何情况下都使用这种协议。还是需要看具体场景,例如:在视频直播,语言通信等其实可以采用UDP协议,因为它们不会因为数据的丢失而导致需要重新连接(TCP协议一旦数据发送失败会重新发送),顶多也就是卡顿一下,这是可以接受的。因此,UDP协议和TCP协议都有它们各自适用的场景。
应用层
由于互联网是开放架构,数据来源五花八门,必须事先规定好格式,否则无法解读。应用程序收到传输层的数据,接下来就是要对数据进行解读,规定应用程序的数据格式。
举例来说,TCP协议可以为各种应用程序传递数据,比如:Email、www、FTP等,那么就必须有不同协议规定这些应用程序的数据格式,这些应用协议就构成了应用层。
这是最高的一层,直接面向用户(主要是开发人员),它的数据就放在TCP数据包的Data部分,因此现在的以太网的数据包就变成了下面这样: