当前位置: 首页 > article >正文

linux学习笔记 网络编程——网络分层

在Linux网络编程中网络分层是核心基础也是理解网络通信原理、排查网络问题、编写高效网络程序的关键。我们日常使用的网络如浏览网页、远程登录Linux服务器、传输文件看似是“直接通信”实则是多个层次协同工作的结果。网络分层的核心思想是“分而治之”将复杂的网络通信流程拆解为多个独立的功能层每一层专注解决一类问题层与层之间通过约定好的接口协作既降低了开发和维护的复杂度也保证了不同厂商设备、不同系统之间的兼容性。本节课重点讲解两个核心网络分层模型OSI七层参考模型理论标准和TCP/IP五层模型Linux实战中最常用明确各层的核心功能、常用协议及Linux中的对应实操为后续socket编程、协议解析打下基础。一、为什么需要网络分层在没有网络分层之前网络通信是“一锅粥”式的设计——一个程序需要处理从物理信号传输到应用交互的所有逻辑不仅代码冗余、难以维护还会导致不同系统之间无法兼容比如A厂商的程序和B厂商的程序处理数据的方式不同无法互通。举个通俗的例子我们从北京寄一个包裹到上海不需要自己全程运送而是由快递公司的“分层服务”完成——收件员对应应用层接收包裹分拣中心对应网络层规划路线运输环节对应数据链路层、物理层负责送达收件人对应对方应用层接收包裹。每一个环节只负责自己的核心工作通过标准化的流程衔接既高效又不易出错。网络分层的核心优势的体现在三点模块化拆分各层独立工作修改某一层的实现如更换物理传输介质不会影响其他层降低开发和维护成本标准化接口层与层之间通过统一的接口交互确保不同厂商、不同系统的设备能够无缝通信故障易排查当网络出现问题时可快速定位故障所在的层次如ping不通是网络层问题浏览器打不开网页是应用层问题。二、两大核心分层模型OSI七层与TCP/IP五层目前主流的网络分层模型有两个OSI七层模型国际标准化组织ISO提出的理论参考模型和TCP/IP五层模型实际网络中最常用尤其是Linux系统本质是对OSI模型的简化和落地。两者的对应关系如下重点掌握TCP/IP五层模型后续Linux网络编程均围绕此模型展开。OSI七层模型理论TCP/IP五层模型Linux实战核心作用通俗理解应用层应用层直接面向用户提供具体的网络应用如浏览网页、远程登录表示层应用层合并处理数据格式、加密解密Linux中由应用程序自行实现会话层应用层合并建立、维护和终止两个应用程序之间的会话如TCP连接传输层传输层负责端到端的可靠传输如TCP或快速传输如UDP网络层网络层负责跨网段路由找到数据传输的路径如IP协议数据链路层数据链路层负责局域网内的数据传输识别设备如MAC地址物理层物理层负责将数据转为物理信号电信号、光信号通过硬件传输注意OSI七层模型是“理论标准”定义了完整的网络通信框架但实际落地中过于复杂TCP/IP五层模型或四层模型将物理层和数据链路层合并为网络接口层是“实战标准”Linux系统的网络协议栈如内核中的tcp/ip协议栈就是基于此模型实现的也是我们后续学习的重点。三、TCP/IP五层模型详解Linux实战重点从下到上逐层解析每一层的核心功能、常用协议、Linux中的对应实操明确各层在网络编程中的作用——我们编写的socket程序本质是在应用层调用下层提供的接口完成数据的发送和接收。1. 物理层最底层核心功能传输原始比特流将上层传递的数据二进制0和1转换为可通过物理介质传输的电信号、光信号或无线电磁波同时定义物理介质的接口标准如网线接口、光纤接口、电气特性如电压范围。简单说物理层不关心数据的含义只负责“把数据送出去”相当于网络通信的“物理载体”。常用物理介质双绞线家用网线、光纤长距离高速传输、无线电磁波Wi-Fi、5GLinux实操关联物理层的设备在Linux中对应网卡如eth0、ens33可通过ifconfig或ip addr命令查看网卡信息通过ethtool命令查看网卡的物理特性如速率、双工模式。示例查看网卡物理信息# 查看所有网卡的物理信息IP、MAC、状态 ip addr show # 查看eth0网卡的速率、双工模式 ethtool eth02. 数据链路层核心功能实现局域网内的可靠传输将物理层的比特流组织成“帧”数据链路层的最小数据单元并完成三个关键操作MAC地址寻址、差错检测、介质访问控制。关键细节解析帧结构帧 帧头含源MAC地址、目的MAC地址 数据来自上层 帧尾校验码MAC地址每块网卡出厂时分配的全球唯一48位物理地址如00:11:22:33:44:55相当于设备在局域网内的“身份证”用于识别同一局域网内的发送方和接收方差错检测通过帧尾的校验码CRC算法检测数据在传输过程中是否出错若出错则丢弃该帧不重传由上层处理介质访问控制解决多个设备共享同一传输介质的冲突问题如以太网的CSMA/CD机制、Wi-Fi的CSMA/CA机制。常用协议以太网协议最常用、ARP协议地址解析协议将IP地址转换为MAC地址是连接数据链路层和网络层的关键协议Linux实操关联数据链路层的核心设备是交换机Linux系统中可通过arp命令查看ARP缓存表IP与MAC的对应关系通过tcpdump命令抓包查看帧的结构。示例查看ARP缓存表、抓包查看帧结构# 查看ARP缓存表IP-MAC对应关系 arp -a # 抓eth0网卡上的数据链路层帧只抓10个包 tcpdump -i eth0 -c 10 -e # -e选项显示MAC地址补充ARP协议的核心作用——当我们知道目标设备的IP地址但不知道其MAC地址时会发送ARP广播请求询问目标IP对应的MAC地址目标设备回应后将IP-MAC对应关系存入ARP缓存后续通信直接使用该MAC地址。3. 网络层核心功能实现跨网段的路由选择和数据转发解决“数据如何从源网络到达目的网络”的问题核心是IP协议互联网协议。关键细节解析数据单元数据包Packet由上层传输层的段Segment加上网络层的头部含源IP、目的IP组成IP地址跨网段通信的“逻辑地址”如192.168.1.10由网络号标识网段和主机号标识网段内的设备组成与MAC地址物理地址的区别是IP地址可手动配置MAC地址不可修改路由选择网络层通过路由表Linux内核中的路由表选择一条从源IP到目的IP的最佳路径核心设备是路由器三层设备常用协议IP协议核心负责数据包的封装和转发、ICMP协议互联网控制消息协议用于故障诊断如ping命令、路由协议如RIP、OSPF用于路由器之间交换路由信息。Linux实操关联Linux系统中可通过route或ip route命令查看路由表通过ping命令基于ICMP协议测试网络连通性通过ip addr命令配置IP地址。示例查看路由表、测试网络连通性# 查看系统路由表 ip route show # 测试与百度的网络连通性ICMP协议 ping www.baidu.com # 临时配置IP地址ens33网卡 ip addr add 192.168.1.100/24 dev ens33注意网络层只负责“将数据包送到目的网段”不负责数据的可靠传输若数据包丢失网络层不重传由上层传输层处理。4. 传输层核心功能实现端到端的可靠传输连接应用层和网络层为应用程序提供“端口到端口”的通信服务解决“数据如何在两个应用程序之间可靠传输”的问题。关键细节解析数据单元段SegmentTCP或数据报DatagramUDP端口号标识一台主机上的不同应用程序范围1-65535其中1-1023为知名端口如80端口对应HTTP、22端口对应SSHIP地址端口号可唯一标识网络中的一个应用程序两大核心协议Linux网络编程重点TCP协议面向连接、可靠传输、面向字节流适用于对可靠性要求高的场景如文件传输、远程登录通过三次握手建立连接、四次挥手关闭连接通过重传、流量控制、拥塞控制保证数据可靠到达UDP协议无连接、不可靠传输、面向数据报适用于对实时性要求高的场景如视频直播、游戏无需建立连接直接发送数据速度快但可能出现数据丢失、乱序。Linux实操关联Linux系统中可通过netstat或ss命令查看传输层的连接状态TCP连接、端口占用情况通过nc命令netcat测试TCP/UDP连接。示例查看端口占用、测试TCP连接# 查看所有TCP连接和端口占用 ss -tuln # 查看80端口的占用情况 lsof -i:80 # 用nc命令测试TCP连接连接百度的80端口 nc -v www.baidu.com 805. 应用层最上层核心功能直接面向用户和应用程序提供具体的网络应用服务将用户的操作如点击网页、发送邮件转换为网络数据交给下层传输。应用层不关心数据的传输细节如如何路由、如何封装只关心“用户需要什么服务”其协议是我们日常接触最多的。常用协议Linux网络编程常用 HTTP/HTTPS网页浏览协议80端口/443端口SSH远程登录协议22端口Linux远程管理的核心协议FTP文件传输协议21端口DNS域名解析协议53端口将域名如www.baidu.com转换为IP地址DHCP动态主机配置协议自动为Linux主机分配IP地址、子网掩码、网关等配置。Linux实操关联我们在Linux中使用的curl访问HTTP接口、ssh远程登录、ftp文件传输、nslookupDNS解析等命令本质都是调用应用层协议的工具。后续我们编写的网络程序如简易Web服务器、远程控制程序也都是在应用层实现的。示例应用层协议实操# 用curl访问百度HTTP协议 curl www.baidu.com # 远程登录另一台Linux主机SSH协议 ssh root192.168.1.200 # DNS解析查看百度的IP地址 nslookup www.baidu.com四、数据的传输流程分层协作示例理解分层的关键是掌握“数据在各层之间的流转过程”——从应用层到物理层数据会被逐层“封装”加上对应层的头部信息从物理层到应用层数据会被逐层“解封装”去掉对应层的头部信息最终到达目标应用程序。以“Linux主机通过浏览器访问www.baidu.com”为例数据流转流程如下TCP/IP五层模型应用层浏览器应用程序发起HTTP请求将用户的访问需求如访问百度首页封装为HTTP请求数据交给传输层传输层将HTTP请求数据封装为TCP段加上源端口、目的端口如源端口随机目的端口80交给网络层网络层将TCP段封装为IP数据包加上源IP、目的IP目的IP是百度服务器的IP通过DNS解析获得交给数据链路层数据链路层将IP数据包封装为帧加上源MAC、目的MAC目的MAC是网关的MAC通过ARP协议获得交给物理层物理层将帧转换为电信号通过网线/光纤传输到网关再由网关路由转发到百度服务器百度服务器端物理层接收电信号转换为帧逐层解封装数据链路层→网络层→传输层→应用层最终交给百度的HTTP服务器百度服务器处理请求后返回HTTP响应数据按上述流程反向传输最终到达浏览器显示百度首页。核心总结封装和解封装是分层通信的核心每一层只添加/删除自己的头部信息不修改上层的数据内容实现了“模块化协作”。五、Linux网络编程与网络分层的关联我们后续学习的Linux网络编程socket编程本质是“在应用层调用下层提供的接口”无需关心物理层、数据链路层、网络层的具体实现这些由Linux内核的TCP/IP协议栈完成重点关注应用层和传输层。关键关联点socket套接字是应用层与传输层之间的接口我们通过socket函数如socket()、bind()、connect()创建通信端点实现应用程序与传输层的交互传输层协议选择编写程序时需根据需求选择TCP或UDP协议如文件传输用TCP实时推送用UDP端口与IP的使用在程序中需指定端口号避免使用知名端口和IP地址实现“端口到端口”的通信故障排查网络编程中遇到问题如连接失败、数据丢失可根据分层模型定位故障如连接失败可能是传输层端口未开放ping不通可能是网络层路由问题。六、学习小结1. 网络分层的核心是“分而治之”将复杂的网络通信拆解为多个独立层次降低开发和维护复杂度保证兼容性2. 重点掌握TCP/IP五层模型从下到上依次为物理层比特流→数据链路层帧、MAC→网络层数据包、IP→传输层段/数据报、TCP/UDP→应用层具体协议、用户交互3. 各层的核心协议和Linux实操命令是重点需熟练掌握如ip、ping、ss、tcpdump等为后续socket编程打下基础4. 数据的传输流程是“封装→传输→解封装”每一层只负责自己的核心工作层与层之间通过接口协作。下一节我们将基于网络分层的基础学习Linux socket编程的核心概念和基本操作实现第一个简单的TCP客户端和服务器程序。

