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>,因为它具有更好的类型安全性、性能和语法简洁性,并且提供了更丰富的功能。只有在需要与旧代码兼容或存储不同类型对象的…...

XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...

RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...

Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...

CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...