【Linux网络编程一】网络基础1(网络框架)

news2024/9/22 21:18:50

【Linux网络编程一】网络基础1(网络框架)

  • 一.什么是协议
    • 1.通信问题
    • 2.协议本质
    • 3.网络协议标准
  • 二.协议分层
    • 1.为什么协议要分层
    • 2.如何具体的分层
  • 三.操作系统OS与网络协议栈的关系
    • 1.核心点:网络通信贯穿协议栈
  • 四.局域网中通信的基本原理
    • 1.封装,解包分用
    • 2.正确看待局域网
  • 五.以太网下是如何通信的
    • 1.碰撞域
  • 六.交换机

本篇开始总结网络知识,系统部分到此结束。
网络的本质就是在获取和生产数据,而系统的本质就是在处理数据。从网络中获取到数据利用系统调用来处理数据。而网络的本质也就是文件,我往文件里写,就是往网卡里写,往网卡里写,就是往网络里写。

一.什么是协议

我们在生活中都是基于数据来进行协助的,而一般我们可以根据协议约定,来减少沟通成本。
协议就是一种约定,它的出现是为了解决通信过程中出现的问题,所以我们只要理解了通信过程会出现什么样的问题,就能清楚要制作什么样的协议,那么通信过程中存在哪些问题呢?

1.通信问题

在这里插入图片描述
在两台主机网络通信过程中,面临着以下四种问题:

【问题1】.你怎么保证你的数据能准确的到达下一个设备?
【问题2】.你如何定位的到要发送的主机位置呢?
【问题3】.长距离传输过程中数据会不会丢失呢?
【问题4】对方接收到数据,就算完了吗?如何处理发来的数据呢?

通信的两台主机都会面临着相同的问题,为了解决这些通信问题,所以就需要制定对应的协议来解决。
问题1由以太网协议解决
问题2由ip协议来解决
问题3由tcp协议来解决
问题4由应用层协议来解决。

2.协议本质

在我们日常生活中,类似于协议的东西有很多,就比如我们接收快递时,我们想要的是买的物品本身,但商家默认会将一个快递盒子发给我们,并且外面还贴有标签(收件人,手机)等信息。这个快递盒子和标签就是协议!

1.所以我们在接收快递时,我们会收到除了快递本身之外的更多信息字段,比如快递盒子外面贴的标签,这个多出来的信息字段,就是协议,严格上说是协议的报头!
2.事实上,在我们日常发送数据时,也不是单单就把数据发送过去,我们一定还会在我们要发送的数据之外多发送一些东西,这个多出来的,就是协议!
在这里插入图片描述

这个多出来的东西,就是一些信息字段,描述某些特征,而在计算机当中,结构体恰好就是用来描述对象的一些基本信息和属性,所以在计算机中,协议的表现形式就是结构体对象!

所以一台主机发送一个结构体对象,另一台主机是可以立马认识到这个结构体表示什么意思,因为该主机也有该类的源代码,结构体对象类型是一样的,所以我们就可以跨逐渐上让它们基于结构体快速形成约定,这就是协议!
在这里插入图片描述

3.网络协议标准

【问题】那么两台主机如果要网络通信,只要约定好协议就可以了吗?

协议是定制设置出来的一种形式,但协议代表的含义也是定制者赋予的,所以除了协议形式要统一,还有很多东西需要统一起来,比如代表的含义,形式大小等待细节。
在这里插入图片描述

统一的标准,从软件到硬件各方面都需要一支,这就形成了网络协议。

二.协议分层

在这里插入图片描述

1.为什么协议要分层

1.本质是因为问题是层状的,所以协议定制出来肯定也是层状的。并且设置成层后,就可以降低耦合度,减少维护成本好维护。
2.因为协议分层后,我们可以认为是每层协议在和每层协议在直接通信,跟下层没有关系,下层出现问题,不会影响到上层。

在这里插入图片描述

3.协议分层后,在逻辑上就可以看成各层之间在匹配通信

2.如何具体的分层

在网络中,协议具体被分成5层,但最重要的是网络层ip和传输层tcp,所以被称为TCP/IP五层模型。
在这里插入图片描述

这五层从下往上分别是,物理层,数据链路层,网络层,传输层,应用层。各自都有对应的协议。
每层具有不同的功能:
在这里插入图片描述

三.操作系统OS与网络协议栈的关系

