OSI七层模型传输过程的通俗理解

转自:http://bbs.clnchina.com.cn/thread-1250443-1-1.html

1.OSI七层模型划分。

从上到下依次是:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。

分层功能
应用层网络服务与最终用户的一个接口(可理解为人机交互界面)
表示层数据的表示,安全,压缩
会话层建立,管理,终止会话
传输层定义传输数据的协议端口号,以及流控和差错校验
网络层进行逻辑地址寻址,实现不同网络之间的路径选择
数据链路层建立逻辑连接,进行硬件地址寻址,差错校验等功能
物理层机械电子等物理通信信道上的原始比特流传输

2.数据传输中的数据封装。

mark

3.通俗理解。


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

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

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

相关文章

软件开发之常见前端安全漏洞

原标题:软件开发之常见前端安全漏洞 软件开发完成后,在Web服务器在投入使用之前,应该确保服务器是相对安全地。保证服务器相对安全地前提是,要充分了解影响Web系统安全。 1、跨站脚本(XSS)漏洞跨站脚本攻击…

修改el-popover和el-select样式

如图el-popover弹框和el-select下拉项的的容器是div#app之外的,所以在scoped作用域内使用>>>或/deep/修改样式无效。虽然可以使用全局样式修改,但是会造成所有页面组件样式改变。 1、修改el-select选项样式的解决办法: Popper-appen…

vue项目使用electron打包成桌面应用

打包流程详情步骤: 1、准备工作: a、win7系统则确保node版本在v12以上,electron-builder对系统或版本有要求; b、项目路径不使用中文; c、使用淘宝镜像命令代替npm管理工具 npm install -g cnpm --registryhttps://…

Haar特征与积分图—概念解析

1. Adaboost方法的引入 1.1 Boosting方法的提出和发展 在了解Adaboost方法之前,先了解一下Boosting方法。 回答一个是与否的问题,随机猜测可以获得50%的正确率。如果一种方法能获得比随机猜测稍微高一点的正确率,则就可以称该得到这个方法的过…

在jsp中对mysql数据库分页的方法

针对分页,首先开发一个 PageBean 用来控制页面参数: Java代码 package com.longweir; //分页后的javaBean import java.sql.*; import com.longweir.util.*; public class PageBean { private int pageSize5; // 每页显示的记录…

MyEclipse 2015优化技巧

MyEclipse 2015优化速度方案仍然主要有这么几个方面:去除无需加载的模块、取消冗余的配置、去除不必要的检查、关闭更新。第一步: 去除不需要加载的模块 一个系统20%的功能往往能够满足80%的需求,MyEclipse也不例外,我们在大多数时候只需要20…

Highcharts+Spring饼图使用实例

项目上要用到Hightcharts展示平台机器占用情况,使用这类第三方插件很方便就能实现 JSP: <script type"text/javascript" src"<%basePath%>/resources/thirdparty/highcharts/highcharts.js"></script><div id"machineRate"…

Highcharts双饼图使用实例

