前言:本篇将简单介绍一下网络通信相关的概念
一,网络通信的本质
网络通信的本质是通过网络传输数据
如果拿生活中的寄快递的例子来类比,发送数据好似寄快递,接受数据就好似收快递。网络通信描述了数据如何在网络上传输。
数据发送的主动和被动,决定的谁是客户端,谁是服务端
主动发送请求的是客户端,接收处理请求的是服务端
二,通信的三要素
正如生活中寄快递需要遵循一定的规则,填写寄件地址,电话号码等等,通信也是如此。网络通信需要遵循三要素,分别是IP地址,端口号以及协议。
(一)IP地址
IP地址标识着一台主机在互联网中所处的位置
IP又可以分为两大类
1.IPv4
IPv4 (Internet Protocol version 4) 是互联网协议的第四个版本,也是目前全球使用最广泛的协议。
-
地址格式: 采用 32 位(bit)二进制地址,通常用"点分十进制"表示(例如:
192.168.1.1)。 -
地址空间: 理论上拥有 2^32 个地址,约 43 亿个。
-
局限性: 随着智能手机、物联网设备的普及,43 亿个地址早已分配殆尽。目前主要通过 NAT (网络地址转换) 技术,让多个设备共用一个公网 IP 来缓解枯竭问题。
2.IPv6
IPv6 (Internet Protocol version 6) 被设计用来彻底解决 IPv4 地址枯竭的问题,被称为"下一代互联网协议"。
-
地址格式: 采用 128 位二进制地址,通常用"冒号十六进制"表示(例如:
2001:0db8:85a3:0000:0000:8a2e:0370:7334)。 -
地址空间: 拥有 2^128 个地址。这个数字大到可以为地球上的每一粒沙子分配一个独立的 IP 地址。
-
优势:
-
无需 NAT: 每个设备都可以拥有唯一的全球公网 IP。
-
更安全: 在设计之初就原生支持 IPsec 加密。
-
更高效: 简化了数据包首部结构,提高了路由转发效率
-
(二)端口号
如果把IP地址类比于生活中的地址,那么端口号就好比门牌号。有了它数据才能知道要运输到哪一个应用程序。常见的端口号有mysql的3306(默认端口号,可以修改)以及web的80端口
可能有人对端口和IP的功能无法区分,以下为简单介绍。
IP地址描述的是一台主机在互联网中所处的位置,但是端口号决定了数据要发送给电脑上的哪一个应用程序。假如你通过QQ给朋友发送信息,由于端口号存在,你不可能把信息发送到对方的微信程序,音乐程序上。
可以说IP地址和端口号共同作用,好似寄快递时的寄件,收件地址,寄件人和收件人。确保了数据在网络上的正确传输
(三)协议
1.什么是协议
通俗来讲,协议可以视为一种约定。一套双方都需要遵守的规则。
2.协议的作用
数据在网络是二进制bit流的形式传输,本质不变,但是解析方式却由协议来决定。
协议就是一套约定bit流代表什么含义的规则
为什么还要有这规则?直接读取bit流不可以吗?
设想一种情况,我写了一个java程序,发送给对方,但是另一个人确尝试来使用C来解析,那自然会读取失败,(即使两者的代码都是由英文字母编写)在打电话的时候,我讲中文,你说日语,这样也无法做到顺利沟通。
在数据的传输中,需要经过多层协议,应用层->网络层->传输层->数据链路层->物理层,每一层都对应的一套协议。只有遵循协议,数据才能被识别,顺利传输
三,协议分层
(一)为什么要协议分层?
协议分层的目的是为了解耦合
协议分层,使得数据传输的流程之间互不干扰。使用一个整体的协议来约定整个传输流程过于复杂且难以维护。假如出了一点bug你不能知道是(物理层)网线断了还是(应用层)代码逻辑写错了。
(二)OSI七层模型
协议的种类很多,按照协议的功能可以划分为(开放系统互联)OSI七层模型

1. 物理层 (Physical Layer)
这是模型的最底层,处理物理介质上的比特流(0和1)。电信号的电压数值,依据波的频率对其做一个区域划分,不同的区域分别代表着0和1,这样就可以通过有线/无线设备来传输二进制bit流。
-
功能:透明地传送比特流。
-
物理设备:网线、中继器、集线器、光纤。
2. 数据链路层 (Data Link Layer)
这一层负责在相邻节点 之间建立物理连接。它将比特组合成"帧"(Frame),并通过 MAC 地址来寻址。
-
功能:差错控制、流量控制、成帧。
-
代表协议:以太网(Ethernet)、Wi-Fi (802.11)、PPP。
-
物理设备:网桥、二层交换机。
3. 网络层 (Network Layer)
网络层决定了数据从发送端到接收端的路径选择 (路由)。它处理的是"数据包"(Packet),使用 IP 地址进行逻辑寻址。
-
功能:路由选择、拥塞控制、网际互连。
-
代表协议:IP、ICMP、ARP、IGMP。
-
物理设备:路由器、三层交换机。
4. 传输层 (Transport Layer)
传输层是第一个端到端(主机到主机)的层次,负责确保数据完整、准确地到达目标。它处理的是"段"(Segment)。
-
功能:提供可靠或不可靠的传输、端到端的错误恢复和流量控制。
-
代表协议 :TCP (可靠、面向连接)、UDP(不可靠、无连接)。
5. 会话层 (Session Layer)
这一层负责建立、管理和终止应用程序之间的会话。它就像是通话中的"挂断"和"重拨"机制。
-
功能:建立同步点,确保通信中断后可以从断点继续。
-
代表协议:RPC、SQL、NFS。
6. 表示层 (Presentation Layer)
表示层处理数据的格式化、加密和压缩。它确保一个系统的应用层发出的信息能被另一个系统的应用层识别。
-
功能:数据转换(如 EBCDIC 转 ASCII)、数据加密和解密、压缩和解压。
-
代表格式:JPEG、ASCII、GIF、DES。
7. 应用层 (Application Layer)
这是直接面向用户的最高层,为应用程序提供网络服务接口。
-
功能:直接为用户的应用进程提供服务。
-
代表协议:HTTP、FTP、SMTP、DNS、Telnet。
(三)TCP/IP 五层模型
五层模型相对于OSI七层模型的最大特点是把上三层(会话层,表示层,应用层)合并为一个应用层。五层模型也是被广泛应用的模型