1.物理层对应着系统中的硬件部分,比如网卡。
2.数据链路层对应着驱动程序,驱动软件。
3.而网络层和传输层是内嵌在内核里的,属于操作系统的部分。
4.应用层就相当于在操作系统之上的用户层,更准确的来说是用户层的各自软件应用。
在这里插入图片描述

在这里插入图片描述

操作系统和网络栈是一一对应起来的,网络通信的本质也就是在访问硬件网卡,而用户想要访问硬件,必须要经过操作系统,而操作系统又不相信用户,所以回给上层提供系统调用来访问内部。所以对应的网络通信,用户想要访问网卡,就必须调用系统调用,所以上层开发者为了更好的通信,所以会根据系统调用来开发一些协议来让我们使用。
5.操作系统虽然有多种,比如Linux和windows,但是网络栈却只有一种,所有的操作系统必须遵守,不然系统设备无法入网通信。
在这里插入图片描述

1.核心点:网络通信贯穿协议栈

所以网络通信的本质:就是贯穿协议栈的过程!这个过程先自顶向下,贯穿协议栈,然后通过网卡传输到另一台主机,再自底向上贯穿协议栈。
在这里插入图片描述

四.局域网中通信的基本原理

知识点1:在局域网(网络)当中,任意两台(直接相连的)主机是可以通信的,比如说手机可以投屏到电视上,但必须使用同一个网络才可以。
知识点2:在局域网(网络)当中通信协议有很多种,而以太网是属于局域网通信标准的其中一种

那么在局域网(就是在网络中)当中的两个主机是如何进行通信的呢?

两台主机在局域网中直接通信的过程,本质就是在不断的封装和解包的过程!
在这里插入图片描述

1.封装,解包分用

【问题1】什么叫封装呢?

网络通信时,需要贯穿协议栈,比如A主机要将消息通过网络发送给B主机,那么消息需要由A主机的网络协议栈由顶自下贯穿到B主机,再由底向上贯穿B主机的网络协议栈。
因为协议是附加字段,是一个结构体对象,所以每层协议都有对应的结构体对象。
消息就放在协议的后面,我们称这个部分为报文,而协议结构体部分称为报头。
每贯穿一层协议,报文都会多出一个协议报头,该协议报头就是该层协议的结构体对象。

1.报文是由报头和有效载荷构成,每一层协议栈都会往报文上添加新的报头,而报头后面的就变成新的有效载荷了。
在这里插入图片描述

贯穿协议栈,每层都需要添加报头,这个过程就是不断的封装报文。
【问题2】如何将数据发送给对端的呢?

网络协议栈的层状结构中,每一层都有协议,而通过协议就可以将数据发送给对端,比如数据链路层,通过以太网协议将数据发送给对端主机的数据链路层。
在这里插入图片描述

【问题3】什么叫解包?
由A主机发送给B主机,先自顶向下贯穿A主机网络协议栈,经过添加封装报头,最终到达数据链路层,数据和链路层通过协议,将报文发送给对端链路层。对端链路层再自底向上贯穿协议栈。
并且每层协议栈是可以区别哪些是报头哪里是报文的,然后对端主机的链路层就会将该报文的报头和有效载荷分离,将有效载荷交给上一层协议!
而由协议层分离报头和有效载荷的过程就是不断的在解包报文,会将属于该层的协议报头分离出去,再将剩下的有效载荷交给上一层(贯穿协议栈)
【问题4】什么叫分用?
对端主机的协议层接收到报文后,需要解析报文(分离报头和有效载荷)将有效载荷往上层协议发送,而它怎么知道发送上层的哪一个协议呢?每一层协议栈都会有许多协议存在,那么应该发送给上一层的哪一个协议呢?
所以几乎所有的协议,都要在报头中提供,将自己的有效载荷交付给上层哪一个协议的能力!这个能力就叫分用。

在这里插入图片描述

【结论】:
在这里插入图片描述

数据包封装和分用
1.不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报 (datagram),在链
路层叫做帧(frame).
2.应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装
(Encapsulation).
3.首部信息中包含了一些类似于首部有多长, 载荷(payload)有多长, 上层协议是什么等信息.
4.数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部, 根据首部中的 “上层协议
字段” 将数据交给对应的上层协议处理.

2.正确看待局域网

在这里插入图片描述

局域网就一个网络,而网络就是一个文件,主机之间通信就是进程之间通信,进程之间通过网络进行通信,所以网络就是一个共享资源,并且要求是互斥访问该资源。

五.以太网下是如何通信的

我们知道报文在传递到链路层时,是根据以太网协议与对端链路层进行通信的。那么具体在以太网下是如何通信的呢?
在这里插入图片描述

