OSI七层模型与TCP/IP五层模型

2023-11-16

 

一、OSI参考模型
        今天我们先学习一下以太网最基本也是重要的知识——OSI参考模型。
 1、OSI的来源
        OSI(Open System Interconnect),即开放式系统互联。 一般都叫OSI参考模型,是ISO(国际标准化组织)组织在1985年研究的网络互连模型。
        ISO为了更好的使网络应用更为普及,推出了OSI参考模型。其含义就是推荐所有公司使用这个规范来控制网络。这样所有公司都有相同的规范,就能互联了。
  2、OSI七层模型的划分
       OSI定义了网络互连的七层框架(物理层、数据链路层、网络层、传输层、会话层、表示层、应用层),即ISO开放互连系统参考模型。如下图。
        每一层实现各自的功能和协议,并完成与相邻层的接口通信。OSI的服务定义详细说明了各层所提供的服务。某一层的服务就是该层及其下各层的一种能力,它通过接口提供给更高一层。各层所提供的服务与这些服务是怎么实现的无关。
    

 3、各层功能定义
        这里我们只对OSI各层进行功能上的大概阐述,不详细深究,因为每一层实际都是一个复杂的层。后面我也会根据个人方向展开部分层的深入学习。这里我们就大概了解一下。我们从最顶层——应用层 开始介绍。整个过程以公司A和公司B的一次商业报价单发送为例子进行讲解。
<1>    应用层
        OSI参考模型中最靠近用户的一层,是为计算机用户提供应用接口,也为用户直接提供各种网络服务。我们常见应用层的网络服务协议有:HTTP,HTTPS,FTP,POP3、SMTP等。
        实际公司A的老板就是我们所述的用户,而他要发送的商业报价单,就是应用层提供的一种网络服务,当然,老板也可以选择其他服务,比如说,发一份商业合同,发一份询价单,等等。
<2>    表示层
        表示层提供各种用于应用层数据的编码和转换功能,确保一个系统的应用层发送的数据能被另一个系统的应用层识别。如果必要,该层可提供一种标准表示形式,用于将计算机内部的多种数据格式转换成通信中采用的标准表示形式。数据压缩和加密也是表示层可提供的转换功能之一。
        由于公司A和公司B是不同国家的公司,他们之间的商定统一用英语作为交流的语言,所以此时表示层(公司的文秘),就是将应用层的传递信息转翻译成英语。同时为了防止别的公司看到,公司A的人也会对这份报价单做一些加密的处理。这就是表示的作用,将应用层的数据转换翻译等。
<3>    会话层
        会话层就是负责建立、管理和终止表示层实体之间的通信会话。该层的通信由不同设备中的应用程序之间的服务请求和响应组成。      
        会话层的同事拿到表示层的同事转换后资料,(会话层的同事类似公司的外联部),会话层的同事那里可能会掌握本公司与其他好多公司的联系方式,这里公司就是实际传递过程中的实体。他们要管理本公司与外界好多公司的联系会话。当接收到表示层的数据后,会话层将会建立并记录本次会话,他首先要找到公司B的地址信息,然后将整份资料放进信封,并写上地址和联系方式。准备将资料寄出。等到确定公司B接收到此份报价单后,此次会话就算结束了,外联部的同事就会终止此次会话。
<4>   传输层
        传输层建立了主机端到端的链接,传输层的作用是为上层协议提供端到端的可靠和透明的数据传输服务,包括处理差错控制和流量控制等问题。该层向高层屏蔽了下层数据通信的细节,使高层用户看到的只是在两个传输实体间的一条主机到主机的、可由用户控制和设定的、可靠的数据通路。我们通常说的,TCP UDP就是在这一层。端口号既是这里的“端”。
        传输层就相当于公司中的负责快递邮件收发的人,公司自己的投递员,他们负责将上一层的要寄出的资料投递到快递公司或邮局。
<5>   网络层
       本层通过IP寻址来建立两个节点之间的连接,为源端的运输层送来的分组,选择合适的路由和交换节点,正确无误地按照地址传送给目的端的运输层。就是通常说的IP层。这一层就是我们经常说的IP协议层。IP协议是Internet的基础。
        网络层就相当于快递公司庞大的快递网络,全国不同的集散中心,比如说,从深圳发往北京的顺丰快递(陆运为例啊,空运好像直接就飞到北京了),首先要到顺丰的深圳集散中心,从深圳集散中心再送到武汉集散中心,从武汉集散中心再寄到北京顺义集散中心。这个每个集散中心,就相当于网络中的一个IP节点。
