[Linux#47][网络] 网络协议 | TCP/IP模型 | 以太网通信

news2024/9/20 14:57:49

目录

1.网络协议

2.协议分层

2.1 OSI七层模型

2.2TCP/IP五层(四层)模型

2.3 以太网通信


1.网络协议

"协议"本质就是一种约定

计算机之间的传输媒介是光信号和电信号. 通过 "频率" 和 "强弱" 来表示 0 和 1 这样的 信息. 要想传递各种不同的信息, 就需要约定好双方的数据格式。即对 0 1 信号组合的诠释

思考:只要通信的两台主机约定好协议就可以了么?

  • 协议的重要性
    • 即使双方已经制定了通信协议,但如果一方使用频率来表示 01,而另一方使用信号强弱来表示 01,这就如同一方说中文,另一方说葡萄牙语。虽然大家遵循相同的 01 通信规则,但由于“表示方式”不同,即使订立了基本协议,也无法进行正常的通信。
    • 因此,一个完善的协议需要更加详细和具体的规定,并且所有参与者都必须遵守这些规定。
  • 多样化的计算环境
    • 计算机生产厂商众多;
    • 计算机操作系统多种多样;
    • 计算机网络硬件设备种类繁多。

在如此多样的环境下,如何确保来自不同厂商的计算机能够顺利通信?

  • 统一标准的需求:
  • 解决方案是需要有一个共同的标准,即网络协议,让所有参与者都遵守这一标准。

一些思考:

技术被挖掘出了价值,广泛使用,第一生产力的特征才会表现出来,被看到。

所以占领市场,制定标准的重要性就可以理解了。

例如现在的鸿蒙系统(物联网),人工智能,大模型......现在都是在找应用场景来落地,进行普及和构建生态。


软件分层的场景:高内聚,低耦合

  • 结构体和类,数据层面:继承和多态就是在实现软件分层
  • 数据类型上:文件和硬件不同 struct 设计
  • 线程池回调的方式
  • 模块之间:虚拟内存和页表等也是一种分层

回忆回调函数

回调函数(Callback Function):将一个函数作为参数传递给另一个函数,以便在某个特定事件发生或某个条件得到满足时执行。简而言之,回调函数是一种在特定时机被调用的函数。

以下是一个简单的回调函数示例,使用C语言进行说明:复制

#include <stdio.h>

// 声明一个回调函数类型
typedef void (*callbackFunction)(int);

// 一个简单的函数,接受一个整数值和一个回调函数
void performAction(int value, callbackFunction cb) {
    // ... 在这里执行一些操作 ...

    // 调用回调函数
    cb(value);
}

// 实现一个回调函数
void myCallback(int value) {
    printf("回调函数被调用,传入的值是:%d\n", value);
}

int main() {
    // 调用 performAction,并传递 myCallback 作为回调函数
    performAction(42, myCallback);

    return 0;
}

在上面的代码中,performAction 函数接受一个整数和一个回调函数作为参数


2.协议分层

⭕ 为什么要分层?

  • 问题是层状的
  • 网络很庞大
  • 好维护

例如两个人打电话

  • 真实情况:我们人其实在和电话沟通
  • 在逻辑上:我们认为,人和人,电话和电话在沟通

本层之间有协议,层和层之间通过话筒(接口)连接

  • 在这个例子中, 我们的"协议"只有两层: 语言层、通信设备层。
  • 但是实际的网络通信协议,设计的会更加复杂, 需要分更多的层
  • 但是通过上面的简单例子,我们是能理解,分层可以实现解耦合
  • 分层具有好维护的特征,可以实现只换同层内容

⭕ 那么网络协议是如何分层的呢?

2.1 OSI七层模型

  • OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范;
  • 把网络从逻辑上分为了7层. 每一层都有相关、相对应的物理设备,比如路由器,交换机;
  • OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输;
  • 它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整. 通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯;
  • 但是, 它既复杂又不实用; 所以我们按照TCP/IP四层模型来讲解.

上三层压缩成一层。物理层就偏硬件了,所以我们具体软件工程实践的时候采用↓

2.2TCP/IP五层(四层)模型

  • TCP(传输层)/IP(网络层)是一组协议的代名词,它还包括许多协议,共同组成了TCP/IP协议簇
  • TCP/IP通讯协议采用了五层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求
  • 物理层我们考虑的比较少,因此很多时候也可以称为 TCP/IP四层模型

结构理解:

  • 物理层: 负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层

调制解调器(猫)也工作在物理层。(把模拟信号->数字信号,数字信号->模拟信号),家里安装的wifi,先是光纤接入猫,然后猫拉一个先连接路由器,路由器帮我们构建一个局域网然后我们就可以连接wifi了,我们发送的消息先传给路由器,路由器在经过物理设备猫,帮我们做数模转换把数据打到网络里然后数据才能发出去。(路由器真正识别才是真正的01这种二进制对东西)。

  • 数据链路层: 负责建立设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太网、令牌环网, 无线LAN等标准. 交换机(Switch)工作在数据链路层。确保了主机和直接连接的主机之间可以通信
  • 网络层: 负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器(Router,是涵盖关系,也有集线器,交换机......的功能)工作在网路层.
  • 传输层: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机.
  • 应用层: 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等. 我们的网络编程主要就是针对应用层。数据拿过来了,以什么样的形式显示

网络协议栈和 OS 有什么关系?

为什么有各种系统,却只有一种网络?

结合 用户贯穿硬件 的结构进行理解:

层状是一样的,层和层之间进行匹配

网络通信的本质:就是贯穿协议栈的过程

局域网内,两个直接连接的主机之间可以直接通信。例如投屏需要手机和电视连接同一个 wifi

  • 主流的局域网通讯协议:以太网

为什么要叫以太网?

太阳光八分钟到地球,宇宙中是否存在让光传递的介质--以太,就像空气一样的?后来物理界证实不存在,就是真空的。计算机科学家Q到,我们光电传输就有--以太网~

网络协议栈的层状结构中,每一层都有协议(约定的解读)

信息传递要保证可靠性:要有序。所以每个协议层都要有自己的序号--即协议报头

报文==报头+有效载荷

网卡为什么要把数据交给内存?因为 冯诺依曼结构 规定的,到内存中才能被 OS 处理

读取:去掉该层协议报头,将给上一层。所以添加报头的时候也要考虑解包的便利性

通信的过程:本质就是不断的封装和解包的过程

所以在逻辑上,就感觉是在同层传递,例如:

⭕ 扩展:

  1. 几乎任何层的协议,都要提供一种能力,将报头和有效载荷分离的能力
  2. 几乎任何层的协议,都要在报头中提供,决定将自己的有效载荷交付给上层的哪一个协议的能力--分用

知道了这些,以后面对 封装--解包--分用,才不会困惑

这是大部分协议的共性,未来我们学习具体协议的时候,我们都会问这两个扩展问题!

2.3 以太网通信

局域网,数据如何从一个主机到另一个主机?

每台主机在局域网上,都要有自己的唯一的一个“mac 标识”

  1. 一个故事

老师点名张三,全班同学都听到了,每一个同学都把张三的报文报头解析和自己做对比,发现不是叫自己,张三发现是自己,回答说“到”,老师和张三之间进行了通信,班上有很多吃瓜群众

  1. 一个原理

网卡出厂时的有 Mac 地址,全球唯一

例如 H1 要和 H10 进行通信,所有主机在网卡硬件层都收到了,进行报头 Mac 地址对比,发现不是自己的就会进行丢弃,H10 发现是自己的,接收后向上交付

多台主机进行同时通信,以太网发生数据碰撞问题

  • 所以发送主机都要执行碰撞避免的算法,保证任何时刻都只有一台主机在发送消息
  • 所以局域网最好不会太大,和引入交换机
  • 交换机:划分碰撞域
  • 碰撞域:指在网络中,数据信号传输过程中可能发生冲突的区域。在同一个碰撞域内的所有设备共享同一物理介质,在一个碰撞域内,所有设备都监听同一个物理信道,并且任何时刻只能有一台设备发送数据。

报文被别人抓走了怎么办?为了确保网络安全,可以在应用层进行加密(令牌环),对方就看不到

如何看待局域网?

只允许一个发送,可以看作每台主机背后就是一个进程,网络的传输是共享资源,传输要互斥进行

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

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

相关文章

全志616系统启动和登录

一、系统启动 刷完机烧入镜像&#xff0c;直接用MobaXterm软件串口登陆 约定固定的波特率115200。 默认登录&#xff1a; 用户&#xff1a;orangepi 密码&#xff1a;orangepi 或用户&#xff1a;root 密码&#xff1a;orangepi 在输入密码时…

SEO之网站结构优化(十三-网站地图)

** 初创企业搭建网站的朋友看1号文章&#xff1b;想学习云计算&#xff0c;怎么入门看2号文章谢谢支持&#xff1a; ** 1、我给不会敲代码又想搭建网站的人建议 2、“新手上云”能够为你开启探索云世界的第一步 博客&#xff1a;阿幸SEO~探索搜索排名之道 网站无论大小&…

5分钟学会使用Linux的 grep、find、ls、wc 命令

Linux基础命令和工具 一、前导&#xff1a;概述1.1、监控1.2、测试1.3、优化 二、grep 搜索字符三、find 查找文件四、ls 显示文件五、wc 命令六、总结 一、前导&#xff1a;概述 本系列主要讲解Linux运行时命令&#xff0c;包括网络、磁盘、内存、CPU相关参数等&#xff0c;主…

伏图芯片应力仿真功能介绍

随着电子产品向小型化、规模化、集成化方向发展&#xff0c;机械应力对器件性能的影响日益显著。产品在晶圆加工、芯片封装、元器件装配等过程中均会受到机械应力的作用&#xff0c;可能会直接影响芯片的电性能和可靠性。 仿真技术在芯片产品研发设计和故障排查阶段扮演着至关…

Python | Leetcode Python题解之第372题超级次方

题目&#xff1a; 题解&#xff1a; class Solution:def superPow(self, a: int, b: List[int]) -> int:MOD 1337ans 1for e in b:ans pow(ans, 10, MOD) * pow(a, e, MOD) % MODreturn ans

NIOS Eclipse突然报错:No rule to make target `/system.h

NIOS Eclipse突然报错&#xff1a;No rule to make target /system.h 今天打开NIOS Eclipse编译昨天完好的工程&#xff0c;发现报错。我就纳闷了&#xff0c;代码没有修改&#xff0c;编译结果报错 控制台中problems选线中显示&#xff1a; No rule to make target /system…

嵌入式开发神器——vim配置

本期主题&#xff1a; 讲解vim的一些配置&#xff0c;让大家也可以用上自己定制化的vim 目录 0. 目前个人所用的vim配置截图1. vim的插件1. 怎么找插件2. 如何安装插件3. 安装好了如何使用插件 2. 个人配置的vim链接 0. 目前个人所用的vim配置截图 1. vim的插件 1. 怎么找插件…

【Qt】输入类控件QSlider

目录 输入类控件QSlider 例子&#xff1a;调整窗口大小 例子&#xff1a;通过自定义快捷键调整滑动条位置 输入类控件QSlider 使用QSlider表示一个滑动条 QDail与QSlider都继承于QAbstractSlider&#xff0c;所以其用法基本相似。 核心属性 属性说明 value 持有的数值 mi…

【hot100篇-python刷题记录】【反转链表】

R6-链表篇 思路&#xff1a;想到使用2个指针来做 pre在head前,now就是head 初始&#xff1a;nowhead,predummy 每次需要进行的操作&#xff1a; tmpnow.next now.next-->pre prenow nowtmp class Solution:def reverseList(self, head: Optional[ListNode]) -> …

280Hz显示器哪家强

280Hz显示器哪家强&#xff1f;今天就给大家带来6大品牌和型号的280Hz显示器一起对比对比&#xff01; 1.280Hz显示器 - HKC G27H3显示器 HKC G27H3是一款高性价比的电竞显示器&#xff0c;以下是它的一些特点&#xff1a; - **高刷新率与快速响应**&#xff1a; - 拥有280H…

【Arduino】试验带识别模块的吃鸡助手

在前面的试验中&#xff0c;我们试验了声音触发点击&#xff0c;方面多指操作的辅助功能&#xff0c; 【Arduino】自制声控点击器&#xff08;吼叫吃鸡助手&#xff09;-CSDN博客 如果声控模块换成图像识别模块&#xff0c;就是一个自动识别并shot的功能了&#xff0c; 通过…

使用GDIView工具排查GDI对象泄漏案例的若干细节总结

目录 1、查看任务管理器&#xff0c;发现程序中有明显的GDI对象泄漏 2、使用GDIView工具查看发生泄漏的是哪一种GDI对象 3、尝试找到复现问题的方法&#xff0c;缩小排查范围&#xff0c;逐步地找到GDI对象的泄漏点 4、本案例中的相关细节点的思考与总结&#xff08;有价值…

httpClient与openfeign

目录 介绍 maven坐标 发送请求步骤 发送get请求 ​发送post请求 介绍 是一个客户端编程的工具包&#xff0c;也就是在java程序中&#xff0c;可以构造http请求并且发送请求 maven坐标 httpclient <dependency> <groupId>org.apache.httpcomponents</g…

【Kotlin设计模式】建造者模式在Android中的应用

前言 建造者模式&#xff08;Builder Pattern&#xff09;是一种创建型设计模式&#xff0c;一步一步地构建一个复杂对象的不同部分&#xff0c;而不是直接创建该对象的实例。建造者模式的核心思想是将对象的构建过程与其表示分离&#xff0c;使得同样的构建过程可以创建不同的…

如何使用ssm实现基于ssm的疫情物质管理系统

TOC ssm170基于ssm的疫情物质管理系统jsp 第一章 绪论 1.1 研究背景 时代总是在进步的&#xff0c;自从进入了信息时代&#xff0c;面对大量的不同种类的数据&#xff0c;仅仅依靠有限的人力去处理&#xff0c;显然是不行的&#xff0c;毕竟人工处理大量的数据会耗费较长时…

git提交项目,报403无权限

这个在公司内网git上提交项目时&#xff0c;使用的是刚分配到的账号和密码。创建完组和项目后一切准备完毕了&#xff0c;但是在提交时缺出了乌龙&#xff0c;报403&#xff0c;上面一堆英文&#xff0c;大致的意思是说我没有上传本项目的权限&#xff0c;报错信息如下图所示&a…

5.1二叉树——基本概念梳理

本篇博客梳理二叉树相关的基本概念 一、树的概念与结构 1&#xff0e;树是递归定义的 树根N棵子树&#xff0c;每棵子树也可按照相同方式拆分 注意&#xff1a;子树之间不能有交集&#xff0c;否则变成图&#xff08;是另一种数据结构&#xff09; 2&#xff0e;树的相关概…

Linux进程信号——信号的概念与产生

文章目录 信号及其产生与发送什么是Linux信号信号的产生终端按键系统调用软件条件硬件条件 核心转储存储临时信号 信号及其产生与发送 我们从生活中理解信号&#xff0c;例如各种指示灯&#xff0c;红绿灯之类的&#xff0c;我们能认识红绿灯是因为每一种不同的情况在我们大脑…

Apache Doris 跨集群数据同步 CCR 全面介绍

CCR 概述 CCR&#xff08;Cross Cluster Replication&#xff09;也就是跨集群数据复制&#xff0c;能够在库/表级别将源集群的数据变更同步到目标集群&#xff0c;可用于提升在线服务的数据可用性、隔离在离线负载、建设两地三中心等。 CCR 通常被用于容灾备份、读写分离、集…

末代皇帝Intel核显黑苹果,NUC10的性能到底有多强

末代皇帝Intel核显黑苹果&#xff0c;NUC10的性能到底有多强 一、可以核显的Intel iGPU有哪些 核显是一个伟大的产物&#xff0c;它可以在我们没有多余的钱去买多余的显卡的时候排上用场&#xff0c;特别是在mini小主机的市场上&#xff0c;核显就显得尤为重要的&#xff0c;…