【前提知识】 在局域网中,每台主机都会有一个唯一标识自己的标志–>Mac地址/ip地址,所以每台主机都是可以识别对方是谁的。在这里插入图片描述

在局域网当中,发送一条消息,会被局域网内的所有主机接收到,也就是消息首先会贯穿协议栈,经历封装添加报头,到达数据链路层,最后在网卡硬件层面接收到。而对端网卡接收到数据是通过以太网接收到的。

以太网下数据是如何传输的呢?是如何通信的呢?

1.每台主机都有唯一的标识,所以A主机要发送消息给B主机,A主机是需要知道B主机的Mac地址的(消息贯穿A主机的协议栈到达数据链路层,在报头中是存储着B主机的Mac地址的)
2.首先在局域网当中所有的主机都会接收到报文(在逻辑上,每一层协议直接通信,也就是在链路层收到消息。A主机数据链路层通过以太网将报文发送给各主机的的数据链路层)。
3.而其他主机的数据链路层一旦接收到报文,就会进程报头分离解析,根据标识每台主机的ip地址发现不是发送给自己的,就会将报文直接丢弃。
4.如果发现是发送给自己的,就会将有效载荷发送给上一层协议。

在这里插入图片描述

1.碰撞域

往局域网当中发送一条消息,该局域网下的所有主机都会收到,而多台主机同时往局域网中发送消息,那么这些消息就会发送碰撞,发生丢失,而发生碰撞的地方就称为碰撞域,所以以太网是基于碰撞域形成的。

所以以太网下通信是会存在数据碰撞问题的。
在这里插入图片描述

有问题就会有解决方法,如何解决该碰撞问题呢?
【碰撞机制】采用延迟发送
在这里插入图片描述
【网卡工作模式】正常模式与复杂模式
正常模式就是不是发送给自己的报文直接丢弃。
复杂模式就是不是发送给自己的报文不会直接丢弃。
【安全问题】

在这里插入图片描述

六.交换机

在这里插入图片描述

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

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

相关文章

使用 IntelliJ IDEA 配合 Docker 对 Weblogic 中间件进行远程调试

使用idea对jar包远程调试: 打开一个springboot的项目进行远程调试设置: 运行: 其实我不太明白远程调试的意义,本地直接debug不好嘛。。。 点击debug的按钮,打断点测试: 跑到断点处: 远程de…

JDK17中的密封类sealed和permits使用指南:什么是Java中的sealed和permits?

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

MYSQL——MySQL8.3无法启动

在新电脑上装了个MySQL,但是无法使用net start mysql启动,很是纳闷,使用mysqld --console去查看报错,也是没报错的,但是奇怪的是,我输入完这个mysqld --console之后,就等于启动了mysql了&#x…

一步步成为React全栈大师:从环境搭建到应用部署

文章目录 第一步:环境搭建第二步:了解React基础第三步:组件与路由第四步:状态管理第五步:接口与数据交互第六步:样式与布局第七步:测试第八步:构建与部署《深入浅出React开发指南》内…

系统架构20 - 统一建模语言UML(上)

统一建模语言 组成要素事物关系 在目前的软件开发方法中,面向对象的方法占据着主导地位。面向对象方法的主导地位也决定着软件开发过程模型化技术的发展,面向对象的建模技术方法也就成为主导的方法。 公认的面向对象建模语言出现于20世纪70年代中期。从1…

快速上手AI代码生成:CodeGeeX

1. VSCode等IDE插件直接搜到 CodeGeeX 就可以安装,装上之后,会看到左侧出现了: 2. 登陆以后,在代码区域就可以直接用了。 3. 官网功能说明文档(非常简洁清晰): https://zhipu-ai.feishu.cn/wik…

文心一言 VS 讯飞星火 VS chatgpt (193)-- 算法导论14.3 1题

一、用go语言,写出作用于区间树的结点且在 〇(1) 时间内更新 max 属性的过程 LEFT-ROTATE 的伪代码。 文心一言: 以下是一个简单的LEFT-ROTATE的伪代码,它对一个二叉搜索树进行左旋转操作。这个操作的作用是更新节点的max属性,使…

css3动画的三种实现方式

目录 一、是什么二、实现方式transition 实现渐变动画transform 转变动画animation 实现自定义动画 三、总结参考文献 一、是什么 CSS动画(CSS Animations)是为层叠样式表建议的允许可扩展标记语言(XML)元素使用CSS的动画的模块 …

