Linux网络与数据封装

news2024/10/7 18:27:30

在这里插入图片描述

欢迎关注博主 Mindtechnist 或加入【Linux C/C++/Python社区】一起探讨和分享Linux C/C++/Python/Shell编程、机器人技术、机器学习、机器视觉、嵌入式AI相关领域的知识和技术。


Linux网络与数据封装

    • 1. 网络应用程序的设计模式
      • (1)C/S架构
      • (2)B/S架构
    • 2. 协议
    • 3. 网络分层模型
    • 4. 协议格式——数据包的封装思想
      • (1)以太网帧格式
      • (2)IP段数据格式
      • (3)UDP数据包格式
      • (4)TCP数据报格式
      • (5)数据的封装过程
    • 5. TCP/UDP传输层协议简介
      • (1)TCP协议
      • (2)UDP协议
    • 6. DNS服务器


专栏:《Linux从小白到大神》《网络编程》


1. 网络应用程序的设计模式

(1)C/S架构

client/server架构,即客户端/服务器架构。

  • 优点:协议选用比较灵活;可以缓存数据,比如说我们在打游戏时,在游戏过程中,实际上一些音效、图片都已经缓存下来了,想象一下,如果你玩LOL的时候,音效和动画需要去服务器实时下载,那么游戏会卡成什么样子。
  • 缺点:对用户的安全构成威胁,因为客户端收集了哪些信息,这些信息用于什么工作我们都不知道;客户端开发工作量大,调试困难,需要考虑多线程和数据同步。
  • 典型的C/S架构比如QQ微信,我们在使用QQ或者微信的时候都需要安装一个客户端软件,也就是说,需要安装客户端软件的都是基于C/S架构。

(2)B/S架构

browser/server架构,即浏览器/服务器架构。

  • 优点:跨平台。浏览器不需要我们开发,我们只需要下载一个浏览器即可,并且可以在各个平台通过浏览器访问网站数据(手机、电脑等),那么既然是跨平台访问,在开发的时候就需要考虑跨平台开发语言,比如Java和QT等等,QT提供了统一的接口,只不过在不同平台下封装的API不同,有Windows、Linux等,但是可以通过同样的接口去调用。Java是运行在虚拟机上的,只要在不同平台安装Java虚拟机即可。
  • 缺点:只能使用http或https去实现。比如说,我们在浏览器输入百度的域名http://www.baidu.com,这个域名对应一个IP,浏览器会根据解析出的IP向百度的服务器发送一个http请求。

对于两种架构,并没有好坏之分,它们的应用场景不同。比如说,大型游戏必须要通过客户端来运行,比如我们玩的LOL、DNF、CF都需要下载一个客户端。而小型游戏只要在web服务器运行就可以了,比如4399小游戏等。

2. 协议

协议就是指数据传输和数据解释的规则,典型的协议比如TCP/UDP协议、HTTP协议、FTP协议、IP协议、ARP协议等。

在这里插入图片描述

发送数据和接收数据要遵守相同的协议,否则就无法正确解析。同时,发送数据的大小一般不要太大,因为这些数据是存放在栈上的,而栈空间的大小在Linux下默认只有8M。

3. 网络分层模型

① 七层OSI模型

  • 物理层:双绞线、光纤
  • 数据链路层:数据传输、错误检测
  • 网络层:路由转发
  • 传输层:提供端对端的接口
  • 会话层:解除或建立节点之间的联系
  • 表示层:数据格式化、代码转换、数据加密
  • 应用层:文件传输、电子邮件、文件服务、虚拟终端

② TCP/IP四层模型

  • 数据链路层
  • 网络层
  • 传输层
  • 应用层
OSI七层模型TCP/IP四层模型
应用层应用层
表示层应用层 - ftp http ssh telent
会话层应用层
传输层传输层 - TCP/UDP协议
网络层网络层 - IP协议
数据链路层数据链路层(网络接口层)- 以太网帧协议
物理层数据链路层

作为程序员主要关注的是应用层协议(其它三层由操作系统完成),我们可以自己去定义一套应用层协议,实际上大公司都有自己的应用层协议。

在这里插入图片描述

4. 协议格式——数据包的封装思想

(1)以太网帧格式

