OSI 模型 网络协议七层分层通俗说明整理

2024-06-08 11:38

本文主要是介绍OSI 模型 网络协议七层分层通俗说明整理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

OSI参考模型将网络划分为了七层,从上到下依次是:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层

 

 下面举个也许不太恰当的例子来记录我的理解:你来到公司,打开电脑,准备开始一天的工作,你打开了多个应用程序,邮件、QQ、浏览器、股市行情软件等等,注意这些应用程序并不位于应用层,只是与应用层协议交互。当然,当这些应用程序被打开时会与服务器进行一系列的通信,这个通信过程是经历了OSI的各层的。
        这时,你需要给一个同事发个邮件,你新建了一个邮件开始编写,写完邮件正文后,你填好邮件主题,键入收件人的邮件地址。当你点击发送邮件的按钮时,这个发送邮件的通信过程就开始了OSI七层模型旅行之路。
        首先来到的是应用层。这一层确定了你的邮件是以什么方式发送出去,是SMTP还是IMAP?在发送邮件的同时,你还是浏览网页查阅资料,你在点击每一个链接的时候,应用层确定了是用HTTP还是HTTPS。或者说,用户通过应用程序向应用层提出了一系列应用请求,比如发送邮件、访问网页等。
        表示层收到了发送邮件的请求,这时它会将需要传输的数据进行编码和转换,形成一种大家都认识的表现形式。我们都知道,不同的操作系统对于文字、语音、图片、视频的编解码方式都是不同的,假如你用的是一台Windows 10操作系统的电脑,而你的同事用的是Mac OS操作系统,虽然操作系统的编码处理方式不同,但在数据传输过程中如果没有一个统一的数据格式的定义,恐怕对方收到数据后恢复出来的内容和你发出的大相径庭,甚至根本就是不可理解的。
        通过表示层的处理,数据已经准备好了,接下来就到了会话层出马的时候了。你的主机会帮你与邮件服务器建立会话,主机会问服务器:“你好,我是主机,你是邮件服务器吗?我需要和你建立连接。”,服务器会答复说:“你好,我是邮件服务器,连接已经建立。”,这时,发送邮件的会话就算是建立好了,当完成邮件数据传输后,表示层又会断开连接,即终止会话。刚才说过,在发送邮件的同时,你还是浏览网页,你点开了很多个页面,每打开的一个页面都是你和对方建立的一个会话。同时你还在和同事QQ聊天,每个聊天窗口背后其实也是一个会话。会话层就是帮你和对方建立连接的一个过程。就像打电话,你要先和对方接通电话,然后才能开始通话。
        建立连接后就可以开始进行数据传输了。传输层接收来自应用程序的各种数据:文字、语音、图片、视频,然后将这些数据合并到一个数据流中,再将数据进行分段并编号,最后发送出去。在数据传输的过程中可能会出现各种异常,比如数据包丢失、数据损坏等等,传输层就承担了保证数据传输正确的功能,如流量控制、数据重发等。简单的说,传输层就是表示层准备好数据、会话层建立连接后,正式开始数据传输的第一步。
        到了这个时候,数据就要走出家门出去闯荡了。临出门前,你告诉它:“去找邮件服务器吧,它在深圳,门牌号是XX路YY号”。网络层可不知道这个门牌号的位置,但是它知道怎么去深圳,就像你从北京寄快递到深圳,快递公司只知道怎么去深圳最快,但你要寄到的这个地址恐怕就只有当地的快递员才知道了。网络层就是快递公司,下面要讲的数据链路层就是快递员。网络层了解每个网络的编址、会跟踪设备在网络中的位置、可以准确计算出最佳的数据传输路径。网络层可以计算出从你所在的北京到深圳有哪些路线,哪条路线此时此刻是最快的。
        数据终于到了深圳,到了快递员——数据链路层手里,与网络层类似,数据链路层对网络虽然不熟,但是却对本地网络中的每台设备了如指掌。它可以通过硬件地址找到每一台设备。数据链路层从数据这里得知要去XX路YY号,轻而易举地就将数据送了过去。
        最后说下物理层,这一层就相对简单了,就是信号转换和物理传输,将数据转换成光信号、电信号,然后通过光缆、铜缆传输。

这篇关于OSI 模型 网络协议七层分层通俗说明整理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1042080

相关文章

Tomcat版本与Java版本的关系及说明

《Tomcat版本与Java版本的关系及说明》:本文主要介绍Tomcat版本与Java版本的关系及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Tomcat版本与Java版本的关系Tomcat历史版本对应的Java版本Tomcat支持哪些版本的pythonJ

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

Nginx指令add_header和proxy_set_header的区别及说明

《Nginx指令add_header和proxy_set_header的区别及说明》:本文主要介绍Nginx指令add_header和proxy_set_header的区别及说明,具有很好的参考价... 目录Nginx指令add_header和proxy_set_header区别如何理解反向代理?proxy

Mysql中深分页的五种常用方法整理

《Mysql中深分页的五种常用方法整理》在数据量非常大的情况下,深分页查询则变得很常见,这篇文章为大家整理了5个常用的方法,文中的示例代码讲解详细,大家可以根据自己的需求进行选择... 目录方案一:延迟关联 (Deferred Join)方案二:有序唯一键分页 (Cursor-based Paginatio

JAVA SE包装类和泛型详细介绍及说明方法

《JAVASE包装类和泛型详细介绍及说明方法》:本文主要介绍JAVASE包装类和泛型的相关资料,包括基本数据类型与包装类的对应关系,以及装箱和拆箱的概念,并重点讲解了自动装箱和自动拆箱的机制,文... 目录1. 包装类1.1 基本数据类型和对应的包装类1.2 装箱和拆箱1.3 自动装箱和自动拆箱2. 泛型2

MySQL常见的存储引擎和区别说明

《MySQL常见的存储引擎和区别说明》MySQL支持多种存储引擎,如InnoDB、MyISAM、MEMORY、Archive、CSV和Blackhole,每种引擎有其特点和适用场景,选择存储引擎时需根... 目录mysql常见的存储引擎和区别说明1. InnoDB2. MyISAM3. MEMORY4. A

MyBatis的配置对象Configuration作用及说明

《MyBatis的配置对象Configuration作用及说明》MyBatis的Configuration对象是MyBatis的核心配置对象,它包含了MyBatis运行时所需的几乎所有配置信息,这个对... 目录MyBATis配置对象Configuration作用Configuration 对象的主要作用C

Mysql中InnoDB与MyISAM索引差异详解(最新整理)

《Mysql中InnoDB与MyISAM索引差异详解(最新整理)》InnoDB和MyISAM在索引实现和特性上有差异,包括聚集索引、非聚集索引、事务支持、并发控制、覆盖索引、主键约束、外键支持和物理存... 目录1. 索引类型与数据存储方式InnoDBMyISAM2. 事务与并发控制InnoDBMyISAM

StarRocks索引详解(最新整理)

《StarRocks索引详解(最新整理)》StarRocks支持多种索引类型,包括主键索引、前缀索引、Bitmap索引和Bloomfilter索引,这些索引类型适用于不同场景,如唯一性约束、减少索引空... 目录1. 主键索引(Primary Key Index)2. 前缀索引(Prefix Index /