三层_三层架构 - CSDN
精华内容
参与话题
  • 三层架构(一)——什么是三层架构?

    千次阅读 热门讨论 2014-06-28 17:12:05
    一、什么是三层架构?  1、概念  三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。区分层次的目的即为了“高内聚,低耦合...

     一、什么是三层架构?

      1、概念


      三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。区分层次的目的即为了“高内聚,低耦合”的思想。   

    分层(tier)

    概念

    表现层(UI)

    通俗讲就是展现给用户的界面,用于显示数据和接受用户输入的数据;即用户在使用一个系统的时候他的所见所得。

    业务逻辑层(BLL)

    针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。是表示层和数据访问层之间的桥梁。

    数据访问层(DAL)

    该层所做事务直接操作数据库,针对数据的增添、删除、修改、查找等。

    数据库实体类(Entity

    对数据对象进行封装,也有一些简单的功能


    各层的作用

    分层(tier)

    概念

    表现层(UI)

    主要表示WEB方式,也可以表示成WINFORM方式,WEB方式也可以表现成:aspx,如果逻辑层相当强大和完善,无论表现层如何定义和更改,逻辑层都能完善地提供服务。

    业务逻辑层(BLL)

    主要是针对具体的问题的操作,也可以理解成对数据层的操作,对数据业务逻辑处理,如果说数据层是积木,那逻辑层就是对这些积木的搭建。

    数据访问层(DAL)

    主要是对原始数据(数据库或者文本文件等存放数据的形式)的操作层,而不是指原始数据,也就是说,是对数据的操作,而不是数据库,具体为业务逻辑层或表示层提供数据服务.


    由上表可以看出,多出的一个数据库实体类(Entity),他在三层中并不是作为一层而存在的,而是作为一个类库,起到封装数据库表的作用。


       2、各层及类库之间的联系


       用一张图来表示:

       

      

      下一篇:为什么要用三层架构?

            

      

      



    展开全文
  • 1、什么是三层架构? 三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:表示层(User Interface layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data access layer)。 ...

    1、什么是三层架构?

    三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:表示层(User Interface layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data access layer)。

    ①、表示层(USL):主要表示WEB方式,也可以表示成WINFORM方式。如果逻辑层相当强大和完善,无论表现层如何定义和更改,逻辑层都能完善地提供服务。

    ②、业务逻辑层(BLL):主要是针对具体的问题的操作,也可以理解成对数据层的操作,对数据业务逻辑处理。如果说数据层是积木,那逻辑层就是对这些积木的搭建。

    ③、数据访问层(DAL):主要是对原始数据(数据库或者文本文件等存放数据的形式)的操作层,而不是指原始数据,也就是说,是对数据的操作,而不是数据库,具体为业务逻辑层或表示层提供数据服务。

    2、我们为什么要用三层?它的优点是什么?

    目的:区分层次的目的即为了“高内聚,低耦合”的思想。

    优点:开发人员可以只关注整个结构中的其中某一层;

    一层的修改并不影响另外两层;

    可以降低层与层之间的依赖;

    避免了表示层直接访问数据访问层,表示层只和业务逻辑层联系,提高了数据安全性。

    3、三层的原理图是什么?

    生活逻辑与计算机逻辑的结合:

    计算机逻辑展示:

    4、三层运行的核心是什么?

    所谓三层体系结构,就是在客户端和数据库之间加入了一个“中间层”,用户输入和看到的信息并不是直接从数据库提取出来的,而是经过了中间层的处理,避免了用户直接与数据库打交道,保证数据的安全。

    5、我们如何能够快速的掌握三层的逻辑?

    逐步运行三层的代码,将运行的流程进行抽象。

    三层代码展示:

    UI层

    ①、Program类(此类为系统自动生成)

    namespace LoginUI
    {
        static class Program
        {
                                                                      /// <summary>
                                                                      /// 应用程序的主入口点。
                                                                      /// </summary>
            [STAThread]
            static void Main()
            {
                Application.EnableVisualStyles();                     //启动应用程序的可视样式
                Application.SetCompatibleTextRenderingDefault(false); //将某些控件上定义的UseCompatibleTextRendering属性设置为应用程序范围内默认值
                Application.Run(new Form1());                         //在特定的applicationContext中,在当前线程上开始运行标准应用程序消息循环
            }
        }
    }

    ②、Form1类 

    namespace LoginUI
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void btnLogin_Click_1(object sender, EventArgs e)
            {
                string userName = txtUserName.Text.Trim();                     //1步:将用户输入的数据给存储起来,即将值赋值给变量
                string password = txtpassword.Text;
    
                Login.BLL.LoginManager mgr = new Login.BLL.LoginManager();     //2步:实例化BLL层LoginManager类
                Login.Model.UserInfo user = mgr.UserLogin(userName, password);
                                                                               //3、23步:通过实例化B层对象mgr,来调取B层中的成员函数UserLogin,并将userName与password作为参数传到BLL层,并将返回的参数赋值给user
    
                MessageBox.Show("登录用户:" + user.UserName);                  //24步:登录成功
            }
        }
    
    }
    

    BLL层

    namespace Login.BLL
    {
        public class LoginManager
        {
            public Login.Model.UserInfo UserLogin(string userName, string password)
            {
                Login.DAL.UserDAO uDAO = new Login.DAL.UserDAO();               //4步:实例化DAL层UserDAO类,即创建一个uDAO对象。
                Login.Model.UserInfo user = uDAO.SelectUser(userName, password);//5,13步:将userName与password作为参数传给DAL层,并将返回的参数赋值给user
    
                if (user != null)                                               //判断user中的数据,登录成功
                {
                    Login.DAL.ScoreDAO sDao = new Login.DAL.ScoreDAO();         //14步:实例化DAL层ScoreDAO类
                    sDao.UpdateScore(userName, 10);                             //15、21步:调取DAL层中的UpdateScore方法,进行更新数据库
                    return user;                                                //22步:将user的值返回到UI层
                }
                else
                {
                    throw new Exception("登录失败");                             //user值没有赋值成功,导致登录失败
                }
            }
        }
    }
    

    DAL层

    ①、UserDAO类

    namespace Login.DAL
    {
        public class UserDAO
        {
            public Login.Model.UserInfo SelectUser(string userName, string password)
            {
                using (System.Data.SqlClient.SqlConnection conn = new SqlConnection(DbUtil.ConnString))       //6步:实例化连接数据库字符串conn,using用来自动释放资源
                {
                    SqlCommand cmd = conn.CreateCommand();                                                    //7步:创建一个关联的SqlCommand对象,此对象包含connection连接的;连接完成,此时可以对数据库进行操作了。
                    cmd.CommandText = @"SELECT * FROM Users WHERE UserName=@UserName AND Password=@Password"; //8步:查询数据库的SQL语句
                    cmd.CommandType = System.Data.CommandType.Text;                                           //CommandType是SqlCommand的一个属性,声明命令对象执行形式为文本
    
                    cmd.Parameters.Add(new SqlParameter("@UserName", userName));                              //9步:添加参数到参数集,add里面的第一个参数是要添加的参数名,第二个参数是参数的数据类型.Parameters的作用就是把存储过程执行结束后得到的参数传到程序里
                    cmd.Parameters.Add(new SqlParameter("@Password", password));
    
                    conn.Open();                                                                              //10步、打开数据控
                    SqlDataReader reader = cmd.ExecuteReader();                                               //11步、实例化SqlDataReader,用于从数据库中只读的方式读取数据
    
                    Login.Model.UserInfo user = null;                                                         //12步、读取数据并返回查询结果:定义一个为null的UserInfo类型变量
                    while (reader.Read())                                                                     //Read是SqlDataReader的方法,将数据阅读器移到结果集的下一行并读取该行,返回值为bool类型
                    {
                        if (user == null)                                                                     //如果没有user的信息,就实例化一个为空的UserInfo
                        {
                            user = new Login.Model.UserInfo();
                        }
                        user.ID = reader.GetInt32(0);                                                         //从数据库中读取并赋值给user,并转换为相应的数据类型
                        user.UserName = reader.GetString(1);
                        user.Password = reader.GetString(2);
                        if (!reader.IsDBNull(3))                                                              //Email可以为空,IsDBNull为SqlDataReader的一个方法,返回bool类型,若数据为空则返回true,反之返回false
                        {
                            user.Email = reader.GetString(3);
                        }
    
                    }
                    return user;                                                                              //将user值返回到BLL层
                }
            }
    
        }
    }
    

    ②、ScoreDAO类

    namespace Login.DAL
    {
       public class ScoreDAO
        {
            public void UpdateScore(string userName, int value)
            {
                using (SqlConnection conn = new SqlConnection(DbUtil.ConnString))                         //16步:实例化连接数据库字符串conn,using用来自动释放资源
                {
                    SqlCommand cmd = conn.CreateCommand();                                                //17步:创建一个关联的SqlCommand对象,此对象包含connection连接的;连接完成,此时可以对数据库进行操作了。
                    cmd.CommandText = @"INSERT INTO SCORES(ID,UserName,Score) Values(1,@UserName,@Score)";//18步:向scores表中添加一条记录
    
                    cmd.Parameters.Add(new SqlParameter("@UserName", userName));                          //19步:添加参数到参数集,add里面的第一个参数是要添加的参数名,第二个参数是参数的数据类型.Parameters的作用就是把存储过程执行结束后得到的参数传到程序里
                    cmd.Parameters.Add(new SqlParameter("@Score", value));
    
                    conn.Open();                                                                          //20步:打开资源
                    cmd.ExecuteNonQuery();                                                                //21步:执行命令对象的SQL语句,返回一个int 类型的变量,返回数据库操作之后影响的行数;用来验证对数据库进行增删改的情况。
    
                }
            } 
        }
    }

    ③、DBUtil类

    namespace Login.DAL
    {
        class DbUtil
        {
            public static string ConnString = @"Server=ELSA\SQLS;Database=Login; User ID=sa;Password=123456";//连接数据库字符串,此处Server填写的是服务器的名称,Database是数据库中数据表的名称,UserID为数据库登录名称,Password为数据库登录密码
        }
    }

    Model层

    namespace Login.Model
    {
       public  class UserInfo
        {
    
                public int ID { get; set; }
                public string UserName { get; set; }
                public string Password { get; set; }
                public string Email { get; set; }
            }
    
    }

    三层架构代码逐步运行顺序图:

    展开全文
  • 浅谈 MVC与三层架构

    万次阅读 多人点赞 2019-06-03 16:24:38
    引言: 使用Eclipse开发工具写Java Web项目时会发现,一个中型或者大型项目 随着代码的增多,会发现:代码既可以写在src目录下,也可以写在WebContent目录下。src下可以建很多包 ,WebContent下可以建很多文件夹。...

    引言:

    使用Eclipse开发工具写Java Web项目时会发现,一个中型或者大型项目 随着代码的增多,会发现:代码既可以写在src目录下,也可以写在WebContent目录下。src下可以建很多包 ,WebContent下可以建很多文件夹。

    所以问题就来了:一个新的类 到底往哪个目录下的哪个文件夹里写?

    此时解决办法就是:需要一个模式去规范,到底哪个类该往哪里写。

                                                                             

     MVC设计模式:

    视图View

    负责页面的显示;与用户的交互。包含各种表单。 实现视图用到的技术有html/css/jsp/js等前端技术。

    用户交互:用户鼠标点击页面;填写页面中各种表单........等等

    模型Model

    模型负责各个功能的实现(如登录、增加、删除功能)。模型用JavaBean实现。

    JavaBeans :

    ①是Java中一种特殊的类(换言之:JavaBean就是一个Java类).

    一个Java类 ,满足以下要求,则可称为一个JavaBean

      a. public修饰的类,提供public 无参构造方法

      b. 所有属性 都是private

      c. 提供getter和setter方法

     

    ②从使用层面来看,JavaBean分为2大类:

      a. 封装业务逻辑的JavaBean (eg:LoginDao.java 封装了登录逻辑)

      b. 封装数据的JavaBean (实体类:eg:Student.java  Vedio.java 。往往对应于数据库中的一张表,即数据库中有个Student表,项目中就有个Student.java类)

       

     

    ③JavaBean 是一个可以重复使用的组件,通过编写一个组件来实现某种通用功能,“一次编写、任何地方执行、任何地方重用”。

    控制器Controller

    控制器负责将视图与模型一一对应起来。相当于一个模型分发器。所谓分发就是:①接收请求,并将该请求跳转(转发,重定向)到模型进行处理。②模型处理完毕后,再通过控制器,返回给视图中的请求处。建议使用Servlet实现控制器。

     

     三层架构:

    首先来说,三层架构与MVC的目标一致:都是为了解耦和、提高代码复用。MVC是一种设计模式,而三层架构是一种软件架构。

    三层架构分为:表现层(UI)(web层)、业务逻辑层(BLL)(service层)、数据访问层(DAL)(dao层) 再加上实体类库(Model)

    1.实体类库(Model),在Java中,往往将其称为Entity实体类。数据库中用于存放数据,而我们通常选择会用一个专门的类来抽象出数据表的结构,类的属性就一对一的对应这表的属性。

    ·一般来说,Model实体类库层需要被DAL层,BIL层和UI层引用。

    2.数据访问层(DAL),主要是存放对数据类的访问,即对数据库的添加、删除、修改、更新等基本操作

     ·DAL就是根据业务需求,构造SQL语句,构造参数,调用帮助类,获取结果,DAL层被BIL层调用

    3.业务逻辑层(BLL)

    ·BLL层好比是桥梁,将UI表示层与DAL数据访问层之间联系起来。所要负责的,就是处理涉及业务逻辑相关的问题,比如在调用访问数据库之前,先处理数据、判断数据。

    BLL层只被UIL层引用

    1. 用户表现层(UIL),就是用户看到的主界面。

                            各层引用关系如下图所示:

     

     

    MVC与三层架构的对应关系,图示如下:

     

    展开全文
  • 三层架构

    千次阅读 热门讨论 2018-08-09 11:54:14
    为什么要用三层   说到三层,先来说一说两层结构。两层结构将界面展示、业务逻辑、数据访问等都写到一起,如果用户需求变化,就需要对整个项目进行大量修改,系统的维护和升级极其不利;而且界面层直接访问数据库...

    为什么要用三层

      说到三层,先来说一说两层结构。两层结构将界面展示、业务逻辑、数据访问等都写到一起,如果用户需求变化,就需要对整个项目进行大量修改,系统的维护和升级极其不利;而且界面层直接访问数据库,还会有安全隐患。结构如下图所示:
    这里写图片描述
      所以基于两层结构的局限性,三层结构就出现了。三层结构符合“高内聚、低耦合”的特点,每个层职责明确。利用分层,降低了层间依赖,使系统的耦合更加松散,从而使系统更加容易维护和复用。
      比如:如果需求有变化,只需要更改相应的业务逻辑层;或者要改变数据库的时候,只需要将原来的数据访问层替换掉或者增加新的就可以了,而不需要牵扯到整个项目。
      三层架构虽好,但是也不是每个项目都必须采用这种结构,三层结构用于比较复杂的大型系统,如果系统比较小,则没必要将问题复杂化。

    何为三层

    这里写图片描述
    三层由显示层(UI)、业务逻辑层(BLL)、数据访问层(DAL)组成。
    1.显示层(UI)
      职责:①向用户展示特定的业务数据
         ②采集用户的信息和操作
      原则:用户至上,兼顾简洁

    2.业务逻辑层(BLL)
      职责:① 从UI中获取用户指令和数据,执行业务逻辑
         ②从UI中获取用户指令和数据,通过DAL写入数据源
         ③从DAL中获取数据,以供 UI 显示用
      机制:① UI –> BLL –> UI
         ② UI –> BLL –> DAL –> BLL –> UI

    3.数据访问层(DAL)
      作用:跟数据源打交道
      职责:①执行对数据的操作(增删改查)

    4.数据对象层
      数据对象层包含了项目需要使用的数据对象,用数据对象来传递数据,它避免了各个层的交叉引用。
      一般一个表对应一个数据对象。

    引用关系

    上图已经展示了它们三者之间的引用关系。UI层–> BLL层 –> DAL层,而它们都引用数据对象层。

    代码展示

    下面以一个登录的小例子,展示一下三层是如何具体使用的。
    UI层:

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
    
        private void btnLogin_Click(object sender, EventArgs e)
        {
            //获取输入的用户名和密码
            string userName = txtUserName.Text.Trim();
            string userPassword = txtPassword.Text;
    
            Login.BLL.LoginManager mgr = new Login.BLL.LoginManager();
            //调用B层的登录方法,从B层返回user的信息
            UserInfo user = mgr.Login(userName, userPassword);
    
            MessageBox.Show("登录用户:" + user.UserName);
        }
    }

    BLL层:

    public class LoginManager
    {
        public UserInfo Login(string userName,string password)
        {
            //实例化UserDao
            UserDAO uDao = new UserDAO();
            //调用UserDao的查询用户方法
            UserInfo user = uDao.SelectUser(userName, password);
    
            //如果用户存在,就调用ScoreDao的更新积分方法,给用户加10积分;否则就抛出异常
            if (user != null)
            {
                ScoreDAO sDao = new ScoreDAO();
                //调用ScoreDao的更新积分方法
                sDao.UpdateScore(userName, 10);
                return user;
            }
            else
            {
                throw new Exception("登录失败。");
            }
        }
    }

    DAL层:

    public class UserDAO
    {
        /// <summary>
        /// 查询用户是否存在并返回用户信息
        /// </summary>
        /// <param name="userName">用户名</param>
        /// <param name="password">密码</param>
        /// <returns></returns>
        public UserInfo SelectUser(string userName,string password)
        {
            using (SqlConnection conn = new SqlConnection(DbUtil.ConnString))
            {
                SqlCommand cmd = conn.CreateCommand();
    
                //获取执行的SQL语句 或表名 或存储过程名
                cmd.CommandText = @"SELECT ID,UserName,Password,Email
                                    FROM USERS WHERE UserName=@UserName AND Password=@Password";
                //指示执行的是存储过程还是sql语句,默认执行语句
                cmd.CommandType = CommandType.Text;
                cmd.Parameters.Add(new SqlParameter("@UserName", userName));
                cmd.Parameters.Add(new SqlParameter("@Password", password));
    
                conn.Open();
                SqlDataReader reader = cmd.ExecuteReader();
    
                UserInfo user = null;
                while (reader.Read())
                {
                    if (user == null)
                    {
                        user = new UserInfo();
                    }
                    user.ID = reader.GetInt32(0);
                    user.UserName = reader.GetString(1);
                    user.Password = reader.GetString(2);
                    if (!reader.IsDBNull(3))
                    {
                        user.Email = reader.GetString(3);
                    }
                }
                return user;
            }
        }
    }
    public class ScoreDAO
    {
        /// <summary>
        /// 更新用户积分
        /// </summary>
        /// <param name="userName">用户名</param>
        /// <param name="value">要增长的积分</param>
        public void UpdateScore(string userName,int value)
        {
            using (SqlConnection conn = new SqlConnection(DbUtil.ConnString))
            {
                SqlCommand cmd = conn.CreateCommand();
    
                //查询Scores表中是否已有用户信息
                cmd.CommandText = @"SELECT * FROM Scores WHERE UserName =@UserName";                
                cmd.CommandType = System.Data.CommandType.Text;
                cmd.Parameters.Add(new SqlParameter("@UserName", userName));
                cmd.Parameters.Add(new SqlParameter("@Score", value));
    
                conn.Open();
                SqlDataReader reader = cmd.ExecuteReader();                
    
                //如果Scores表中用户积分已存在就在原来的基础上加10份;否则就插入新的用户积分数据
                if (reader.Read())
                {
                    //在用户原有积分基础上加10分
                    cmd.CommandText = @"UPDATE Scores SET Score+=10 WHERE UserName = @UserName";
                    //关闭reader
                    reader.Close();
                    //执行SQL语句
                    cmd.ExecuteNonQuery();
                }
                else
                {
                    reader.Close();
                    //插入新的用户积分数据
                    cmd.CommandText = @"INSERT INTO SCORES(UserName,Score) Values(@UserName,@Score)";
                    cmd.ExecuteNonQuery();
                }
            }                        
        }
    }
    展开全文
  • 软件三层架构

    千次阅读 2018-05-29 09:12:33
    三层架构编辑词条三层架构(2)三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。区分层次的目的即为了“高内聚,低耦合”的思想...
  • 三层架构(我的理解及详细分析)

    万次阅读 多人点赞 2013-01-26 17:13:32
    三层架构已经学了一段时间,一直想做一个比较完整、比较完美的总结。但是左思右想,不知道如何下笔。都说万事开头难嘛,今天整理了一下凌乱的思路,哎,还是没整理好,想到哪就说到哪吧。   初学者很不理解: 1,...
  • 三层

    热门讨论 2016-12-22 17:18:48
    三层三层分别指的是显示层UI,业务逻辑层BLL,数据访问层DAL UI层 作用:向用户展现特定业务数据 采集用户输入的信息和操作 技术:WindowsForm、ASP.NET BLL层 作用:从DAL获取数据,以供UI显示用 从UI层...
  • 三层架构简介

    千次阅读 2018-07-29 23:38:57
    1、什么是三层?   三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为: 界面层(User Interface layer) UI(表现层):主要是指与用户交互的界面。用于接收用户输入的数据和显示...
  • 三层架构理解

    2020-10-13 18:22:16
    三层架构就是为了符合“高内聚,低耦合”思想,把各个功能模块划分为表示层(UI)、业务逻辑层(BLL)和数据访问层(DAL)三层架构,各层之间采用接口相互访问,并通过对象模型的实体类(Model)作为数据传递的载体...
  • 三层是什么

    热门讨论 2017-06-11 19:14:53
    下面就让我们进入三层的世界,看看三层是怎样体现面向对象思想的。 二、内容 (一)、什么是分层: 分层表示将功能进行有序的分组:应用程序专用功能位于上层,跨越应用程序领域的功能位于中层
  • 三层技术近几年来耳朵都能起茧子,到处都在喊三层技术,但对有的人来说这还个非常新的技术,当然也有人说,三层交换嘛,不就是路由器和二层交换机的堆叠,也没有什么新的玩意,事实真如他们所说的吗?下面先来通过一...
  • 交换机二三层转发原理简单总结

    万次阅读 多人点赞 2018-08-26 23:57:48
    首先二层转发基于MAC地址转发,三层转发基于IP地址转发,但是不一意味着仅仅依靠IP地址就能转发,三层转发是建立在二层的基础上的,而仅仅依靠MAC地址是能够转发的。另外,由于二三层转发基于MAC地址、IP地址、FDB表...
  • 三层转发原理

    千次阅读 2016-02-18 15:27:07
    三层以太网交换机的转发机制主要 分为两个部分,二层转发和三层交换。  先讲二层转发流程。   1、 MAC地址介绍  MAC地址是48 bit二进制的地址,如:00-e0-fc-00-00-06。  可以分为单播地址、多播地址和
  • 三层转发具体过程

    千次阅读 2017-03-09 11:08:10
    转发具体过程   根据路由表项的掩码和目的IP相与,判断主机A和主机B处于同一网段,采用二转发。 1. 主机A向全网段的其他主机发送ARP广播报文,其SMAC为主机A 的MAC地址,SIP为主机A的IP地址192.168.1.1...
  • OSI七层模型第三层:网络层,Network Layer OSI网络层主要功能:基于数据包的逻辑地址进行转发,寻找网络中目的的位置,并在去往目的的多条路径中选择一条最佳的路径。 逻辑地址:就是网络层地址,如TCP/IP协议栈的...
  • 来自专治PCB疑难杂症总群(四大群群友突破1800人啦,添加杨老师微信号Johnnyyang206,可添加入群)的疑难杂症:杨老师,三层板如何设计?我想先学三层板,然后一直往后学,学到十层板? 杨老师经过一些简单分析后,...
  • 魔方第三层

    千次阅读 2017-01-17 10:41:14
    我是菜鸟,上图不说话
  • 我是端口下挨个命令看的,看着像的就试试正题端口模式下portswitch 2undo portswitch 3华三的port link-mode route 3port link-mode bridge 2以后遇到别的命令不同的地方都总结进来 ...
  • WLAN—二三层漫游及转发方式

    千次阅读 2018-12-10 20:25:58
    1、什么是漫游? WLAN漫游是指STA在不同AP覆盖范围之间移动且保持用户业务不中断的行为; 2、漫游目的:避免漫游过程中的认证时间过长导致丢包甚至业务中断; 保证用户授权信息不变; 保证用户IP地址不变;...
  • 音频动态压缩第三层(MPEG Audio Layer-3)引言 MP3是现在非常流行的一种数字音频的压缩技术,它能够用12:1的压缩比将高保真的数字音频进行压缩,使得一张MP3光盘上能够放下十几张激光唱片的歌曲,而保证回放质量...
1 2 3 4 5 ... 20
收藏数 1,987,693
精华内容 795,077
关键字:

三层