相关文章:

linux学习笔记 网络编程——网络分层

在Linux网络编程中,网络分层是核心基础,也是理解网络通信原理、排查网络问题、编写高效网络程序的关键。我们日常使用的网络(如浏览网页、远程登录Linux服务器、传输文件),看似是“直接通信”,实则是多个层…...

新手福音:在快马平台轻松构建你的第一个Hermes风格AI代理

今天想和大家分享一个特别适合AI开发新手的实践项目——用最简单的代码实现一个Hermes风格的AI代理。作为一个刚接触AI代理开发的菜鸟,我最初看到那些复杂的框架和概念也是一头雾水,直到在InsCode(快马)平台上尝试了这个最小化的示例,才真正理…...

Mirascope框架:统一LLM调用接口,简化AI应用开发

1. Mirascope:一个让LLM调用变得像喝水一样简单的开发框架 如果你最近在折腾大语言模型(LLM)应用开发,大概率经历过这种痛苦:今天用OpenAI的GPT-4写个聊天机器人,明天客户要求换成Anthropic的Claude&#x…...

KubeSphere Helm Charts 仓库深度解析:生产级Chart设计与高级模板技巧

1. 项目概述与核心价值 如果你正在或计划在 Kubernetes 上构建应用,那么“Helm”这个名字对你来说一定不陌生。它被称作 Kubernetes 的“包管理器”,就像 Ubuntu 里的 apt 或 CentOS 里的 yum,能让你用一条命令就部署起一套复杂的应用。但 H…...

