简介 蓝图对大型项目来说是非常友好的，可以很方便的维护对应的模块 例如一个app.py文件里面包含了几十上百条路由，这些路由对应的模块是不同的，如果需要维护其中一个模块的路由，就需要在这几十上百条路由中慢慢找，如果使用了蓝图，那么直接在对应模块的蓝图中修改维护即可。 创建蓝图 创建py文件 每个蓝图都是一个单独的py文件，否则就失去了蓝图的意义 在app.py同级目录下创建一个新的py文件，文件名称可以根据模块名称来定，例如需要创建的是home这个模块的蓝图，那么就创建一个home.py文件 引入Blueprint类 在新创建的py文件中引入blueprint类 from flask import Blueprint 创建蓝图 创建一个名称为home的蓝图，并为其指定静态目录 home_bp = Blueprint('home', __name__, static_folder='static/home', static_url_path='/static/home') home_bp可以理解为一个变量名 Blueprint里面的home是蓝图名 __name__是Python 的模块名变量，代表当前模块（通常是包含该行代码的 .py 文件），Flask 利用它来确定蓝图的根目录，以便找到蓝图自己的 templates 文件夹和 static_folder。通常直接传 name 即可。 static_folder='static/home'是静态文件的实际路径，如果这个蓝图只有路由，没有静态文件（css,js等）可以不要 static_url_path='/static/home'是静态文件的访问URL前缀，通常与实际路径一致，但是注意在前面加/，如果这个蓝图没有静态文件可以不要 蓝图创建完成 蓝图创建完成后就可以在home_bp = Blueprint('home', __name__, static_folder='static/home', static_url_path='/static/home')后面写该模块的路由了 下面是一个简单的蓝图： from flask import Blueprint, render_template home_bp = Blueprint('home', __name__, static_folder='static/home', static_url_path='/static/home') @home_bp.route('/') def home(): return render_template('index.html') 注册蓝图 蓝图创建后需要在需要调用的地方注册才能使用 例如我现在创建的home蓝图，我需要app.py运行后调用这个模块，那么我就需要在app.py里面注册蓝图 首先在文件顶部引入蓝图模块 from home import home_bp from后面的home是模块名称，对应的是蓝图py文件的名称，home_bp是创建蓝图时候的变量 引入蓝图模块后再app = Flask(__name__)下面注册蓝图 app.register_blueprint(home_bp,url_prefix='/') app是应用实例的名称，这个应用实例明在是子再app = Flask(__name__)的时候定义了，如果是home = Flask(__name__)的话，应用实例名称就是home，对应的，就需要把app.register_blueprint(home_bp,url_prefix='/')该成home.register_blueprint(home_bp,url_prefix='/') register_blueprint是 Flask 应用的一个方法，用于将蓝图中定义的所有路由、静态文件配置、模板等合并到主应用中。如果不调用该方法，蓝图中定义的路由将无法访问 home_bp是蓝图模块，再创建蓝图模块的时候定义的 url_prefix='/'是蓝图访问路径，例如现在是/，那么访问ip:5000的时候就访问的是home这个蓝图，如果把/该成/home，那么想要访问这个蓝图的时候就需要访问ip:5000/home 应用对应蓝图的静态文件 在《Python-Web应用-页面组合/CSS引用》中，引用静态文件是 这个引用的是static目录下的静态文件，如果不同模块的静态文件位置不同，每个模块都在蓝图中定义了static_folder='static/home'和static_url_path='/static/home'，那么就可以在static前面加上蓝图模块名称来实现不同模块使用不同的目录下的静态文件，例如： 在static前面加home.
简介 一个web页面有很多模块，这些模块很多是重复的，这时候就可以通过页面组合来调用，而不是每个页面都重复的写一个模块 例如顶部的导航栏，底部的版权信息等，需要在每个页面都展示的模块，都可以直接组合调用使用，无需重复写 本篇文章基于《Python-Web应用-界面跳转》上修改 创建CSS目录以及模块目录 创建CSS目录 在项目目录下面新建一个名称为static的目录，这个目录用于存放CSS文件 创建模块目录 在templates目录下面创建components目录，这个目录用于存放模块 创建骨架文件 在templates目录下创建一个名称为frame.html的文件，这个文件是一个完整的html文件 这个文件写了一个简单的顶部导航栏 调用了外部CSS 中的{{ url_for('static', filename='style.css')}}是 Flask 模板中用于生成静态文件 URL 的标准写法。 {{...}} {{...}}是Jinja2 模板引擎的变量输出语法，双花括号内的表达式会被计算，结果替换到 HTML 中 url_for() url_for()是Flask 提供的全局函数，用于根据传入的端点（endpoint）和参数反向生成 URL，在模板中可以直接使用，无需额外导入 static static参数是 Flask 内置的特殊端点名称，指向项目的静态文件目录（默认是项目根目录下的 static 文件夹），当使用 url_for('static', filename='...') 时，Flask会生成指向static目录下指定文件的URL，注意static参数是固定的不能改变的，不能说css文件在css目录下，就可以把static改成css CSS不在static目录下 如果css文件不在static目录下，那么有两方法可以解决 第一种，在主程序py文件中指定static的目录和路径 这一种方法很简单，直接在app = Flask(__name__)中添加两个参数，一个是static_folder='/css目录路径'，另外一个是static_url_path='/css目录路径'，然后正常使用href="{{ url_for('static', filename='style.css')}}即可。 第二种是引用蓝图，这种方式适用于大型项目，利用蓝图管理对应模块的路由，css，js等，方便维护，这种方法比较复杂，后面放到单独的一篇文章讲解 filename='style.css' 这个参数是指定css文件，style.css是css文件名称，支持路径方式，例如现在默认的css目录是static，但是你在下面创建了一个css目录，在css目录面创建了一个index.css文件，那么就可以使用指定路径的方式：css/index.css 修改首页（index.html）文件 把之前的index.html文件修改一下，因为创建了骨架文件，这个文件包含了完整的html文件必要模块，那么index.html文件只需要展示首页部分的内容即可 下面就是一个简单的示例文件： {% extends "frame.html" %} {% block title %}首页-测试首页{% endblock %} {% block index_text %} 测试首页 {% endblock %} 第一行{% extends "frame.html" %} {% extends "frame.html" %}是让当前模板采用frame.html也就是创建的骨架文件作为基础布局，只需填写变化的部分。 这是Jinja2实现代码复用、保持页面结构一致的标准方式。 第二行{% block title %}首页-测试首页{% endblock %} 这一行的作用是把首页-测试首页填充进frame.html的完整的html结构里面的 标签里面，或者说是替换骨架文件里面的{% block title %}默认标题{% endblock %} 第三、四、五行 {% block index_text %} 测试首页 {% endblock %} 这几行的作用是把 {% block index_text %} {% endblock %} 中间的内容填充到骨架文件里面 创建底部版权文件 创建底部的版权文件也是一样的，因为骨架文件里面有完整的htnl格式，我们只需要编写填充部分即可 下面是一个简单的示例： 这个是底部 组合页面 回到骨架文件，开始引用填充部分（index.html）以及底部的版权信息模块 {% block title %}默认标题{% endblock %} 选项一 选项二 选项三 {% block index_text %}{% endblock %} {% include "components/bottom.html" %} 上面是一个简单的完整的骨架文件 因为index.html文件中的{% extends "frame.html" %}，也就是说index.html会调用frame.html这个文件并填充对应的block到frame.html中，渲染成一个完整的index.html页面 {% block title %}默认标题{% endblock %} 会被替换成index.html中的{% block title %}首页-测试首页{% endblock %} {% block index_text %}{% endblock %}会被替换成index.html中的 {% block index_text %} 测试首页 {% endblock %} {% include "components/bottom.html" %}则是引入bottom.html文件里面的 这个是底部 最终的页面效果为 block参数解释 {% block index_text %}{% endblock %}中的index_text是可以自定义的，但是需要被填充的和填充的是一样的 例如我把index.html页面的{% block title %}首页-测试首页{% endblock %}改为{% block title_1 %}首页-测试首页{% endblock %}，那么我在frame.html文件中的 {% block title %}默认标题{% endblock %} 也需要同步改为 {% block title_1 %}默认标题{% endblock %}
简介 在《Python-Web应用-显示一个html页面》中了解了如果显示一个HTML页面，这篇文章将会了解如何跳转到另外一个界面 原理和《Python-Web应用-显示一个html页面》是相同的，都是通过装饰器（路由）切换的 本篇文章以一个登录界面为例，当点击登录的时候跳转到登录界面 创建登录界面 在templates目录下创建一个名称为login.html的文件 新增装饰器（路由） 打开之前的app.py文件，需要在@app.route('/')下面创建一个新的装饰器（路由） @app.route('/login') def login(): return render_template('login.html') 这一段代码的意思为： 当访问127.0.0.1/login的时候执行login函数，这个函数返回的是login.html文件 修改index.html 在之前的index.html文件的 标签下面新增一个标签，标签的herf参数填写/login，标签显示文字内容为登录 登录 测试 浏览器打开127.0.0.1:5000 点击登录即可跳转到登录页面
简介 本篇文章是使用Python做web应用的开始，将从最简单的显示html页面开始 这里使用的是Flask框架 创建项目目录以及安装Flask 在进行这一步的前提是你已经安装好Python了 创建目录 首先是创建项目目录，项目目录名称没有指定，这个根据实际情况而定，例如我创建的项目目录就是Example 目录结构如下: Example\ |----templates 这并不是一个完整的项目目录，只是我们这篇文章用到的目录结构，为了避免混淆，所以其他目录不创建 上述目录结构中，Example是这个项目的总目录，下面的templates是存放html模板的目录 安装Flask 使用pip命令安装Flask pip install flask 创建index页面 使用你熟悉的编辑器创建index页面，这个页面需要创建在templates目录下面 创建Py文件 在templates目录同级目录下也就是Example目录下创建一个app.py文件，当然，这个文件名并不是固定的，可以自定义 编辑Flask应用代码 下面是一个简单的完整的Flask应用代码 from flask import Flask,render_template app = Flask(__name__) @app.route('/') def home(): # 渲染template目录下的index.html return render_template('index.html') if __name__ == '__main__': app.run(debug=True) from flask import Flask,render_template的作用是从Flask库中导入Flask这个类和render_template这个函数 Flask这个类是用来创建web应用实例 render_template这个函数用来读取并返回html文件 app = Flask(__name__)的作用是创建Flask应用实例 __name__是一个Python内置变量，代表当前模块的名字，如果直接允许这个文件，__name__的值是__main__ Flask需要使用__name__这个参数来定位静态文件（CSS/JS）和模板文件（HTML）所在的文件夹。传入__name__之后，Flask会自动以当前文件所在目录为根目录，去寻找`templates和其他文件夹。 @app.route('/')是一个装饰器，也可以理解为路由，它控制了用户访问那个路径的时候执行那一段代码，例如这里，当用户访问根路径也就是是127.0.0.1:5000/的时候，执行的就是下面的home函数 def home():的作用是定义一个名称为home的函数，这个函数在@app.route('/')下面，当用户访问根路径的时候就会执行这个函数 return render_template('index.html')使用return调用render_template这个函数，参数是index.html，也就是说当home这个函数被调用的时候，执行返回index.html这个页面 if __name__ == '__main__':是判断当前模块是被Python执行还是被导入其他模块中 如果是直接运行python app.py，那么__name__的值等于__main__,当条件成立执行if下面的代码 app.run(debug=True)的作用是启动Flask内置的开发服务器，debug=True是开启调试模式，开启调试模式的好处是当你修改代码的时候，服务器会自动重启，不需要手动重启，但是这个模式在生成环境下是绝对不能使用的，会有安全风险。 启动/访问实例 启动实例 打开cmd命令行，切换到项目目录下，输入下面命令启动实例 python app.py 访问实例 在浏览器中输入127.0.0.1:5000即可访问
简介： iframe标签详细属于以及功能具体请百度，能找到这篇帖子的估计已经对该标签有所了解了，这里不做重复 主页代码： 测试主页 按钮1 按钮2 按钮3 原理： 当按钮被单击时候触发名字为frameB的这个iframe标签，这个标签一开始加载的是0.html，单击按钮2的时候切换加载1.html 第一页代码： 测试页1 测试页1 第二页代码： 测试页2 测试页2 第三页代码： 测试页3 测试页3
脚本开头： #!/bin/bash 每个脚本的开头都是以这一行开头，用于说明下面的脚本是用什么运行的 输出字符： echo"要输出的字符" 变量： 新建变量： 变量名=赋值 注意： 命名只能使用英文字母，数字和下划线，首个字符不能以数字开头。 中间不能有空格，可以使用下划线 _。 不能使用标点符号。 不能使用bash里的关键字（可用help命令查看保留关键字）。 使用变量： $变量名 使用变量需要在变量名前面加一个美元符号$ 获取键盘输入： read -参数 参数： 参数 作用 -s 安静模式 -r 反斜杠不作为转义字符 -p"需要提示的文本" 用户输入行前面提示 -t 超时时间 指定超时时间，单位为秒 -u 文件描述符 从指定文件描述符读取输入 -e 如果标准输入时从终端来的，未来的readline被采用 -i 文本 如果readline是被采用来读取该行，文本时放置到编辑缓冲区编辑开始之前 例子： 现在运行脚本，需要用户输入“Y”和“N”来做选择，并且提示用户“请输入"Y"确定，输入"N"退出，默认为"N":”,然后把用户的选择赋值到yn变量中。 read -p "请输入"Y"确定，输入"N"退出，默认为"N":" yn 最后的yn为变量名，用户输入的内容会赋值到yn这个变量名中 if判断： if [ 判断条件 ];then 条件符合后执行的操作 elif [ 判断条件 ];then 条件符合后执行的操作 else 以上条件都不符合执行的操作 fi if如果，elif否则如果，else否则，fi结束语句 注意： 如果“=”两边没有空格时赋值，“=”两边有空格为比较 判断条件两头都要有空格 "$abc"="1" #等号两边没有空格为赋值 "$abc" = "1" #等号两边有空格为比较 用户登录时自动执行脚本： 把脚本放到/etc/profile.d目录 自定义脚本启动命令： alias 自定义的命令='输入自定义的命令后执行的操作' 在/etc/bashrc文件最后添加 清屏命令： clear 这个命令将会刷新屏幕，本质上只是让终端显示页向后翻了一页，如果向上滚动屏幕还可以看到之前的操作信息。一般都会用这个命令。 在指定文件最后插入一行或多行： 插入单行： echo "要插入的内容" >> 文件名 注意：echo后面有空格，要插入的内容后面也有空格，>>后面也有空格 插入多行： echo -e "要插入的第一行\n要插入的第二行\n要插入的第三行" >> 文件名 添加参数-e，使用\n换行 删除指定文件的指定行： sed 删除指定行： sed '行数d' 文件名 删除第5行 sed '5d' 文件名 删除最后一行： sed '$d' 文件名 最后一行用美元符号代替 删除第几行到第几行： sed '要删除的第一行,要删除的最后一行d' 文件名 删除第8行到第10行 sed '8,10d' 文件名 删除不连续的行： sed '要删除的行d,要删除的行d,要删除的行d' 文件名 删除第3行，第8行和最后一行 sed '3d,8d,$d' 文件名 除了那几行其他的都要删除： sed '不需要删除的开始行,不需要删除的最后一行!d' 文件名 除了第3行到第6行其他的都要删除 sed '3,6!d' 文件名 删除空白行： sed '/^$/d' 文件名 删除包含特定字符的行： sed '/特地字符/d' 文件名 需要删除包含install这个单词的行 sed '/install/d' 文件名 删除特定字符开头的行： sed '/^特定字符/d' 文件名 需要删除linux开头的行 sed '/^linux/d' 文件名
数据表示： 进制表示： 二进制下标是“2”； 十进制下标是“10”，或者后面加字母“D” 八进制下标是“8”，或者后面加字母“O” 十六进制下标是“16”，或者后面加字母“H” 三位二进制等于一位八进制，四位二进制等于一位十六进制 十六进制10=A,11=B,12=C,13=D,14=E,15=F 总结：D十，O八，H十六，三二一八，四二一一十六 源码、反码、补码： 在计算机中，存储一个数用的是补码 最高位为符号位，0表示正数，1表示负数 原码： 没有改动的二进制，范围：-（2的（N次方-1）-1）~2的（N次方-1）-1 反码： 正数表示方法和原码一样不变，负数表示方法除了符号位，其他的和原码相反，范围：-（2的（N次方-1）-1）~2的（N次方-1）-1 补码： 正数表示和原码一样，负数表示方法在反码的数值位加1，符号位不变，范围：-2的（N次方-1）~2的（N次方-1）。 总结：原二进制，反正不改负符不改其他相反，补正不改负符不改其他反加1 逻辑运算： 0=假，1=真 或运算： 无真结果为假，有真结果为真，0+0=0，0+1=1，1+1=1，1+0=1 与运算： 只有两个都为真结果才为真，否则为假，0×0=0，0×1=0，1×0=0，1×1=1 非运算： 不真即假，不假即真 异或运算： 两个条件一致结果为假，两个条件不一致结果为真，0⊕0=0，0⊕1=1，1⊕0=1，1⊕1=0 计算机结构： 总线：数据总线，地址总线：控制总线 CPU: 运算器： 算术逻辑单元ALU：算术逻辑运算 累加寄存器AC：暂存中间的计算的结果 数据缓冲寄存器：保存从主存储中读取的数据 状态条件寄存器：保存计算过程中的状态信息，例如借位，进位，结果溢出 控制器： 程序计数器PC：存放指令所在的地址 指令寄存器IR：保存当前正在执行的指令 指令译码器：对指令操作码译码 时序部件：为指令执行产生时序信号 寻址方式： 指令是由操作码和地址码组的 立即寻址： 操作数在指令中 直接寻址： 地址码中有操作数的地址，可以直接根据地址在内存中找到操作数 间接寻址： 经过两次或以上的访存操作后才能得到操作数 变址寻址： 涉及到变址寄存器 寄存器寻址： 操作数在寄存器中 寄存器间接寻址： 多次访问寄存器得到操作数 CISC与RISC： CISC： 偏向用户编程灵活度，数量多，频率差别大，可变长格式，支持多种寻址方式，使用微程序控制技术 RISC： 偏向机器执行高效性，数量少，频率接近，定长格式，大部分为单周期指令，操作寄存器，只有Load/Store操作内存，支持寻址方式少，增加了通用寄存器，硬布线逻辑控制为主，适合采用流水线，优化编译，有效支持高级语言 流水线： 计算公式： 计算公式：（t₁+t₂+t₃）+（n-1）t₁ t₁、t₂、t₃对应取址、分析、执行的时间，最后一个t₁是周期，也就是这三步中用时最长的那一步的时间 流水线指标： 吞吐率： 吞吐率：Tp=n/Tk,n为任务的数量，Tk是流水线执行完需要的时间 理论最大吞吐率：周期的倒数 加速比： 加速比：S=Ts/Tk，TS是不适用流水线执行完任务的时间，TK是使用流水线执行完所有任务的时间。 效率： 一条指令分三步执行完，当只有第一步在工作的时候，效率为三分之一，当一二步都在工作的时候效率为三分之二，当一二三步都在工作的时候效率为百分之百 存储系统结构： 存储系统有CPU里面的寄存器，缓存（Cache），主存（内存），辅存（磁盘） 速度越快容量越小，距离CPU越近速度越快 速度：寄存器>缓存>主存>辅存 主存：随机存储器RAM（掉电丢失），只读存储器ROM（掉电不丢失） 缓存：Cache高速缓冲存储器，实现缓和CPU和主存之间的速率矛盾 存储系统的存储方式： 顺序存取（磁带） 直接存取（硬盘） 随机存取（内存） 相关联存取（Cache），根据内容存取 主存储器组成： 计算内存： 计算有多少芯片组成：用总容量除以芯片容量 知道开始编址和接收编址求字节：用最大编址减最小编址加1 知道字节求容量：把字节转换为二进制，K=2¹⁰=1024=1K，去掉十个零得到1个K，剩余的转十进制，得到单位为KB的容量，如果要算芯片数，用总容量除以芯片容量。 表示存储容量相关术语： 位：用bit表示，一个二进制表示1bit 字节：用B表示，1B=8bit 字：实际表示CPU以此处理的二进制的位数，通常为字节的整数倍，8/16/32/64bit 磁盘： 时间排序： IDE(PATA)<SATA(6Gbps)<SCSI<SAS<SSD SAS用于高端，NLSAS用于较大数据块，SATA用于较大数据块，FC用于高端用户 RAID技术： 条带化+校验/条带化+镜像 条带：把一块数据分布存放在多块磁盘中。 可以提升性能，保证数据可靠性。 条带宽度： 在RAID组中有多少磁盘 条带深度： 在单块磁盘中分块的大小 条带大小： 条带宽度×条带深度 RAID0： 使用条带技术，没有提高数据可靠性，只提高性能，最少2个磁盘，利用率100%。 RAID1： 使用硬盘镜像技术，没有提升性能，提升数据可靠性，利用率50%。 RAID3： 使用奇偶校验和数据分段技术，只允许一块磁盘坏掉，会产生I/O瓶颈，利用率=（n-1）/n RAID5： 分布式奇偶校验加分段式技术，校验数据分布存放，没有I/O瓶颈，利用率=（n-1）/n，最少三个硬盘。 RAID6： 大型企业私有级别，有两个独立校验方式，允许两个硬盘出错，利用率=（n-2）/n RAID10： 先做RAID1，再做RAID0，先镜像，再条带化，利用率50%，再特定情况下允许两个磁盘同时故障，需要2N个磁盘，N≥2，最低4个。 性能：RAID10﹥RAID5 可靠性：RAID10﹥RAID5 数据重构：RAID10﹥RAID5 成本：RAID10﹥RAID5 镜像比校验快，主要常用RAID10，RAID10属于关键，RAID5属于非关键 热备盘： 保留一块硬盘，一旦RAID组中有一块硬盘故障，立马启用热备盘。 预考贝： 检测硬盘即将故障立马拷贝 RAID状态： 故障但是能读出为降级状态，不能读出为失效状态 RAID技术发展： 传统RAID→LUN虚拟化→块虚拟化（RAID2.0） RAID2.0： 基于数据块构建RAID组，快速重构，自动负载均衡，系统性能提升，自愈合 系统可靠性： 串行工作方式计算可靠性：R=R1×R2×R3×......×RN 并行工作方式计算可靠性：R=1-(1-R1)×(1-R2)×(1-R3)×......×(1-RN) R为各个部件的可靠性 操作系统概述： 计算机软件： 系统软件 应用软件 系统软件： 操作系统 程序设计语言 数据库系统 程序设计语言： 机器语言（二进制语言） 汇编语言（符号化机器语言） 高级语言 4GL语言（例如数据库系统） 高级语言： 编译程序 翻译程序（输入一条翻译一条执行一条） 进程状态： 进程有三态，分别是运行、等待、就绪 软件刚开始启动处于运行状态，等待用户进行下一步操作属于等待状态，用户操作完成后属于就绪状态，调动程序调动运行再次处于运行状态，运行时间到了之后再次返回就绪状态。 死锁问题： 进程管理是操作系统的核心 等一个不可能发生的事 一个死锁多个死锁 互斥： 一个资源只能被一个进程使用 保持和等待： 获得的资源不足，请求其他资源同时不释放资源 不剥夺： 资源被进程占用，只有等待进程使用完成后释放 环路等待： 一个进程等待另个一进程释放资源 解决死锁： 死锁预防：一次性分配资源 死锁避免 死锁检测 死锁解除：一般使用剥夺机制 进程的互斥和同步： 互斥：千军万马过独木桥，间接制约关系 同步：速度有差异，在一定情况下等待，直接制约关系 PV操作： 解决互斥和同步的问题。 P操作： 使S=S-1，若S≥0，则该进程继续执行，否则该进程进入等待队列，S=空闲资源数 V操作： 使S=S+1，若S≤0，唤醒等待队列中的一个进程 页式存储： 用页号查找页表，把页号替换成查找到的块号得出物理地址 先进先出FIFO： 先进内存的页先出 最佳置换法OPT： 不经常访问的之换掉，前往后看 最近最少使用置换法LRU： 最近最少使用到的置换掉，从后往前看 树形目录结构： Linux：最上层目录“/”目录 Windows：最上层目录“盘符” 绝对路径： 最上层的目录到达目标文件的路径 相对路径： 当前工作目录所定的，从当前工作目录到达目标文件的目录，上级目录用“../”表示 设备管理： 程序控制方式： CPU一直监听外设 程序中断方式： 外设有数据需要传输的时候向CPU发送中断信号，适合用在鼠标键盘 DMA方式： CPU不干预传输，适合用于磁盘 软件生命周期： 从计划开发到开发再到运行这几个阶段 计划时期： 问题定义：开发这个东西事为了解决什么问题 可行性研究：解决这个问题有没有什么可行的方案，需要多少人力物力财力 参与人员：甲方、系统分析师、项目负责人 开发时期： 需求分析：明确新系统要实现什么功能，参与人员有用户、项目负责人、系统分析师 总体设计 详细设计 编码：程序员 测试：测试工程师 运行时期： 维护 软件开发模型： 瀑布型： 软件生命周期法，从上往下，每一个活动只要通过了只做一次，重点事需求分析，需要精准捕获用户需求 原型化模型： 先构造简单模型，在使用中改进，适合不能精准捕获用户需求 增量模型： 每一次发布都要发布一个可操作版本 演化模型： 不要求每次发布一个可操作版本 V模型： 拔高测试地位 需求分析→系统测试 概要设计→集成测试 详细设计→单元测试 单元测试： 测试各个模块，对应详细设计，测试模块接口，局部数据结构，边界条件，独立的路径，错误处理 集成测试： 测试模块间的协作性，对应概要设计，测试模块间的接口盒通信 系统测试： 测试整个系统，对应需求分析，恢复测试、安全性测试、强度测试、性能测试、可靠性测试和安装测试 验收测试： 有效性测试，软件配置审查、验收测试 喷泉模型： 各个阶段存在迭代，各个活动间没有明确的边界 螺旋模型： 原型化加瀑布，主要加入风险评估 软件开发和测试： 划分软件系统模块时应做到高内聚低耦合 高内聚： 一个模块中各个元素越紧密越好 低耦合： 模块和模块间关系越松越好，最好一个模块一个功能 动态测试： 黑盒测试法： 把程序看作一个黑盒子，不关心程序运行方法，只关心输入输出 白盒测试： 把程序看作一个透明盒子，关心程序实现的细节 灰盒测试法： 即关心输入输出又关心程序内部（逻辑驱动测试，路径测试，结构测试） 静态测试法： 程序员自查 甘特图： 时间管理也叫进度管理 X轴为时间，Y轴为项目，，可以很明显看到并行项目，但无法看出各个任务间的依赖关系。 计划评审图（PERT）： 无法明显看出子活动与子活动是否有时间上的关联，单可以明显看到各个子活动的依赖关系 整个项目工期： 最短工期=关机路径（开始到结束历时最长的路径） 最晚开始时间： 总工期往前推 最早开始时间： 开始时间往后推 松弛时间： 最晚开工时间减最找开工时间 保护期限： 产权人确定： 侵权判定： 不侵权： 个人学习，研究或者欣赏； 适当引用； 公开演讲内容； 用于教学和科学研究； 复制馆藏作品； 免费表演他人作品； 室外公开场所艺术临摹、绘画、摄影录像； 将汉语作品译成少数民族语言作品或盲文出版。 侵权： 未经许可，发表他人作品； 未经合作作者许可，将与他人合作创作的作品当作自己单独作品的作品发表； 未参与创作，与他人作品署名； 歪曲、篡改他人作品的； 剽窃他人作品； 使用他人作品未付报酬； 未经出版者许可，使用其出版的图书，期刊的版式设计的。 通信术语： 信息 数据：信息的载体 信号：信息和数据转为信号传输 模拟信号：覆盖范围有限，可放大，无法远距离传输 数字信号：可远距离传输 码元：单位时间之内信号波形的变化次数 信道特征： 理想信道： 无噪声干扰的信道，码元的最高传输速率：B=2W，W为带宽 带宽=信号的最高频率-信号的最低频率，单位是Hz 奈奎斯特定律： B=2W，B：波特，W：带宽 波特换算比特： R=B log₂N，R：比特，B波特，N码元种类 有噪声干扰信道： 运用香农定律 香农定律： C=W log₂(1+S/N),S：信号的平均功率，N：噪声的平均功率 噪声换算分贝： dB=10 log₁₀（S/N），dB:分贝，log₁₀（S/N）：10的多少次方等于（S/N） 调制技术： 用于模拟信道传递数字数据 最基本的调试方法：ASK,FSK,PSK ASK： 有振幅表示1，无振幅表示0，码元种类为2 FSK： 频率高为1，频率低为0，码元种类为2 PSK： 初始相位向上为1，初始相位向下为0，码元种类为2 PCM脉冲调制技术： 用于数字信道传递模拟数据 分为三步，第一步采样、第二步量化、第三步编码 采样： 每隔一定的时间取模拟信号的当前值作为样本， 奈奎斯特采样定律：采样频率应大于模拟信号最高频率的2倍 量化： 用多少位的二进制来表示样本的只，位数越高精度越高 编码： 把各个样本二进制值串接起来 基本编码： 单极性码： 用高电频表示0，0电频表示1，没有用到低电频 极性编码： 用高电频表示0，低电频表示1 双极性码： 用0电频表示0，遇1翻转 极性编码在传递数据的时候要引入单独的时钟信号 归零性码： 中间的信号回归0电频 不归零码： 表示1电频改变，表示0电频不变 曼切斯特编码： 用于传递10M以太网，每一位在中间进行跳变，低跳高表示0，高跳低表示1，不需要引入单独的时钟信号 差分曼切斯特编码： 位于位中间的电频不变表示后一位位1，电频改变表示后一位为0，用于令牌环网，编码效率只有50% 复用技术： 空分复用（SDM）： 让同一个频段在不同空间内得到重复利用，空间上的利用。 频分复用（FDM）： 给每一位用户分配一个频段，例如有限电视 波分复用（WDM）： 用在光纤通信，波长和频段有对应关系 时分复用（TDM）： 把信道划分为多个时间片，每一个用户占用时间片来传递信息 同步时分复用： 一直给用户分配时间片，不管用有没有信息需要传递 异步时分复用： 用户需要发送信息的时候分配时间片，不发送的时候不分配 码分复用： 可同时传递信息不会互相干扰，每个用户传递信息的码不同 常见复用标准： 名称 原理与组成 应用地区 E1载波 采用同步时分复用技术将30个语音信道（64K）和两个控制信道CH0、CH16(64K)复合载一条2.048Mbps的高速信道上 欧洲发起，除美、日外多用 E2 8.488Mbps 相当于4E1 E3 34.368Mbps 相当于4E2 E4 139.246Mbps 相当于4E3 T1载波 采用同步时分复用技术将24个语音通路复合载一条1.544Mbps的高速信道上 美国和日本 T2(DS2) 由4个T1时分复用构成，达到6.321Mbps 美国 T3(DS3B) 由7个T2时分复用构成，达到44.736Mbps 美国 T4(DS4B) 由6个T3时分复用构成，达到274.176Mbps 美国 通信方式： 单工 半双工 全双工 同步传输： 收发双方步调一致，传输以太网帧，效率高 异步传输： 以字符为单位，前面加起始位，后面加停止位，开销大 差错控制： 接收方收到信息后判断信息是否有误 检错： 知道错误不纠正 纠错： 知道错误并纠正 码距： 任何编码都有一组码字组成，两个码之间变化的二进制位成为码距，任意两个码直接最少变化的二进制位成为该数据的最小码距 码距、检错、纠错的关系： 在一个码组内为了检测e个误码，要求最小码距d应该满足：d≥e+1 在一个码组内为了纠正t个误码，要求最小码距应该满足：d≥2t+1 奇偶校验： 检错码=信息字段+校验字段 使用模二加运算 奇校验： 信息字段+校验字段1的个数是奇数 偶校验： 信息字段+校验字段1的个数是偶数 海明校验： M+K+1≤2的K次方 M是信息的位数，K是校验码的位数 校验码所放的位置一般为：2⁰、2¹、2²、2³等以此类推 可以实现一位纠错 使用模二加计算校验 接收方收到数据后进行校验时一定加上校验码本身 CRC校验： 生成多项式的最高幂次决定CRC的位数，例如X⁴那CRC似是4位，在用户信息后添加4个0。 例如X⁴+X³+X+1=11011，中间是0是因为没有X²，条数不为0出错，条数为0不出错，用于检错。 计算机网络的概念： 计算机网络定义为“以能够相互共享资源的方式互连起来的自治计算机系统的集合” 目的是实现计算机资源的共享 分布在不同地理位置的多台独立的“自治计算机” 通信必须遵循共同的网络协议 网络性能： 速率： 一点到另外一点发送的数据率，单位bps 带宽： 一点到另外一点通过的最高数据率，单位bps 吞吐率： 实际通过网络的数据量 时延： 发送时延/传输时延 传播时延 处理时延 排队时延 发送时延/传播时延： 把一帧全部加载到信道中所花的时间，发送时延=数据帧长/信道带宽 传播时延： 数据帧从这一点到另外一点所花的时间，传播时延=信道疮毒/电磁波在信道上的传播速率（20万KM/S） 卫星信号的传播时延为270ms 往返时间： 一去一回的时间 利用率： 信道百分之多少的时间是被利用的 网络协议： 计算机网络各个节点必须遵循实现约定好的规则交换数据和控制信息 这些规则精确的定义了所交换数据的格式和时序 为网络数据交换而制定的规则，约定与标准称为网络协议 语义： 协议的作用 语法： 规定交换数据的格式 时序： 那一方先发，那一方给予响应 OSI参考模型： 物理层<数据链路层<网络层<传输层<会话层<表示层<应用层 物理层： 在两个相邻节点间传递以帧为单位的数据 网络层： 在两台主机间传递以报文为单位的数据，为报文寻址 传输层： 提供端到端的传输，把报文从一个应用进程交付到另外一个应用进程 会话层： 在两个应用进程之间建立会话机制，管理他们的活动 表示层： 提供信息表示的一个方法，把应用进程交付下来的数据进行格式转换，还可以进行加密和压缩 应用层： 为应用层序提供接口，让进程可以使用网络服务 各层数据单元： 物理层（比特） 数据链路层（帧） 网络层（报文） 传输层（TPDU） 会话层（SPDU） 表示层（PPDU） 应用层（APDU） 数据封装与解封： 发送方从应用进程到物理层，接收方从物理层到应用层 传输层原理： 在原信息前加TCP/UDP报头，重要的是目标端口和源端口 网络层原理： 在TCP/UDP报头前面加IP报头，重要的是源地址和目标地址 数据链路层原理： 有LLC子层和MAC子层，但只用到MAC子层，在IP报头前加MAC子层报头和后面封装FCS（帧校验序列），MAC子层主要是每一段链路的源MAC和目的MAC 物理层： 把帧转为比特进行传输 OSI模型一服务访问点： 下层为上层提供服务，传输层服务访问点是端口号，网络层服务访问点是IP报文格式中的协议字段，链路层服务访问点是以太帧中的类型字段。= TCP/IP体系结构： TCP/IP：事实的工业体系结构 OSI：理论参考模型 应用层著名协议： POP3：邮局协议第三个版本，端口号110，用于接收邮件（TCP） FTP：文件传输协议，控制端口21，数据端口20（TCP） HTTP：超文本传输协议，端口80（TCP） Telnet：远程登录协议，端口23（TCP） Samba：Linux给Windows打印共享协议 CFS：Windows之间打印共享协议 NFS：Linux之间打印共享协议 DHCP：动态地址分配协议，端口67、68（UDP） TFTP：简单文件传输协议，端口69（UDP） SNMP：简单网络管理协议，端口161、162（UDP） DNS：域名解析协议，端口53（UDP） 传输层： TCP：面向连接保证可靠性 CDP：无连接不保证信息传递可靠性 网络层： TP ICMP：差错报文控制协议 IGMP：因特网主管理协议 ARP：地址解析，IP→MAC RARP：地址解析，MAC→IP 局域网（LAN）： 指有限区域多台计算机通过传输介质互连，所组成的封闭网络 实现数据通信和资源共享的目的 常用的传输介质： 双绞线 同轴电缆 无线等 典型特点： 覆盖的地理范围小（几米到几公里），具有较高的数据传送速率和较低的延迟 局域网拓扑结构： 总线型 星型 环形 IEEE802标准： 在局域网中寻址只会用到MAC地址 逻辑链路控制子层（LLC子层）：统一的LLC子层，为上层提供统一的服务 介质访问控制子层（MAC子层）：与具体接入的传输媒介有关系 CSMA/CD协议： 早期使用总线型拓扑，同一时刻只能一台主机发送信息，不然会产生冲突，使用CSMA/CD协议决定冲突问题 载波侦听： 判定信道是否处于空闲状态，空闲发送信息，忙碌不发送 非坚持型监听算法： 信道空发送，信道忙碌等一个T的时间再次监听 1-坚持型监听算法： 空闲发送，忙碌持续监听，利用率高，冲突率高 冲突检测： A发送信息之后，要等2×传播时延才能知道是否有冲突 传输时延≥2×传播时延：（帧长/带宽）≥2×（信道长/20完KM/S） 发现冲突： 发现冲突，停止发送 随机延迟重发： 从离散的整数集合[0,1......(2的K次方-1)]中随机取出一个是，记为r，重传应推后为r倍的争用期，参数K=重传次数，最高为10. 当重传达到16次还没成功，则丢弃该帧，并向高层报告 MAC地址： MAC地址是48位二进制 前24位是供应商标识 后24位是网卡唯一编号 第八位是0是物理地址，单播地址，一对一通信 第八位是1是逻辑地址，组播地址，一对一组 48位全为1是广播MAC地址 MAC地址用十六进制表示 以太网V2帧格式： 从目的地址到FCS（帧序列校验）——目的地址、源地址、类型、数据、FCS 在发送前在帧前面加入前同步码和帧开始定界符，一共8个字节，最后两个11是告诉接收方做好接收准备 目的地址：6字节 源地址：6字节 类型：2字节 数据：46~1500字节 FCS：4字节 最小帧长：64字节 最大帧长：1518字节 类型字段小于1500为IEEE802.3的长度字段，大于1530向上层交付 网络传输介质： 屏蔽比非屏蔽双绞线贵 屏蔽比非屏蔽双绞线距离短 百兆：1236芯 千兆：八芯全用 直通：DCE和DTE互连 交叉：DCE和DCE或者DTE和DTE T568A：白绿、绿、白橙、蓝、白蓝、橙、白棕、棕 T568B：白橙、橙、白绿、蓝、白蓝、绿、白棕、棕 多模光纤：光线折射传输，每段小于550米 单模光纤：光线直线传输，每段3公里以上 双绞线测试指标： 衰减（Attenuation)，近端串扰（NEXT），直流电阻、阻抗特性、衰减串扰比（ACR）、传播时延（T） 光纤测试指标： 光纤连通性检测，光纤衰减检测，光纤污染检测以及光纤故障定位检测 快速以太网： 技术特点： 100Mbps 相同的帧格式 半双工/全双工 100Base-T 传输介质标准： 100Base-TX:双绞线 100Base-FX：两芯单模或多模光纤 100Base-T4：4对双绞线，3对传输1对检测冲突，半双工系统 100Base-T2：全双工 千兆以太网： 技术特点： 1000Mbps 相同的帧格式 半双工/全双工 传输介质标准： 1000Base-T：五类非屏蔽双绞线，每段最长100米 1000Base-SX：多模光纤，最长550米 1000Base-LX：单模光纤，最长3公里以上 1000Base-CX：屏蔽双绞线，最长25米 万兆以太网： 技术特点： 10000Mbps 相同的帧格式 全双工 传输介质标准： 局域网物理层 可选的广域网物理层 冲突域： 在同一个网络中会产生冲突的那几台设备是在同一个冲突域中，使用交换机可以分割冲突域 广播域： 一台主机发出广播信息，有哪一些主机可以收到，收到的都是在广播域中，使用路由器可以分割广播域 交换式以太网： 交换机能够根据以太网中目标地址智能转发数据 交换机分割冲突域，实现全双工通信，不适用CSMA/CD协议，而是以全双工方式工作 但仍然采用以太网的帧结构 用户独享带宽，增加了容量 交换机工作方式： 广播： 如果目标地址在MAC地址表中没有，交换机就向除了接收到该数据的端口外其他端口广播该数据帧 学习： MAC地址表是交换机通过学习接收到数据帧的源MAC地址来形成的 转发： 交换机根据MAC地址表单播发送数据帧 更新： 交换机MAC地址表的老化时间是300秒，交换机如果发现一个帧的入端口和MAC地址表中的原MAC地址所在端口不同，交换机将MAC地址表重新学习到新端口 快速转发： 收到帧后不做差错校验直接转发 存储转发： 收到帧之后存储起来做差错校验，没问题再转发 碎片丢弃： 收到帧前64字节做校验，小于64字节丢弃 堆叠和级联： 级联可以通过一根双绞线再任何网络设备厂家的交换机之间进行 级联可以使用普通端口也可以使用Uplink端口级联 堆叠只有再自己厂家的设备之间进行 堆叠需要专用的堆叠模块和堆叠线缆 堆叠后的所有交换机可视为一个整体交换机来进行管理 堆叠方式： 菊花链式：稳定 星型堆叠：转发效率高，不如菊花链式稳定 VLAN划分： 广播不能跨越VLAN 静态VLAN： 基于端口划分 动态VLAN： 基于MAC地址 基于网络协议 基于子网 基于策略 802.1Q帧： 在目的地址后面加上802.1Q标记，里面最重要的式VLANID，整个802.1Q标记占4字节，VLANID占12bit 以太网端口类型： Access端口： 主要用于连接终端，特点是仅允许一个VLAN的帧通过 Trunk端口： 主要用于连接其他交换机端口，特点是允许多个VLAN帧通过，并且除了缺省VLAN外，其他VLAN都带标签通过Trunk端口 Hybrid端口： 既可以用于连接终端，又可以连接其他主机、路由器设备，特点是允许一个或多个VLAN的帧通过，并且可以选择是带标签还是不带标签 GVRP协议： 用于VLAN信息传递 Normal模式： 允许该端口动态注册或注销VLNA 传播动态VLAN以及静态VLAN Fixed模式： 禁止该端口动态注册或注销VLAN 指传播静态VLAN，不传播动态VLAN信息，自己手动创建的VLAN属于静态VLAN，其他交换机传递过来的VLAN信息数据动态VLAN Forbidden模式： 禁止该端口动态注册或注销VLAN 不传播除VLAN1以外的任何VLAN信息 生成树协议-STP： 网络可靠性至关重要 广播风暴： 在网络中不断转发广播帧，是交换机极度忙碌，主机也被迫接收处理广播消息，广播风暴的形成除了个别网卡故障在不停的发送广播帧以外，物理环路也是一个重要原因 广播风暴最终会导致网络资源耗尽，交换机死机，帧复制，交换机MAC地址表不稳定等危害 STP协议功能： STP-Spanning Tree Protocol（生成树协议） 通过计算逻辑上端口环路，防止广播风暴的产生 当线路出现故障，端口的接口被激活，恢复通信，起备份线路的作用 BPUD： 桥协议数据单元 STP协议算法： 选择根网桥： 网桥ID是唯一的，交换机之间选择BID值最小的交换机作为网络中的根网桥 网桥ID是由两个字段所构成，分别是网桥优先级，占2个字符，另一个是网桥的MAC地址 网桥优先级模式为32768，可以手动修改，值越低优先级越高，以4096的倍数进行修改 先比较优先级，优先级一样比较网桥MAC地址 选择根端口： 在非根网桥选择根端口 本端口到根网桥的路径成本最低 直连的网桥ID值最小 直连的端口ID最小 路径成本： 与带宽有关系，带宽越大根路径成本越小 10Mbps——100 100Mbps——19 1000Mbps——4 10000Mbps——2 直连的网桥ID： 需要选择根端口的交换机的端口所连接的交换机的ID 端口ID： 端口优先级+端口编号 端口优先级默认为128，可以手动修改，以16的倍数进行修改 选择指定端口： 根网桥上的端口全是指定端口 非根网桥上的指定端口： 本端口所在的网桥到根网桥路径成本最低 本端口所在的网桥ID值较小 本端口ID值较小 在每个物理网段进行选择 端口状态： 禁用（Disbled）、阻塞（Blocking）、侦听（Listening）、学习（Learning）、转发（Forwarding） 交换机启动：阻塞→20S→侦听→15S→学习→15S→转发 快速生成树协议-RSTP： Rapid Spanning Tree Protolol，RSTP IEEE802.1W——IEEE802.1D-2004 RSTP端口角色： 根端口、指定端口、替代端口、备份端口 RSTP端口状态： 丢弃、学习、转发 RSTP快速收敛机制： 边缘端口机制：连接主机的端口，不参与计算，直接进入转发状态 根端口快速切换机制 指定端口快速切换机制 代替端口： 根端口的替代端口 备份端口： 指定端口的备份端口 多生成树协议-MSTP： 生成树协议早于VLAN的802，1Q，不考虑VLAN，所有VLAN共享一颗生成树，造成负载不均衡，带宽浪费 基于实例计算出多颗生成树，实例间实现负载分担 以太网通道： 链路聚合/端口聚合 多条链路负载均衡，提高带宽，把多条物理链路捆绑成一条逻辑链路 容错：当一条链路失效时，使用其他链路通信 以太网通道捆绑规则： 参与捆绑的端口必须属于同一个VLAN 如果端口配置的是中继模式，那么应该在链路两端将通道中的所有端口配置成相同的中继模式 所有参与捆绑的端口物理参数设置必须相同 协议： PAGP（端口聚合协议）：Cisco私有 LACP（链路聚合控制协议）：IEEE802.3ad 无线局域网： 无线数网络种类： 无线个人网、无线局域网、无线城域网和无线广域网四大类 无线个人网（WPAN）：IEEE802.15，蓝牙，≤10米 无线局域网（WLAN）：IEEE802.11，无线企业网，≤100米 无线城域网（WMAN）：IEEE802.16，主要用于Internet访问，2-10公里 无线广域网（WMAN）：IEEE802.20&3蜂窝移动通信，主要用于Internet访问，2-10公里 优势： 移动性、灵活性、成本低、容易扩充 主要标准： IEEE802.11 接入方式： 有接入点模式（Infrastructure结构）： 有一个无线接入点AP 无接入点模式（Ad-hoc结构）： 在终端和终端间直接组网，每个终端既是终端也是路由器 WLAN标准： （名称，运行频段，主要技术，数据速率） 802.11，2.4GHz，扩频通信技术，1Mbps和2Mbps 802.11b，2.4GHz，HR-DSSS技术，11Mbps 802.11a，5GHz，OFDM调制技术，54Mbps 802.11g，2.4GHz，OFD调制技术，54Mbps 802，11n，2.4Ghz和5GHz，MIMO调制技术和OFDM，600Mbps 802.11ac，5GHz，MIMO和OFDM，1Gbps 802.11ax，2.4GHz和5Ghz，MIMO和OFDM，11Gbps 扩频技术： 将要发送的信息扩展到一个很宽的频带上，以很宽的信道传送信息，抗干扰和抗衰落能力强，抗阻塞能力也强 包括跳频扩展（FHSS）和直接序列扩展（DSSS） 2.4GHz： 14个信道，每一个信道宽度22MHz，理论上可以使用（1，6，，11）、（2，7，12）、（3，8，13）、（4，9，14）这四组互不干扰的信道来镜像无线覆盖，但实际上只有3组，在中国14这个信道没有开放 IEEE802.11 MAC层协议： 隐蔽站问题： 以为信道空闲，其实信道忙碌 暴露站问题： 以为信道忙碌，其实信道空闲 无线局域网协议： 无线局域网不能使用CSMA/CD协议，而只能使用改进的CSMA协议 改进的办法是把CSMA增加一个碰撞避免（Collision Avoidance）功能 IEEE802.11就是用CSMA/CA协议，而在使用CSMA/CA的同时还增加了停止等待协议 MAC子层： 有两个子层，分别似乎点协调功能PCF，分布式协调功能DCF（CSMA/CA协议） PCF子层： 在每一个节点使用CSMA机制分布式接入算法，让各个站点通过争用信道来获取发送权 PCF子层： 使用集中控制的接入算法将发送数据权轮流交给各个站从而避免了碰撞的产生（可选） WLAN安全性： 更改默认设置 更新AP的Firmware 屏蔽SSID广播 加密和认证 常规WLAN安全设置： WEP： 用于在无线局域网中保护链路层数据，WEP使用40位，64位和128位钥匙，采用RC4对称加密算法，在链路层加密数据和访问控制，不过WEP的密钥机制存在被破解的安全隐患，已经被淘汰 WPA： Wi-Fi保护接入（Wi-Fi Prootected Access，WPA）是作为通向802.11i道路的不可缺失的一环出现，并成为IEEE80211i标准确定之前代替WEP的无线安全标准协议，WPA是IEEE802.11i的一个子集，其核心就是IEEE802.1X和暂时密钥完整协议（Femporal Key Integrity Protocol，TKIP） WPA2： WPA2是Wi-Fi联盟发布的第二代WPA标准，WPA2与后来发布的802.11i具有类似的特性，他们最重要的共性是预验证即在用户对延迟毫无察觉的情况下实现安全性快速漫游，同时采用CCMP加密包来替代TKIP 认证： 保证合法用户可以访问局域网 主要认证方式： 开放系统认证：任何用户都可以连接，实际上就是不认证 MAC地址认证：需要管理员在AP中录入用户MAC地址 802.1x认证：需要客户端，一般系统自带 预共享密钥：设置无线密码 web认证：常用于商家，例如酒店 组网： 胖AP（FAT AP）：天线、802.11a/b/g，加密、802.1x认证、802.11e Qos、网管、二层漫游、安全、一般适用于小型场所，不需要控制端 瘦AP（FIT AP）：天线、802.11a/b/g、加密 无线控制器（AC）：无线欺骗防护、用户防火墙、AP点检测、RF管理、无线客户端管理、802.1x认证、802.11e Qos、网管、二层漫游、三层漫游、安全 AC+瘦AP 胖AP 投资 AP成本较低，容易管理，AC成本高 AP成本高，但是无AC投入 WLAN组网 1、AP无法独立工作，需要AC集中管理。2、AP本身零配置，适合大规模组网。3、存在多厂商兼容性问题，AC和AP之间为私有协议，必须属同厂商设备。 1、需要对AP下发配置文件，有网管情况下可以支持大规模组网。2、没有兼容性问题，在IP和网管系统之间采用标准的IP协议通信。 业务能力 二层、三层漫游，可扩展语音丰富业务 二层漫游，实现简单数据接入 综合布线技术： 综合布线技术的六大子系统： 工作：工作区信息插座之间的线缆子系统。 水平：各个楼层界限间配线架到工作区信息座之间所安装的线缆。 管理：管理楼层内各种设备子系统。 干线：实现楼层设备间连接的子系统。 设备间：集中安装大型设备场所。 建筑群：连接各个建筑物的子系统。 广域网交换方式： 电路交换： 最早期交换方式 特点：建立连接、传输数据、拆除连接，一直占用，利用率低 报文交换： 存储转发，报文长度没有限制 分组交换： 报文交换的改变 虚电路： 建立逻辑连接，传输完成后拆除逻辑连接，网络底层保护可靠性 IP数据报： 不需要先建立连接，所有分组路径不同，分组可能会失序或丢失 对比 虚电路 数据报服务 思路 可靠通信由网络来保证 可靠通信由用户主机来保证 连接的建立 必须有 不需要 终点地址 仅在连接建立阶段使用，每个分组使用短的虚电路号 每个分组都有终点的完整地址 分组的转发 属于同一条虚电路的分组均按照同一路由进行转发 每个分组独立选择路由转发 当结点除故障时 所有通过出故障的结点虚电路均不能正常工作 出故障的节点可能会丢失分组，一些路由可能会发生变化 分组的顺序 总是按照发送顺序到达终点 达到终点时不一定按发送顺序 端到端的差错处理和流量控制 可以由网络负责，也可以由用户主机负责 由用户主机负责 常见的广域网协议： X.25: X.25是第一个分组交换网络，它的物理层、数据链路层和网络层都是按照OSI体系模型来架构的，通过建立虚电路实现可靠交付，帧中继（Frame Relay）在第二层建立虚电路，用帧方式承载数据业务，第三次被简化。 并且帧中继只做检错，不做重传，没有滑动窗口式的流控机制，只有拥塞控制，吧复杂的检错交给高层处理，因此适合突发性业务，在虚连接中，用数据链路连接标识（DLCI）来表示该网络中的虚电路 ATM: ATM异步传输网络，采用面向连接的传输方式，将数据分割成固定长度的信元（53B），通过异步时分复用技术，在虚连接上实现快速交换技术。 ATM的典型数据速率为155Mbps 流量控制和差错控制： 流量控制： 协调发送方和接收方步调一致的技术，如果发送方发送数据过快，接收方来不及处理，就会导致数据丢失。 差错控制： 接收方收到信息后进行差错校验，数据有误可以要求重发 停等协议： 发送方发送一帧之后，要等接收方发送确认信息后才可以发送下一帧 滑动窗口协议： 一次性发送多帧，不需要等待接受发确认一帧后再发送下一帧，等接收方收到之后再逐一应答，接收方收到应答后再发送下一组帧 停等ARQ协议： 自动请求重发技术，接收方收到0号帧发现有问题会发出一个nack0,表示0号帧有问题，需要重发，如果发送方超时没有收到接收方的确认信息，发送方会重发上一帧 选择重发ARQ： 那一帧出现问题重发那一帧，式滑动窗口和ARQ协议的结合，为了避免异常，其最大值就小于帧编号总数的一半，即W发=W收≤2的K-1次方，K为帧编号的位数 后退N帧ARQ： 滑动窗口协议加ARQ协议，那一帧出错，从出错帧开始之前的帧都要重发 为了避免异常，必须限制发送窗口大小为W≤2的K-1次方，K为帧编号的位数） 常见广域网技术-HDLC： HDLC：高级链路控制协议 是一种应用很广的面向比特的高级数据链路控制协议 HDLC也是思科路由器上默认的WLAN口封装协议，是思科私有协议 HDLC帧格式： 有六个字段组成，分别是标志字段、地址字段、控制字段、数据字段、校验和字段、最后还有一个标志字段 两端的标志字段各占8位，地址和控制字段也各占8位，数据字段≥0位，校验和字段16位 标志字段是01111110，用于标识帧的开始和结束，标志字段中间的数据字段如果有连续的五个1不管后面是0还是1都会直接插入一个0，以此解决帧边界判断失误 控制字段决定HDLC的帧类型，HDLC帧类型有三种，分别是信息帧、监控帧、无编号帧 信息帧：承载用户信息，N(S)帧占2、3、4位，代表帧序号，N(R)帧占6、7、8位，也是序号，代表准备接收那一帧 监控帧：进行流量控制 无编号帧：用来提供链路的建立、拆除，有时候也可以承载用户信息 控制字段的第1、2位表示传递帧的类型，第一位为0表示信息帧（I帧），第1、2位为1、0是监控帧（S帧），第1、2位为1、1是无编号帧（U帧） 其中S帧不带信息字段，它的3、4位为S帧类型编码，共有4种不同编码： 00：接收就绪（RR） 01：拒绝（REJ）:从N（R）帧开始以前的帧都要重发 10：接收未就绪（RNR） 11：选择拒绝（SREJ）:N(R)帧这一帧进行重发 常见广域网技术-PPP： 点到点协议，通过在点对点的串行链路上封装数据包，并将高级数据链路控制协议HDLC作为封装数据包的基础的点对点协议，它提供了一整套协议框架来解决链路建立，维护、拆除，上层协议协商和认证等问题。PPP在异步传输时，是面向字符的 PPP协议框架： 建立、配置、验证和测试数据链路控制解析LCP 认证协议PAP和CHAP 建立和配置不同网络层协议的网络控制协议NCP PAP： 是两次握手协议，口令以明文传送，被验证方首先发起验证请求，最大缺点就是口令以明文方式传输 CHAP： 是三次握手协议，不发送明文口令，主验证方首先发起验证请求，安全性比PAP高 主验证方发送一个用户名加随机报文，被验证发发送主机名加加密后的报文，主验证方验证通过或拒绝 使用MD5非对称加密 常见接入网技术-SONET/SDH： PDH→SDH→WDM→ASOW→PTN（分组交换网） SONET信号 比特率/Mbps SDB信号 STS-1和OC-1 51.840 STS-3和OC-3 155.520 STM-1 STS-12和OC-12 622.080 STM-4 STS-48和OC-48 2488.320 STM-16 STS-192和OC-192 9953.280 STM-64 STS-768和OC-768 39813120 STM-256 常见接入网技术-ISDN和xDSL： 接入网： 从终端用户驻地网到电信核心网这一段，又称为最后一公里 ISDN综合业务数字网： 是一个数字电话网络国际标准，一种典型的电路交换网络系统，通过普通的铜缆以更高的速率和质量传输语音和数据，俗称一线通 有窄带和宽带两种： 窄带ISDN：有基速率（2B+D，144Kbps）和一次群速率（30B+D，2Mbps）两种接口 基本速率接口包括两个能独立工作的B信道（64Kbps）和一个D信道（16Kbps） 其中B信道一般用来传输语音，数据和图像，D信道用来传输信令或分组信息 B代表承载，D代表控制 xDSL： 各种DSL数字用户线的总称，通过采用频分复用技术，利用电话线传送数字数据，x表示任意字符或字符串，即根据采取不同的调制方式，获得信号传输速录和距离不同以及上行信道和下行信道的对称性不同 xDSL 对称性 下行带宽 上行带宽 ADSL 非对称 8Mbps 640Kbps-1Mbps HDSL 对称 1.544Mbps，2.048Mbps 1.544Mbps，2.948Mbps SDSL 对称 2.3Mbps 2.3Mbps VDSL 非对称 55Mbps 19.2Mbps RADSL 非对称 8Mbps 640Kbps~1Mbps ADSL： 低于4KHz用于用户打电话，高于25.875KHz的用于上网，上行25.875KHz至138KHz，下行138KHz至1.104MHz，用的DMT调制方式 用户端有ADSL Modem，作用是把数字信号转为模拟信号，分离器分离出低频语音信号和高频数据信号 常见接入技术-HFC： HFC：Hybrid Fiber Coax（混合的光纤同轴电缆） 在原有的CATV基础上进行双向改造： 干线部分：光纤传输系统替代CATV种的同轴电缆 用户分配网：任然保留同轴电缆网络结构，单放大器改成双向的 可提供业务： 保留原有CATV单向电视广播业务 利用剩余带宽提供带宽数据业务 常见接入技术-光纤接入网 有源接入： 典型的设备主要基于SDH的多业务传送平台，基于以太网或ATM的多业务接入平台等，这种技术作为有源设备任然无法完全摆脱电磁干扰和雷电影响，以及有源设备贵有的维护问题，源指的是电源 无源光网络（PON）： PON由光纤路由终端（OLT）、光分配网络（ODN）、广网络单元（ONU）组成 采用点到多点模式，其下行采用广播方式，上行采用TDMA时分多址方式 可以灵活的组成树型、星型、总线型等拓扑结构（典型结构为树型） 主要特征是ODN全部采用无源光器件组成，避免了有源设备的电磁干扰和雷电影响，减少了线路和外部设备的故障率，提高了系统可靠性 APON：最高速率位622Mbps，二层采用的是ATM封装 EPON：可以支持1.25Gbps对称速率，将以太网与PON技术完美结合 GPON：器技术特色是二层采用ITU-T定义的GFP（通用成帧规程）对Ethernet、TDM、ATM等多种业务进行封装映射，能提供1.25Gbps、2.5Gbps下行速率和所有标志的上行速率
无线数据网络种类： 无线数据网络分为：无线个人网、无线局域网、无线城域网和无线广域网四大类。 种类 标准 典型应用 覆盖范围 无线个人网（WPAN） IEEE802.15 蓝牙 ≤10米 无线局域网（WLAN） IEEE802.11 无线企业网 ≤100米 无线城域网（WMAN） IEEE802.16 主要用于Interne访问 2-10公里 无线广域网（WMAN） IEEE802.20&3蜂窝移动通信 主要用于Intern访问 2-10公里 无线局域网 无线局域网对应以太网来说，优势主要由四方面： 1、移动性 2、灵活性 3、成本低 4、容易扩充 无线局域网主要标准IEEE802.11，按照接入方式来分的话主要分两种。 有接入点模式： 一种是有接入点的模式，也叫做Infrastructure结构（基础设施结构），有接入点的模式指的是它会有无线接入点AP这一个设备，这一个设备主要作用是把有线信号转为无线信号，把无线信号转为有线信号。 无接入点模式： 另外一种是Ad-hoc结构，也叫无接入点模式，无接入点模式指的是直接在终端域终端之间进行组网，不需要有AP的支持，这一种一般用于临时性的组网，因为Ad-noc模式结构非常的复杂多变，每一个终端它即是终端，也是路由器，而且是动态的保持和其他终端进行连接，在Ad-noc结构中路由器协议的设计和传统路由器协议不一样，它的路由协议的设计会更加复杂。 在企业中用的都是有接入点模式进行组网。 无线局域网标准（WLAN标准）： 标准 运行频率 主要技术 数据速率 IEEE802.11 2.4GHz 扩频通信技术 1Mbps和2Mbps IEEE802.11b 2.4GHz HK-DSSS技术 11Mbps IEEE802.11a 5GHz OFDM调制技术 54Mbps IEEE802.11g 2.4GHz OFDM调制技术 54Mbps IEEE802.11n 2.4GHz和5GHz MIMO和OFDM 600Mbps IEEE802.11ac 5GHz MIMO和OFDM 1Gbps IEEE802.11ax 2.4GHz和5GHz MIMO和OFDM 11Gbps 扩频技术是将要发送的信息扩展到一个很宽的频带上，以很宽的信道传送信息，抗干扰和抗衰减能力强，抗阻塞能力也强。 包括跳频扩频（FHSS）和直连序列扩频（DSSS）。 无线局域网如果工作在2.4GHz这一个频率，IEEE总共会划分出14个信道，每一个信道的频带宽度是22MHz，理论上会有4组互不干扰的信道，但是在中国，14这一个信道并不开放，所以在中国国只有3组互不干扰的信道。 理论上可以使用（1、6、11），（2、7、12），（3、8、13），（4、9、14）这四组互不干扰的信道来进行无线覆盖。 无线局域网IEEE802.11 MAC层协议 在以太网当中，使用CSMA/CD协议来解决介质征用的问题，但是在无线局域网中是不能直接照搬CSMA/CD协议的，因为对于无线局域网而言会存在隐蔽站问题和暴露站问题。 隐蔽站问题： 一下图为例，A的无线信号的范围是有限的，它不能覆盖到C，它可以刚好覆盖到B，同理，C的无线信号的范围也是有限的，覆盖不到A，但是也刚好覆盖到B，这时候A有信息要发给B，它首先会监听到信道处于空闲，当A监听到信道处于空闲状态之后就会给B发送信息，同一时间，C也有信息发送给B，C也监听到信道处于空闲，也给B发了信息，结果信号在B哪里产生了冲突问题。 这就是隐蔽站问题，隐蔽站的问题的根源是A发现不了C，C也发现不了A，这在以太网中式不存在这一种状况的。 暴露站问题： B的覆盖范围可以覆盖到A和C，C的覆盖范围可以覆盖到B和D，现在B有信息要发给A，监听到信道式空闲的，B就把信息发出去了，同时C有信息要发送给D，由于B发给A的这个信号向四周扩散的，那么C就会监听到信道处于忙碌状态，导致C不敢把信息发给D，实际上B给A发的同时C给D发是没有问题的。 隐蔽站与暴露站总结： 隐蔽站问题：检测信道空闲但实际上并不空闲 暴露站问题：检测信道忙碌但实际上并不忙碌 在无线局域网中不能使用CSMA/CD协议的，而是只能使用改进的CSMA协议，也就是CSMA/CA协议，CA指的是冲突避免，冲突避免并不是完完全全的避免冲突，只是把冲突的概率降到最低，因为CSMA/CA协议的话会增加一个退避计时器和一个停止等待协议，把这个通途的概率降到最低而已。 MAC层协议： IEEE802.11在MAC层它定了两个子层，一个是DCF，叫分布协调功能，还有一个叫PCF，也叫点协调功能。 分布协调功能定义的是争用服务，用的就是CSMA/CA协议，它是在每一个节点使用CSMA机制的分布式接入算法，让各个站通过争用信道来获取发送权。 点协调功能PCF使用集中控制的接入算法将发送数据权轮流交给各个站从而避免了碰撞的产生。 点协调功能PC是可选功能，但是分布式协调功能DCF是必选功能。 无线局域网安全性（WLAN安全性）： 1、更改默认设置 2、更新AP的Firmware 3、屏蔽SSID广播 4、加密和认证 想要保证无线局域网的安全性，在拿到AP或AC的时候首先更改默认设置，例如登录的用户名和密码。 还要更新AP和AC的固件，这一个固件是由系统厂商发布的，主要是修复漏洞。 屏蔽SSID广播，SSID是用来区分不同的无线网络信号，也就是wifi名称，屏蔽掉之后其他设备是搜索不到的，只有知道SSID的用户通过手动添加的方式添加之后才能连接。 重点是加密和认证，加密是保证数据的安全性，认证是能够保证合法的用户可以接入无线网络了。 常见WLAN安全设置： 加密（WEP、WPA、WPA2）： 加密算法主要有三种，第一种WEP，第二种WPA，第三种WPA2。 WEP： 最早期的是WEP，WEP用于在无线局域网中保护链路层数据，WEP使用40位和128位钥匙，采用RC4对称算法，在链路层加密和访问控制。 不过，WEP的密钥机制存在被破解的安全隐患，现在已经被弃用。 WPA： WEP之后是WPA，WPA实在WEP的基础上做了一些改进，引入一个TKIP，叫做临时密钥完整协议，但是它的安全程度还是不够高，也是被弃用了。 WPA2： WPA2是wifi联盟发布的第二代WPA标准，WPA2与后来发布的802.11具有类似的特性，它们最重要的共性是预验证，即在用户对延迟毫无察觉的情况下实现安全快速漫游，同时采用CCMP加密包替代TKIP，它的加密算法是AES。WPA2也是目前主流的加密方式。 认证： 开放式认证： 开放式系统认证，实际上是不错任何认证，任何用户都可以连接无线局域网。 MAC地址认证： MAC地址认证是由网络管理员在AP中写入用户MAC，只有用户的MAC地址和列表中的MAC地址一致才能访问无线网络。 802.1X认证： 这种方式首先用户是要先安装802.1X客户端的，这种客户端一般系统自带，设备连接上无线网络之后，通过客户端提交用户名和密码，发送EAPOL帧到交换机，交换机把认证请求交给专用的认证服务器，服务器认证通过后用户才可以访问局域网中的资源。 预共享密钥认证： 这种方式就是设置无线网络连接密码，例如家里的wifi连接上去需要认证密码，这就是预共享密钥认证。 web认证： web认证是连接上无线局域网之后，无论进入哪一个页面都会强制弹出认证页面，在认证页面填写相关认证信息之后才能访问网络，大多数校园网采用的就是web认证。 组网： 组网的核心是AP，用AP来进行组网，AP又叫无线接入点，AP又两种，一种是瘦AP，另外一种是胖AP。 胖AP： 胖AP典型的代表又家里用的无线路由器，胖AP可以进行独立工作，不需要无线控制器的支持，一般用于小型场合。 瘦AP： 第二种方案使用瘦AP的话还需要有无线控制器AC，瘦AP是把胖AP的其他功能全部删减，只保留无线接入设备的基本功能，它是不能独立工作的，一般情况下是多数AP和少数AC配合工作。 胖AP和瘦AP区别： AC+瘦AP 胖AP 投资 AP成本较低，容易管理，AC成本高 AP成本高，但是无AC投入 WLAN组网 1、AP无法独立工作，需要AC集中管理。2、AP本身零配置，适合大规模组网。3、存在多厂商兼容性问题，AC和AP之间为私有协议，必须属同厂商设备。 1、需要对AP下发配置文件，有网管情况下可以支持大规模组网。2、没有兼容性问题，在IP和网管系统之间采用标准的IP协议通信。 业务能力 二层、三层漫游，可扩展语音丰富业务 二层漫游，实现简单数据接入 综合布线技术： 综合布线技术的六大子系统： 工作：工作区信息插座之间的线缆子系统。 水平：各个楼层界限间配线架到工作区信息座之间所安装的线缆。 管理：管理楼层内各种设备子系统。 干线：实现楼层设备间连接的子系统。 设备间：集中安装大型设备场所。 建筑群：连接各个建筑物的子系统。
以太网通道 以太网通道又叫聚合链路，也叫端口聚合，在华为中又叫做eth-twunk 以上图为例，有一台交换机A，交换机A下面连接10个用户，也就是10台PC，每个用户的带宽是100Mbps，交换机B下面也是有10个用户，每个用户的带宽也是100Mbps，用一条1000Mbps的链路把两条交换机连接起来，在这种情况下，A这边的用户与B这边的用户在网络高峰期通信的时候，没有网络瓶颈的问题，因为1000Mbps的带宽足以支撑A的用户和B的用户相互通信。 以上图为例，现在A这边的用户扩充到20个，B这边的用户也扩充到20个，两台交换机之间的链路还是1000Mbps，现在两台交换机相互连接的这一条带宽已经不够用了，有两种方法解决这一个问题。 第一种方法是把A交换机和B交换机的相连的端口模块更换成万兆的模块，并且把链路也更换成万兆的链路，这一种方法可以解决网络瓶颈的问题，但是网络可靠性没有提高，因为一旦万兆链路断开了或者是两边的交换机其中一台的万兆模块故障了，那么两边的用户是无法通信的。 另外一种方法成本比第一种更低，而且可以保证网络的可靠性，第二种方案就是链路聚合，所谓的链路聚合指的是把多条物理链路捆绑成一条逻辑链路。 既然一条100Mbps的不够用，那么在拉一条，但是直接拉的话会有问题，很明显已经产生了交换环路，由于生成树协议的介入，它必然会阻塞一条链路，也就是说带宽没有得到提升，只是可靠性得到了保证。 在做链路聚合的时候，首先在两台交换机中间再拉一条链路，再用链路聚合把多条物理链路捆绑成一条逻辑链路，捆包之后，生成树协议去看中间的链路是会把它当作一条逻辑链路，不会认为有环路的存在，两条1000Mbps的带宽叠加之后变成了2000Mbps，可以满足用户的互联互通。 而且两条物理链路，其中一条断开了，另外一条仍然可以使用，可靠性也是有所保证的。 链路聚合捆绑规则： 1、参与捆绑的端口必须属于同一个VLAN。 2、如果端口配置的是中继模式，那么应该再链路两端将通道中的所有端口配置成相同的中继模式。 3、所有参与捆绑的端口的物理参数设置必须相同。 协议： 链路聚合一种方式是手动，就是由网络管理员创建聚合组，哪一些端口和链路加入聚合组，完全由网络管理员控制，不需要聚合协议。 第二种方法就是用到聚合协议，思科由端口聚合协议，思科的是独有的，不开放的。另外一个是IEEE802.3ad制定出来的LACP（链路聚合控制协议），如果使用了链路聚合协议，再进行链路聚合的时候是非常方便的，只要在交换机上的端口开启这一功能，聚合组的常见和哪一些端口加入聚合组完全是由协议控制的，不需要网络管理员的干预，并且可以降低出错率。
冗余 对于一个企业来说，网络的可靠性是至关重要的，因为网络一旦出现问题会给企业的生产经营带来非常大的损失，想要保证网络的可靠性，要么就是靠冗余设备，要么就是冗余链路，所以一定会提到冗余这个词，因为任何一台设备你都不能保证它可以一直正常工作，它总有宕机的一个时间，所以就需要冗余化的一个设计来保证网络的可靠性。 以上图为例，这一种方案就是没有冗余设计的，一旦两台交换机间的线路断开，PCA和PCB就无法通信了。 为了提高这种网络的可靠性就需要冗余设备或者冗余链路的方案来解决这个问题了。 广播风暴： 我们可以在添加一台交换机C，一旦i骄傲还击A和交换机B的链路断开了，还可以通过交换机C来进行通信，以下图为例。 但是这一种设计要考虑环路问题，这一种设计已经形成了交换环路，也就是物理环路。 交换环路会带来广播风暴这一问题，广播风暴指的是在整个网络当中不断转发广播信息，使交换机处于极度忙碌的章台，主机也被迫接收广播帧，会出现网络速度慢甚至死机的现象。 广播风暴的产生及危害： 广播风暴的产生除了个别网卡故障一直在发送广播帧以外，环路问题也是一个最大的原因。 以上图为例，PCA肯定会有一个IP地址，例如192.168.1.2，PCB肯定也会有一个IP地址，例如192.168.1.3，现在PCA和PCB进行通信，例如PCA去pingPCB，在整个局域网内部寻址的话，是要找到PCB所对应的MAC地址，用MAC地址来封装IP数据包，MAC地址在PCA主机里面会有一个ARP表，如果表里面没有PCB对应的MAC地址的话，那么PCA会发一个在正常不过的广播消息，就是ARP广播，ARP广播是很正常的广播，这个ARP广播到达交换机A之后，A会转发这一个广播消息，会往交换机B和交换机C转发，交换机C收到之后又往交换机B和交换机A转发，同理，交换机B收到之后又向交换机A和交换机C转发，主机也不断的接收到广播帧，这就形成了广播风暴，并且会形成双相的广播风暴，处于广播风暴后，交换机也会一直不断的转发广播帧，正常用户通信会被阻塞，PCB也是被迫的不断处理广播帧，导致它的网络速度非常慢甚至死机，这是第一个危害。 第二个危害是帧复制，第三个危害是MAC地址表不稳定。 因为交换机在寻址的时候靠的是MAC地址和端口的映射表，MAC地址和端口的映射表是通过读取帧的源MAC地址和进入端口来学习的，例如交换机A首先获取的MAC地址和端口是PCA的，这一个帧交换机A转发给交换机B，交换机B转发给交换机C，交换机C在转发给交换机A，实际上是同一个帧，它的源MAC还是PCA的，但是帧进入的端口不同了，原来的MAC表的条目会被替换掉。 而且这是两个方向的广播帧，交换机A转发给交换机C，交换机C在转发给交换机B，交换机B又转发给交换机A，那这个时候帧进入的端口又不一样了，映射表又变了，这样的话这MAC映射表条目会一直被替换，MAC映射表不稳定，正常用户的数据帧是无法进行转发的。 这样设计看起来是提高了网络的冗余度，但是实际上是有问题的，不仅没有实现网络可靠性，还会给网络带来广播风暴。 生成树协议-STP 想要解决交换机环路产生广播风暴这个问题就需要用到了生成树协议-STP。 STP协议功能： STP——Spanning Tree Protool（生成树协议） 逻辑上断开环路，防止广播风暴的产生，这俄格逻辑上的计算是根据交换机和交换机之间传递的桥数据单元来进行生成树协议它的一个计算，通过计算之后它会断开某一条链路，避免环路的存在，防止广播风暴的产生。 当链路出现故障，断开的接口激活，恢复通信，起备份线路的作用。 例如仙子啊PCA要和PCB通信，正常情况是交换机C直接转发给交换机A，交换机B是冗余设备。 首先三台交换机开启生成树协议，进行桥数据单元的信息交换，进行生成树协议的信息计算，计算完成后假设断开的是C交换机和B交换机相连的这一条链路，这种情况下，PCA和PCB通信就会通过交换机B转发，实现网络可靠性方面的一个保证，又不会造成交换环路。 STP协议算法： 生成树协议是断开交换机B上面的交换机B和交换机C相连的端口。 STP将一个环形网络生成无环形网络，它的步骤分为三步。 1、选择根网桥（Root Bridge）：生成树协议诞生的较早，在网桥时代，网桥就是交换机的前生，由于STP是在网桥的基础上开发的，因此现在在交换机的网络中仍然沿用网桥这一术语。第一步选择根网桥其实就是选择根交换机； 2、选择根端口（Root Ports）； 3、选择指定端口（Designated Ports）：有些端口不是根端口，就要把它处于阻塞状态； 选择根网桥： 把环形拓扑变成无环拓扑，首先要选出根网桥，根网桥是根据网桥ID来选择的，网桥ID是唯一的，交换机之间传递BPDU，然后选择BID（网桥ID）值最小的交换机作为网络中的根网桥。 网桥ID又两个字段所构成，一个是网桥优先级，另一个是网桥MAC地址。 首先参看的是优先级，然后再看MAC地址。 从市面上买回来的交换机，如果没有修改过优先级的话，那么优先级的默认值为32768，如果想要人为指定那一台交换机为根网桥，那么需要相关的命令去修改网桥优先级，把值调低，值越低代表优先级越高，这一个值变低是以4096的倍数去变动的。 三台交换机形成了交换环路，首先找出根网桥，根网桥是根据网桥的ID值进行选择的，ID是有两个字段构成，一个是优先级，另一个是MAC地址。 交换机B和交换机C优先级都是32768，没有更改过，交换机A的优先级修改成了4096，这个值变小了，就表示交换机A的这个ID要小一些，那这三台交换机中，交换机A的ID最小，那它就是根交换机。 如果这三台交换机的优先级都是没有修改的，都是默认的32768，那么根网桥其实也还是交换机A，因为这三台交换机中交换机A的MAC地址最小，也就意味这三台交换机中交换机A的ID值最小，所以还是交换机A是根网桥。 选择根端口： 本端口到根网桥路径成本最低，也就是再非根网桥上去找根端口，条件是网桥路径陈本最低。 直连的网桥ID最小的 直连的端口ID最小的 本端口到根网桥路径成本最低： 路径成本和端口所连接的带宽有关系的，一个基本的原则就是带宽越大，根路径成本越低，也就是根路径的开销越低。 根据IEEE802.1d-1998的标准，这个生成树协议最早的1998标准，它定义了带宽的对应根路径成本。 带宽 根路径成本 10Mbps 100 100Mbps 19 1000Mbps 4 10000Mbps 2 首选会根据这一个原则来选根端口。 首先已经知道了交换机A是根网桥，那么接下来就是选择根端口，按照根端口的选择原则的第一条，到达根网桥的根路径成本最低的为根端口，按照IEEE802.1d-1998的标准，交换机A到交换机B是100Mbps的带宽，成本是19，而交换机C到交换机B再到交换机A，它是两端100Mbps的链路，每一段链路的成本都是19，加起来就是38，19比38小，所以交换机C和交换机A直连的交换机C端口为根端口。 同理，再交换机B中也要选出一个根端口，按照刚刚的方法，很显然交换机B的根端口是交换机B和交换机A相连的那个端口。 直连的网桥ID最小的 再有的网络中，根据第一条原则是比较不出来根端口的，那么就需要进行第二步的比较。 四台交换机连成一条环路，其中A交换机为根交换机，每一段链路都是100Mbps，现在需要算出D交换机的根端口。 如果使用第一条原则来计算的话根本算不出来的，因为每一段链路都是100Mbps的带宽，上下两条链路都是的根路径成本都是一样的。 这时候就需要比较第二步，直连的网桥ID最小，指的是交换机D连的直连网桥B和交换机D的另一个端口连的直连网桥C，其实就是比较交换机B和交换机的ID和交换机C的ID，看这两个ID那个小，ID是不可能一样的，因为MAC地址必然不一样，如果交换机B的ID要小一些，，那么交换机D连接交换机C的端口就是根端口。 直连端口ID最小： 有的拓扑图第一步和第二步都比较不出来，这时候就用到了第三步，直连的端口ID最小的。 首先定义交换机A为根网桥，链路都是100Mbps，现在需要算出B的根端口。 这时候第一步比较是比较不出来的，因为链路都是100Mbps，路径成本都是19，第二步比较也是比较不出来的，因为交换机B的两个端口都是直连的交换机A的。 这就需要进行第三步比较了，直连的端口ID最小的，这个比较是A交换机的1号端口ID值和A交换机的2号端口ID值，因为这两个端口是B交换机的1号端口和2号端口的连接端口。 端口ID是由端口优先级和端口编号所组成的。 如果没有修改过端口优先级的话，默认的端口优先级为128，如果想要人为让端口优先级变高的话需要把端口优先级的值改小，并且是以16的倍数进行修改的。 以上图为例，假设端口的优先级没有动过，交换机A的1号端口ID为[128,1]，交换机A的2号端口ID为[128,2]，那么1号端口的ID值明显小于2号端口，所以B交换机的1号端口是根端口。 如果想要交换机B的2号端口为根端口，那么需要把交换机A的二号端口的优先级的值改得比1号端口的优先级的值小，那么B交换机的2号端口就可以是根端口了。 选择指定端口： 根网桥上的端口全是指定端口 非根网桥上的指定端口： 1、本端口所在网桥到根网桥路径成本最低的 2、本端口所在的网桥ID值较小 3、本端口ID值较小 以上图为例，已经知道根网桥和根端口，现在需要算出指定端口。 指定端口是再每一个物理段上选择，每一个物理段仅有一个指定端口，A交换机和B交换机的指定端口是A交换机的2号端口，A交换机和C交换机的指定端口是A交换机的1号端口，因为A交换机是根网桥，根网桥上的端口全是指定端口。 现在要选出B交换机和C交换机相连的这一段的指定端口，现在先看第一步，本端口所在网桥到根网桥成本最低的，B交换机到A交换机带宽是100Mbps，C交换机到A交换机带宽也是100Mbps，成本都是19，比较不出来。 那么看第二步，本端口所在的网桥ID值较小的，B交换机的ID为[32768,000d2800b101]，C交换机的ID为[32768,000d2800b102]，很明显B交换机的ID值要比C交换机的ID值要小，所以指定端口是B交换机的2号端口。 有的拓扑图第二步还是比较不出来就直接比较两个端口的ID值。 阻塞端口： 以上图为例，根网桥为交换机A，根端口分别为交换机B的1号端口、交换机C的1号端口，指定端口分别为交换机A的1号端口、交换机A的2号端口、交换机B的2号端口，现在只有交换机C的2号端口既不是根端口也不是指定端口，所以把交换机B的2号端口阻塞起来，那么交换机B和交换机C相连的链路既是备份链路，整个网络结构就变成了以下这一种。 就把一个环形拓扑变成了一个无环的树形拓扑结构。 端口状态 转发（Forwarding） 学习（Learning） 侦听（Listening） 阻塞（Blocking） 禁用（Disabled） 禁用是网络管理员物理管理，把端口关闭。 阻塞是逻辑上让端口不转发数据帧，转发BPUD。 所有的交换机再启动的时候所有端口都为阻塞状态，这一时间会有20秒，这是为了一启动该就会形成交换环路，20秒之后进入侦听状态，侦听状态指的是交换机和交换机之间相互传递BPUD，准备进行生成树协议的计算，这个时间要持续15秒，15秒之后进入学习状态，学习状态指的是交换机根据BPUD进行生成树协议的计算，计算完成后开始学习MAC和端口映射表，这个状态完毕之后所有该进行转发的端口就进入转发状态，该阻塞的端口阻塞起来。 也就是说交换机从开始启动到正式进入转发状态需要50秒的时间，如果其中一台宕机了要启用备用链路的时候需要30秒的时间。 快速生成树协议-RSTP Rapid Spanning Tree Protocl,RSTP（快速生成树协议） IEEE802.1w——IEEE802.1D-2004 快速生成树协议一开始标准是IEEE802.1w，后面并入IEEE802.1D-2004。 RSTP端口角色： 根端口、指定端口、替代端口、备用端口 快速生成树协议它的对应的角色也发生了变化，端口角色除了保留了根端口和指定端口以外，还新增了替代端口和备用端口。 实际上替代端口和备用端口是从普通生成树协议中的阻塞端口演化而来。 RSTP加快收敛机制： 1、边缘端口机制 2、根端口快速切换机制 3、指定端口快速切换机制 边缘端口： 边缘端口指的是连接主机的端口，它不用参与生成树协议的计算，可以直接进入转发状态，因为这种端口是不可能造成网络环路的，定义边缘化端口一般情况下是需要网络管理员手动配置的，交换机无法识别端口连接的是终端你还是交换机，所以只能由管理员定义，注意的是把连接终端的端口定义为边缘端口，千万不要把与交换机相连的端口定义为边缘端口。 Alternate端口： Alternate端口（替代端口）指的是根端口的替代端口，就是一台交换机到达网桥由两个路径，这两个路径相连的不同一台交换机，既然B交换机的上面端口为指定端口，那么下面那个端口即为替代端口。 Backup端口： Backup端口（备份端口）指的是指定端口的备份，生成树协议指所以可以加快收敛的速度，是因为在生成树协议的时候已经给根端口和指定端口找好了替身，一旦根端口或者是指定端口出现问题，它们的替身马上可以顶替工作。 多生成树协议-MSTP MSTP（多生成树协议） 基于实例计算除多颗生成树，实例间实现负载分担。 生成树协议诞生早于VLAN的IEEE802.1Q，这就会出现不管是生成树协议还是快速生成树协议他都是不考虑VLAN的。 也就是所有的VLAN都是共享一颗生成树，VLAN1的主机通信的话阻塞的是交换机C和交换机B连接的这条链路，VLAN2通信阻塞的也是交换机C和交换机B连接的这条链路，交换机C和交换机B相连的这一条链路不承载任何数据流量，这就不能实现负载均衡和会造成带宽的浪费，后面思科就有了PVST这一个协议，这一个协议非常极端，他是一个VLAN一个生成树，这就非常消耗交换机资源，后来IEEE就有了多生成树这一协议。 这一协议的原理是，例如现在有30个VLAN，分别是VLAN1到VLAN30，以上图台交换机为例子，首先选出两个根交换机，生成两颗树，那么肯定没课树阻塞的端口都不一样，每颗树里面有一个实例，把这30个VLAN分别加载到这两个实例中，也就是一个实例加载了15个VLAN，以此来实现负载均衡。