时序预测 | MATLAB实现基于CNN-BiLSTM-AdaBoost卷积双向长短期记忆网络结合AdaBoost时间序列预测

时序预测 | MATLAB实现基于CNN-BiLSTM-AdaBoost卷积双向长短期记忆网络结合AdaBoost时间序列预测 目录 时序预测 | MATLAB实现基于CNN-BiLSTM-AdaBoost卷积双向长短期记忆网络结合AdaBoost时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.Matlab实现…

【Django】Cookie和Session的使用

Cookies和Session 1. 会话 从打开浏览器访问一个网站,到关闭浏览器结束此次访问,称之为一次会话。 HTTP协议是无状态的,导致会话状态难以保持。 Cookies和Session就是为了保持会话状态而诞生的两个存储技术。 2. Cookies 2.1 Cookies定…

C#验证字符串是否纯字母:用正则表达式 vs 用Char.IsLetter方法加遍历

目录 一、使用的方法 1.使用正则表达式 2.使用Char.IsLetter方法 二、实例 1. 源码 2.生成效果 一、使用的方法 1.使用正则表达式 使用正则表达式可以验证用户输入的字符串是否为字母。匹配的正则表达式可以是:^[A-Za-z]$、^[A-Za-z]{1,}$、^[A-Za-z]*$。 …

斗地主登录界面(JAVA图形化界面)设置

1.实现代码 import CodeUtil.CodeUtil; import domain.User;import javax.swing.*; import java.awt.*; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.util.ArrayList;public class LoginGame extends JFrame implements MouseListen…

《云原生安全攻防》-- 容器安全风险分析

在本节课程中,我们将提供一个全面的视角,来深入探讨容器环境下的安全风险,帮忙大家建立起容器环境下安全风险的整体认知。 在这个课程中,我们将学习以下内容: 容器技术概述:什么是容器技术以及它解决了什么…

cesium-水平测距

cesium测量两点间的距离 <template><div id"cesiumContainer" style"height: 100vh;"></div><div id"toolbar" style"position: fixed;top:20px;left:220px;"><el-breadcrumb><el-breadcrumb-item&…

python基于django的公交线路查询系统mf383

1.个人信息的管理&#xff1a;对用户名&#xff0c;密码的增加、删除等 2.线路信息的管理&#xff1a;对线路的增加、修改、删除等 3.站点信息的管理&#xff1a;对站点的增加、修改、删除等 4.车次信息的管理&#xff1a;对车次的增加、修改、删除等 5.线路查询、站点查询 …

辽宁省社会保险事业服务中心网上办事大厅环境配置

环境配置 在网上办事系统主界面&#xff0c;选择“环境配置”&#xff1b;选择插件下载模块&#xff0c;进入插件下载主页面&#xff0c;如图 1 所示&#xff1a; 图1 插件下载功能 3.点击 按钮&#xff0c;弹出插件下载界面&#xff1b; 若插件下载页面如图2所示&#xff0…

遗失的源代码之回归之路的探索与实践

背景 最近比较突然被安排接手一个项目,该项目的情况如下 原生和RN结合的混合开发模式组件化开发,有很多基础组件以及业务组件但是在梳理项目依赖时发现了个别组件源码不全的情况,于是写了个cli用于对比两个版本产物文件,生成差异结果以便于快速进行源码找回恢复。 结果如下…

历年地震数据,shp格式,含时间、位置、类型、震级等信息

基本信息. 数据名称: 历年地震数据 数据格式: Shp 数据时间: 2023年 数据几何类型: 点 数据坐标系: WGS84坐标系 数据来源&#xff1a;网络公开数据 数据字段&#xff1a; 序号字段名称字段说明1dzlx地震类型2zj震级3zysd震源深度&#xff08;米&#xff09;4jtwz…

Python 快速入门篇

本文简介 点赞 关注 收藏 学会了 2023年是AI的元年&#xff0c;AI的爆火不仅推动了科技领域的进步&#xff0c;更让 Python 语言成为了这一变革中的关键角色。 Python 语言简单易懂&#xff0c;语法清晰明了&#xff0c;懂一点英语的都能学得会。很适合在职场摸爬滚打多年的…

layui-实现上下表,父子表单选加载事件

layui-实现上下表&#xff0c;父子表单选加载事件 代码HTML代码表格数据加载点击主表行&#xff0c;加载子表数据 实现效果图 代码 主子表&#xff0c;实现点击主表的单元格实现选中主表&#xff0c;并加载子表 HTML代码 //主表 <table class"layui-hide" id&q…