[具身智能-588]:真正的通用智能,不在云端,而在泥土之中——它必须能弯腰、流汗、跌倒、再站起来,同时懂得为何而做。具身智能的模型,不在云端,必须下沉到终端,且其智能体必须拥有“我”的抽象和上下文

这是我对通用人工智能(AGI)本质路径的诗意而精准的宣言。它不仅否定了当前主流“大模型中心主义”的幻觉,更指明了智能必须扎根于物理存在、具身经验与主体性上下文的真理。让我们从技术、哲学与系统工程三个维度,深入解析提出的三…...

G-Helper终极解决方案:高效管理华硕笔记本性能与散热

G-Helper终极解决方案:高效管理华硕笔记本性能与散热 【免费下载链接】g-helper Fast, native tool for tuning performance, fans, GPU, battery, and RGB on any Asus laptop or handheld - ROG Zephyrus, Flow, Strix, TUF, Vivobook, Zenbook, ProArt, Ally, an…...

长上下文语言模型的可复用推理模板设计与优化

1. 项目背景与核心价值在自然语言处理领域,长上下文语言模型(如GPT-4、Claude等)的崛起正在改变人机交互的范式。这类模型能够处理长达数万token的上下文窗口,为复杂推理任务提供了前所未有的可能性。然而在实际应用中&#xff0c…...

