一、简单介绍
要了解这个大问题,得先知道一些前缀问题。
什么是协议分层?
协议分层是将计算机网络通信过程分解为多个不同层次、各自独立又相互协作的结构化方法。
举个例子,比如打电话的过程。

每层之间有自己的协议,比如语言层可以是汉语、英语,设备层则有自己独有的语言,语言层调用设备的接口。但实际网络的传输过程比这个复杂得多。
为什么要分层?
这就像在写代码时,一方实现了一个接口,另一方使用这个接口一样
对于提供方,利用封装的特性,隐藏实现的细节,只提供接口就行。
对于使用方,只需要调用接口即可。
**降低复杂性:**把网络传输的这个庞大的问题转变成一层一层的小问题,每层只需专注于自己的功能
标准化:每层的接口和功能明确定义,不同厂商可以独立开发符合标准的软硬件,实现互联互通
灵活性:修改或替换某一层的实现(如将有线换成无线),不影响上下层
易于学习和维护:清晰的层次结构使得理解、开发和排错都更加容易
二、OSI七层模型
该模型分为以下七层:
|---|-------|-------------------------------------|
| | 分层名称 | 功能 |
| 7 | 应用层 | 针对特定应用的协议 |
| 6 | 表示层 | 设备固有数据格式和网络标准数据格式的转换 |
| 5 | 会话层 | 通信管理,负责建立和断开通信连接(数据流动的逻辑分路) |
| 4 | 传输层 | 管理两个节点的数据传输,负责可靠传输(确保数据被可靠的传输到目标地址) |
| 3 | 网络层 | 地址管理和路由选择 |
| 2 | 数据链路层 | 互联设备之间传送和识别数据帧 |
| 1 | 物理层 | 以 "0" "1"代表电压的高低、灯光的闪灭。界定连接器和网络的规则 |
由于OSI模型的局限性,实际网络采用的是TCP/IP五层(或四层)模型来实现
三、TCP/IP五层(四层)模型
TCP/IP是⼀组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。 TCP/IP通讯协议采⽤了5层的层级结构,每⼀层都呼叫它的下⼀层所提供的⽹络来完成⾃⼰的需求
这五层从下到上分别是:物理层、数据链路层、网络层、传输层、应用层。
物理层:负责光/电信号的传递方式。其实就是以太网通用的网线、电缆、光纤之类。包括现在使用的WIFI使用的电磁波实际也属于物理层。
数据链路层:负责设备之间数据帧的传送和识别。例如网卡的驱动、帧同步、冲突检测、数据差错校验等工作。交换机工作就在数据链路层。
网络层:负责地址管理和路由选择。在IP协议中,通过IP地址识别一台主机,并通过路由表 的方式规划出两台主机之间的数据传输的线路(路由)。路由器就工作在该层。
传输层:负责两台主机之间的数据传输。如传输控制协议(TCP),能够确保数据可靠的从源主机发 送到目标主机。
应用层:负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远 程访问协议(Telnet)等。写代码主要就是针对应用层。

四、过程简述
以发消息为例
发送
1.应用程序获取到用户输入,构造一个应用层的数据包,然后以某个形式(例如结构体)把这个数据包封装起来,这个结构是开发者自定义的,这个结构体可能包含一些格式内容,包括发送方的id、时间、消息的内容等。发送数据的时候会把这个数据包序列化,从而使这个数据能够进行发送。

这只是简单的例子,数据包的格式依据不同的规定可能复杂得多,但基本都是字符串的拼接,这里为了演示过程,就不详细设计了
2.应用程序开始调用下层提供的接口,即传输层的接口(api),传输层从而开始加工数据包。传输层的协议主要是 **TCP 、UDP,**这里以前者为例。

一个TCP数据断含TCP报头和TCP载荷,这里的载荷实际上就是应用层数据包。
这一部分内容后面会单独写一篇博客。
3.传输层再调用网络层的api,再次加工数据包,网络层最主要的协议使IP协议,即拼上IP报头。

IP数据包,由IP报头和载荷组成,载荷就是传输层数据包,这里说明一个点,每一层都会记录上一层用的是哪个协议(传输层记录的是数据交付对象,也就是把数据交给哪个应用程序)
4.网络层调用数据链路层api,把IP数据包交给数据链路层,数据链路层的核心协议就是以太网。

以太网数据帧包括帧头、载荷、帧尾
5.以太网把最终的数据交给硬件设备,也就是网卡,网卡将最终的数据(二进制数据),以电磁波等形式发送出去。至此,数据才发送出去,此前流程都在本地设备上进行。
接收
接收过程是从下到上依次进行解析,但实际上中间的传输过程也十分复杂,这里就仅展示接收到的过程。其实就是分用。
1.网卡把光电信号还原成二进制,然后将数据交给数据链路层。
2.数据链路层按照以太网协议,去掉帧头帧尾。将载荷上传到网络层

3.网络层按照IP协议,去掉IP头,将载荷数据交给传输层。

4.传输层按照TCP协议,去掉TCP头部,将载荷上传到应用层。

传输层通过目的端口号,把数据交给对应的应用程序。
5.应用层将数据进行解析,从而在应用程序上进行展示,不同的应用程序,使用不同的应用层协议。
以上的内容主要是为了展示过程,其中很多细节会在后面进行详解。