网络互连的目的是进行网络通信(网络数据传输),网络主机中不同进程间,基于网络传输数据,我们如何知道从哪里传输到哪里呢,这个就需要 IP 地址来标识。
概念
IP 地址用来标识网络主机,简单来说 IP 地址是用来定位主机的网络地址。
就像我们在网上买东西,我们需要填写收货地址,这里的收货地址就相当于 IP 地址。
格式
IP 地址是一个32位的二进制数,通常被分割为4个8位的二进制数,这个就是我们说的点分十进制:这四个数的范围是 0 - 255 。
举例:01111111.00000000.00000000.00000001 ———— 127.0.0.1
特殊 IP
127.0.0.1 的 IP 地址就表示本机的 IP 地址。
概念
在网络通信中,IP 地址用来表示主机的地址,而这个端口号用来定位主机中的进程。
我们在网购过后,快递发货了,发货到一个地址(IP 地址),但是这个地址中有很多人,还要确定具体收货人。这个时候就需要通过打电话(端口号)来确认具体收货人是谁。
格式
端口号是 0 – 65535 范围之间的数字,在网络通信中,进程需要绑定一个端口号,来接收和发送网络中的数据。
注意事项
两个不同的进程,不能绑定同一个端口号,但是同一个进程可以绑定多个端口号。
一个进程启动后系统会自动分配端口号,如果进行网络编程时,可能需要我们手动定义端口号(后面讲到网络编程时,详细讲解)。
有了 IP 地址和端口号,我们知道了网络中唯一的一个进程的地址,但是还有一个问题就是网络中两个进程之间的数据传输是怎样传输的。
网络通信中的数据传输是通过协议来规定双方的格式。
概念:
协议是网络协议的简称,网络协议是网络通信经过的所有网络设备都必须共同遵从的一组约定,规则。比如怎样建立连接,怎样相互识别,只有遵守这个约定,计算机之间才能互相通信交流。
比如:
插板,插板中的插座要符合我们常用电器的规格。
电脑连接外部设备的接口,这种接口一般也是统一的,每种接口有不同的功能。
手机的充电接口,市面上现在有两种冲电接口,一种是华为的充电接口,一种是安卓的充电接口。
像这种规定的接口,就是协议。
协议最终体现为在网络上传输数据包的格式。
作用:
协议的作用是:规范统一,方便管理,节约成本。(就像秦统一六国之后,统一度量衡,统一语言)
计算机之间的传输媒介是光信号和电信号。通过 “频率” 和 “强弱” 来表示 0 和 1 这样的信息。要想传递各种不同的信息,就需要约定好双方的数据格式。
计算机生产厂商有很多;计算机操作系统,也有很多;计算机网络硬件设备,还是有很多;
如何让这些不同厂商之间生产的计算机能够相互顺畅的通信?
就需要有人站出来,约定一个共同的标准,大家都来遵守,这就是 网络协议
网络通信中我们主要使用两个网络协议,一个是 TCP,另一个是 UDP。
在TCP/IP协议中,用五元组来标识一个网络通信:
网络通信这个过程,其实很复杂,里面有很多的细节,如果只是通过一个协议,来约定所有的细节,那么这个协议就会非常的庞大和复杂。更好的做法就是把一个复杂的协议,拆成多个小的协议,更简单的协议,每个协议负责一部分的工作。
举例:就比如我们打电话,打电话被分成了两层,一层是电话的工作原理,一层是通话的语言。我们通话不需要了解电话的工作原理,我们只需要关注我们通话的语言,可以是汉语,可以是英语(解耦合,换成其他协议),等等。制造电话的人也不需要知道各种各样的语言,只需要关注怎么制造电话就可以了(封装的好处)。
物理层,网络通信中的硬件设备。
网线、网卡,针对硬件设备的约定,就是物理层协议所负责的范畴,需要保证所有的主机和网络设备之间,能够相互匹配。
数据链路层,负责完成相邻的两个设备之间的通信,一根网线相连的两个设备。
网络层,负责主机到主机之间的通信。
网络中的任意两台主机之间的通信,网络层就是负责在这两点之间,规划出一条合适的路线。实际的网络环境结构非常的复杂,两个点之间的线路,不只是一条,这个就需要我们规划出最合适的一条路线。
传输层,关注结果(数据是否传输到了),不关注过程(数据是经过那一条路到的)。
应用层,和应用程序密切相关,你传输的这个数据,是干什么用的。
不同的应用程序就有不用的用途。
举例:
网购过程。
应用层(我们买商品的用途)
传输层(商品到没有到货)
网络层(物流公司规划商品运输的路线)
数据链路层(两个相邻运输点的运输)
物理层(运输车,公路等等)
从 物理层 到 应用层,就是从微观到宏观的过程。
物理层我们考虑的比较少,因此很多时候也可以称为TCP / IP 四层模型。
一台主机,其实就对应了物理层到应用层五层(把这五层都给实现了),一台路由器,主要是物理层到网络层(包含了物理层,数据链路层,网络层),一台交换机,主要是物理层到数据链路层(包含了物理层和数据链路层)。
网络分层中的一组重要的概念,封装和分用,不同的分层的协议之间,是如何配合的。
例如:使用 QQ 给一个同学发送信息。
应用层
根据用户输入的内容,把数据构造成一个应用层的协议报文。
上面图片是假设的一种应用层协议报文。
应用层协议调用操作系统提供的 API,把应用层的数据,交给传输层(进入操作系统内核了)。
传输层
根据刚才传过来的数据,基于当前使用的传输层协议,来构造出一个传输层的协议报文。传输层最典型的协议是 UDP、TCP,下面我们以 TCP 为例:
TCP 的数据报 = TCP 报头 + 数据载荷(Payload 也是一个完整的应用层数据)
TCP 的报头中有很多的信息,其中最重要的是 “源端口” 和 “目的端口”。
接下来就会把这个传输层的数据报,交给网络层。
网络层
拿到了完整的传输层数据报,就会再根据当前使用的网络层协议,再次进行封装。把 TCP 数据报构造成 IP 数据报,添加一个协议报头。
IP 数据报 = IP 协议报头 + 载荷(完整的 TCP / UDP 的数据报)。
IP 数据报中有很多重要的信息,其中最重要的是 “源 IP” 和 “目的 IP”。
把这个数据报传送给数据链路层。
数据链路层
在刚才的 IP 数据报的基础上,根据当前使用的数据链路层协议,构造出一个数据链路层的数据报,典型的数据链路层协议,叫做 “以太网”,就会构造出一个 “以太网数据帧”。
以太网数据帧 = 帧头 + IP 数据报 + 帧尾,其中重要的数据是,要传输两个相邻段的地址。
数据链路层,又会 把这个数据交给物理层。
物理层
这里就是把 0 1 变成高低电平,通过网线传输出去。
上面这个过程是要把数据封装好,准备从主机上发送出去。在发送到另一个主机过程中要经过一些路由器和交换机,其中的过程先不表示。
其中的分用过程就是和封装过程反过来。层层解析每层的数据报。
经过交换机
经过路由器