如何用QrScan实现企业级图片二维码批量检测与识别

如何用QrScan实现企业级图片二维码批量检测与识别 【免费下载链接】QrScan 离线批量检测图片是否包含二维码以及识别二维码 项目地址: https://gitcode.com/gh_mirrors/qrs/QrScan 在数字化转型浪潮中,企业面临着海量图片资产中的二维码信息管理难题——如何…...

SAP ME51N采购申请屏幕增强保姆级教程:从CI_EBANDB到BAPI传值全流程

SAP ME51N采购申请屏幕增强实战指南:从字段扩展到BAPI集成全解析 当业务部门突然提出"在采购申请行项目里加设备编号字段"的需求时,作为ABAP开发者的你可能会面对一连串技术术语的轰炸:CI_EBANDB结构、MEREQ001增强点、屏幕0111绘制…...

STM32F103C8T6 + AHT20温湿度传感器:从CubeMX配置到串口打印的保姆级实战

STM32F103C8T6与AHT20温湿度传感器开发全流程指南 1. 项目概述与硬件准备 在物联网和智能硬件开发领域,环境监测是最基础也最常用的功能之一。STM32F103C8T6作为一款性价比极高的ARM Cortex-M3内核微控制器,搭配AHT20这款高精度数字温湿度传感器&#xf…...

