草庐IT

OSI七层模型、TCP/IP四层模型

鱼传尺素zz 2023-05-01 原文

1.OSI的基本概念及原则

OSI是Open System Interconnect的缩写,意为开放式系统互联。其各个层次的划分遵循下列原则:
(1)同一层中的各网络节点都有相同的层次结构,具有同样的功能。
(2)同一节点内相邻层之间通过接口进行通信。
(3)七层结构中的每一层使用下一层提供的服务,并且向其上层提供服务。
(4)不同节点的同等层按照协议实现对等层之间的通信。

2.OSI七层模型各层功能概述




第一层:物理层
在OSI参考模型中,物理层是参考模型的最低层,也是OSI模型的第一层。**物理层的主要功能是:利用传输介质为数据链路层提供物理连接,实现比特流的透明传输。**物理层的作用是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异,使其上面的数据链路层不必考虑网络的具体传输介质是什么。

第二层:数据链路层
数据链路层(Data Link Layer)是OSI模型的第二层,负责建立和管理节点间的链路。在计算机网络中由于各种干扰的存在,导致物理链路是不可靠的。因此这一层的主要功能是:在物理层提供的比特流的基础上,通过差错控制、流量控制方法,使有差错的物理线路变为无差错的数据链路,即提供可靠的通过物理介质传输数据的方法。

第三层:网络层
网络层(Network Layer)是OSI模型的第三层,它是OSI参考模型中最复杂的一层,也是通信子网的最高一层,它在下两层的基础上向资源子网提供服务。**其主要功能是:在数据链路层提供的两个相邻端点之间的数据帧的传送功能上,进一步管理网络中的数据通信,控制数据链路层与传输层之间的信息转发,建立、维持和终止网络的连接,将数据设法从源端经过若干个中间节点传送到目的端(点到点),从而向传输层提供最基本的端到端的数据传输服务。**具体地说,数据链路层的数据在这一层被转换为数据包,然后通过路径选择、分段组合、顺序、进/出路由等控制,将信息从一个网络设备传送到另一个网络设备。数据链路层和网络层的区别为:数据链路层的目的是解决同一网络内节点之间的通信,而网络层主要解决不同子网间的通信。

第四层:传输层
OSI下3层的任务是数据通信,上3层的任务是数据处理。而传输层(Transport Layer)是OSI模型的第4层。该层提供建立、维护和拆除传输连接的功能,起到承上启下的作用。该层的主要功能是:向用户提供可靠的端到端的差错和流量控制,保证报文的正确传输,同时向高层屏蔽下层数据通信的细节,即向用户透明地传送报文。

第五层:会话层
会话层是OSI模型的第5层,是用户应用程序和网络之间的接口**,该层的主要功能是:组织和协调两个会话进程之间的通信 ,并对数据交换进行管理。**当建立会话时,用户必须提供他们想要连接的远程地址。而这些地址与MAC地址或网络层的逻辑地址不同,它们是为用户专门设计的,更便于用户记忆。域名就是一种网络上使用的远程地址。会话层的具体功能如下:
**1.会话管理:**允许用户在两个实体设备之间建立、维持和终止会话,并支持它们之间的数据交换。
**2.会话流量控制:**提供会话流量控制和交叉会话功能。
**3.寻址:**使用远程地址建立会话连接。
**4.出错控制:**从逻辑上讲会话层主要负责数据交换的建立、保持和终止,但实际的工作却是接收来自传输层的数据,并负责纠正错误。

第六层:表示层
表示层是OSI模型的第六层,它对来自应用层的命令和数据进行解释,对各种语法赋予相应的含义,并按照一定的格式传送给会话层。该层的主要功能是:处理用户信息的表示问题,如编码、数据格式转换和加密解密等。表示层的具体功能如下:
**1.数据格式处理:**协商和建立数据交换的格式,解决各应用程序之间在数据格式表示上的差异。
**2.数据的编码:**处理字符集和数字的转换。
**3.压缩和解压缩:**为了减少数据的传输量,这一层还负责数据的压缩与恢复。
**4.数据的加密和解密:**可以提高网络的安全性。

