网络基础(一):协议与网络传输基本流程

一、计算机网络背景

计算机最初都是独立运行的个体。每台计算机都配备专属的CPU、内存和存储设备,能够独立完成各类计算任务。

但随着计算机数量不断增多,单一独立工作的模式逐渐无法满足使用需求,人们开始产生新的诉求:

  • 实现不同计算机之间的数据共享

  • 完成不同设备之间的信息交换

  • 支持多台计算机协同完成工作任务

基于这样的需求,计算机之间开始建立连接,计算机网络就此形成。

计算机网络的发展主要经历了三个阶段:

  • 网络互联:多台计算机建立连接,实现基础数据共享

随着网络规模持续扩张,按照覆盖范围可将网络分为两大类:

  • 局域网(LAN)

  • 广域网(WAN)

局域网

指小范围区域内的计算机网络连接,常见场景包括:

  • 家庭网络

  • 公司内部办公网络

  • 校园网络

广域网

指远距离、跨区域的计算机网络连接,常见场景包括:

  • 不同城市之间的网络互联

  • 不同国家之间的网络互通

无论是局域网还是广域网,核心本质都是实现:

不同计算机之间的数据通信

而计算机想要完成跨设备的数据通信,首先必须解决一个核心问题。

二、什么是协议?

1. 协议是一种约定

日常生活中,处处存在"协议"的身影。

以两人打电话为例,双方需要默认遵守一系列约定:电话响几声代表何种状态、谁优先开口对话、如何清晰传递信息。这些通用约定,保障了双方能够准确理解彼此的表达。

计算机通信的逻辑与生活场景完全一致。两台计算机交换数据时,发送方需要按照固定格式组织数据,接收方必须按照完全相同的格式解析数据。

这种通信双方共同遵守的统一规则,就是协议

协议的本质是一种约定。

2. 为什么计算机通信必须有协议?

网络中的计算机、设备存在诸多差异,比如不同厂商生产的硬件设备、不同版本的操作系统、不同类型的网络传输设备。

如果没有统一的通信规则,当A计算机发送一串二进制数据「101010」时,B计算机无法识别这串数据的含义、格式和用途。

这就好比两个人交流,一人说中文、一人说葡萄牙语,即便各自遵守自身的语言规则,最终也无法完成有效沟通。

因此,计算机网络必须制定全网通用的统一标准,所有联网设备共同遵守的通信规则,就是网络协议

三、重新理解协议:协议就是双方都认识的数据结构

从程序开发的角度理解协议,会更加直观易懂。

假设两个程序需要完成通信,发送方定义了专属的数据结构体:

cpp 复制代码
struct Protocol
{
    int a;
    int b;
    int c;
};

发送方赋值并传输数据:

cpp 复制代码
a = 10;
b = 20;
c = 30;

如果接收方也定义了完全一致的结构体格式,收到数据后就能精准解析出:a=10、b=20、c=30。

能够精准解析的核心原因,是通信双方拥有统一、可识别的数据格式。

因此从程序层面可以定义:协议是通信双方都认可、能够精准识别的数据结构

课件中也通过结构体案例佐证:协议就是通信双方共同认可的结构化数据类型。

四、为什么协议需要分层?

从本质上来说,网络协议也是一类软件程序。如果将所有网络通信的功能、逻辑全部整合到单一协议中,会出现诸多问题:代码臃肿复杂、功能迭代修改困难、不同业务功能高度耦合、容错性极差。

为了解决这些问题,网络协议采用了分层设计的核心思想。

举一个简单的分层案例:

语言层 ↓ 通信设备层

语言层负责信息的语义表达与内容组织,通信设备层负责数据的物理传输,两层功能相互独立、互不干扰。

如果后续升级、更换通信设备,无需修改语言层的任何规则;同理,优化语言表达规则,也不会影响设备传输功能。这就是分层设计带来的解耦优势

