互联网数据传输原理 |OSI七层网络参考模型

网络模型

在这里插入图片描述

OSI 网络参考模型,仅作为参考,也就是说OSI网络实际中并不使用。我们只是把OSI网络模型作为参考,在网络出现问题的时候,可以从一个宏观的整体去分析和解决问题。而且搭建网络的时候也并不一定需要划分为7层

但是当今互联网广泛使用的是TCP/IP网络模型,他原本是四层,实际上划分为五层更符合实

OSI模型的目的:解决主机之间的网络通讯

各层的作用

例子:华为电脑用浏览器访问苹果电脑搭建的网站。两个应用具体需要如何进行交互就是应用层的事情了。应用层并不是说你需要使用什么应用程序,而是应用如何沟通。常用的应用层协议HTTP协议,使得应用之间可以实现沟通。

在这里插入图片描述

应用层就是最接近用户的那一层。但是应用层只不过是逻辑上把两个应用连通,实际物理上的连通是需要物理层的。我们要发送出去的数据在计算机里只不过是无数的0和1,0或者1就叫做比特。物理层就要把这些比特用不同的媒介传输出去。

在这里插入图片描述

可以用电,用光或者其他形式的电磁波来表示和传输信号。数据从网络接口出去以后会经过不同的网络拓扑。

在这里插入图片描述

并不是一条线走到底,因此需要中继器和集线器这样的设备。

在这里插入图片描述

但还是不够,信号要去到哪台设备是需要定向的。因此需要高级一点的网络模型,在数据链路层这里,比特会被封装成

在这里插入图片描述

帧就是这一层表示数据的特殊名字而已。在封装的时候会加上MAC地址,也就是传说中的物理地址。网卡出厂的时候就有着全球唯一的MAC地址。

在这里插入图片描述

为了可以通过MAC地址对不同设备进行数据的传输,就出现了交换机。这里说的是二层交换机。

在这里插入图片描述

比方说这里有一台交换机,连接多台主机。

在这里插入图片描述

发送端发送数据的时候,交换机就知道了发送端的MAC地址。如果此时交换机也知道接收端的MAC地址,就可以把数据直接发送过去了。物理地址就是这样一跳一跳地进行传递

在这里插入图片描述

另外因为物理层在传输0和1的时候,可能会0变成1,或者1变成0。会进行差错检测以及一定的差错纠正。

在这里插入图片描述

另外设备之间的传输能力以及接受能力也是个问题,很可能这边“喷水”式传输,另一边“夹缝式”接受。因此需要流控制来避免这种不对称。

在这里插入图片描述

我们知道互联网是一张大网,如果用MAC物理地址来作为唯一的寻址方法是不科学的。

比如我和你买了同一个厂的网卡,我和你的网卡差别只有一个字母。

在这里插入图片描述

但是我和你距离十万八千里,物理地址此时就很难做出快速定位。

在这里插入图片描述

相当于我有你的名字,但不知道你住哪里,找不到你。因此需要IP地址来进行寻址路由选择。IP这样的逻辑地址就是实现端到端的基础了,而不是物理地址那样的跳到跳传输。

在这里插入图片描述

说到路由选择,也就是说路由器也是网络层的核心。

在这里插入图片描述

就是网络层里数据的名字。在封装为二层的帧之前就是包。

在这里插入图片描述

路由器根据包里IP地址进行路由转发。

在这里插入图片描述

地址管理和路由选择就是这一层的核心。虽然有MAC和IP地址可以抵达对方主机,但是对方主机可能运行着无数多个软件进程。假设我用谷歌和火狐浏览器同时登录网站,如何让数据去到指定的软件服务上,就需要用到端口号作为地址来定位了。比如客户端这里生成不同的端口号。

在这里插入图片描述

即使同时访问HTTP端口80也是没问题的,根据不同的源端口号来作出响应就可以了。所以传输层(运输层)在网络层的端到端基础上,实现了服务进程到服务进程的传输就是传输层里数据的名字。

在这里插入图片描述

传输层管理两个节点之间数据的传输,负责可靠传输不可靠传输,既TCP UDP

在这里插入图片描述

其中TCP允许应用把字节流变成多份段,而不是整个字节数据完整地发送出去。

在这里插入图片描述

传输层还有流量控制来确保传输速度,再加上错误控制来进行数据完整的接收。

在这里插入图片描述

接下来会话层也比较好理解。比方说你现在登录了某个网站,网站服务可以保持你的登录状态,不用每次都输入账号和密码。当然网站服务会管理和控制登录状态。

在这里插入图片描述

