Linux:初始网络(下)

或许你有一个疑问,“发请求、收响应”,却不清楚数据在网线里到底是怎么从一台主机走到另一台主机的。这篇博客在上一篇博客基础上,将最基础的局域网通信原理出发,拆解数据封装与解包的核心逻辑,再延伸到跨网段的网络传输,帮你建立起网络传输的完整宏观认知,所以大家要认真阅读啦~~

一、同局域网通信:以太网内的主机如何直接对话

局域网是我们最常接触的网络场景,比如家里的路由器连接的电脑、手机,公司内网的办公设备,都属于同一个局域网。我们先从最核心的问题切入,理解局域网通信的底层逻辑

1. 核心问题:同一局域网的两台主机,能直接通信吗?

答案是:完全可以!局域网内的主机通信,本质是基于以太网协议、通过 MAC 地址完成的二层直连通信,原理就像我们在同一个教室里上课:老师喊出同学的名字,全班同学都能听到这个声音,但只有名字对应的同学会做出回应,其他同学会自动忽略这个信息

2. 局域网通信的唯一身份标识:MAC 地址

在以太网的局域网里,每一台主机的唯一性,靠的就是 MAC 地址来保证。

  • 核心定义:MAC 地址用来识别数据链路层中相连的节点,是网卡的 “物理身份证”
  • 格式规范:长度为 48 个比特位,也就是 6 个字节,通常用 16 进制数字加冒号的形式表示,例如08:00:27:03:fb:19
  • 唯一性:MAC 地址在网卡出厂时就已经确定,无法修改,全球唯一(虚拟机的 MAC 地址并非真实物理地址,可能存在冲突;部分网卡也支持用户自定义配置 MAC 地址)

查看方式:在 Windows 系统中,可通过ipconfig /all命令查看网卡对应的 MAC 地址,linux中也可以通过ifconfig来查看

3. 以太网局域网的核心通信规则

想要理解局域网通信,必须先搞清楚以太网的底层规则:

  1. 串行通信规则:以太网中,任何时刻只允许一台机器向网络中发送数据;如果多台机器同时发送,会发生数据干扰,这种情况我们称之为数据碰撞
  2. 碰撞域与碰撞规避:在没有交换机的场景下,一个以太网就是一个碰撞域;所有发送数据的主机,都必须遵循碰撞检测和碰撞避免的规则,保障数据传输的有序性
  3. 接收判定规则:局域网通信过程中,主机对收到的报文,会通过目标 MAC 地址判定是否是发给自己的:只有目标 MAC 地址和自己的 MAC 地址匹配,才会接收并处理这个报文,否则直接丢弃

二、网络传输的核心:数据的封装与解包

不管是局域网通信,还是跨网段的广域网通信,都离不开一个最核心的动作:数据的封装与解包。这是整个网络协议栈工作的核心,也是理解所有网络协议的基础

1. 先明确两个核心概念

网络中传输的所有数据,都可以拆分为两部分:

  • 报头:对应协议层定义的结构体字段,里面包含了协议的核心规则,比如报头长度、有效载荷长度、上层协议类型等
  • 有效载荷:上层协议传递下来的、需要被传输的核心数据。一句话总结:报文 = 报头 + 有效载荷

2. 各层数据包的专属称谓

在 TCP/IP 四层协议栈中,不同层级对数据包有不同的命名,对应不同的协议处理阶段:

  • 传输层:数据包叫做段(segment)
  • 网络层:数据包叫做数据报(datagram)
  • 数据链路层:数据包叫做帧(frame)

3. 什么是封装(Encapsulation)?

应用层的数据通过协议栈发到网络上时,每层协议都会给上层传来的数据,加上一个自己协议的报头,这个自上而下层层加报头的过程,就叫做封装。举个例子:应用层要发送一段数据,会先交给传输层,传输层加上 TCP/UDP 报头,再交给网络层,网络层加上 IP 报头,再交给数据链路层,数据链路层加上以太网帧头和帧尾,最终封装成一个完整的以太网帧,发送到物理传输介质上