课件明确说明:协议本质属于软件范畴,为了实现模块化开发、降低代码耦合度,网络协议被设计为层状结构。

五、OSI七层模型

为了统一全球网络通信标准、规范设备交互逻辑,行业推出了OSI开放系统互连模型,从逻辑层面将网络通信划分为七个层级,每层各司其职、分工明确。

OSI七层模型层级从上至下依次为:

应用层 → 表示层 → 会话层 → 传输层 → 网络层 → 数据链路层 → 物理层

OSI模型的理论体系十分完善,清晰区分了服务、接口、协议三大核心概念,但整体架构过于繁琐、落地成本高,无法适配实际的互联网工程场景。

因此,当下实际运行的互联网,统一采用更轻量化、可落地的TCP/IP模型。

六、TCP/IP五层模型

TCP/IP并非单一协议,而是一套完整的协议集合,也是互联网的核心通信标准。在实际网络通信过程中,上层协议会持续调用下层协议提供的服务,逐层完成数据处理与传输。

TCP/IP五层模型层级从上至下依次为:

应用层 → 传输层 → 网络层 → 数据链路层 → 物理层

1. 物理层

核心职责:传输比特流

网线、光纤、WiFi无线电波等都属于物理层的传输介质。该层级主要决定网络的传输速度、传输距离、抗干扰能力等基础物理参数。

2. 数据链路层

核心职责:完成相邻设备之间的数据传输

主要工作内容包括:数据帧封装与传输、传输错误检测、网卡设备通信。日常使用的交换机,核心工作层级就是数据链路层。

3. 网络层

核心职责:实现不同网络之间的数据传输

核心协议为IP协议,核心功能包含地址管理、路由路径选择。路由器的核心工作层级为网络层。

4. 传输层

核心职责:完成两台主机之间的端到端数据传输

主流核心协议为TCP、UDP,负责保障主机间数据传输的可靠性、有序性。

5. 应用层

核心职责:实现应用程序之间的数据交换与交互

常见协议包含HTTP、FTP、SMTP等。网络编程的核心学习与实践重点,均集中在应用层。

七、网络传输的基本过程:数据封装与分用

了解完协议分层模型后,我们需要理清核心问题:应用程序生成的原始数据,如何通过多层协议处理,最终转化为网络可传输的数据?

以浏览器请求为例,应用层生成原始数据「GET /index.html」,这部分数据仅能被应用层识别。想要完成网络传输,还需要补充目标地址、传输路径、局域网标识等各类信息。

因此,原始数据需要经过协议栈的逐层处理,整体分为两大核心流程:

  • 发送端:数据封装

  • 接收端:数据分用

八、数据封装过程

1. 什么是封装?

应用层生成的原始数据,会逐层向下交付给下层协议处理。每经过一个协议层级,当前层都会自动添加专属的协议信息,这部分新增信息被称为报头(header)

最终传输的完整报文结构为:报文 = 报头 + 有效载荷

其中,报头是各层协议所需的控制、标识信息,有效载荷是上层传递下来的真实业务数据。

完整封装示例:

  • 应用层原始数据:hello

  • 传输层封装:TCP报头 + hello

  • 网络层封装:IP报头 + TCP报头 + hello

  • 数据链路层封装:MAC报头 + IP报头 + TCP报头 + hello

完成多层封装后,数据会以比特流的形式通过物理层介质发送出去。

作用:直观展示数据从应用层向下传输,每一层依次添加协议头部的完整过程。

2. 不同层数据的专属名称

所有层级的数据本质都是「协议头+原始数据」,但为了区分层级、方便定义,各层数据有专属命名:

  • 传输层数据:段(segment)

  • 网络层数据:数据报(datagram)

  • 数据链路层数据:帧(frame)

简言之,同一份原始数据,在不同协议层级会被赋予不同的专业名称。

九、数据分用过程