<6>   数据链路层 
        将比特组合成字节,再将字节组合成帧,使用链路层地址 (以太网使用MAC地址)来访问介质,并进行差错检测。

     数据链路层又分为2个子层:逻辑链路控制子层(LLC)和媒体访问控制子层(MAC)。

        MAC子层处理CSMA/CD算法、数据出错校验、成帧等;LLC子层定义了一些字段使上次协议能共享数据链路层。 在实际使用中,LLC子层并非必需的。

        这个没找到合适的例子

<7>  物理层     

        实际最终信号的传输是通过物理层实现的。通过物理介质传输比特流。规定了电平、速度和电缆针脚。常用设备有(各种物理设备)集线器、中继器、调制解调器、网线、双绞线、同轴电缆。这些都是物理层的传输介质。
         快递寄送过程中的交通工具,就相当于我们的物理层,例如汽车,火车,飞机,船。
4、通信特点:对等通信      
对等通信,为了使数据分组从源传送到目的地,源端OSI模型的每一层都必须与目的端的对等层进行通信,这种通信方式称为对等层通信。在每一层通信过程中,使用本层自己协议进行通信。
二、TCP/IP五层模型
    TCP/IP五层协议和OSI的七层协议对应关系如下。
    在每一层都工作着不同的设备,比如我们常用的交换机就工作在数据链路层的,一般的路由器是工作在网络层的。