四,封装与分用
(一)封装
是指数据从应用层向下逐渐添加报头的过程。好比给快递包装的过程,也可以认为是一个在数据传递的过程中,数据不断变大的过程
要注意封装的过程中,不能跨层调用,比如应用层不能去调用网络层,需要先经过运输层这个中介来对数据封装处理。封装的过程是下层为上层提供服务,上层调用下层提供的服务。网络层到一下协议层未提供服务给应用层,所以不能直接调用,这一点有点类似于操作系统对API的封装
当数据从应用层发出,每一层都会给它加上一个"信封"(首部/Header),让数据承载更多的控制信息。这个过程就像俄罗斯套娃,一层套一层。
第一步:应用层(Application Layer)
-
动作: 浏览器生成 HTTP 请求报文。
-
数据状态: 原始数据(Payload)。
-
关键信息:
GET / HTTP/1.1等内容。
第二步:传输层(Transport Layer)
-
动作: 操作系统收到数据,根据应用层指定的协议(TCP),在数据前面加上 TCP 首部。
-
数据变身: 此时数据被称为 "段" (Segment)。
-
关键信息:
-
源端口(比如 54321):标识发送数据的浏览器进程。
-
目的端口(通常 80):标识服务器上的 Web 服务进程。
-
第三步:网络层(Network Layer)
-
动作: IP 协议接手 TCP 段,在前面加上 IP 首部。
-
数据变身: 此时数据被称为 "数据报" (Datagram/Packet)。
-
关键信息:
-
源 IP 地址: 用户 A 的地址。
-
目的 IP 地址: 服务器 B 的地址。
-
协议号: 标记里面包的是 TCP 数据(告诉接收方一会怎么拆)。
-
第四步:数据链路层(Data Link Layer)
-
动作: 网卡驱动程序在 IP 数据报的前面加上 以太网帧头 ,在后面加上 帧尾(FCS,用于校验数据是否损坏)。
-
数据变身: 此时数据被称为 "帧" (Frame)。
-
关键信息:
-
源 MAC 地址: 自己网卡的物理地址。
-
目的 MAC 地址: 下一跳设备(通常是路由器或网关)的 MAC 地址。
-
第五步:物理层(Physical Layer)
- 动作: 将"帧"转换成光电信号(010101...),通过网线或无线电波发送出去。
以下是一个简化的不同协议层对传输数据的封装过程:

(二)分用
数据分用是对上述封装过程的逆向,当数据传输到服务器时,服务器需要对层层包装的数据来拆除报头,解析数据等操作,这一些列过程也就是分用,可以理解为一个拆快递的步骤
当数据到达服务器 B 后,是一个逆向过程。但分用不仅仅是"拆",更重要的是根据标识,决定把数据交给上一层的谁。
第一步:物理层 -> 数据链路层
-
动作: 网卡还原电信号为数据。
-
分用依据: 检查以太网帧头中的类型字段(Type)。如果是
0x0800,说明里面装的是 IPv4 数据,于是把数据剥去帧头帧尾,交给网络层处理。
第二步:网络层 -> 传输层
-
动作: IP 协议解析 IP 首部。
-
分用依据: 检查 IP 首部中的 "协议号" (Protocol) 字段。
-
如果是
6,说明是 TCP,交给 TCP 协议处理。 -
如果是
17,说明是 UDP,交给 UDP 协议处理。 -
(这里就是"分用"的关键:IP层通过协议号区分上层协议)。
-
-
结果: 剥去 IP 首部,露出 TCP 段。
第三步:传输层 -> 应用层
-
动作: TCP 协议解析 TCP 首部,进行确认应答、排序等操作。
-
分用依据: 检查 TCP 首部中的 "目的端口号"。
- 发现端口是
80,操作系统查找哪个进程正在监听 80 端口(通常是 Tomcat/Nginx/Apache)。
- 发现端口是
-
结果: 剥去 TCP 首部,将原始数据放入该进程的接收缓冲区。
第四步:应用层
- 动作: Web 服务器程序从缓冲区读取数据,解析出
GET /index.html,开始处理业务逻辑。
在这一些列的封装和分用的过程中,也要注意上下层的传输逻辑
1.在封装的过程中,上层调用下层的服务,给数据头累积添加包装,数据体增大
2.分用是对数据包装的拆解,在拆解的过程中,通过拿到外层头部的信息标识。这个标识决定的数据之后要给哪一层的协议处理
以上就是对网络原理中的一些基本概念的简单介绍,如有纰漏还请指出