【网络编程】网络基础概念
- (꒪ꇴ꒪ ),Hello我是祐言QAQ
- 我的博客主页:C/C++语言,数据结构,Linux基础,ARM开发板,网络编程等领域UP🌍
- 快上🚘,一起学习,让我们成为一个强大的攻城狮!
- 送给自己和读者的一句鸡汤🤔:集中起来的意志可以击穿顽石!
- 作者水平很有限,如果发现错误,请在评论区指正,感谢🙏
接上文
【网络编程】TCP/IP协议(互联网的基石)_祐言QAQ的博客-CSDN博客
第四部分:网络模型
4.1 探讨OSI模型和TCP/IP模型,比较它们之间的异同
OSI模型
OSI模型(Open Systems Interconnection)是一种七层网络模型,用于描述计算机网络中的通信协议。它是一种理论上的模型,旨在标准化计算机网络的通信过程。以下是OSI模型的七个层次,自下而上排列:
- 物理层:负责传输原始比特流,处理硬件传输和电信信号。
- 数据链路层:处理数据帧的传输,提供数据的可靠传输和错误检测。
- 网络层:负责数据包的路由和寻址,实现不同网络之间的通信。
- 传输层:管理端到端通信,提供数据的可靠性和流量控制。
- 会话层:处理会话管理和同步,确保数据的正确顺序传输。
- 表示层:负责数据的编码和加密,以确保不同系统间的数据格式兼容。
- 应用层:提供应用程序接口,使应用程序能够访问网络服务。
TCP/IP模型
TCP/IP模型是因特网使用的网络模型,也被称为互联网模型。它通常被划分为四个层次,如下所示:
- 物理层:与OSI模型的物理层类似,负责传输原始比特流。
- 数据链路层:与OSI的数据链路层相似,负责数据帧的传输和错误检测。
- 网络层:与OSI的网络层类似,负责数据包的路由和寻址。
- 传输层:与OSI的传输层类似,提供端到端通信和可靠性。
在TCP/IP模型中,高层的功能通常包括在应用层,而OSI模型中这些功能分布在会话层、表示层和应用层中。因此,TCP/IP模型更加精简,适用于互联网通信。
4.2 说明每个模型的不同层次和功能
OSI模型
- 物理层:处理硬件传输和电信信号。
- 数据链路层:提供数据的可靠传输和错误检测。
- 网络层:负责数据包的路由和寻址,实现不同网络之间的通信。
- 传输层:管理端到端通信,提供数据的可靠性和流量控制。
- 会话层:处理会话管理和同步,确保数据的正确顺序传输。
- 表示层:负责数据的编码和加密,以确保不同系统间的数据格式兼容。
- 应用层:提供应用程序接口,使应用程序能够访问网络服务。
TCP/IP模型
- 物理层:负责传输原始比特流。
- 数据链路层:处理数据帧的传输和错误检测。
- 网络层:负责数据包的路由和寻址。
- 传输层:提供端到端通信和可靠性。
TCP/IP模型将会话层、表示层和应用层的功能整合到了应用层中。这使得模型更加紧凑,适用于因特网通信。
通过对比这两个模型,我们可以看出它们在层次划分和功能分布上的异同。在实际网络工程中,TCP/IP模型更常用,但了解OSI模型有助于深入理解网络协议的设计和原理。
第五部分:IP
5.1 基本概念
IP(Internet Protocol,互联网协议)是计算机网络通信的基础协议之一。它负责将数据包从一个计算机传输到另一个计算机,无论它们在世界的哪个地方。以下是IP的一些基本概念:
-
数据包寻址: IP协议使用IP地址来唯一标识网络中的每个设备。这些地址充当数据包的目标地址,确保数据包到达正确的目标。
-
路由: IP协议还负责决定数据包如何从发送方传输到接收方。这包括选择正确的路径和中转节点以确保数据包的有效传递。
-
无连接协议: IP是无连接协议,这意味着它在发送数据包之前不建立持久连接。每个数据包被独立处理,不需要维护连接状态。
-
全球性: IP允许跨全球范围的通信。无论计算机位于世界的哪个地方,只要它们连接到因特网,就可以通过IP协议进行通信。
5.2 IP地址分类
IP地址是IPv4和IPv6两种版本的核心。它们用于标识设备在网络中的位置。以下是有关IP地址分类的信息:
IPv4地址
IPv4采用32位地址,通常以四个十进制数表示(例如,192.168.0.1)。IPv4地址分为以下几个类别:
- A类地址: 用于大型网络,其第一个字节范围为1-126。
- B类地址: 用于中型网络,其第一个字节范围为128-191。
- C类地址: 用于小型网络,其第一个字节范围为192-223。
- D类地址: 用于多播(multicast)通信,范围为224-239。
- E类地址: 保留用途,范围为240-255。
IPv6地址
IPv6采用128位地址,通常以八组16进制数表示(例如,2001:0db8:85a3:0000:0000:8a2e:0370:7334)。IPv6地址的数量远远超过IPv4,以应对不断增长的网络需求。
5.3 子网掩码
子网掩码用于划分IP地址空间,允许在一个网络中创建多个子网络(子网)。它决定了IP地址中哪些位用于网络标识,哪些位用于主机标识。子网掩码与IP地址结合使用,以确定一个设备是否在同一子网内。以下是子网掩码的一些关键概念:
- 网络标识: 子网掩码中设定为1的位用于标识网络,剩余位用于主机。
- 子网数量: 子网掩码的长度决定了网络中可以创建的子网数量。更长的子网掩码创建更多的子网,但每个子网的主机数量较少。
- CIDR表示法: 为了简化子网掩码的表示,使用CIDR表示法(Classless Inter-Domain Routing)。例如,/24表示子网掩码中有24位设置为1,用于网络标识。
子网掩码的使用允许网络管理员更好地组织和管理IP地址,以适应复杂的网络拓扑和需求。
第六部分:端口号
6.1 解释端口号的概念和作用
端口号是计算机网络中的重要概念,用于标识计算机上运行的不同服务或应用程序。每个计算机都有数千个端口可用于网络通信。端口号的作用是确保数据包在源和目标计算机之间正确地路由到特定的应用程序或服务。
在TCP/IP协议中,端口号是一个16位的整数,范围从0到65535。这个范围被分成三个主要部分:
-
0到1023: 这些端口号被称为「知名端口」或「系统端口」。它们通常由标准化的网络协议使用,如HTTP(端口80)、FTP(端口21)和SSH(端口22)。
-
1024到49151: 这些端口号被称为「注册端口」。它们可以被应用程序或服务动态分配,但通常与特定的服务相关。
-
49152到65535: 这些端口号是「动态端口」或「私有端口」。它们通常被客户端应用程序使用,用于临时通信。
6.2 说明不同端口号的用途
不同的端口号用于不同类型的网络服务。以下是一些常见的端口号及其用途的示例:
-
端口80(HTTP): 用于提供Web服务。当你在浏览器中访问网站时,通常会使用HTTP协议通过端口80来传输网页数据。
-
端口21(FTP): 用于文件传输协议(FTP)。FTP允许文件在客户端和服务器之间进行传输。
-
端口22(SSH): 用于安全外壳协议(SSH)。SSH提供了加密的远程访问,通常用于安全地登录远程服务器。
-
端口25(SMTP): 用于简单邮件传输协议(SMTP)。SMTP用于发送电子邮件。
-
端口53(DNS): 用于域名系统(DNS)。DNS将域名转换为IP地址,以便在网络上查找主机。
-
端口443(HTTPS): 用于超文本传输安全协议(HTTPS)。HTTPS是加密的HTTP协议,用于安全的Web通信,如在线银行和电子商务网站。
-
端口3306(MySQL): 用于MySQL数据库服务器。MySQL是一种常用的数据库管理系统。
-
端口8080: 通常用于代理服务器或Web应用程序的备用HTTP端口。
这些只是一些示例,不同的应用程序和服务可能使用不同的端口号。端口号的正确使用确保了网络上各种应用程序的正常通信,并允许多个应用程序在同一台计算机上同时运行而不发生冲突。
第七部分:字节序
7.1 介绍字节序(Endianness)的概念
字节序(Endianness)是指多字节数据在内存中存储的顺序。它是由计算机体系结构决定的,用于确定在内存中存储多字节数据时,字节的排列顺序是从高位到低位(大端序)还是从低位到高位(小端序)。了解字节序对于在不同计算机之间正确地解释二进制数据非常重要。
7.2 解释大端序和小端序
大端序(Big Endian)
在大端序中,最高有效字节(Most Significant Byte,MSB)存储在最低内存地址,而最低有效字节(Least Significant Byte,LSB)存储在最高内存地址。这意味着多字节数据的高位字节存储在低地址处,低位字节存储在高地址处。
小端序(Little Endian)
在小端序中,最低有效字节(LSB)存储在最低内存地址,而最高有效字节(MSB)存储在最高内存地址。这意味着多字节数据的低位字节存储在低地址处,高位字节存储在高地址处。
字节序的区别在网络通信和数据存储中具有重要性:
-
网络通信: 在网络通信中,不同计算机可能使用不同的字节序。如果发送方和接收方的字节序不匹配,解释数据时可能会产生错误。因此,在网络通信中,通常需要进行字节序的转换,以确保数据正确解释。
-
数据存储: 计算机在存储多字节数据时通常采用其本地字节序。这意味着如果将数据存储在一个计算机上,然后将其传输到具有不同字节序的计算机,数据可能会被错误解释。因此,在存储和传输数据时,需要考虑字节序并进行适当的转换。
综上所述,了解字节序的概念以及在网络通信和数据存储中的影响至关重要,特别是在跨不同计算机体系结构之间传输和处理数据时。确保数据在不同计算机之间正确解释是实现互操作性的关键因素。
第八部分:套接字socket
8.1 进程间的通信接口,特殊的文件描述符
套接字(Socket)是一种用于实现进程间通信的接口,它允许不同计算机上的应用程序进行数据交换。套接字允许应用程序通过网络或本地计算机上的进程进行通信,这种通信可以是双向的,可以传输数据、文件或者其他形式的信息。
套接字的工作方式类似于文件描述符。它们可以被用于打开、读取、写入和关闭,使应用程序能够通过套接字与其他进程进行数据交换。套接字还允许应用程序实现各种不同的通信模式,包括面向连接的通信(如TCP套接字)和无连接的通信(如UDP套接字)。
8.2 套接字分类
有不同类型的套接字,每种类型适用于不同的通信需求和场景。以下是两种常见的套接字类型:
TCP套接字
TCP(Transmission Control Protocol)套接字是一种可靠的套接字类型,它提供面向连接的通信。以下是TCP套接字的一些特点:
-
可靠性: TCP确保数据的可靠传输,它使用确认机制来确保数据的完整性和顺序传递。
-
有序性: TCP保持数据的有序性,确保接收方按照发送顺序接收数据。
-
面向连接: TCP在通信前需要建立连接,然后再进行数据传输,之后关闭连接。
-
适用于可靠性要求高的应用: 由于其可靠性,TCP常用于需要确保数据完整性和顺序的应用,如Web浏览器、电子邮件等。
UDP套接字
UDP(User Datagram Protocol)套接字是一种无连接的套接字类型,它提供低延迟的通信。以下是UDP套接字的一些特点:
-
无连接: UDP不需要在通信前建立连接,数据包可以立即传输。
-
低延迟: 由于无连接性质,UDP通常具有较低的延迟,适用于实时通信。
-
不可靠性: UDP不提供数据的可靠性传输,数据包可能会丢失或乱序。
-
适用于实时应用: 由于其低延迟特性,UDP常用于音频、视频流传输以及在线游戏等需要快速传输的应用。
选择TCP或UDP套接字取决于应用程序的需求。如果应用程序需要可靠性和有序性,TCP是更好的选择。如果应用程序更关注低延迟和快速传输,UDP可能更适合。因此,了解套接字类型的特点和适用场景对于有效地设计和开发网络应用程序至关重要。
更多C/C++语言、Linux系统、数据结构和ARM板实战相关文章,关注专栏:
手撕C语言
玩转linux
脚踢数据结构
系统、网络编程
探索C++
6818(ARM)开发板实战
📢写在最后
- 今天的分享就到这啦~
- 觉得博主写的还不错的烦劳
一键三连喔~ - 🎉🎉🎉感谢关注🎉🎉🎉
相关文章:
【网络编程】网络基础概念
(꒪ꇴ꒪ ),Hello我是祐言QAQ我的博客主页:C/C语言,数据结构,Linux基础,ARM开发板,网络编程等领域UP🌍快上🚘,一起学习,让我们成为一个强大的攻城狮࿰…...
连接虚拟机报错 Could not connect to ‘192.168.xxx.xxx‘ (port 22): Connection failed.
使用xshell连接虚拟机报错 Connecting to 192.168.204.129:22… Could not connect to ‘192.168.204.129’ (port 22): Connection failed. Type help’ to learn how to use Xshell prompt. 按网上的方法 是否能ping通内外网 ping www.baidu.com防火墙是否关闭 firewal…...
数学建模--Topsis评价方法的Python实现
目录 1.算法流程简介 2.算法核心代码 3.算法效果展示 1.算法流程简介 """ TOPSIS(综合评价方法):主要是根据根据各测评对象与理想目标的接近程度进行排序. 然后在现有研究对象中进行相对优劣评价。 其基本原理就是求解计算各评价对象与最优解和最劣解的距离…...
超越时间与人力的软件开发智慧:《人月神话》
目录 1、写在前面2、沟通!沟通!沟通!3、“银弹论”4、“人月神话”不能成立的原因5、影响力6、图书推荐 1、写在前面 《人月神话》是由计算机科学家弗雷德里克布鲁克斯所著的一本经典著作,首次出版于1975年。这本书以一个个小故事…...
Java Stream 流对象(实用技巧)
目录 一、InputStream & OutputStream 1.1、InputStream 和 OutputStream 一般使用 1.2、特殊使用 1.2.1、如何表示文件读取完毕?(DataInputStream) 1.2.2、字符读取/文本数据读取(Scanner) 1.2.3、文件的随机…...
【用unity实现100个游戏之8】用Unity制作一个炸弹人游戏
文章目录 前言素材开始一、绘制地图二、玩家设置三、玩家移动四、玩家四方向动画运动切换 五、放置炸弹六、生成爆炸效果七、墙壁和可破坏障碍物的判断八、道具生成和效果九、玩家死亡十、简单的敌人AI十一、简单敌人AI十二、随机绘制地图十三、虚拟摇杆 最终效果待续源码完结 …...
简易版人脸识别qt opencv
1、配置文件.pro #------------------------------------------------- # # Project created by QtCreator 2023-09-05T19:00:36 # #-------------------------------------------------QT core guigreaterThan(QT_MAJOR_VERSION, 4): QT widgetsTARGET 01_face TEMP…...
如何系统地学习 JavaScript?
前言 在学习JavaScript前需要先将Html和Css的相关知识点弄清楚,Js的很多操作是要结合Html和Css,下面我总结了Html、Css和Js的相关学习知识点供参考,希望对你有所帮助喔~ Html 文档学习 【HTML 】w3school教程 :https://www.w3school.com.…...
对称二叉树(Leetcode 101)
题目 101. 对称二叉树 思路 使用层序遍历,遍历当前层的节点时,如该节点的左(右)孩子为空,在list中添加null,否则加入左(右)孩子的值。每遍历完一层则对当前list进行判断,…...
动手学深度学习(2)-3.5 图像分类数据集
文章目录 引言正文图像分类数据集主要包介绍主要流程具体代码练习 总结 引言 这里主要是看一下如何加载数据集,并且生成批次训练的数据。最大的收获是,知道了如何在训练阶段提高模型训练的性能 增加batch_size增加num_worker数据预加载 正文 图像分类…...
C标准输入与标准输出——stdin,stdout
🔗 《C语言趣味教程》👈 猛戳订阅!!! —— 热门专栏《维生素C语言》的重制版 —— 💭 写在前面:这是一套 C 语言趣味教学专栏,目前正在火热连载中,欢迎猛戳订阅&#…...
如何将home目录空间扩充到根目录下
目录 1、查看查看磁盘使用情况2、扩容思路3、卸载并删除/home4、扩大/root逻辑卷5、扩大/文件系统6、重建/home逻辑卷7、创建/home文件系统8、将新建的文件系统挂载到/home目录下9、恢复/home并删除备份10、再次查看看磁盘存储 系统:centos7.9 1、查看查看磁盘使用…...
Ceph PG Peering数据修复
ceph数据修复 当PG完成了Peering过程后,处于Active状态的PG就可以对外提供服务了。如果该PG的各个副本上有不一致的对象,就需要进行修复。 Ceph的修复过程有两种:Recovery和Backfill。 Recovery是仅依据PG日志中的缺失记录来修复不一致的对…...
服务器上使用screen和linux的基本操作
临时换源 pip install torch1.7.1 -i https://pypi.tuna.tsinghua.edu.cn/simple some-package pip install torch1.7.1 -i http://pypi.douban.com/simple some-package临时清华源和豆瓣源 配环境的一点小问题 我们尽量是去配置能满足代码的环境,而不要想着修改…...
Kafka3.0.0版本——文件存储机制
这里写木目录标题 一、Topic 数据的存储机制1.1、Topic 数据的存储机制的概述1.2、Topic 数据的存储机制的图解1.3、Topic 数据的存储机制的文件解释 二、Topic数据的存储位置示例 一、Topic 数据的存储机制 1.1、Topic 数据的存储机制的概述 Topic是逻辑上的概念,…...
Linux如何安装MySQL
Linux安装MySQL5.7 1、下载 官网下载地址:http://dev.mysql.com/downloads/mysql/ 2、复制下面几个文件 3、检查当前系统是否安装过mysql、检查当前mysql依赖环境、检查/tmp文件夹权限 1)检查当前系统是否安装过mysql,执行安装命令前&am…...
确保网络的安全技术介绍
防火墙技术 防火墙是隔离本地网络与外界网络的一道防御系统。通常用于内部局域网 与外部广域网之间,通过限制外部网络用户以非法手段来访问内部资源,来达到保 护内部网络的安全。根据安全规则,防火墙对任何外部网络访问内部网络的行为进 …...
机器学习练习
原文章添加链接描述...
算法通关村第十九关——最小路径和
LeetCode64. 给定一个包含非负整数的 m n 网格 grid,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 输入:grid[[1,3,1],[1,5,1],[4,2,1]] 输出:7 解释:因为路径1→3→1→1→1的总和最小。 public int minPath…...
Linux 访问进程地址空间函数 access_process_vm
文章目录 一、源码解析二、Linux内核 用途2.1 ptrace请求2.2 进程的命令行 参考资料 一、源码解析 /*** get_task_mm - acquire a reference to the tasks mm** Returns %NULL if the task has no mm. Checks PF_KTHREAD (meaning* this kernel workthread has transiently a…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...
mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...
HTML前端开发:JavaScript 获取元素方法详解
作为前端开发者,高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法,分为两大系列: 一、getElementBy... 系列 传统方法,直接通过 DOM 接口访问,返回动态集合(元素变化会实时更新)。…...