4. 什么是解包与分用?

数据封装成帧后,通过物理介质到达目的主机,目的主机的协议栈会执行完全相反的操作:自底向上,每层协议剥掉对应的报头,再根据报头里的 “上层协议字段”,把剩下的有效载荷,交给对应的上层协议处理,这个过程就是解包与分用。比如:数据链路层剥掉以太网帧头,根据帧头里的协议类型,把载荷交给网络层的 IP 协议;IP 协议剥掉 IP 报头,根据报头里的协议号,把载荷交给传输层的 TCP/UDP 协议;传输层再剥掉对应的报头,把最终的应用数据交给上层应用

5. 学习所有网络协议的核心认知

从封装与解包的逻辑出发,我们可以建立一个通用的协议学习思路:以后学习任何网络协议,都要先搞懂两个核心问题:

  1. 这个协议,是如何完成解包的?只有明确了解包逻辑,才能真正理解封包的设计。
  2. 这个协议,是如何把自己的有效载荷,准确交付给上层协议的?

搞懂这两个问题,就搞懂了这个协议 80% 的核心逻辑

三、同网段主机通信的完整流程

结合上面的局域网通信原理、封装解包逻辑,我们可以完整串一遍,同一个局域网内,主机 A 给主机 B 发送一段数据的完整流程:

  1. 应用层:主机 A 的应用程序生成要发送的数据,交给传输层
  2. 传输层:给数据加上传输层报头,封装成数据段,交给网络层
  3. 网络层:给数据段加上 IP 报头(包含源 IP、目的 IP),封装成 IP 数据报,交给数据链路层
  4. 数据链路层:给 IP 数据报加上以太网帧头(包含源 MAC 地址、目的 MAC 地址)和帧尾,封装成以太网帧,通过网卡发送到局域网中
  5. 局域网传输:以太网帧在局域网中传播,所有主机都能收到这个帧
  6. 接收判定:局域网内的主机检查帧头的目的 MAC 地址,只有主机 B 发现 MAC 地址和自己匹配,才会接收这个帧,其他主机直接丢弃
  7. 主机 B 解包:主机 B 自底向上,依次剥掉以太网帧头、IP 报头、传输层报头,最终把应用数据交给对应的应用程序,完成一次同网段的数据传输

四、跨网络传输:跨网段的数据包如何走遍全网?

同网段的通信靠 MAC 地址直连,那我们访问外网、跨城市甚至跨国家的网络请求,是怎么完成的?这就需要理解跨网段的传输流程,以及 IP 地址的核心作用。

1. 跨网段通信的核心标识:IP 地址

IP 地址是 IP 协议中,用来标识网络中不同主机的地址,是跨网段路由寻址的核心依据。

  • 版本区分:IP 协议有 IPv4 和 IPv6 两个版本,我们日常接触的绝大多数场景,都是 IPv4
  • 格式规范:IPv4 地址是一个 4 字节、32 位的整数,我们通常用点分十进制的字符串表示,比如192.168.0.1,用点分割的每一个数字代表一个字节,范围是 0-255
  • 核心意义:IP 地址标识了主机在整个 IP 网络中的位置,是数据包能从源主机走到目标主机的核心依据

2. 为什么跨网段传输,必须经过路由器?

数据从一台主机到另一个网段的主机,传输过程中必须经过一个或多个路由器。路由器的核心作用,就是连接不同的网段,维护路由表,完成数据包的寻址和转发,是不同网络之间的 “中转站”。就像我们要从北京去上海,需要沿着高速路,经过一个个高速出口和枢纽,路由器就是网络世界里的 “高速枢纽”。

3. 跨网段传输的核心规则

