目录
一、背景知识
1.IP地址
2.端口号:一台主机上可能有多个程序,同时使用网络,而且端口号是用来区分一台主机上不同的应用程序的,所以一台主机上会有多个端口
3.认识协议
协议就是双方约定的规则,我们都按照这个规则去做事情,那么双方都能知道对方做的工作是什么意思。就像我们都是用普通话交流,那么使用普通话说话就是我们规定的协议,我们每个人使用普通话进行交流,对方都是可以理解我们的意思的。
在网络通信中,协议是非常重要的。
就像有多个主机设备,这多个主机设备都能认同并遵守同一套协议 的时候,他们之间的交流才能互相理解 各自的意思,此时通信才是有意义的,如果都不是一套协议,你说你的我理解我的,就发生了理解上的分歧。此时有再多的交流有什么意义呢?
二、进行网络通信的五元组
进行网络通信有五个组成部分:源 IP、源 端口、目的 IP、目的 端口、协议类型
- 源 IP区分我们此时发出的请求是那个主机
- 源 端口 区分此时是主机上那个应用程序发出的请求
- 目的 IP 是发送的目的地的主机地址
- 目的 端口 是到目的地之后是哪个应用程序来接收
- 协议类型 是这次通信按照什么样的规则来发送到消息
三、协议分层
网络通信非常复杂,此时如果我们设计一个协议,就可以直接满足网络通信的各个方面,那么这个协议一定会非常的庞大,此时有一个非常庞大的网络协议也要伴随着每次通信,那么每次通信的消耗也不低了。
- 这时候就有了网络协议的分层
课本上有 OSI 七层网络模型 ,这个模型虽然很全面,但是和 TCP/IP 的网络模型来对比,那么 TCP/IP 网络模型,就会更简单一点,而且还没有丢失全面性。

- TCP/IP 五层(四层)网络模型
关于它的五层和四层的 说法是对于:"物理层和数据链路层"是否看成一个物理层,看成一个物理层那它就是四层的模型,如果物理层和数据链路层是分开的两个层次,那就是五层网络模型。

- 应用层:就是我们怎么去使用这个应用程序,
- 传输层:是这个应用程序需要发送的请求信息发送到的目的地
- 网络层:是这两个设备之间怎么进行通信,该怎么到达
- 数据链路层:是这两个设备之间走什么样的路到达对方的设备
- 物理层:就是这两个设备之间铺好的路
在我们以后写代码的过程中,打交道的最多的地方就是应用层和传输层还有网络层,再往下面的数据链路层还有物理层就更贴近硬件了。我们写代码的过程中免不了和操作系统打交道,会调用操作系统实现好的 API 来完成工作,而操作系统的 API 也是会调用底层的硬件来完成工作,所以我们使用操作系统提供的 API 就可以完成我们的工作了,就不需要了解更多的底层知识。
四、网络数据通信的基本流程
例如我们通过社交软件发送一条消息给对方
- 应用程序 获取到用户的输入,构造出一个应用层的数据包
这个数据包就会遵守应用层的协议 ,这个协议往往是人家 应用程序的程序员内部自己定义 的协议,我只要遵守了这个协议,那么在对方的应用程序上就能知道这条信息到底是什么信息。下面是我自己构造出的社交软件的应用层协议,也许他们设计的,每个字段的区分不是使用一个简单的 ',' 来进行分割。
- --传输层
-- 应用程序 在构造好应用层数据包 之后会调用 传输层 提供的接口(API ),把数据 交给传输层 ,传输层拿到数据之后,也会构造出一个传输层的数据包。
-- 传输层的协议 ,主要是两个:TCP、UDP
--传输层 拿到应用层这个数据包 之后会在原有的数据包上,添加上传输层是按照什么协议来进行传输的。
-- 例如使用 TCP 协议进行传输,它就会在数据包前添加一个报头,来标志当前数据包是使用TCP 协议来进行传输的。

- -- 网络层
-- 传输层构造好数据之后,会去调用网络层 的 API ,把传输层的数据包交给网络层 ,让网络层继续处理
--网络层主要的协议 :IP 协议
-- IP 协议继续队上面的数据包进行加工,添加上 IP 协议的标志。拼上 IP 报头

- -- 数据链路层
-- 在 IP 协议添加好之后,会去调用数据链路层的 API ,把 IP 数据包交给数据链路层来进行传输,就像是我们把收件人和发货人信息填写完全之后把包裹交给快递小哥这一步骤。
--在数据链路层中,核心协议是:"以太网"
-- 以太网这个协议,也会在网络层数据包的基础上进一步加工

- -- 物理层
-- 以太网会把封装好的数据包交给硬件设备(网卡)
-- 网卡会把上述的二进制数据,最终以光信号、电信号、电磁波信号 传播出去
五、接收到物理层的数据包的解析流程
- 数据到达接收方的网卡。 此时网卡会把接收到的信号(光、电、磁等)转化为二进制的数据
把转化好的二进制的数据交给数据链路层
-- 物理层的数据信号的传递和数据链路层是直接相关的。
-- 用网线/光纤来的数据,解析成数据链路层的协议就是"以太网"
-- 用 wify 来的数据,数据链路层的协议就是 "802.11 协议" - 数据链路层会按照以太网进行解析
--把报头和报尾取出来,剩下的载荷往上传递给网络层
-- 在以太网的报头中就会有专门的属性,描述网络层使用哪个协议

- 网络层拿到这个数据包之后,按照 IP 协议的格式来解析,再把载荷交给传输层
-- IP 报头中也会有专门的属性,描述传输层使用哪个协议

- 传输层拿到数据之后,也会按照 TCP 协议来解析,去除TCP报头,取出载荷,交给应用层
-- 传输层报头中,通过目的端口号,可以告知我们数据是交给哪个应用程序的

- 社交软件,解析应用层数据拿到关键信息,展示到界面上,给出提示
