文章目录
- 1. IP 地址
- 2. 端口号
- 3. 认识协议
- 4. 协议分层
- 4.1 分层的作用
- 4.2 OSI七层模型
- 4.3 TCP/IP五层(或四层)模型
- 4.4 网络数据传输的基本流程
- 4.4.1 发送方
- 4.4.2 接收方
1. IP 地址
IP地址主要用于标识网络主机、其他网络设备(如路由器)的网络地址。
简单说,IP地址用于定位主机的网络地址。
就像我们发送快递一样,需要知道对方的收货地址,快递员才能将包裹送到目的地。
IP 地址标识了网络上设备所在的位置。
2. 端口号
在网络通信中,IP地址用于标识主机网络地址,端口号可以标识主机中发送数据、接收数据的进程。
简单说:端口号用于定位主机中的进程。
类似发送快递时,不光需要指定收货地址(IP地址),还需要指定收货人(端口号)
端口号标识了一个具体的应用程序。
3. 认识协议
协议就是通信双方的进行的一种约定。
发送方约好了发送的数据是什么样的,接收方按照固定的格式来进行解析。
如果协议太复杂了,学习成本、使用成本、理解成本、维护成本都会非常高。
因此,实际采取的做法是针对这个复杂的大协议,拆分成若干个相对简单的小协议。
随着把协议分成一些小的协议(每个协议负责一部分功能),此时会发现,
某些协议之间,起到的功能和作用是类似的。就针对这些小的协议,再进行分层。
这就好比代码拆分出很多类,有些类功能差不多,就可以放到同一个包里。
4. 协议分层
对于网络协议来说,往往分成几个层次进行定义。
4.1 分层的作用
可以降低学习和维护成本,可以灵活的针对这里的某一层进行替换。
分层最大的好处,类似于面向接口编程:定义好两层间的接口规范,让双方遵循这个规范来对接。
在代码中,类似于定义好一个接口,
一方为接口的实现类(提供方,提供服务),一方为接口的使用类(使用方,使用服务)。
- 对于使用方来说,并不关心提供方是如何实现的,只需要使用接口即可
- 对于提供方来说,利用封装的特性,隐藏了实现的细节,只需要开放接口即可。
这样能更好的扩展和维护。
4.2 OSI七层模型
OSI 七层网络模型 是存在于教科书上的,实际生活中是没有的。
OSI:即Open System Interconnection,开放系统互连。
- OSI 七层网络模型是一个逻辑上的定义和规范:把网络从逻辑上分为了7层。
- OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传
输。 - 它的最大优点是将服务、接口 和 协议这三个概念明确地区分开来,概念清楚,理论也比较完整。通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯
OSI 七层模型划分为以下七层:
4.3 TCP/IP五层(或四层)模型
TCP/IP五层(或四层)模型 是实际上的情况。
TCP/IP 是 OSI 简化的实现方式。
层级越往下越接近硬件设备;越往上,就越接近用户。
网络分层这里,相当于是上层协议要调用下层协议,下层协议给上层协议提供服务。
由下到上:
物理层、网卡层(也叫数据链路层)、互联网层(也叫网络层)、传输层、应用层
接下来介绍的每一层。
1、物理层
约定了网络通信中基础的硬件设备是什么样的。
比如通信使用的网线。网口等设备,而且它们都是相同规格的。
2、数据链路层
主要负责相邻的两个结点之间具体是怎么进行传输的。
比如说一个快递在运输的过程中,从 A 到 B 是怎么运输的,汽车、火车、或是飞机?
3、网络层
主要负责路劲的规划,怎么走会比较划算。
好比在快递运输前要计算那条路劲比较节省成本,如果从 A 到 D ,可以有 A、B、C、D;
或者说还是 A 、C、 D。
而网络层的工作就是选择最划算的那条路。
4、传输层
站在商家和买家的角度,他们两个并不关心快递是怎么样运输的,而是只关心起点和终点。
这个过程就是传输成在做的工作,也就是端到端之间的传输。
5、应用层
这是属于应用程序层面的,主要是描述了传输的数据,用户要怎么样使用。
如果我要购买快递就要使用 APP 来购买,这是应用层描述的。
4.4 网络数据传输的基本流程
站在协议分层背景下来理解网络数据传输的基本流程。
下面以 QQ 这个应用程序来讲解网络数据传输的基本流程。
4.4.1 发送方
用户在输入框中输入 hello 这个字符串,qq 就会把这个字符串给构成一个应用层数据包。
1、应用层
一个假设的应用层协议的格式:发送方qq号;发送时间;接收方qq号;消息内容
所谓的 “应用层数据包” 本质上就是一个遵守了约定格式的字符串。
程序要调用操作系统的 API ,把这个应用层数据交给传输层。
2、传输层
在传输层中,就要把上述的应用层数据构造成数据包。
传输层使用到的协议,最知名的是 UDP 和 TCP 。
比如此处使用的是 UDP ,就需要构造出 UDP 数据包。(在应用层数据基础上加个 UDP 报头)
这是另外一个特定格式的字符串(具体细节后面再说,这里涉及到 源端口 和 目的端口)
此处就像是字符串拼接一样,把这个报头和后面的数据拼到一起。
所谓的报头就是一个 “标签” ,是通过标签表示出当前要把这个消息怎样进行传输。
传输层 就把这个 UDP 数据包交给 网络层。
加报头原因:
就像是寄快递一样,不能直接把东西寄过去,而是要在外面加上包装,在包装的外面再加上快递单。
不仅仅是防止物品损坏,还有快递单上可以保存一些寄件人和收件人的信息。
这是在寄快递过程中必要的内容。
3、网络层
最知名的协议是:IP 协议 ,IP 协议要基于上述数据,打包成一个 IP 数据包。
IP 报头也相当于是一个字符串,包含了另外一组信息。(最核心的信息 源 IP 和 目的IP)
网络层数据包准备好,还需要进一步交给数据链路层。
在传输过程中需要知道 源IP、源端口、目的IP、目的端口、协议类型,这是一次通信中的五元组。
举个例子,张三在开学第一天的自我介绍。
张三 是 一个安徽人,梦想是 到美利坚 留学。
这里的张三就相当于是源端口,安徽人表示从哪里来,这是源IP。
到美利坚这是目的IP,留学这是目的端口。
4、数据链路层
最知名的是协议是:以太网,基于上述数据,还要打包成一个 “以太网数据帧”。
数据继续往下传输,交给物理层。
5、物理层
把上述二进制的数据(一串0101)转换成 电信号/光信号,此时就真正的把数据给发送出去了。
上述过程中,从应用层 到 物理层 层层加码,这个过程被称为 “封装”(不是面向对象的封装)
4.4.2 接收方
接收方的工作,省略中间的转发过程,只考虑 B 的接收。
1、物理层
网卡接收到的是 光信号 和 电信号,是在物理层,把这个光电信号转换成了二进制的数据。
转化会的数据其实是一个 以太网数据帧,把这个数据交给数据链路层解析。
2、数据链路层
数据链路层需要去掉帧头帧尾,取除中间的载荷,交给上层的网络层
以太网数据帧帧头里也会记录,这个载荷是不是一个数据包。
3、网络层
IP 协议针对这里进行解析,解析出 IP 报头,取出 IP 协议的载荷,把这里得到的传输层数据包交给上层的传输层。
IP 报头里会记录载荷是 UDP 还是 TCP。
4、传输层
UDP 再进行解析,取出报头,取出载荷,再把这个载荷交给对应的应用层程序。
UDP 报头里有一个非常重要的字段,“目的端口”
目的端口是一个具体的应用程序关联在一起的,因此就可以根据这个端口来把应用程序交给应用程序了。
5、应用层
QQ应用程序,就会针对应用层协议也进行解析,显示到界面上。
上述从上到下层层解析,这个过程称为 “分用”
封装:包装快递。
分用:拆快递。
总结
整个网络协议中,协议分成了很多层。
上层协议要调用下层协议,上层协议把数据交给下层,继续封装。
下层协议要交给上层协议提供支持,下层协议解析好数据交给上层。
这里的几层协议之间是有明确的层级关系的,只能相邻的两层之间才能进行交互,不能跨层交互。
上述这些约束让通信过程变得相对简单和清晰起来。