在每一层实现的协议也各不同,即每一层的服务也不同.下图列出了每层主要的协议。其中每层中具体的协议,我会在后面的逐一学习。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OSI七层模型与TCP/IP五层模型 的相关文章

  • Python struct.pack() 用于列表中的各个元素?

    我想将列表中的所有数据打包到单个缓冲区中以通过 UDP 套接字发送 该列表相对较长 因此为列表中的每个元素建立索引非常繁琐 这是我到目前为止所拥有的 NumElements len data buf struct pack d NumEle
  • 如何用C语言创建UDP服务器?

    我正在尝试用 C 语言 在 Linux 下 编写一个 UDP 服务器 我知道在socket 我必须使用的功能SOCK DGRAM并不是SOCK STREAM if list s socket AF INET SOCK DGRAM IPPRO
  • unix 上的 Boost UDP 套接字问题 - 绑定:地址已在使用中

    首先 我知道同一主题还有其他几个线程 但我无法在其中找到任何可以帮助我的内容 因此我将尝试非常具体地说明我的情况 我设置了一个简单的 UDP 客户端 UDP 服务器对 负责在多个并行模拟之间发送数据 也就是说 模拟器的每个实例都在单独的线程
  • 播放 UDP 数据包中收到的原始 PCM 音频

    远程设备正在 UDP 数据包中发送实时原始 PCM 音频 不包含标头 我需要在 java 中实现一个程序来接收这些数据包并在 PC 上实时播放它们 据我所知 原始 PCM 的属性是 16 位 单声道 采样率 24KHz 因此我尝试向该原始
  • 丢包纠错码 (UDP)

    我不知道要寻找什么 因为我从 纠错代码 中得到的只是与您不知道错误位置的情况相关的内容 因此 这些代码比我需要的要复杂得多 而且效率低下 在下文中 请注意位等于数据包 因为只有整个数据包可能会丢失 因此位类比非常适合 是否有 ECC 考虑到
  • Android udp 多播与以太网

    大家好 我正在开发一个使用 udp 多播的项目 我有一台服务器通过以太网电缆发送多播 udp 数据包 我花了几周的时间阅读有关 android 上多播的所有帖子 但我仍然无法在我的 Asus Transformer Tablet 4 1 上
  • 如何使用 ZeroMQ 处理原始 UDP?

    我有一个客户 我无法更改其代码 但我想使用 重新 编写ZeroMQ插座 客户使用原始TCP和原始的UDP插座 我知道我可以使用ZMQ ROUTER RAW对于生的TCP插座 但是原始的怎么样 UDP数据流 ZeroMQ 中对 UDP 的支持
  • 如何在多个程序中接收相同的udp流?

    我有一个封闭的第三方系统 它发送单播 UDP 流 MPEG TS 我想在同一台计算机上的两个不同程序中访问该流 我无法更改源上的任何内容 甚至无法更改 IP 或端口 除了编写自己的小程序来捕获流然后创建新流并重新发送这两个流之外 还有其他选
  • 具有多个接口的 Python UDP 套接字

    我正在 Windows XP 机器上用 python2 7 编写脚本 本机使用不同的网卡连接到多个网络 我遇到了一个问题 我已将 UDP 套接字绑定到特定接口 我知道您可以通过仅提供网卡现有的 IP 地址来在 Windows 中完成此操作
  • C++ 反序列化通过 UDP 从 C# 应用程序发送的对象

    我有一个申请c 它连接到另一个应用程序 编写为c 通过UDP 我更喜欢高性能的解决方案 因为我希望测量事件客户端 某些处理服务器端和客户端处理完成的响应之间的时间 本质上是 往返延迟 我有一个 C 对象 例如 public class Pa
  • 如果客户端在服务器之后启动,则 GStreamer v1.0 UDP 多播流无法正确解码

    我正在尝试使用 GStreamer 进行 UDP 多播屏幕流传输 我的投屏服务器应该在 Windows 上运行 and my 客户端应在 Linux 上运行 如果我在服务器之前启动客户端 一切都很好 问题是当我启动客户端并且服务器已经启动时
  • 为什么UDP服务器上的UDP客户端端口会改变

    我一直在关注一个简 单的 UDP 服务器 客户端教程 发现here http www binarytides com udp socket programming in winsock 我有一个关于客户端连接到服务器的端口的快速问题 仅从代
  • 更改Windows下的默认套接字缓冲区大小[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我无法更改的应用程序正在丢弃一些传入的 UDP 数据包 我怀疑接收缓冲区溢出 是否有注册表设置可以使默认缓冲区大于 8KB From th
  • UDP sendto 上的 ECONNREFUSED 错误

    我在使用正在写入的应用程序时遇到一些无法解释的行为 使用 sendto 向多个端口发送 UDP 数据 所有端口均使用套接字 PF INET SOCK DGRAM 0 为了一组客户端读取进程的利益 这些 sendto 偶尔会不可预测地触发经济
  • Java UDP 服务器,并发客户端

    下面的代码足以接受并发 UDP 传输吗 更具体地说 如果 2 个客户端同时传输 当我调用 receive 时 DatagramSocket 会将传输排队并一一传送它们 还是只有一个能够通过 DatagramSocket socket new
  • C# 广播是UDP消息,监听多个回复

    我正在尝试编写一些执行 UDP 广播的代码 然后侦听来自远程服务器的答复 说明它们存在 它用于识别子网上运行服务器应用程序的计算机 因此基本上会发出 谁在那儿 并听取所有答复 我在 Java 中有这个 工作完美 它将 DatagramPac
  • iOS 14 在进行本地网络广播时给出“操作系统错误:错误的文件描述符,errno = 9”

    做一点Jeopardy 风格问答 https stackoverflow blog 2011 07 01 its ok to ask and answer your own questions here 我正在 Flutter 中开发一个应
  • 接收UDP数据包

    假设我的程序通过网络 UDP 发送 1000 字节 它是否保证接收方将 一批 接收 1000 个字节 或者他可能需要执行多次 读取 直到收到完整的消息 如果后者为真 我如何确保同一消息的数据包顺序不会 混淆 按顺序 或者协议可能保证这一点
  • 在 macOS 10.12 上绑定到套接字时出现 NSPOSIXErrorDomain

    我正在玩CocoaAsyncSocket https github com robbiehanson CocoaAsyncSocket在 Swift 中绑定到 UDP 套接字并通过本地网络接收消息 我正在初始化一个套接字 并尝试绑定到一个端
  • 为什么 SNMP 通常在 UDP 上运行而不是 TCP/IP 上?

    今天早上 工作中出现了大问题 因为 SNMP 陷阱没有 通过 因为 SNMP 是通过 UDP 运行的 我记得在大学网络课上 UDP 不能像 TCP IP 那样保证传输 维基百科说 SNMP 可以在 TCP IP 上运行 但 UDP 更常见

随机推荐

  • 一篇文章教你Pytest快速入门和基础讲解,一定要看!

    前言 目前有两种纯测试的测试框架 pytest和unittest unittest应该是广为人知 而且也是老框架了 很多人都用来做自动化 无论是UI还是接口 pytest是基于unittest开发的另一款更高级更好用的单元测试框架 出去面试
  • MySQL利用Navicat导出数据字典

    数据字典是一名DBA需要维护的重要内容 可以通过db直接查看 也可以导出到excel后进行查看 1 利用mysql的information schema中的COLUMNS表 和navicat中的导出功能实现快速导出数据字典 SQL sele
  • UnityWebGL调研(3) 项目打包

    之前单独打包项目中用到的插件的Demo场景都没有问题 开始尝试打包项目参加 结果有问题 打包能够成功 但是运行有问题 提示中找不到问题所在 然后这个是新项目 考虑用Unity2019 2 1f打包看看 和之前一样 逐个打包插件的Demo 都
  • IO密集型和CPU密集型程序-概念与实现

    欢迎关注笔者的微信公众号 概念 在计算机科学中 有两种不同类型的程序 IO 密集型和 CPU 密集型 这两种程序的主要差别在于它们在执行任务时瓶颈所在的地方 IO 密集型 这类程序主要通过读写磁盘文件 网络通信等外部设备来完成任务 因此它们
  • Ubuntu - command checklist

    只是简单记录我使用的命令 没有什么参考价值 我只是用于整理 chown chmod permissions filename Where permissions can be read write execute or a combinat
  • C语言二叉树的基本操作(超全)

    二叉树作为数据结构其实是一个挺有意思的结构 可以有多种应用 我们直接来看一下二叉树的代码 include
  • Python 极简教程(十)集合 set

    什么是集合 集合 set 是一种可变 无序和不重复的序列 集合是python的序列之一 集合没有列表 list 元组 tuple 和字典 ditc 常见 但是有时候也有奇效 我们先来看个集合的例子 gt gt gt s b x a gt g
  • 系统错误,由于找不到opencv_highgui2410.dll,无法继续执行代码

    这个问题 就是需要将缺少环境变量 有个最直接的方法就是 将你缺少的dll 拷到你的程序exe同级目录下 就可以了
  • Idea 插件 FindBugs 安装及使用

    环境信息 idea版本 IntelliJ IDEA 2020 3 2 Ultimate Edition Build IU 203 7148 57 built on January 26 2021 jdk版本 java version 1 8
  • 软考高项之运筹学

    1 最大最小准则 积极 平稳 消极 A 100 50 20 B 200 150 60 C 500 300 200 A min 20 B min 60 C min 200 最小值中取最大值为200 2 最大最小后悔原则 积极 平稳 消极 A
  • QT调用VS编译的RabbitMQ-C静态库

    为此折腾两天 参考了不少大神的文章 再次标识感谢 把自己的一些思路简单记录下 https blog csdn net qq 70244454 article details 128086920 https blog csdn net zjz
  • java字母和数据混合排序

    import java util ArrayList import java util List public class Sort param args public static void main String args TODO A
  • 用Zotero在word中添加参考文献的方法记录

    插件安装 首先 安装了zotero的话应该默认会安装word插件 如果word里面有这个选项卡 就行 如果没有的话 可以手动安装一下 方法参见官网 word中打开文件 选项 高级 常规 文件位置 启动 修改 不要修改 而是复制一下这个路径
  • 用桥接伪标签训练测试间隙改进弱监督时序动作定位(CVPR 2023)

    Improving Weakly Supervised Temporal Action Localization by Bridging Train Test Gap in Pseudo Labels CVPR 2023 论文地址 2304
  • sel4白皮书翻译

    首发地址 http trialley top pages 53ac44 CSDN地址 https blog csdn net lgfx21 article details 117606097 翻译与转发许可 作者 Gernot Heiser
  • 方方格子授权码_OAuth2入门(三)——Authorization Code授权模式

    1 前言 前面的文章讲到 oauth支持四种授权模式 简化模式 implicit 授权码模式 authorization code 密码模式 resource owner password credentials 客户端模式 client
  • 拆分android项目导致run Configurations消失了

    事件缘由 由于APP要拆分成两个 把原来的APP从svn上面下载下了 重新上传到新的svn目录上 再次重svn上面下载下来到本地新文件夹是直接用svn来运行时 发现原来run Configurations 不见了 重新编译同步啥的都没有用
  • 软件测试工具介绍和使用

    此次为软件工程实践专题 个人博客第四次作业 请使用一些其他平台上的测试工具 并写博客介绍如何在你的项目中具体使用 一 JMeter 介绍 Apache JMeter是Apache组织开发的基于Java的压力测试工具 是100 纯JAVA桌面
  • 多线程数据库连接管理1

    最近公司项目需求 要从oracle往mysql迁移存量1 2亿数据 处理逻辑比较复杂 硬件方面 对机器性能要求较高 软件方面 受制于外部服务能力 因此 在开发过程中 需要特别注意各方面资源的管理 及时释放占用的资源 调优过程中 数据库方面遇
  • OSI七层模型与TCP/IP五层模型

    一 OSI参考模型 今天我们先学习一下以太网最基本也是重要的知识 OSI参考模型 1 OSI的来源 OSI Open System Interconnect 即开放式系统互联 一般都叫OSI参考模型 是ISO 国际标准化组织 组织在1985