第七层:应用层
应用层是OSI参考模型的最高层,它是计算机用户,以及各种应用程序和网络之间的接口,**该层的主要功能是:直接向用户提供服务,完成用户希望在网络上完成的各种工作。**它在其他6层工作的基础上,负责完成网络中应用程序与网络操作系统之间的联系,建立与结束使用者之间的联系,并完成网络用户提出的各种网络服务及应用所需的监督、管理和服务等各种协议。此外该层还负责协调各个应用程序间的工作。应用层的具体功能如下:
**1.用户接口:**应用层是用户与网络,以及应用程序与网络间的直接接口,使得用户能够与网络进行交互式联系。
**2.实现各种服务:**该层具有的各种应用程序可以完成和实现用户请求的各种服务。

3.OSI七层模型举例

**举例:**以A公司向B公司发送一次商业报价单为例。

应用层:A公司相当于实际的电脑用户,要发送的商业报价单相当于应用层提供的一种网络服务,当然A公司也可以选择其他服务,比如发一份商业合同,发一份询价单等等。

表示层:由于A公司和B公司是不同国家的公司,他们之间商定统一用英语作为交流语言,所以此时A公司的文秘(表示层)将从上级手中(应用层)获取到的商业报价单的语言转翻译成英语,同时为了防止被别的公司盗取机密信息,A公司的文秘也会对这份报价单做一些加密的处理。这就是表示层的作用,将应用层的数据转换翻译。

会话层:A公司外联部同事(会话层)掌握着其他许多公司的联系方式,他们负责管理本公司与外界许多公司的联系会话。当外联部同事拿到文秘(表示层)转换成英文的商业报价单后,他首先要找到B公司的地址信息,并附上自己的地址和联系方式,然后将整份资料放进信封准备寄出。等确认B公司接收到此报价单后,外联部的同事就去办其他的事情了,继而终止此次会话。

传输层:传输层就相当于A公司中的负责收发快递邮件的人,A公司自己的投递员负责将上一层(会话层)要寄出的资料投递到快递公司或邮局。

网络层:网络层就相当于快递公司庞大的快递网络,全国不同的集散中心,比如说从深圳发往北京的顺丰快递,首先要到顺丰的深圳集散中心,从深圳集散中心再送到武汉集散中心,从武汉集散中心再寄到北京顺义集散中心。这个每个集散中心,就相当于网络中的一个IP节点。

数据链路层:相当于顺丰快递内部为了保证效率和质量的一种内部操作。

物理层:快递寄送过程中的交通工具,就相当于物理层,例如汽车,火车,飞机,船。

4.OSI七层模型总结

**应用层:**产生网络流量的程序

协议:HTTP(超文本传输协议) : 规定web服务端和客户端的数据传输格式
         FTP(文本传输协议):网络共享文件传输 
        TFTP(简单文件传输协议) 
        SMTP(简单邮件传输协议) 
        SNMP(简单网络管理协议) 
        DNS(域名系统) :将域名解析为IP地址
       TELNET(远程终端协议):使用远程计算机上所拥有的本地计算机没有的信息资源,是常用的远程控制Web服务器的方法
        HTTPS(超文本传输安全协议):是HTTP加上TLS/SSL协议构成的可加密传输的网络协议 
        POP3(邮局协议版本3 )
        DHCP(动态主机配置协议)
        NFS(网络文件系统) : 用户和程序可以像访问本地文件一样访问远端系统上的文件

**表示层:**传输之前是否进行加密或者压缩处理

协议:LPP(轻量级表示协议):描述了在某些受限条件下提供基于 TCP/IP 网络的 OSI 应用程序服务器的流线支持的方法。

**会话层:**查看会话,查木马 netstat-n

安全协议:SSL(安全套接字层协议)
                  TLS(安全传输层协议)
                  LDAP(轻型目录访问协议):通过IP协议提供访问控制和维护分布式信息的目录信息

**传输层:**可靠传输、流量控制、不可靠传输

协议有:TCP (传输控制协议):一种面向连接的、可靠的、基于字节流的传输层通信协议
              UDP(用户数据报协议):面向事务的简单不可靠信息传送服务
              TLS(传输层安全协议):在两个通信应用程序之间提供保密性和数据完整性

