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

业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...

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

家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...