跨网段传输和同网段传输,最大的区别,就在于 IP 地址和 MAC 地址的变化逻辑,这也是网络传输最核心的知识点:

  • IP 地址全程不变:在整个传输过程中,IP 报头里的源 IP 地址和目的 IP 地址,全程保持不变(不考虑 NAT 等特殊场景),它代表了数据包最终的 “长远目标”
  • MAC 地址逐跳变化:以太网帧头里的源 MAC 地址和目的 MAC 地址,每经过一个路由器、一个网段,都会被重新封装、发生变化,它代表了数据包 “下一跳要发给谁”

简单来说:目的 IP 是路径选择的重要依据,MAC 地址是局域网转发的重要依据

4. 跨网段传输的完整流程

我们以主机 A(192.168.1.10)给另一个网段的主机 C(220.181.38.251)发数据为例,拆解完整的传输流程:

  1. 主机 A 封装与寻址:主机 A 通过 IP 地址判断,目标主机和自己不在同一个网段,会把数据包先发给自己的网关(路由器);封装数据包时,IP 报头填源 IP(主机 A)和目的 IP(主机 C),以太网帧头填源 MAC(主机 A)和目的 MAC(网关路由器的 MAC 地址)
  2. 网关路由器接收与转发:路由器收到以太网帧,解包到网络层,查看目的 IP 地址,通过路由表计算出下一跳的地址;然后重新封装以太网帧,源 MAC 改成路由器出接口的 MAC,目的 MAC 改成下一跳设备的 MAC 地址,转发给下一跳
  3. 逐跳转发:数据包在网络中,经过一个又一个路由器,每一跳都会重新解包、查路由、重新封装帧头,更换 MAC 地址,但 IP 报头始终不变
  4. 到达目标网段:数据包最终到达主机 C 所在网段的边界路由器,路由器把帧的目的 MAC 地址,改成主机 C 的 MAC 地址,在局域网内发送
  5. 主机 C 接收与解包:主机 C 收到以太网帧,匹配到自己的 MAC 地址,完成接收,然后自底向上逐层解包,最终把数据交给对应的应用程序,完成跨网段传输

五、IP 地址与 MAC 地址的核心区别

维度IP 地址MAC 地址
所属层级网络层数据链路层
核心作用标识主机在整个 IP 网络中的位置,用于跨网段路由寻址标识局域网内的网卡节点,用于同网段的直连通信
传输中的变化全程保持不变每经过一个网段 / 路由器,都会发生变化
地址特性可根据网络环境动态配置、变更网卡出厂固定,全局唯一
寻址范围可用于全球广域网的寻址仅在当前局域网内有效

整个网络传输的核心逻辑,其实可以用三句话概括:

  1. 数据传输的核心动作,是自上而下封装,自下而上解包分用
  2. 同网段的局域网通信,靠 MAC 地址完成直连转发
  3. 跨网段的广域网通信,靠 IP 地址完成路由寻址,靠 MAC 地址完成每一跳的局域网转发

而整个 IP 网络层存在的最大意义,就是提供了一层网络虚拟层,让全球各式各样的底层物理网络,都统一成了 IP 网络,屏蔽了底层网络的差异,这也是互联网能实现全球互联互通的核心基础,到这里我们也终于正式进入了网络,准备开始后面的学习啦~~

Read more

安装 启动 使用 Neo4j的超详细教程

安装 启动 使用 Neo4j的超详细教程

最近在做一个基于知识图谱的智能生成项目。需要用到Neo4j图数据库。写这篇文章记录一下Neo4j的安装及其使用。 一.Neo4j的安装 1.首先安装JDK,配环境变量。(参照网上教程,很多) Neo4j是基于Java的图形数据库,运行Neo4j需要启动JVM进程,因此必须安装JAVA SE的JDK。从Oracle官方网站下载 Java SE JDK。我使用的版本是JDK1.8 2.官网上安装neo4j。 官方网址:https://neo4j.com/deployment-center/  在官网上下载对应版本。Neo4j应用程序有如下主要的目录结构: bin目录:用于存储Neo4j的可执行程序; conf目录:用于控制Neo4j启动的配置文件; data目录:用于存储核心数据库文件; plugins目录:用于存储Neo4j的插件; 3.配置环境变量 创建主目录环境变量NEO4J_HOME,并把主目录设置为变量值。复制具体的neo4j文件地址作为变量值。 配置文档存储在conf目录下,Neo4j通过配置文件neo4j.conf控制服务器的工作。默认情况下,不需