**网络层:**负责选择最佳路径、规划ip地址

协议有:ICMP(互联网控制报文协议):是一种面向无连接的协议,用于传输出错报告控制信息
  IGMP(组管理协议)
  IP(IPV4 IPV6)(互联网协议):为主机提供一种无连接、不可靠的、尽力而为的数据包传输服务
  安全协议、路由协议(vrrp虚拟路由冗余)
  RARP(反向地址转换协议):发出要反向解析的物理地址并希望返回其对应的IP地址,应答包括由能够提供所需信息的RARP服务器发出的IP地址
  ARP(地址解析协议):据IP地址获取物理地址的一个TCP/IP协议(在OSI模型中ARP协议属于链路层;而在TCP/IP模型中,ARP协议属于网络层。)

**数据链路层:**帧的开始和结束、透明传输、差错校验

 PPP(点对点协议):用来通过拨号或专线方式建立点对点连接发送数据,使其成为各种主机、网桥和路由器之间简单连接的一种共通的解决方案

**物理层:**接口标准、电器标准、如何更快传输数据

IEEE 802.3:定义了有线以太网的物理层和数据链路层的介质访问控制 (MAC)

5.OSI七层和TCP/IP四层的关系

OSI引入了服务、接口、协议、分层的概念,TCP/IP借鉴了OSI的这些概念建立TCP/IP模型。

OSI先有模型,后有协议,先有标准,后进行实践;而TCP/IP则相反,先有协议和应用再提出了模型,且是参照的OSI模型。

OSI是一种理论下的模型,而TCP/IP已被广泛使用,成为网络互联事实上的标准。

6.TCP/IP四层模型

TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议不仅仅指的是TCP 和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议

TCP/IP是在网络的使用中的最基本的通信协议
TCP/IP传输协议对互联网中各部分进行通信的标准和方法进行了规定
TCP/IP传输协议是保证网络数据信息及时、完整传输的两个重要的协议。
TCP/IP传输协议是严格来说是一个四层的体系结构,应用层传输层网络层数据链路层都包含其中。


应用层的主要协议有Telnet、FTP、SMTP等,是用来接收来自传输层的数据或者按不同应用要求与方式将数据传输至传输层;
传输层的主要协议有UDP、TCP,是使用者使用平台和计算机信息网内部数据结合的通道,可以实现数据传输与数据共享;
网络层的主要协议有ICMP、IP、IGMP,主要负责网络中数据包的传送等;
数据链路层主要协议有ARP、RARP,主要功能是提供链路管理错误检测、对不同通信媒介有关信息细节问题进行有效处理等。

7.TCP/IP协议的组成

四层体系结构的TCP/IP协议,与有七层体系结构的OSI相比要简单了不少,也正是这样,TCP/IP协议在实际的应用中效率更高,成本更低

8.TCP/IP协议中的四个层次

应用层:应用层是TCP/IP协议的第一层,是直接为应用进程提供服务的。
(1)对不同种类的应用程序它们会根据自己的需要来使用应用层的不同协议,邮件传输应用使用了SMTP协议、万维网应用使用了HTTP协议、远程登录服务应用使用了有TELNET协议
(2)应用层还能加密、解密、格式化数据
(3)应用层可以建立或解除与其他节点的联系,这样可以充分节省网络资源

传输层:作为TCP/IP协议的第二层,传输层在整个TCP/IP协议中起到了中流砥柱的作用。且在传输层中,TCP和UDP也同样起到了中流砥柱的作用

网络层:网络层在TCP/IP协议中的位于第三层。在TCP/IP协议中网络层可以进行网络连接的建立和终止以及IP地址的寻找等功能

数据链路层:在TCP/IP协议中,数据链路层位于第四层。由于数据链路层兼并了物理层和数据链路层所以,数据链路层既是传输数据的物理媒介,也可以为网络层提供一条准确无误的线路

特点:
(1)协议标准是完全开放的,可以供用户免费使用,并且独立于特定的计算机硬件与操作系统。
(2)独立于网络硬件系统,可以运行在广域网,更适合于互联网。
(3)网络地址统一分配,网络中每一设备和终端都具有一个唯一地址。
(4)高层协议标准化,可以提供多种多样可靠网络服务