另外会话层还负责同步服务。比方说你上次看到电影高潮的时刻突然停电了,再次登录账号的时候就可以自动同步岛上次看到的时间段。

在这里插入图片描述

不同计算机内部的各自表达方式可能不太相同。表示层就来负责这样的转换,也就是编码解码

在这里插入图片描述

数据往往还需要进行加密,比方说HTTPS( SSL/ TLS)就会对我们的数据进行加密和解密。

在这里插入图片描述

另外我们可能还需要给文件瘦身,压缩也是这一层负责的。

在这里插入图片描述

应用层,表示层和会话层的数据统称为应用数据或者应用负载也可以叫上层数据。同时也是教科书上说的报文。

数据在各层的名字分别是:报文比特

在这里插入图片描述

就地址来说:有端口号IP逻辑地址MAC物理地址

在这里插入图片描述

就传输功能来讲:有服务进程到服务进程端到端跳到跳

在这里插入图片描述

数据流通过程

客户端要发送数据,也就是报文。报文来到传输层加上端口号,封装成段。段来到了网络层,加上IP地址,封住成包。注意这里的包是含有目标IP地址的,毕竟你要知道数据要发送到什么地方。

在这里插入图片描述

但因为目标IP地址不是同一个网络下的,要发送到其他的网络就需要经过默认网关。现在就出现了一个问题,客户端主机最初并不知道默认网关的MAC地址,没有办法封装成帧。这个时候就可以用ARP协议进行广播,找到网关IP对应的MAC地址把包封装成帧。

网关:计算机的网关(Gateway)就是到其他网段的出口,也就是路由器接口IP地址

ARP协议:即地址解析协议, 用于实现从 IP 地址到 MAC 地址的映射,即询问目标IP对应的MAC地址

源MAC地址填自己的,目标MAC地址填广播地址。假设当前网络有个二层交换机,这个交换机只需要记录下不同的接口对应的MAC地址就好了,交换机收到广播后就帮忙发送出去“人手一份”。

在这里插入图片描述

所以默认网关收到消息后查看了帧,发现了发送端的MAC地址,再解封发现包里面的IP地址,就会把客户端MAC地址和IP地址关联为一台主机。同时默认网关会把自己的IP地址放入包里,再结合自己的MAC地址封装成帧,默认网关就这样做出响应。这样原路返回,发送端就知道默认网关的MAC地址了。

在这里插入图片描述

现在就可以封装成帧,并且发送数据。

在这里插入图片描述

比特流到了默认网关的时候,解封为帧发现是送给自己的,那解封为包查看到目标IP地址是在另一网络中的,就会进行路由转发,最终到达了目的网络。如果目标的网关知道目标IP地址和MAC地址是哪台主机,封装成帧就可以直接发送过去了。

在这里插入图片描述

如果不知道也还是可以用ARP喊下街就好。目标主机收到包确认是自己的IP地址以后,解封查看段可以发现源和目标端口号,用目标端口号给到指定的应用程序。应用程序处理好以后,就可以按照源的信息做出响应。回去的原理也是一样的。

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

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

相关文章

2024最新金三银四软件测试面试题

一直以来大大小小参与过不少面试,遇到过不少坑,但是没来的及好好总结汇总下。现在把之前遇到的问题汇总下,希望以后自己能加深印象。 1、appium 怎么定位toast弹框 appium1.6以后回答需要升级u2进行定位。 2、什么是事务,知道事…

PADS9.5封装库转换为AD库

1、打开PADS Layout,File – Library,选中usr,如下图: 2、封装– 导入,选中你的 .d后缀文件(也就是PADS的封装文件),打开。 3、元件 – 新建 – PCB封装 - 分配 - 确定。 4、,选择“斜线”…

Laya2.13.3接入第三方库Socket.io

服务端: 1.新建一个文件夹,使用npm.init -y创建node工程 2.在控制台使用以下代码下载Socket.io npm install socket.io 3.创建一个app.js的文件,将以下代码填入 import { Server } from "socket.io"; import { createServer }…

Linux学习笔记3 xshell(lnmp)

xshell能连接虚拟机的前提是真机能够ping通虚拟机网址 装OpenSSL依赖文件 [rootlocalhost nginx-1.12.2]# yum -y install openssl pcre-devel 依赖检测[rootlocalhost nginx-1.12.2]# ./configure [rootlocalhost nginx-1.12.2]# yum -y install zlib [rootlocalhost n…

【腾讯云 HAI域探秘】StableDiffusionWebUI 让我找到了宫崎骏动漫里的夏天

目录 前言一、HAI二、应用场景三、构建 Stable Diffusion 模型1、新建HAI应用2、StableDiffusionWebUI(1)功能介绍(2)页面转中文(3)AI绘图① 正向提示词语② 反向提示词③ “” 、“ AND”、“|” 用法④ 权…

