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

【Linux】网络基础概念

1. 网络基础总结来说计算机不能独立使用必须进行协作注定了计算机之间要进行连接通信就产生了网络网络是局部产生的是从局部到整体的网络互联 ---- 局域网 ---- 广域网 ---- 更大的网2. 初识协议计算机之间的传输媒介是光信号和电信号达成数据格式协议就可以减少通信成本一般具有定制协议或者标准的资格的组织或者公司都必须是业界公认的组织或公司比如ISO国际标准化组织ISO是由多个国家的标准化团体组成的国际组织它在开放系统互连 OSI模型方面尤为著名。OSI模型定义了网络通信的七层协议结构尽管在实际应用中TCP/IP协议族更为普遍但OSI模型仍然在学术和理论研究中占有重要地位2.1 协议分层协议本质也是软件在设计上为了更好的进行模块化解耦合分层之后可以替换掉任意一层2.2 OSI七层模型在网络角度OSI定的协议7层模型其实非常完善但是在实际操作的过程中会话层、表示层是不可能接入到操作系统中的所以在工程实践中最终落地的是5层协议2.3 TCP/IP五层(或四层)模型TCP/IP是一组协议的代名词它还包括许多协议组成了TCP/IP协议簇TCP/IP通讯协议采用了5层的层级结构物理层传光电信号用网线、光纤、电磁波决定传输速度与距离集线器工作在此层。数据链路层在设备间传数据帧做差错校验、冲突检测交换机工作在此层。网络层负责 IP 寻址与路由选择规划数据传输路径路由器工作在此层。传输层实现端到端可靠传输代表协议 TCP/UDP。应用层面向具体应用服务如 FTP、SMTP 等网络编程主要针对这一层物理层考虑的比较少只考虑软件相关的内容。因此很多时候直接称为 TCP/IP四层模型.一般而言对于一台主机它的操作系统内核实现了从传输层到物理层的内容对于一台路由器它实现了从网络层到物理层对于一台交换机它实现了从数据链路层到物理层对于集线器它只实现了物理层但是并不绝对很多交换机也实现了网络层的转发很多路由器也实现了部分传输层的内容(⽐如端口转发3. 再识协议3.1 为什么要有协议本机通信 VS 网络通信区别就是通信距离变长了通信距离变长会带来一系列问题处理数据数据丢失定位目标主机下一跳问题上述问题就需要分层处理注定了层状结构3.2 什么是TCP/IP协议TCP/IP协议的本质是一种解决方案TCP/IP协议能分层前提是因为问题们本身能分层3.3 TCP/IP协议与操作系统的关系3.4 协议本质是什么如上图即使os不一样主机b还是可以识别传来的数据并提取为什么因为双方都有同样的结构体类型因为用同样的代码实现协议就用了同样的数据类型这就是一种协议/约定所谓协议就是通信双方都认识的结构化的数据类型因为协议栈是分层的所以每层都有双方都有协议同层之间互相可以认识对方的协议4. 网络传输基本流程4.1 局域网络传输流程图1局域网通信原理(以太网为例)当两台主机在一个局域网就可以直接通信每台主机在局域网上要有唯一的标识来保证主机的唯一性mac地址2认识MAC地址MAC地址用来识别数据链路层中相连的节点长度为 48比特位即 6 个字节。一般用16 进制数字加上冒号的形式来表示(例如 08:00:27:03:fb:19)在网卡出厂时就确定了不能修改。mac地址通常是唯一的虚拟机中的mac地址不是真实的mac地址可能会冲突.windowsipconfig /all局域网通信的过程中主机对收到的报文确认是否是发给自己的是通过目标mac地址判定可以试着从系统角度来理解局域网通信原理以下是同一个网段内的两台主机进行发送消息的过程所以进行上述传输流程的时候要进行封装和解包报头部分就是对应协议层的结构体字段一般叫做报头除了报头剩下的叫做有效载荷故报文 报头 有效载荷不同的协议层对数据包有不同的称谓在传输层叫做段(segment) ,在网络层叫做数据报(datagram)在链路层叫做帧(frame)应用层数据通过协议栈发到网络上时每层协议都要加上一个数据首部(header),称为封装首部信息中包含了一些类似于首部有多长载荷(payload)有多长上层协议是什么等信息数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部根据首部中的上层 协议字段将数据交给对应的上层协议处理每层都有协议总结在网络传输的过程中数据不是直接发送给对方主机的而是先要自定向下将数据交付给下层协议 最后由底层发送然后由对方主机的底层来进行接受在自底向上进行向上交付从而实现看似是用户层的通信3数据包封装和分用所以学习协议就是学习如何做到解包封包以及如何将有效载荷交给上层4认识IP地址IP 协议分IPv4、IPv6IP 地址用于唯一标识网络中的主机日常采用点分十进制书写四段数字各占 1 字节例如192.168.0.1取值 0~255目的IP的意义然后结合封装与解包体现路由器解包和重新封装的特点对比IP地址和Mac地址的区别IP 地址传输全程保持不变MAC 地址每经过一跳路由转发不断变化目的 IP全局层面代表最终长远目标用于跨网段路由选路MAC 地址仅局域网内代表下一跳设备负责局域网内部数据转发IP决定数据走哪条路跨网路由MAC决定数据下一站给谁局域网直连转发IP网络层存在的意义提供网络虚拟层让世界的所有网络都是 IP 网络屏蔽最底层网络的差异TCP和UCP二、核心区别对比特性TCPUDP连接性面向连接三次握手 / 四次挥手无连接直接发送可靠性可靠确认、重传、排序、校验不可靠尽力而为可能丢包 / 乱序传输模式字节流无边界像水管流水数据报有边界独立数据包流量 / 拥塞控制有滑动窗口、慢启动等无通信方式一对一点对点支持一对一、一对多、多对多广播 / 组播首部开销大最小20 字节小固定8 字节传输效率低延迟高、开销大高延迟低、速度快典型应用HTTP/HTTPS, FTP, SMTP, 邮件文件传输视频通话、直播、游戏、DNS、实时音视频5. Socket编程预备5.1 端口号1什么是端口号端口号属于传输层协议内容大小为2 字节、16 位整数作用标识主机内进程让系统区分数据交由哪个程序处理IP 地址 端口号可唯一确定网络中一台主机的某个进程同一时刻一个端口号仅能被一个进程占用2端口号范围划分0~1023知名端口固定分配给 HTTP、FTP、SSH 等常用应用层协议1024~65535动态端口由操作系统分配多用于客户端程序3端口号 与 PID 的区别 关系PID操作系统全局唯一标识所有进程是系统层级标识。端口号专门用于网络通信的进程标识属于网络层级。设计分离不用 PID 做网络标识避免网络与系统进程管理强耦合。绑定规则一个进程可绑定多个端口一个端口同一时刻只能被一个进程占用4源端口 目的端口源端口标识数据发送方进程目的端口标识数据接收方进程5理解socketIP 地址用来标识互联网中唯一的一台主机 port 用来标识该主机上唯一的一个网络进程IPPort 就能表示互联网中唯一的一个进程四元组源IP源端口目的IP目的端口唯一标识两端通信进程网络通信本质跨主机的进程间通信Socket套接字 IP 端口6. 传输层的典型代表6.1 认识TCP协议传输层协议有连接通信前需要建立连接可靠传输数据保证完整、有序、不丢失面向字节流数据以字节流形式传输6.2 认识UDP协议传输层协议无连接无需提前建立连接直接发送数据不可靠传输不保证数据一定送达、有序面向数据报以独立数据报为单位收发6.3 总结与选择选 TCP数据完整性 速度。适合文件、网页、邮件等不能出错的场景。选 UDP速度 / 实时性 完整性。适合视频、语音、游戏等可容忍少量丢包的场景7. 网络字节序送主机通常将发送缓冲区中的数据按内存地址从低到高的顺序发出接收主机把从网络上接到的字节依次保存在接收缓冲区中,也是按内存地址从低到高的顺序保存网络数据流的地址应这样规定:先发出的数据是低地址,后发出的数据是高地址TCP/IP协议规定,网络数据流应采用大端字节序,即低地址高字节如果当前发送主机是小端就需要先将数据转成大端否则就忽略大端如何发送:先发低地址 →0x12数据高位再发0x34再发0xab最后发高地址 →0xcd数据低位为使网络程序具有可移植性,使同样的C代码在大端和小端计算机上编译后都能正常运行,可以调用以下库函数做网络字节序和主机字节序的转换h 表示 host , n 表示 network , l (long)表示 32 位长整数, s (short)表示 16 位短整数例如htonl 表示将 32 位的长整数从主机字节序转换为网络字节序,例如将IP地址转换后准备发送所有发送到网络上的数据都必须是大端的8. socket 编程接口8.1 常见函数创建 socket ⽂件描述符 (TCP/UDP, 客户端 服务器) #include sys/socket.h int socket(int domain, int type, int protocol); 第一个参数domain /af地址族 / 协议族 AF_INET IPv4 协议最常用 AF_UNIX / AF_LOCAL 本地进程通信 第二个参数type套接字类型 SOCK_DGRAM UDP 数据报套接字最常用 SOCK_STREAM TCP 流式套接字最常用 SOCK_RAW 原始套接字 第三个参数protocol具体协议号 0 自动匹配推荐 返回值 成功返回一个非负整数称为套接字描述符 失败返回 -1绑定端⼝号 (TCP/UDP, 服务器) int bind(int socket, const struct sockaddr *address, socklen_t address_len); 第二个参数 必须强制类型转换(struct sockaddr*) 返回值 成功返回 0 失败返回 -1 区分std::bind() C 标准库的函数工具用来绑定函数、固定参数、修改函数调用方式套接字数据接收函数 #include sys/types.h #include sys/socket.h ssize_t recvfrom( int sockfd, // 套接字文件描述符 void *buf, // 接收缓冲区 size_t len, // 缓冲区最大长度 int flags, // 控制标志 struct sockaddr *src_addr, // 输出发送方地址 socklen_t *addrlen // 输入输出地址缓冲区大小 ); flags 0 默认阻塞模式无特殊行为 返回值 成功返回实际读到的字节数 出错返回 -1UDP协议发送数据 #include sys/socket.h ssize_t sendto( int sockfd, // 套接字文件描述符 const void *buf, // 要发送的数据缓冲区 size_t len, // 数据长度 int flags, // 标志位一般填 0 const struct sockaddr *dest_addr, // 目标地址IP端口 socklen_t addrlen // 地址结构体长度 ); 成功返回 实际发送的字节数 失败返回 -1启动服务器并监听连接 int listen(int sockfd, int backlog); 第二个参数 含义TCP 连接队列的最大长度 作用控制还没被服务器 accept () 处理的连接最多能排队多少个用于客户端向服务器发起网络连接 int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);8.2 sockaddr结构IPv4 使用sockaddr_in存储 IP 端口Socket API 统一用struct sockaddr*接收靠AF_INET/AF_INET6区分地址类型实现一套接口兼容所有协议网络编程 4 件套 #include sys/types.h 系统基础类型必加 #include sys/socket.h 套接字函数socket/connect/bind #include netinet/in.h sockaddr_in 结构体核心 #include arpa/inet.h IP转换inet_addr/inet_ptonsockaddr_in 结构虽然socket api的接口是sockaddr但是在基于IPv4编程时使用的数据结构是sockaddr_in这个结构里主要有三部分信息地址类型端口号IP地址// 来自头文件 netinet/in.h struct sockaddr_in { sa_family_t sin_family; // 1. 地址族必须填 AF_INET in_port_t sin_port; // 2. 端口号必须用 htons() 转换 struct in_addr sin_addr; // 3. IP地址结构体需要强转 char sin_zero[8]; // 4. 填充字节全填0为了对齐内存 }; // 里面嵌套的 IP 地址结构体 struct in_addr { uint32_t s_addr; // 真正存IPv4地址32位整数 }; 参数 1.sin_family地址族必须填 AF_INET 2. sin_port端口号 必须用 htons () 转换 因为端口号本身就只有16位长 3. sin_addr.s_addrIP 地址 4. 0

相关文章:

【Linux】网络基础概念

1. 网络基础总结来说:计算机不能独立使用,必须进行协作,注定了计算机之间要进行连接通信,就产生了网络网络是局部产生的,是从局部到整体的(网络互联 ----> 局域网 ----> 广域网 ----> 更大的网&am…...

前端像素UI库!前端复古风选型必看!像素UI 、精简复古风UI 。

一、像素风 复古风(8-bit/街机游戏/精简粗犷主义) 1. NES.css(8-bit 像素/红白机风) 官方文档(官网) :https://nostalgic-css.github.io/NES.css/ GitHub:https://github.com/no…...

串口驱动开发:从内核源码到调试坑位全解析

昨天深夜调试现场,设备管理器里能看到ttyS0,但cat /dev/ttyS0就是没数据。示波器测TX脚明明有波形,minicom里却一片死寂。这种“硬件有信号,软件没反应”的尴尬,十有八九是串口驱动配置出了问题。今天咱们就深挖Linux串…...

4.13-4.19 补题

牛客竞赛 牛客周赛 Round 139:A 题、B 题、C 题、D 题、E 题洛谷 P1142 —— 轰炸 P1222 —— [HNOI2001]产品加工PTA SMU2026 Spring 天梯赛 7-5 —— 三点共线 7-7 —— 大幂数 7-8 —— 现代战争 7-9 —— 算式拆解 7-10 —— 三点共线 7-11 —— 胖达的山头 7-1…...

2025_NIPS_InterMT: Multi-Turn Interleaved Preference Alignment with Human Feedback

文章核心总结与创新点 核心内容 本文针对多模态大模型(MLLMs)在多轮交错式理解与生成任务中的对齐缺口,提出首个聚焦该场景的人类偏好数据集INTERMT,配套构建评估基准INTERMT-BENCH。数据集通过工具增强的智能体工作流生成52.6k多轮问答实例,涵盖15+视觉-语言任务,结合…...

2025_NIPS_Sheetpedia: A 300K-Spreadsheet Corpus for Spreadsheet Intelligence and LLM Fine-Tuning

文章主要内容与创新点总结 一、主要内容 数据集构建:提出Sheetpedia,一个包含超29万张独特工作表(源自32.4万+工作簿)的大规模电子表格语料库。数据来源涵盖企业邮件档案(Enron数据集)、网络语料库(Fuse数据集)及Excel论坛爬取内容,经格式标准化、语言过滤(78%+为英…...

STM32标准库开发步骤速览,适用于电赛入门学习

内容不全是还在完善,本文根据b站up主:江协科技总结得来(视频太长我没有全部看完,仅只阅读了相关例程的代码,只挑了部分视频观看,难免可能不全),既然是总结得来当然越精炼越好&#x…...

企业云盘ROI计算:让你的老板心服口服

开篇一个真实故事: 某设计院信息科主任老张,连续三年向院长申请企业云盘采购预算,前两次都被驳回,理由是"看不出回报"。第三年,他带了一份12页的ROI分析报告,院长当场批准,预算比申请…...

Python实战:用OpenCV+Dlib搞定动漫头像批量检测(附LBP/HOG/SSD模型对比)

Python实战:用OpenCVDlib实现高效动漫头像批量检测与模型选型指南 动漫头像检测在内容管理、二次元社区运营和数字艺术分析等领域有着广泛的应用场景。面对海量的动漫图片资源,如何快速准确地识别其中的角色头像成为许多开发者面临的挑战。本文将带你从零…...

2026产线痛点终结者:Java+YOLOv11+ByteTrack,彻底解决光电计数不准的行业难题

一、前言:被光电传感器支配的工业计数噩梦 2026年的今天,绝大多数工厂的传送带零件计数,依然在靠几十年前的光电传感器硬扛。 上个月我接手了一家汽车零部件厂的计数系统改造项目,他们的情况几乎是整个行业的缩影:用了6年的欧姆龙E3Z光电传感器,只要零件出现重叠、倾斜…...

C语言分支循环语句:第二篇:循环语句

一、什么是循环循环就是让一段代码重复执行多次,不用写很多遍相同代码。C 语言有三种循环:• for 循环• while 循环• do…while 循环 二、while 循环先判断,再执行。 while (条件) {// 循环体 } 实战:猜数字 5 次机会 while (co…...

当代码几乎免费时,程序员还剩下什么?

这是一个正在发生的转变:写出“能跑的代码”成本正无限趋近于零,但写出“正确的系统”依然是昂贵的。本文将探讨在 AI 编程时代,工程师真正的护城河在哪里,以及我们应该如何重塑自己的工作方式。 🧱 一、现状&#xff…...

别再到处找资源了!一份网盘搞定Keil MDK ARM+C51双环境搭建(含STM32F1/F4芯片包)

嵌入式开发环境一站式配置指南:Keil MDK ARM与C51双平台高效搭建 从零开始构建专业级嵌入式开发环境 每次开始新的嵌入式项目,最让人头疼的莫过于开发环境的搭建。网上教程五花八门,资源链接却常常失效;好不容易找到可用的安装包&…...

用于 VoIP 隐写分析的校准感知跨视图注意力网络

Calibration-Aware Cross-View Attention Network for VoIP Steganalysis 用于 VoIP 隐写分析的校准感知跨视图注意力网络(CACVAN) PyTorch implementation for VoIP steganalysis in low-bit-rate speech codecs. 1. 项目简介 本仓库开源了本人论文 Ca…...

Verilog实战:用SystemVerilog验证你的跨时钟域(CDC)设计是否可靠

Verilog实战:用SystemVerilog验证你的跨时钟域(CDC)设计是否可靠 在数字电路设计中,跨时钟域(CDC)问题就像一颗定时炸弹,随时可能在最意想不到的时刻引爆系统故障。许多工程师能够熟练地编写各种…...

华为OD机试真题 新系统2026-04-15 C++ 实现【API请求日志去重分析】

目录 题目 思路 Code 题目 某微服务系统的日志监控平台需要分析 API调用 记录。日志中包含大量重复的请求记录,为了优化存储和后续分析,需要对相邻的重复请求进行合并统计。 具体规则如下: 1.日志按时间顺序排列,每条记录包含请求路径和响应时间 2.如果连续出现相同的请…...

自媒体做了三个月没起色,可能你一直在“自说自话”

我有个读者,做了三个月自媒体,发了40多篇笔记,粉丝不到200。她把自己的账号发给我看,我翻了翻,内容质量其实不差。排版整齐,图片也好看。问题在哪?每一篇都在“自说自话”。比如她写“今天去了一…...

AI Agent的感知世界:多模态输入处理

AI Agent的感知世界:多模态输入处理 关键词: AI Agent、多模态感知、多模态融合、深度学习、Transformer架构、计算机视觉、自然语言处理 摘要 本文深入探讨AI Agent如何通过多模态输入处理构建对世界的全面感知。我们将从第一性原理出发,分析多模态感知的理论基础,详细解…...

CTF SHOW WEB 4(无法查看源代码)

打开靶场还是没给任何信息,但是题目给了信息这道题考察的就是web中常见的信息泄露漏洞,特别是针对robots.txt文件的利用,什么是robots.txt?robots.txt 是存放于网站根目录下的一个文本文件。它的初衷是告诉搜索引擎的爬虫&#xf…...

滴水逆向 Day05:函数嵌套调用的内存布局(图文版)

0基础小白学逆向记录贴,一起来学逆向。https://mp.weixin.qq.com/s/EPDY6i2-R-WQI101KTJvtg 一、核心目标:搞懂一个函数调用另一个函数时,栈空间是怎么变化的、参数怎么传递、返回值怎么回来、ebp/esp 到底在干什么。 二、示例代码&#xff0…...

Data Matrix (ECC200) 选型指南:对比libdmtx、ZXing和huBarcode,你的项目该用哪个开源库?

Data Matrix (ECC200) 开源库选型实战指南 在工业自动化、物流追踪和医疗设备标识等领域,Data Matrix二维码因其高密度编码和小尺寸打印优势成为首选。面对libdmtx、ZXing和huBarcode三大主流开源方案,开发者常陷入选择困境。本文将从实际项目经验出发&a…...

沉默的数据,喧嚣的资本:AI估值泡沫与价值回归的必然逻辑

狂欢中的“红舞鞋”效应2026年的春天,全球资本市场最炙手可热的话题依然是人工智能。然而,当舆论的聚光灯依然打在OpenAI、Anthropic、DeepSeek等明星企业的融资奇迹上时,一个微妙的转折正在悄然发生。数据显示,虽然生成式AI领域的…...

一文讲清,排班管理方案是什么意思?如何制定有效的排班管理方案?

排班管理方案是企业依据业务需求、法律法规及员工技能,对人力资源进行时间与岗位分配的系统性规划,旨在实现降本增效与合规经营。制定一套科学的排班管理方案,不仅能解决“闲时人多、忙时人少”的运营痛点,还能通过公平的轮班机制…...

零停机迁移:如何将服务器成本从 $1432 降至 $233

零停机迁移:如何将服务器成本从 $1432 降至 $233 在云计算大行其道的今天,"便利性"往往伴随着昂贵的溢价。对于初创公司和个人开发者而言,当业务规模趋于稳定,基础设施成本便成了不可忽视的利润黑洞。本文将详细复盘一次…...

Opus 4.6 vs 4.7:社区匿名实测揭示Token成本差异

Opus 4.6 vs 4.7:社区匿名实测揭示Token成本差异 1. 引言 1.1 Token成本计算的重要性 在大语言模型(LLM)的应用开发与部署中,Token不仅是计费的基本单位,更是衡量模型性能与资源消耗的核心指标。对于企业级应用而言&am…...

TCC分布式事务代码

文章目录回滚链路1. 全局回滚是谁触发的?因为什么配置?2. TCC 的「Cancel / 回滚」对应哪些方法?因为什么配置?3. 串起来:一条「回滚链路」长什么样(概念上)4. 还需要哪些「环境配置」这条链路才…...

Elasticsearch 磁盘水位阈值设置:最合理配置 + 生产实战

Elasticsearch 磁盘水位阈值设置:最合理配置 生产实战前言Elasticsearch 磁盘水位阈值设置:合理配置与生产最佳实践一、核心概念:什么是 ES 磁盘水位?1.1 定义1.2 三个关键水位(必须记住)1.3 水位触发后行…...

抓包方案分享

抓包方案分享PS:此方案仅进行技术交流,请不要用于非法用途。小黄鸟 电脑端exe手机APP第一步 电脑版开启 记住端口号,手机版不使用。电脑端需要开启 和虚拟网卡手机端设置手动 ,端口要对上小黄鸟第二步,电脑端二级 设置…...

保姆级教程:用华为ENSP模拟器搞定企业级有线无线网络(含S5700/AC6605配置)

华为ENSP模拟器实战:构建企业级有线无线融合网络 在数字化转型浪潮中,网络工程师需要掌握从规划设计到实施运维的全流程能力。华为ENSP模拟器作为业界公认的企业网络仿真平台,能够完美复现从接入层到核心层的真实场景。本文将带您从零开始&am…...

XFS大硬盘+NFS共享踩坑记:一个fsid=0参数如何避免‘Stale file handle’

XFS大硬盘NFS共享避坑指南:深入解析fsid0参数与Stale file handle故障 最近在部署一套基于XFS文件系统的备份服务器时,遇到了一个典型的NFS共享问题:客户端挂载后频繁出现"Stale file handle"错误。这个问题在大容量XFS分区&#x…...