企业微信群机器人Webhook配置全攻略:从创建到发送消息的完整流程

企业微信群机器人Webhook配置全攻略:从创建到发送消息的完整流程 在数字化办公日益普及的今天,企业微信作为国内领先的企业级通讯工具,其群机器人功能为团队协作带来了极大的便利。本文将手把手教你如何从零开始配置企业微信群机器人Webhook,实现自动化消息推送,提升团队沟通效率。 1. 准备工作与环境配置 在开始创建机器人之前,需要确保满足以下基本条件: * 企业微信账号:拥有有效的企业微信管理员或成员账号 * 群聊条件:至少包含3名成员的群聊(这是创建机器人的最低人数要求) * 网络环境:能够正常访问企业微信服务器 提示:如果是企业管理员,建议先在"企业微信管理后台"确认机器人功能是否已对企业开放。某些企业可能出于安全考虑会限制此功能。 2. 创建群机器人 2.1 添加机器人到群聊 1. 打开企业微信客户端,进入目标群聊 2. 点击右上角的群菜单按钮(通常显示为"..."或"⋮") 3. 选择"添加群机器人"选项 4.

Flowise物联网融合:与智能家居设备联动的应用设想

Flowise物联网融合:与智能家居设备联动的应用设想 1. Flowise:让AI工作流变得像搭积木一样简单 Flowise 是一个真正把“AI平民化”落地的工具。它不像传统开发那样需要写几十行 LangChain 代码、配置向量库、调试提示词模板,而是把所有这些能力打包成一个个可拖拽的节点——就像小时候玩乐高,你不需要懂塑料怎么合成,只要知道哪块该拼在哪,就能搭出一座城堡。 它诞生于2023年,短短一年就收获了45.6k GitHub Stars,MIT协议开源,意味着你可以放心把它用在公司内部系统里,甚至嵌入到客户交付的产品中,完全不用担心授权问题。最打动人的不是它的技术多炫酷,而是它真的“不挑人”:产品经理能搭出知识库问答机器人,运营同学能配出自动抓取竞品文案的Agent,连刚学Python两周的实习生,也能在5分钟内跑通一个本地大模型的RAG流程。 它的核心逻辑很朴素:把LangChain里那些抽象概念——比如LLM调用、文档切分、向量检索、工具调用——变成画布上看得见、摸得着的方块。你拖一个“Ollama LLM”节点,再拖一个“Chroma Vector

OpenClaw配置Bot接入飞书机器人+Kimi2.5

OpenClaw配置Bot接入飞书机器人+Kimi2.5

上一篇文章写了Ubuntu_24.04下安装OpenClaw的过程,这篇文档记录一下接入飞书机器+Kimi2.5。 准备工作 飞书 创建飞书机器人 访问飞书开放平台:https://open.feishu.cn/app,点击创建应用: 填写应用名称和描述后就直接创建: 复制App ID 和 App Secret 创建成功后,在“凭证与基础信息”中找到 App ID 和 App Secret,把这2个信息复制记录下来,后面需要配置到openclaw中 配置权限 点击【权限管理】→【开通权限】 或使用【批量导入/导出权限】,选择导入,输入以下内容,如下图 点击【下一步,确认新增权限】即可开通所需要的权限。 配置事件与回调 说明:这一步的配置需要先讲AppId和AppSecret配置到openclaw成功之后再设置订阅方式,