网络协议与 IP 编址

网络协议与 IP 编址 之前大概了解过了网络的一些基础概念,见文章: 网络基础概念。 之前简单了解OSI模型分层: TCP/IP模型OSI模型TCP/IP对等模型应用层应用层表示层应用层会话层主机到主机层传输层传输层因特网层网络层网络层网络接入层数据链…

C语言数组(下)

我希望各位可以在思考之后去看本期练习,并且在观看之后独立编写一遍,以加深理解,巩固知识点。 练习一:编写代码,演⽰多个字符从两端移动,向中间汇聚 我们依旧先上代码 //编写代码,演⽰多个字…

数据库Delete的多种用法

数据库的Delete操作是用来删除数据库中的数据记录的,它是数据库操作中的一种重要操作,能够帮助用户删除不需要的数据,以便保持数据库的整洁和高效。在使用Delete操作时,需要注意确保操作的准确性和安全性,以免误删重要…

基于 Gin 的 HTTP 中间人代理 Demo

前面实现的代理对于 HTTPS 流量是进行盲转的,也就是说直接在 TCP 连接上传输 TLS 流量,但是我们无法查看或者修改它的内容。当然了,通常来说这也是不必要的。不过对于某些场景下还是有必要的,例如使用 Fiddler 进行抓包或者监控其…

触想嵌入式工业一体机在智能垃圾分类站的应用

1、行业发展背景 根据住建部给出的目标,到2025年前,全国地级及以上城市要基本建成垃圾分类处理系统。随着垃圾分类政策在全国强制落地,终端执行层面面临的最迫切问题是垃圾分类的准确性与社会参与意愿,而这两点与垃圾分类操作的简…

CNN发展史脉络 概述图整理

CNN发展史脉络概述图整理,学习心得,供参考,错误请批评指正。 相关论文: LeNet:Handwritten Digit Recognition with a Back-Propagation Network; Gradient-Based Learning Applied to Document Recogniti…

Python 中的数学运算(Python Math)

更多资料获取 📚 个人网站:ipengtao.com Python中的math模块是数学运算的重要工具,提供了丰富的数学函数和常数。本文将深入探讨math模块的功能和用法,使您能够更好地利用Python进行数学运算。 Python的math模块是一个强大的工具…

C51--OLED

GME12864-12 OLED写入指令数据: 1、start()开始 2、slave address 存积地址:011110 xx 写入:b 0111 1000 (0x78)(R / W位置为0时,表示写入) 3、ACK 4、cotro…

操作系统———磁盘调度算法模拟

实验目的 磁盘是可供多个进程共享的设备,当有多个进程都要求访问磁盘是,应采用一种最佳调度算法,以使各进程对磁盘的平均访问时间最小。目前最成用的磁盘调度算法有先来先服务(FCFS),最短寻道时间优先&…

Spring Boot的配置文件

配置文件的作用 整个项目中所有重要的数据都是在配置文件中配置,如数据库的连接信息,项目的启动端口,用于发现和定位问题的普通日志和异常日志等等。配置文件可以分为两类 系统使用的配置文件(系统配置文件)&#xf…

JS基础源码之手写模拟new

JS基础源码之手写模拟new 手写模拟new初步实现最终实现 手写模拟new new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象类型之一。 我们先看看new实现了哪些功能: function Person (name,age){this.name name;this.age age;this.habit Games;…

开发猿的平平淡淡周末---2023/12/9

上周回顾 完成了遗留的开发任务,基本全部完成进一步了解了系统当时设计的原理熟悉了代码的重构 2023.12.9 天气晴 温度适宜 前言 小伙伴们大家好,时间很快,又来到了周末,也是一个平平淡淡的周末。上周只更了一篇博客...原…

渗透测试 | 渗透测试之信息收集

渗透测试(penetration test,pentest)是实施安全评估(即审计)的具体手段。 渗透测试可能是单独进行的一项工作,也可能是常规研发生命周期(例如,Microsoft SDLC)里 IT 安全…

Unicode编码解码

一、Unicode概述 Unicode是一种字符编码标准,旨在解决不同字符集之间的兼容性问题。它为全球所有语言提供了一种统一的编码方式,使得各种字符能够在计算机系统中正确显示和处理。Unicode字符集包含了世界上几乎所有的字符,包括中文字符、英文…

算法Day23 简单吃饭(0-1背包)

简单吃饭(0-1背包) Description Input Output Sample 代码 import java.util.Scanner; public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);int n scanner.nextInt();int total scanner.nextInt(…