9.通信过程

在网络通信的过程中,将发出数据的主机称为源主机,接收数据的主机称为目的主机。

当源主机发出数据时,数据在源主机中从上层向下层传送。
①源主机中的应用进程先将数据交给应用层,应用层加上必要的控制信息就成了报文流,向下传给传输层。
②传输层将收到的数据单元加上本层的控制信息,形成报文段、数据报,再交给网际层。
③网际层加上本层的控制信息,形成IP数据报,传给网络接口层。
④网络接口层将网际层交下来的IP数据报组装成帧,并以比特流的形式传给网络硬件(即物理层),数据就离开源主机。

有关OSI七层模型、TCP/IP四层模型的更多相关文章

  1. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  2. ruby-on-rails - Rails - 一个 View 中的多个模型 - 2

    我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何

  3. ruby-on-rails - 在混合/模块中覆盖模型的属性访问器 - 2

    我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah

  4. ruby-on-rails - 如何验证非模型(甚至非对象)字段 - 2

    我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss

  5. ruby-on-rails - form_for 中不在模型中的自定义字段 - 2

    我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢

  6. ruby-on-rails - 如何将验证与模型分开 - 2

    我有一些非常大的模型,我必须将它们迁移到最新版本的Rails。这些模型有相当多的验证(User有大约50个验证)。是否可以将所有这些验证移动到另一个文件中?说app/models/validations/user_validations.rb。如果可以,有人可以提供示例吗? 最佳答案 您可以为此使用关注点:#app/models/validations/user_validations.rbrequire'active_support/concern'moduleUserValidationsextendActiveSupport:

  7. ruby-on-rails - Rails 模型——非持久类成员或属性? - 2

    对于Rails模型,是否可以/建议让一个类的成员不持久保存到数据库中?我想将用户最后选择的类型存储在session变量中。由于我无法从我的模型中设置session变量,我想将值存储在一个“虚拟”类成员中,该成员只是将值传递回Controller。你能有这样的类(class)成员吗? 最佳答案 将非持久属性添加到Rails模型就像任何其他Ruby类一样:classUser扩展解释:在Ruby中,所有实例变量都是私有(private)的,不需要在赋值前定义。attr_accessor创建一个setter和getter方法:classUs

  8. ruby-on-rails - Rails - 从另一个模型中创建一个模型的实例 - 2

    我有一个正在构建的应用程序,我需要一个模型来创建另一个模型的实例。我希望每辆车都有4个轮胎。汽车模型classCar轮胎模型classTire但是,在make_tires内部有一个错误,如果我为Tire尝试它,则没有用于创建或新建的activerecord方法。当我检查轮胎时,它没有这些方法。我该如何补救?错误是这样的:未定义的方法'create'forActiveRecord::AttributeMethods::Serialization::Tire::Module我测试了两个环境:测试和开发,它们都因相同的错误而失败。 最佳答案

  9. ruby-on-rails - Ruby 中的内存模型 - 2

    ruby如何管理内存。例如:如果我们在执行过程中采用C程序,则以下是内存模型。类似于这个ruby如何处理内存。C:__________________|||stack|||------------------||||------------------|||||Heap|||||__________________|||data|__________________|text|__________________Ruby:? 最佳答案 Ruby中没有“内存”这样的东西。Class#allocate分配一个对象并返回该对象。这就是程序

  10. ruby - 从 Ruby 中的主机名获取 IP 地址 - 2

    我有一个存储主机名的Ruby数组server_names。如果我打印出来,它看起来像这样:["hostname.abc.com","hostname2.abc.com","hostname3.abc.com"]相当标准。我想要做的是获取这些服务器的IP(可能将它们存储在另一个变量中)。看起来IPSocket类可以做到这一点,但我不确定如何使用IPSocket类遍历它。如果它只是尝试像这样打印出IP:server_names.eachdo|name|IPSocket::getaddress(name)pnameend它提示我没有提供服务器名称。这是语法问题还是我没有正确使用类?输出:ge

随机推荐