这次实践了Highcharts的双饼图,确实比普通饼图复杂多了,关键相关数据 多不能继续用简单基本数据类型Map,list了,单独建了个VO存放要用到的数据,不多说,贴代码! JS: /**查看机器占比(按产品线) 2015/8*/ function loadMachineRate(){var chart;$(document).ready(function(){ch…

使用jackson对Java对象与JSON字符串相互转换的一些总结

总结一下自己使用 jackson 处理对象与 JSON 之间相互转换的心得。jackson 是一个用 Java 编写的&#xff0c;用来处理 JSON 格式数据的类库&#xff0c;它速度非常快&#xff0c;目前来看使用很广泛&#xff0c;逐渐替代了 Gson 和 json-lib 。 如果直接引入 jar 包&#xff0…

使用Java的BlockingQueue实现生产者-消费者

BlockingQueue也是java.util.concurrent下的主要用来控制线程同步的工具。 BlockingQueue有四个具体的实现类,根据不同需求,选择不同的实现类 1、ArrayBlockingQueue&#xff1a;一个由数组支持的有界阻塞队列&#xff0c;规定大小的BlockingQueue,其构造函数必须带一个int参数…

循环删除List集合的错误

症状:不是郝柱也能看到灾备分析:调试发现动作中有两个灾备,不过只过滤了其中一个 错误所在:代码如下,这里for循环删除List逻辑出问题了,犯了一个比较基础的错误 : 两个灾备动作索引是相邻的,当我remove掉第一个时紧跟着的动作就会取代它原来的位置,最终导致问题发生 修改方案:解…

ajax中return取不到值的问题

症状:机器迁移时判断JS返回取不到值分析 :调试发现data是有值的&#xff0c;而且下断点调试发现这段ajax还没走完&#xff0c;后面的逻辑已经开始走了错误所在:ajax之所以叫ajax它首先是异步的&#xff0c;顺序执行的程序不需要等待ajax跑完才继续执行 修改方案:将默认为true的…

Websocket判断逻辑Bug

症状:灾备后台失败但前台提示成功分析 :下断点发现此时前端的data.obj为undifined&#xff0c;后台pyhon脚本执行报错了 错误所在:前台判断不应该加上undifined 修改方案:第一次修改如上&#xff0c;判断严谨多了&#xff0c;但是运行是前台报不能对undefined使用length分析 :…

SpringMVC深度探险 —— SpringMVC核心配置文件详解

在上一篇文章中&#xff0c;我们从DispatcherServlet谈起&#xff0c;最终为读者详细分析了SpringMVC的初始化主线的全部过程。整个初始化主线的研究&#xff0c;其实始终围绕着DispatcherServlet、WebApplicationContext和组件这三大元素之间的关系展开。 在文章写完之后&…

阿里RocketMQ Quick Start

RocketMQ单机支持1万以上的持久化队列&#xff0c;前提是足够的内存、硬盘空间&#xff0c;过期数据数据删除&#xff08;RocketMQ中的消息队列长度不是无限的&#xff0c;只是足够大的内存数据定时删除&#xff09; RocketMQ版本&#xff1a;3.1.4 一&#xff0c;部署NameServ…

Intellij Idea的使用之svn篇

记一下idea的svn使用有图超详细 根据在eclipse里使用svn的经验琢磨了一下idea,现把idea下svn的使用方法记录如下 主要分为几个功能来介绍 第一个功能当然是把远程的svn代码拉到我们本地 下面的多出了一个svn的窗口&#xff0c;在左边有加号可以添加一个svn的库 输入svn的地…

Intellij IDEA 的使用

前言&#xff1a; 为什么我要选择intellij idea呢&#xff1f;原因有三 1.以前公司的项目 在myeclipse10中不稳定 myeclipse说不定什么时候就崩溃卡死了 而intellij很稳定 2.界面高端洋气 用我朋友的话说 看着跟搞苹果开发一样 3.项目的支持上比较好 基本上web项目都可以导…

Eclipse设置、调优、使用

eclipse调优一般在不对eclipse进行相关设置的时候&#xff0c;使用eclipse总是会觉得启动好慢&#xff0c;用起来好卡&#xff0c;其实只要对eclipse的相关参数进行一些配置&#xff0c;就会有很大的改善。 加快启动速度1.在eclipse启动的时候&#xff0c;它总是会搜索让其运行…

Guava 实用操作集合

guava 是 google 几个java核心类库的集合,包括集合、缓存、原生类型、并发、常用注解、基本字符串操作和I/O等等。 大家平时经常遇到某些相同的问题&#xff0c;自己写代码也都能解决。但是久而久之会感觉到很痛苦&#xff0c;因为我们一而再&#xff0c;再而三的重复发明轮子。…

Intellj Idea 如何设置类头注释和方法注释

intellj idea 如何设置类头注释和方法注释intellj idea的强大之处就不多说了&#xff0c;相信每个用过它的人都会体会到&#xff0c;但是我们也会被他的复杂搞的晕头转向&#xff0c;尤其刚从eclipse转过来的童鞋&#xff0c;相信刚开始的那段经历都是不堪回首的&#xff0c;我…