当封装完成的数据到达目标主机后,不会直接交付给应用程序,而是从底层开始,逐层向上完成解析处理,这个逆向解析的过程就是分用

完整分用流程:

物理层 → 数据链路层 → 网络层 → 传输层 → 应用层

每一层的处理逻辑统一:校验自身对应的协议报头信息、剥离当前层报头、根据报头中的标识字段,将剩余数据交付给对应的上层协议处理。

具体解析逻辑:

  • 网络层接收数据:校验IP报头,判断数据是否为本机接收

  • 传输层接收数据:校验端口信息,匹配对应的目标应用程序

逐层解析剥离完成后,应用程序最终获取到最原始的业务数据。

数据抵达目标主机后,各层协议依次剥离对应首部,通过首部中的上层协议字段,将数据精准交付给对应上层协议处理。

十、局域网通信流程

掌握协议分层、封装与分用的理论后,我们结合实际场景,拆解两台计算机的真实通信流程。首先从最简单的局域网通信场景入手。

典型局域网架构:主机A ↔ 交换机 ↔ 主机B,两台主机处于同一局域网网段。

十一、MAC地址:局域网中的身份标识

局域网内部的设备通信,核心依赖MAC地址完成身份识别与数据转发。

MAC地址也叫物理地址,属于数据链路层核心标识,是每一块网卡的唯一硬件标识,全球唯一。

示例MAC地址:00:16:3e:11:22:33

局域网通信过程中,所有主机都会通过数据帧中的目标MAC地址,判断当前接收的数据是否是发送给自己的。

课件明确:局域网通信的设备身份校验,核心依据为目标MAC地址。

十二、同一网段主机通信过程

以「主机A向同网段主机B发送数据(hello)」为例,完整通信流程如下:

第一步:应用层生成原始数据

主机A应用程序生成待传输数据:你好

第二步:协议栈逐层封装、向下交付

原始数据依次经过应用层、传输层、网络层、数据链路层,每一层完成专属报头封装,最终生成完整数据帧。

最终数据帧核心结构:目标MAC + 源MAC + IP信息 + 传输层信息 + 原始数据

封装完成后,数据帧被发送至局域网交换机。

第三步:交换机转发数据

交换机工作在数据链路层,读取数据帧中的目标MAC地址,匹配对应的设备端口,将数据帧精准转发给主机B。

第四步:主机B分层分用数据

主机B接收数据帧后,从底层向上逐层解析剥离报头:

剥离MAC头 → 剥离IP头 → 剥离TCP/UDP传输层头 → 原始数据交付应用程序

最终主机B的应用程序成功接收数据:你好

十三、为什么需要广域网?

在纯局域网场景中,仅依靠MAC地址就能完成所有设备的通信交互。但现实的网络场景中,大量设备处于异地、跨区域状态。

例如国内主机访问海外服务器,两台设备相隔数千公里,中间跨越多个独立网络,无法通过局域网规则完成通信,这就是跨网络通信场景。

典型跨网络架构:主机A ↔ 路由器 ↔ 互联网 ↔ 路由器 ↔ 服务器B

十四、IP地址:跨网络通信的地址

MAC地址仅适用于单一局域网内部的设备定位与转发,无法实现跨网络、跨网段的设备寻址。想要完成远距离网络通信,必须依靠IP地址

IP地址属于网络层核心标识,核心作用是全网范围内定位目标主机

我们常用的IPv4地址,是32位整数,日常以点分十进制格式展示,示例:192.168.0.1,每一段数值范围为0~255。

十五、跨网络通信流程

以「主机A跨网段访问服务器B」为例,核心通信逻辑如下:

主机A封装数据时,会固定填写源IP(本机IP)目标IP(服务器B IP),封装完成的数据首先发送至本机默认网关(路由器)。

路由器接收数据后,不会直接转发,而是完成一系列核心操作:

  1. 拆解网络层数据,解析目标IP地址

  2. 根据路由规则判断最优下一跳路径

  3. 重新封装网络层、数据链路层报头

  4. 向下一跳设备转发数据

