linux学习之网络编程
一、两个模型及其对应关系
OSI七层模型 TCP/IP 四层模型
--------------------------------------------------------------------------
应用层
表示层 ----> 应用层
会话层
传输层 ----> 传输层
网络层 ----> 网络层
数据链路层 ----> 网络接口层
物理层
-
物理层
- 功能:主要负责处理物理介质上的信号传输,包括电缆、光纤、无线等传输介质。它定义了物理设备的电气、机械、功能和规程特性,确保数据能够在物理介质上正确地发送和接收。比如,规定了网线的接口形状、引脚定义、信号的电压等级、传输速率等。
- 设备:常见的物理层设备有集线器、中继器等。
-
数据链路层
- 功能:负责将物理层接收到的原始比特流转换为数据帧,并进行差错检测和纠正,同时还负责数据的成帧、MAC 地址寻址等功能。它通过在数据中添加帧头和帧尾等信息,使数据能够以帧为单位在物理链路上传输,并确保数据帧的正确传输和接收。
- 设备:数据链路层的设备主要有交换机、网桥等。
-
网络层
- 功能:主要负责网络中的寻址和路由选择,使数据能够在不同的网络之间进行传输。它为数据包添加源 IP 地址和目的 IP 地址等信息,通过路由算法确定数据传输的最佳路径。
- 设备:网络层的主要设备是路由器。
-
传输层
- 功能:主要负责在不同主机上的应用程序之间提供可靠或不可靠的端到端通信。它通过端口号来标识不同的应用程序进程,实现数据的分段和重组,确保数据的可靠传输。常见的传输层协议有 TCP(传输控制协议)和 UDP(用户数据报协议)。
- 协议:TCP 提供面向连接的、可靠的字节流服务;UDP 提供无连接的、不可靠的数据包服务。
-
会话层
- 功能:主要负责建立、维护和管理会话连接。它可以在不同主机的应用程序之间建立会话,协调数据的传输顺序,以及在会话结束时进行连接的释放等操作。
- 应用:比如在 Web 应用中,用户登录到网站后,会话层会建立一个会话,用于跟踪用户的操作和状态,直到用户退出登录或会话超时。
-
表示层
- 功能:主要负责处理数据的表示和转换,包括数据的加密和解密、压缩和解压缩、字符编码转换等。它确保不同系统之间能够正确地理解和处理数据。
- 应用:当用户从网络上下载一个压缩文件时,在接收端,表示层会对文件进行解压缩操作,以便应用层能够正确地读取和处理文件内容。
-
应用层
- 功能:是直接为用户提供服务的一层,它包含了各种网络应用协议和服务,如 HTTP(超文本传输协议)、FTP(文件传输协议)、SMTP(简单邮件传输协议)等,用户通过应用层的应用程序来访问网络资源和服务。
- 应用:用户使用浏览器访问网站时,就是通过应用层的 HTTP 协议与服务器进行通信,获取网页内容等信息。
二、UDP协议(用户数据报)和TCP传输控制协议
连接特性
- UDP:是无连接的协议,发送数据前不需要先建立连接,就像邮寄信件一样,只管把数据报发送出去,不关心对方是否准备好接收,也不确认对方是否成功收到。
- TCP:是面向连接的协议,在发送数据前,需要先在发送方和接收方之间建立连接,就像打电话,双方要先接通,确认可以通信后才开始说话。
可靠性
- UDP:不保证数据的可靠传输,数据报可能会丢失、重复或乱序到达。
- TCP:提供可靠的传输服务,通过序列号、确认应答、重传机制等保证数据无差错、不丢失、不重复且按序到达。
传输效率
- UDP:没有连接建立和维护的开销,也没有复杂的确认和重传机制,传输速度快,效率高,适合对实时性要求高但对数据准确性要求相对较低的场景。
- TCP:由于要保证数据的可靠性,有较多的控制机制,会带来一定的开销,传输效率相对 UDP 低一些,但在对数据准确性要求高的场景中是必要的。
数据格式
- UDP:数据报格式简单,首部只有 8 个字节,包括源端口、目的端口、长度和校验和,数据部分就是应用层传递下来的数据。
- TCP:首部一般为 20 字节,包含源端口、目的端口、序列号、确认号、数据偏移、保留、控制位、窗口、校验和、紧急指针等字段,比 UDP 复杂,能提供更多的控制信息。
应用场景
- UDP:常用于实时性要求高的应用,如视频会议、实时监控、DNS(域名系统)查询等。在这些场景中,少量数据的丢失或延迟可以接受,关键是要保证数据的实时传输。
- TCP:适用于对数据准确性和完整性要求严格的应用,如网页浏览、文件传输、电子邮件等。这些应用需要确保数据完整无误地到达目的地。
三、三次握手四次挥手
三次握手
- 第一次:客户端发 SYN 包,含初始序列号 seq=x,向服务器请求建立连接,此时客户端进入 SYN_SENT 状态。
- 第二次:服务器收到 SYN 包后,发 SYN+ACK 包,确认号 ack=x + 1,自己的序列号 seq=y,服务器进入 SYN_RCVD 状态。
- 第三次:客户端收到 SYN+ACK 包后,发 ACK 包,确认号 ack=y + 1,序列号 seq=x + 1,双方进入 ESTABLISHED 状态,连接建立成功。