以太网帧是在数据链路层传输的数据格式,借助mac地址完成数据报的传递

在这里插入图片描述

MAC地址就是网卡编号,我们使用ifconfig就可以看到,硬件地址HWaddr就是MAC地址,这个编号是全世界唯一的,Windows下ipconfig显示的物理地址就是MAC地址(Linux中用:间隔,Windows中用-间隔)

在这里插入图片描述

以太网帧发送数据报的前提是知道MAC地址,否则就要通过ARP协议根据对方的IP(对方的IP我们肯定是知道的,不然的话我们怎么给他发数据)去获取对方的MAC地址,我们只需要关注类型,0800表示正常发送数据,0806表示要获取对方的MAC地址,至于报文数据的填充我们不需要知道,这是操作系统完成的(只有应用层协议的封装由用户完成),当我们发送0806类型的数据包,对方会回复一条ARP数据报,我们就可以获得对方的MAC地址(见下面ARP协议示意图)。也就是说,以太网帧是根据MAC地址发送数据的,并不是根据IP地址发送数据,IP地址是用来获取MAC地址的,获取到MAC地址后,再通过MAC地址发送数据。RARP协议就是通过MAC地址获取IP地址的。

ARP数据报的格式(ARP用于根据IP地址获取MAC地址)

在这里插入图片描述

ARP协议的工作示意图如下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sEaHdrwA-1671699911322)(Typora_picture_reference/1660101327213.png)]

比如说,我们在北京要向广州的人员发送数据,我们只知道对方的IP不知道MAC地址,那么是如何实现以太网帧发送的呢?首先北京的主机会向广州的主机发送一个ARP协议包,帧类型为0806,以太网源地址和发送端地址都是北京本地主机的MAC地址,发送端IP为北京本地主机的IP,目的IP为要发送到的广州主机的IP地址,以太网目的地址我们不知道就填充FF。广州主机接收到这个数据包之后,会回复一个ARP数据包,类型同样为0806,这其中就包含了广州主机的MAC地址,有了这个MAC地址就可以进行以太网帧的发送了。

(2)IP段数据格式

  • 4位版本:ipv4、ipv6,当前主要是ipv4
  • 8位生存时间(TTL):最多经过多少跳,即路由
  • 32位源IP地址:数据发送端地址
  • 32位目的IP地址:数据接收端地址

在这里插入图片描述

需要注意的是,IP协议和IP地址是两个不同的概念,不要混淆。

关于路由:每经过一个路由结点,TTL减一,为了防止无限跳导致垃圾数据包,这个操作是由路由器完成的,当TTL减为0,路由器就不会再转发这个数据包了,而是直接丢弃。假如要从中国通过其他国家,可能通过海底光纤一跳就到达了,所以完全不必担心256跳(2的8次方)不够用,并且路由会选择最短路径。

在这里插入图片描述

(3)UDP数据包格式

在这里插入图片描述

在UDP数据包中包含一个16位源端口号和一个16位目的端口号,端口号是用来标识进程的,每个进程对应位一一个PID。在网络环境中,IP可以定位网络中的一台主机,而port端口可以定位一台主机中的一个进程,格式一般为IP:Port,比如127.0.0.1:80。端口是16位的,端口最大值为65535(2的16次方减一)。

(4)TCP数据报格式

在这里插入图片描述

这里有一个16位的滑动窗口,滑动窗口实际上是代表了存储空间的大小。比如说,A给B发送数据,A发送的速度快,而B处理数据的速度较慢,那么A发送的数据就要先存储起来,B就可以告诉A我的滑动窗口是多大,也就是我能缓存多少数据,A发送的数据就存储在这个缓存中,当缓存区满了后,A就不在发送了。滑动窗口就是做流量控制的,当B的缓存区满了,A就会阻塞,等到B处理了一部分数据后,A再发送数据。

在传输层是不需要封装IP地址的,这是因为传输层的数据包还要经过网络层的包装,而网络层的IP协议中已经封装了IP地址,所以传输层就不需要IP了,传输层主要是封装端口号,端口号用于标识源主机哪个进程传递给目标主机的哪个目标进程。

(5)数据的封装过程

在这里插入图片描述

5. TCP/UDP传输层协议简介

(1)TCP协议