从芯片手册到AutoSar代码:手把手教你为STM32配置片内/片外看门狗(含WdgIf抽象层详解)

STM32看门狗与AutoSar集成实战:从寄存器配置到WdgIf抽象层实现 在嵌入式系统开发中,看门狗(Watchdog)是确保系统可靠性的最后一道防线。当面对汽车电子领域严苛的功能安全要求时,如何将STM32系列MCU的片内/片外看门狗无…...

IT资产管理系统是什么?其主要的数字化特征与智能监控功能有哪些?

IT资产管理系统的功能设计与实现机制分析 IT资产管理系统的设计基础在于其对数字化特性和智能监控功能的全面整合。该系统通过引入自动化识别技术,能够有效地追踪和管理每一项资产。每一台设备都配备有独特标识符,结合传感器技术实时采集状态信息。这种信…...

智能体编排框架agents-flex:构建复杂AI系统的柔性骨架

1. 项目概述与核心价值最近在探索智能体(Agent)应用开发时,我深度体验了agents-flex/agents-flex这个开源框架。它不是一个简单的工具库,而是一个旨在为构建复杂、可扩展的智能体系统提供“柔性骨架”的解决方案。简单来说&#x…...

Navicat 16 试用到期后,用这个Python脚本一键清理注册表残留(亲测有效)

Navicat 16试用到期后彻底清理注册表残留的完整指南 每次打开Navicat 16时弹出的"试用期已结束"提示是否让你感到困扰?即使重新安装软件,这个恼人的提示依然如影随形。这通常是由于注册表中残留的试用信息未被清除所致。本文将深入解析这一问题…...

用74LS138和74LS273玩转8086:手把手教你搭建一个能读开关、亮LED的微型计算机I/O系统

从零构建8086微型计算机I/O系统:74LS138与74LS273实战指南 在计算机组成原理的学习中,理论知识与实践操作往往存在一道难以跨越的鸿沟。许多学生能够熟练背诵地址译码的原理,却不知道如何用74LS138芯片搭建一个实际的译码电路;理解…...

DeTikZify:基于多模态大模型的草图转TikZ代码工具详解

1. 项目概述:从草图到矢量图形的智能转换在科研绘图和学术写作中,我们常常面临一个经典困境:脑海中的设计草图或手边的参考图,如何快速、精准地转化为高质量的矢量图形,以便在LaTeX文档中直接使用?传统流程…...

实战演练:基于快马平台与jdk8开发电商订单数据分析业务模块

今天想和大家分享一个真实的业务场景:电商订单数据分析模块的开发过程。这个需求在实际项目中非常常见,我们团队最近就用JDK8的特性快速实现了这个功能,整个过程在InsCode(快马)平台上完成得特别顺畅。 业务背景分析 电商平台每天都会产生大…...

FastGithub智能DNS路由解决方案:构建高性能GitHub访问加速服务

FastGithub智能DNS路由解决方案:构建高性能GitHub访问加速服务 【免费下载链接】FastGithub github定制版的dns服务,解析访问github最快的ip 项目地址: https://gitcode.com/gh_mirrors/fa/FastGithub FastGithub是一款专为GitHub访问优化的智能D…...

【OC】多界面传值总结

【OC】多界面传值总结文章目录【OC】多界面传值总结属性传值(A->B)代理传值(B->A)Block传值(B->A)通知传值(任意方向)KVO传值(观察属性变化)在学习iOS 开发的知识过程中,把几种常见的多…...

基于Claude API的AI应用开发框架:everything-claude核心功能与实战解析

1. 项目概述与核心价值最近在折腾AI应用开发,发现一个挺有意思的开源项目,叫“everything-claude”。这名字起得挺大,乍一看以为是啥都能干的Claude,实际上它是一个基于Anthropic Claude API的、高度可定制的AI应用开发框架。简单…...