数据会经过多级路由器反复解析、封装、转发,最终抵达目标服务器所在网段,完成跨网络通信。

十六、IP地址和MAC地址的区别

IP地址与MAC地址是网络通信的两大核心标识,分工明确、缺一不可,二者的核心差异是网络基础的重点内容:

IP地址

核心定位:长远最终目标

核心作用:用于全网路径选择,定位跨网段的目标主机,通信全程保持不变。

MAC地址

核心定位:当前下一跳目标

核心作用:用于单局域网内部的数据转发,每经过一次网段跳转,MAC地址都会重新刷新替换。

以北京主机访问上海服务器为例:通信全程目标IP始终为上海服务器IP,但每经过一个路由器、切换一个局域网,数据帧的源、目标MAC地址都会同步更新。

课件核心总结:

  • IP地址负责确定最终通信目标,支撑全网路径选择

  • MAC地址负责确定单跳传输目标,支撑局域网内部转发

十七、网络通信整体流程总结

我们以「主机A向主机B发送数据」为例,整合所有知识点,梳理完整的网络通信闭环流程:

发送端(数据封装)

应用程序生成原始数据 → 传输层添加传输报头 → 网络层添加IP地址信息 → 数据链路层添加MAC地址信息 → 物理层以比特流形式发送数据

网络传输中

  • 局域网场景:交换机根据MAC地址完成数据转发

  • 跨网络场景:路由器根据IP地址完成路径选择与跨网段转发

接收端(数据分用)

物理层接收比特流数据 → 数据链路层剥离MAC报头 → 网络层剥离IP报头 → 传输层剥离传输层报头 → 应用程序获取原始业务数据

十八、全文总结

计算机网络通信的核心目标,是让所有不同规格、不同系统、不同区域的计算机,通过统一规则完成数据交换。本文核心知识点梳理:

  • 协议:网络通信的统一约定,本质是双方认可的数据结构,保障设备有效交互

  • 分层设计:将复杂网络功能模块化,降低代码耦合度,简化通信逻辑

  • 数据封装:发送端逐层添加协议报头,组装成可传输的网络报文

  • 数据分用:接收端逐层剥离协议报头,解析还原原始业务数据

  • 局域网通信:依托MAC地址,通过交换机完成同网段设备数据交互

  • 跨网络通信:依托IP地址与路由器路由转发,完成跨网段、远距离通信

整体而言,互联网就是无数个局域网、广域网,依托统一的TCP/IP协议栈互联形成的巨型网络体系。

相关推荐
小张同学a.1 小时前
zabbix企业级监控平台4——分布式监控与grafana数据可视化
linux·运维·数据库·分布式·信息可视化·zabbix·grafana
Darkwanderor2 小时前
线程概念和Linux线程
linux·c语言·c++
Bobolink_2 小时前
跨境专线的带宽规划:按业务场景算,别按感觉拍
网络·带宽·跨境网络
酷可达拉斯2 小时前
自动化运维-从零开始编写ansible剧本(二)
linux·运维·服务器·centos·自动化
Darkwanderor2 小时前
Linux线程控制
linux·c语言·c++
Brilliantwxx2 小时前
【Linux】 开发|Git 版本控制与 gdb/cgdb 调试
linux·笔记·git
数据知道2 小时前
SSTI 模板注入:Jinja2 沙箱逃逸实战
网络·安全·网络安全
瀚高PG实验室3 小时前
几种因网络波动导致应用与数据库操作异常的现象
运维·网络·数据库·postgresql·瀚高数据库
风曦Kisaki3 小时前
# Kubernetes(K8s)笔记Day15:K8s网络工作原理【Pod 网络模型,CNI 网络插件,Calico 工作模式详解,BGP协议,路由反射器】
运维·网络·nginx·云原生·容器·kubernetes