面向连接的安全的流式传输协议

  • 连接的时候,自动进行三次握手
  • 数据发送的时候,会进行数据确认,是否收到
  • 数据丢失之后,会进行数据重传

在这里插入图片描述

(2)UDP协议

面向无连接的不安全的报式传输

  • 连接的时候不会握手,通过IP和PORT连接
  • 数据发送出去之后就不再管了,即不在乎对方收没收到

在这里插入图片描述

实际上,虽然UDP不会校验数据,也就是不安全的,但是实际上我们可以在应用层对数据做校验来实现UDP的安全传输,比如说QQ发消息就是使用的UDP协议,但是它在应用层自己定义了一套协议来保证安全传输,如果传输失败可以再次传输,而QQ密码校验和文件传输则是使用TCP传输。

6. DNS服务器

DNS服务器也叫做域名解析服务器,根据域名解析出IP地址,比如说在浏览器输入一个域名www.baidu.com,该域名将会通过DNS服务器解析得到IP地址。DNS根服务器在全世界总共有13台,其中美国10台,英国、瑞典、日本各有一台。如果其他国家不向中国提供域名解析服务,那么我们就无法上网了,所以中国现在主推IPv6,实现DNS根服务器的多国治理。

在这里插入图片描述


在这里插入图片描述
在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/108612.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VRTK4 入门指南

VRTK4 说明文档VRTK Farm Yard 示例 - Virtual Reality Toolkit要求使用 Unity 2020.3.24f1.Beta 免责声明简介入门下载项目在 Unity 中打开下载的项目使用 Unity Hub在 Unity 中打开项目运行示例场景Made With VRTK贡献第三方包许可证VRTK Farm Yard 示例 - Virtual Reality T…

家居建材行业数字化重构,依靠CRM打通全流程

国家十四五规划提出大力推进产业数字化转型,如今各行各业数字化进程如火如荼,传统行业将数字化转型视为重塑产业竞争力的重要途径。因此,即便是数字化率平均只有10%的家具建材业,也在积极进行全生命周期的产品数字化、全域营销数字…

加载速度提升 15%,关于 Python 启动加速探索与实践的解析 | 龙蜥技术

编者按:在刚刚结束的 PyCon China 2022 大会上,龙蜥社区开发者严懿宸分享了主题为《Python 启动加速的探索与实践》的技术演讲。本次演讲,作者将从 CPython 社区相关工作、本方案的设计及实现,以及业务层面的集成等方面进行介绍。…

Python基础知识入门(四)

Python基础知识入门(一) Python基础知识入门(二) Python基础知识入门(三) 一、条件控制 条件语句是通过一条或多条语句的执行结果(True 或者False)来决定执行的代码块。 注意&…

使用CMake编译基于OpenCV开发的程序的方法

方法 使用CMake编译OpenCV开发的程序分为以下几个步骤: 安装编译器和代码编辑器。 Windows安装Visual Studio社区版,集成了编译器和代码编辑器。Ubuntu安装gcc、g和VSCode: sudo apt install gcc gcmacOS安装XCode Commandline Tools和VS…

R语言应用xgboost进行机器学习(1)

XGBoost 机器学习模型是一种高效且可扩的展的机器学习分类器,由 Chen 和 Guestrin 在 2016 年推广。XGBoost原理是是在决策树的基础上产生迭代,它以 boosting 的方式结合了多个决策树。通常创建每棵新树是为了通过梯度提升来减少先前模型的误差&#xff…

鸿翼档案,将非结构化数据治理能力应用于档案管理的先行者

数字化时代,每个人每天都要接触大量的数据。人们通过分析数据获取信息与知识,帮助自身更好地理解社会动向,掌握行业发展。我们每天都会接触到多种多样的数据,这些数据根据结构可划分为三种:结构化数据、非结构化数据和…

Android设计模式详解之责任链模式

前言 责任链模式是行为型设计模式; 定义:使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。 使用场景:…

基于概率论的MATLAB仿真,内容包括非共轭条件下的后验概率的推导,共轭条件下的非完备集的后验概率的推导

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 1.1先验概率的推导 根据贝叶斯概率论可知,某一事件的后验概率可以根据先验概率来获得,因此,这里首先对事件的先验概率分布进行理论的推导。假设测量的腐蚀数据…