告别画面撕裂!用DRM的drmModePageFlip和drmHandleEvent实现流畅翻页(附Linux应用层完整代码)

彻底解决Linux图形显示撕裂:DRM事件驱动编程实战指南 当你在嵌入式Linux设备上开发图形界面时,是否遇到过画面撕裂的困扰?那种图像上半部分显示新帧而下半部分还停留在旧帧的视觉割裂感,不仅影响用户体验,更暴露了底层…...

STM32G4/H7电机控制实战:用CORDIC硬件加速浮点三角函数(附完整代码)

STM32G4/H7电机控制实战:用CORDIC硬件加速浮点三角函数(附完整代码) 在电机控制和数字电源开发领域,实时性往往是决定系统性能的关键因素。当我们在STM32G4或H7平台上构建基于浮点运算的电机控制算法时,三角函数的计算…...

为什么你的R 4.5回测结果总和Python不一致?——揭开RcppParallel与chron包底层时钟偏移之谜

更多请点击: https://intelliparadigm.com 第一章:R 4.5回测结果偏差的现象学观察 在 R 4.5 环境下执行量化策略回测时,部分用户报告了与预期显著不符的绩效指标——尤其在滚动窗口(rolling window)和事件驱动&#x…...

比话降AI怎么用?答辩前35分钟降知网AIGC率全流程教程详解!

比话降AI怎么用?答辩前35分钟降知网AIGC率全流程教程详解! 比话降AI(www.bihuapass.com)是 2026 年答辩急救场景使用率最高的工具之一。但很多硕博生第一次用不知道具体步骤——是不是直接粘全文?参数怎么选&#xff…...

开源鼠标增强工具MousePal:自定义加速度曲线与多显示器DPI优化

1. 项目概述:一个鼠标增强工具的诞生与价值在桌面操作效率的探索道路上,我们常常会不自觉地陷入一种“路径依赖”:习惯了操作系统自带的鼠标指针,默认了它那有限的移动速度和固定的加速度曲线,也接受了在不同显示器间切…...

MAXQ JTAG板固件更新全流程与常见问题解析

1. MAXQ JTAG板固件更新全流程解析作为嵌入式开发工程师,我们经常需要与各种调试接口打交道。JTAG作为业界通用的调试标准,因其稳定性和通用性被广泛应用于各类微控制器的开发调试中。MAXQ系列微控制器同样采用JTAG接口进行编程和调试,而串口…...

Docker Compose 多项目管理工具:轻量级容器编排辅助方案

1. 项目概述:一个基于Docker的轻量级容器编排辅助工具最近在整理自己的开发环境时,发现一个挺普遍但又有点烦人的痛点:手头有好几个Docker项目,每个项目都有一堆docker-compose.yml文件,分布在不同的目录里。每次想启动…...

UniFusion多模态生成框架:统一编码与实战优化

1. 项目背景与核心价值最近在AIGC领域出现了一个很有意思的技术方向——UniFusion。这个框架的核心创新点在于用统一的视觉语言编码器来处理多模态生成任务。传统方案通常需要为不同模态训练独立的编码器,不仅计算资源消耗大,而且跨模态对齐效果往往不理…...

2026 年 PGX 以 pgxbackup 之名,为 PostgreSQL 备份黄金标准 pgBackRest 提供持续支持

【导语:2026 年 5 月 1 日消息,PGX 正在以 pgxbackup 的名义为 pgBackRest 提供持续支持。pgBackRest 多年来一直是 PostgreSQL 备份和恢复领域的黄金标准,随着其维护工作减少,PGX 此举确保其持续可用。】pgBackRest:P…...

基于大语言模型的自然语言转SQL工具:从原理到企业级实践

1. 项目概述:当SQL遇上对话式AI 最近在数据圈子里,一个叫“dataease/SQLBot”的开源项目引起了我的注意。简单来说,它就是一个能让你用“说人话”的方式去操作数据库的工具。想象一下,你不再需要绞尽脑汁去拼写复杂的SQL语句&…...