四次挥手
- 第一次:主动关闭方发 FIN 包,含序列号 seq=u,请求关闭连接,进入 FIN_WAIT_1 状态。
- 第二次:被动关闭方收到 FIN 包后,发 ACK 包,确认号 ack=u + 1,自己的序列号 seq=v,主动关闭方进入 FIN_WAIT_2 状态,被动关闭方进入 CLOSE_WAIT 状态。
- 第三次:被动关闭方没有数据要发送时,发 FIN 包,序列号 seq=w,确认号 ack=u + 1,进入 LAST_ACK 状态。
- 第四次:主动关闭方收到 FIN 包后,发 ACK 包,确认号 ack=w + 1,序列号 seq=u + 1,进入 TIME_WAIT 状态,一段时间后进入 CLOSED 状态。被动关闭方收到 ACK 包后,也进入 CLOSED 状态。

五、C/S 模型(客户端 / 服务器模型)、B/S 模型(浏览器 / 服务器模型)和 P2P 模型(对等网络模型五
1、B/S http
C/S 标准协议 自定义协议
2、B/S 客户端通用
C/S client专用客户
3、CS 功能复杂
BS 功能简单
4、BS 资源从s到c
CS 发送必要资源
六、相关函数
1、inet_addr(const char *IP)
把点分十进制IP转化为大端的uint32
2、htons(50000)
网络转主机,转成大端
3、sockfd = socket(AF_INET,SOCK_DGRAM(数据报)|SOCK_STREAM(TCP传输控制协议),0)
提供了一个编程接口,使得不同主机上的进程能够通过网络进行通信
4、bind(sockfd,(SA)&ser,sizeof(ser))
将一个套接字(socket)与特定的 IP 地址和端口号进行绑定
5、accept(listfd, (SA)&cli, &len)
从监听套接字的已完成连接队列中取出一个连接,如果该队列中没有已完成的连接,accept 函数会进入阻塞状态,直到有新的客户端连接请求到来。一旦成功取出连接,它会返回一个新的套接字描述符,这个新套接字专门用于和对应的客户端进行数据通信,而原来的监听套接字则继续监听其他新的客户端连接请求。
6、connect(sockfd, (SA)&ser, sizeof(ser))
让客户端套接字尝试与指定的服务器地址和端口建立连接。一旦连接成功建立,客户端和服务器端之间就可以进行数据的双向传输。
相关文章:
linux学习之网络编程
一、两个模型及其对应关系 OSI七层模型 TCP/IP 四层模型 -------------------------------------------------------------------------- 应用层 表示层 ----> …...
scrol家族 offset家族 client家族学习
Scroll 系列属性 scrollTop & scrollLeft scrollTop: 返回元素的内容已向上滚动的部分的高度。scrollLeft: 返回元素的内容已向左滚动的部分的宽度。 scrollHeight & scrollWidth scrollHeight: 返回元素的实际高度,包括由于溢出而在屏幕上不可见的内容…...
css-background-color(transparent)
1.前言 在 CSS 中,background-color 属性用于设置元素的背景颜色。除了基本的颜色值(如 red、blue 等)和十六进制颜色值(如 #FF0000、#0000FF 等),还有一些特殊的属性值可以用来设置背景颜色。 2.backgrou…...
如何将xps文件转换为txt文件?xps转为pdf,pdf转为txt,提取pdf表格并转为txt
文章目录 xps转txt方法一方法二 pdf转txt整页转txt提取pdf表格,并转为txt 总结另外参考XPS文件转换为TXT文件XPS文件转换为PDF文件PDF文件转换为TXT文件提取PDF表格并转为TXT示例代码(部分) 本文测试代码已上传,路径如下ÿ…...
【Samba】Ubuntu20.04 Windows 共享文件夹
【Samba】Ubuntu20.04 Windows 共享文件夹 前言整体思路检查 Ubuntu 端 和 Windows 网络通信是否正常创建共享文件夹安装并配置 Samba 服务器安装 Samba 服务器创建 Samba 用户编辑 Samba 配置文件重启 Samba 服务器 在 Windows 端 访问 Ubuntu 的共享文件夹 前言 本文基于 Ub…...
gradle和maven的区别以及怎么选择使用它们
目录 区别 1. 配置方式 2. 依赖管理 3. 构建性能 4. 灵活性和扩展性 5. 多项目构建 如何选择使用 选择 Maven 的场景 选择 Gradle 的场景 区别 1. 配置方式 Maven: 使用基于 XML 的 pom.xml 文件进行配置。所有的项目信息、依赖管理、构建插件等都在这个文…...
360大数据面试题及参考答案
数据清理有哪些方法? 数据清理是指发现并纠正数据文件中可识别的错误,包括检查数据一致性,处理无效值和缺失值等。常见的数据清理方法有以下几种: 去重处理:数据中可能存在重复的记录,这不仅会占用存储空间,还可能影响分析结果。通过对比每条记录的关键属性,若所有关键…...
Myeclipse最新版本 C1 2019.4.0
Myeclipse C1 2019.4.0下载地址:链接: https://pan.baidu.com/s/1MbOMLewvAdemoQ4FNfL9pQ 提取码: tmf6 1.1、什么是集成开发环境? ★集成开发环境讲究-站式开发,使用这个工具即可。有提示功能,有自动纠错功能。 ★集成开发环境可以让软件开…...
MySQL 9.2.0 的功能
MySQL 9.2.0 的功能 MySQL 9.2.0 的功能新增、弃用和删除内容如下: 新增功能 权限新增12:引入了CREATE_SPATIAL_REFERENCE_SYSTEM权限,拥有该权限的用户可执行CREATE SPATIAL REFERENCE SYSTEM、CREATE OR REPLACE SPATIAL REFERENCE SYSTEM…...
接口 V2 完善:分布式环境下的 WebSocket 实现与 Token 校验
🎯 本文档详细介绍了如何使用WebSocket协议优化客户端与服务端之间的通信,特别是在处理异步订单创建通知的场景中。通过引入WebSocket代替传统的HTTP请求-响应模式,实现了服务器主动向客户端推送数据的功能,极大地提高了实时性和效…...
微前端架构在前端开发中的实践与挑战
随着单页面应用(SPA)和前端框架如 React、Vue、Angular 的快速发展,现代前端应用的复杂度日益提升。尤其是当应用规模逐渐增大时,单一的代码库往往难以应对不同团队的协作和版本管理问题。为了应对这一挑战,微前端架构…...
【自学嵌入式(6)天气时钟:软硬件准备、串口模块开发】
天气时钟:软硬件准备、串口模块开发 软硬件准备接线及模块划分ESP8266开发板引脚图软件准备 串口模块编写串口介绍Serial库介绍 近期跟着网上一些教学视频,编写了一个天气时钟,本篇及往后数篇都将围绕天气时钟的制作过程展开。本文先解决硬件…...
macbook安装go语言
通过brew来安装go语言 使用brew命令时,一般都会通过brew search看看有哪些版本 brew search go执行后,返回了一堆内容,最下方展示 If you meant "go" specifically: It was migrated from homebrew/cask to homebrew/core. Cas…...
代码随想录算法训练营第三十八天-动态规划-完全背包-322. 零钱兑换
太难了 但听了前面再听这道题感觉递推公式也不是不难理解 动规五部曲 dp[j]代表装满容量为j(也就是目标值)的背包最少物品数量递推公式:dp[j] std::min(dp[j], dp[j - coins[i]] 1)当使用coins[i]这张纸币时,要向前找到容量为…...
小阿卡纳牌
小阿卡纳牌 风:热湿 火:热干 水:冷湿 土:冷干 火风:温度相同,但是湿度不同,二人可能会在短期内十分热情,但是等待热情消退之后,会趋于平淡。 湿度相同、温度不同&#x…...
DDD 和 TDD
领域驱动设计(DDD) DDD 是一种软件开发方法,强调通过与领域专家的密切合作来构建一个反映业务逻辑的模型。其核心思想是将业务逻辑和技术实现紧密结合,以便更好地解决复杂的业务问题。 DDD 的关键概念: 1. 领域模型 …...
Java学习教程,从入门到精通,JDBC插入记录语法及案例(104)
JDBC插入记录语法及案例 一、JDBC插入记录语法 在JDBC中,插入记录主要通过执行SQL的INSERT语句来实现。其基本语法如下: INSERT INTO 表名 (列1, 列2, ..., 列n) VALUES (值1, 值2, ..., 值n);表名:需要插入记录的表的名称。列1, 列2, …,…...
Linux文件基本操作
Linux 的设计哲学 在 Linux 中,一切皆文件! 什么是文件? 文件是具有永久存储性,按特定字节顺序组成的命名数据集 文件可分为:文本文件,二进制文件 文本文件:每个文件存放一个 ASCII 码 存储…...
React 路由导航与传参详解
随着单页面应用(SPA)已经成为主流。React 作为最流行的前端框架之一,提供了强大的路由管理工具 react-router-dom,帮助开发者轻松实现页面导航和传参。本文将详细介绍如何使用 react-router-dom 构建路由导航、传参以及嵌套路由的…...
C#面试常考随笔6:ArrayList和 List的主要区别?
在 C# 中,ArrayList和List<T>(泛型列表)都可用于存储一组对象。推荐优先使用List<T>,因为它具有更好的类型安全性、性能和语法简洁性,并且提供了更丰富的功能。只有在需要与旧代码兼容或存储不同类型对象的…...
行波管TWT聚焦系统硬核拆解:PPM vs PCM 核心区别、原理对比与工程选型全指南
对于行波管(TWT)研发工程师、射频微波专业学生、雷达 / 通信系统硬件从业者而言,电子注聚焦系统是决定器件生死的核心模块—— 它直接决定了电子注的流通率、注波互作用效率,甚至是器件的长期可靠性。在永磁聚焦方案中,…...
Nunchaku FLUX.1-dev GPU算力优化:TensorRT加速推理实测对比
Nunchaku FLUX.1-dev GPU算力优化:TensorRT加速推理实测对比 如果你正在使用Nunchaku FLUX.1-dev模型生成图片,可能会发现一个问题:生成速度不够快,特别是当你想批量出图或者尝试不同参数时,等待时间有点长。 今天我…...
Qwen3-Reranker-8B开源大模型:支持HuggingFace Transformers原生加载
Qwen3-Reranker-8B开源大模型:支持HuggingFace Transformers原生加载 如果你正在构建一个智能搜索系统、问答机器人或者文档分析工具,那么“重排序”这个环节你一定不陌生。简单来说,它就像一个智能裁判,当你的检索系统从海量文档…...
EdisonZhou
AI训练存储选型的演进路线 第一阶段:单机直连时代 早期的深度学习数据集较小,模型训练通常在单台服务器或单张GPU卡上完成。此时直接将数据存储在训练机器的本地NVMe SSD/HDD上。 其优势在于IO延迟最低,吞吐量极高,也就是“数据离…...
MCP 会不会成为 AI 系统的“新中间件”?
一、为什么人们开始把 MCP 和“中间件”类比?(Why Do People Start Comparing MCP to “Middleware”?)1、MCP 出现的位置非常“熟悉”(MCP Appears in a Very Familiar Position)当人们第一次在企业架构中引入 MCP 时…...
快速原型构建遇阻?用快马AI一键绕过npm error 128,聚焦核心功能验证
最近在尝试用Node.js快速验证一个Web服务原型时,遇到了烦人的npm error code 128问题。这个错误通常和Git仓库权限相关,会直接卡住依赖安装流程。经过一番折腾,我总结出一套在InsCode(快马)平台快速绕开这个坑的实践方案,分享给同…...
AI赋能.NET开发:让快马平台智能生成Redis缓存与消息队列集成代码
最近在做一个电商系统的订单模块,发现缓存和消息队列这两个组件几乎是标配。但每次从零开始集成Redis和RabbitMQ都要查半天文档,配置各种连接字符串,写一堆样板代码。直到尝试用InsCode(快马)平台的AI辅助功能,才发现原来这些重复…...
3步解锁显卡潜力:OptiScaler跨平台开源上采样技术配置攻略
3步解锁显卡潜力:OptiScaler跨平台开源上采样技术配置攻略 【免费下载链接】OptiScaler OptiScaler bridges upscaling/frame gen across GPUs. Supports DLSS2/XeSS/FSR2 inputs, replaces native upscalers, enables FSR3 FG on non-FG titles. Supports Nukem mo…...
AQM0802字符LCD轻量驱动库:裸机printf级显示方案
1. 项目概述AQM0802 是一款由旭化成(AKM)推出的超低功耗、单色字符型液晶显示模块,采用 COG(Chip-on-Glass)封装工艺,内置 KS0066 兼容控制器。其典型型号为 AQM0802A-YBW,具备 8 字符 2 行的显…...
别死记硬背了!一张图带你理清编译原理‘语法制导翻译’到‘代码优化’的核心链路
编译原理核心链路解析:从语法制导翻译到代码优化的实战指南 编译原理作为计算机科学的重要基石,常常让学习者感到知识点零散、难以形成系统认知。本文将以赋值语句为例,通过清晰的逻辑链路,展示从源代码到优化代码的完整编译过程&…...