[一个无框架的javaweb demo]番荒之冢 --番剧灯塔站

文章目录番荒之冢 --番剧灯塔站理念大致设计权限分配番剧信息用户/管理员信息邮箱正则匹配URL正则匹配留言信息数据库设计useranimationcommentfavoranim技术栈(无框架)功能一个简单的登录(进行了路由限制, 若未登录都会跳转至此)首页我的我的资料追番清单留言区番剧详情退出登…

华为云-计算云服务介绍

前言 相信很多小伙伴在刚开始接触各类云产品的时候,被各种各样的云产品类如规格、型号、价格、适用场景等问题所困扰。本文就给大家介绍一下华为云常见云产品的规格区别和适用场景。帮助大家选择合适的云产品。 文章目录前言一、计算云服务1.弹性云服务器2.裸金属服…

Apache Flink 部署模式

目录 会话模式 Session Mode 单作业模式 Per-Job Mode (deprecated) 应用模式 Application Mode 在一些应用场景中,对于集群资源分配和占用的方式,可能会有特定的需求。Flink 为各种场景提供了不同的部署模式,主要有以下三种: i…

ArcGIS | NetCDF数据在ArcMap中的使用

NetCDF又称科学数据集,可以存储温度、湿度、风速、风向等多个维度的文件格式。以中国区域地面气象要素驱动数据集为例进行介绍。 中国区域地面气象要素驱动数据集,包括近地面气温、近地面气压、近地面空气比湿、近地面全风速、地面向下短波辐射、地面向…

P6 PyTorch 常用数学运算

前言: 这里主要介绍一下PyTorch 的常用数学运算 目录: 1: add|sub 加减法 2: mul/div 乘/除运算 3: 矩阵乘法 4 2D矩阵转置 5 其它常用数学运算 6 clamp 梯度剪裁 一 加减法 1.1 加法 可以直接通过符号 或者 torch.add # -*- co…

MySQL数据库的安装、创建库及连接取数

安装MySQL数据库MySQL数据库简介安装MySQL数据库下载安装包安装MySQLMySQL创建一个新的数据库,并在其中创建新的数据表,填充测试数据并查看mysql>模式下输入的每句sql语句都要以;结尾;若多行语句无;,则被默认为一条语句未输入完…

UNIX环境高级编程——1.UNIX基础知识

UNIX基础知识 UNIX体系结构 严格意义上来说,可以将操作系统定义为一种软件,控制计算机硬件资源,提供程序运行环境。通常把这种软件成为内核。内核的接口被成为系统调用(system call)。公共函数库构建在系统调用接口之…

碳酸锂、碳酸氢锂除钙镁离子交换柱

锂及其盐类是国民经济和国防建设中具有重要意义的战略物资,也是与人们生活息息相关的能源材料。而碳酸锂作为锂盐的基础盐,是制取锂化合物和金属锂的原料,可作铝冶炼的电解浴添加剂,亦可用于合成橡胶、染料、半导体等方面。电池级…

Orin+ GMSL (Ser 9295+Des 9296)流程分析(1)

文章目录 1 前言2 流程分析2.1 整体架构2.2 Ser端2.2 Des端2.3 软件架构2.4 设备树文件分析2.5 VI 接口2.7 CSI 接口1 前言 Maxim 支持GMSL作为汽车行业视频应用的通信链路。GMSL基于SerDes (Serializer-Deserializer)技术;也就是说,它在发送端使用序列化器,在接收端使用反序…

观察UE4中引用查看器(ReferenceViewer)是从哪得到数据的

前言 引用查看器(ReferenceViewer)可以显示资源引用关系数据,我想要知道这个数据是如何得到的。因此从它的界面代码开始一步步往里看。 (到最后才发现,得到引用关系数据的接口很简单,而且是蓝图可访问的,详见本篇的【…

冬至已至,你的在职读研2023能在社科院与杜兰大学金融管理硕士项目实现吗

杜甫《小至》中写道“天时人事日相催,冬至阳生春又来”。不知不觉间冬至悄然到来,过完冬至天气日渐回暖,春天即将回来了。时光总是匆匆而逝,一晃2022年将要与我们说再见了。这一年来,反复无常的疫情,瞬息万…