zoukankan      html  css  js  c++  java
  • 小知识记录:第二篇

    1.条件请求If-Match、If-Modified-Since、If-None-Match、If-Range、If-Unmodified-Since
    条件请求:当请求中有If-XXX时,服务器会对附加的条件进行判断,只有判定条件为真,才会执行请求。
    #验证器
    所有的条件请求首部都是试图去检测服务器上存储的资源是否与某一特定版本相匹配。为了达到这个目的,条件请求需要指明资源的版本。由于逐个字节去比较完整资源是不切实际的,况且这也并非总是想要的结果,所以在请求中会传递一个描述资源版本的值。这些值称为“验证器”,并且分为两大类:
    文件的最后修改时间,即 last-modified (最后修改)时间。
    一个意义模糊的字符串,指代一个独一无二的版本,称为“实体标签”,或者 etag 。
    #两大重要应用
    缓存更新
    断点续传
    例子参考:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Conditional_requests
    Accept-Ranges:bytes 表示服务器能够处理范围请求
    If-XXX:状态码参考:https://www.cnblogs.com/liyongchao-0508/p/7113073.html
    #一、If-Match
    服务端有个ETag(实体标记)的字段,与特定资源关联的确定值,当资源更新后Etag也会随之更新。
    所以当客户端If-Match的值若与服务端的ETag一致,才会执行请求,否则会拒绝412
    注:给予客户请求头部一个ETag值,用于标记请求的文件,同样的服务端会给相应的文件标记ETag值,只有当请求包头部的值与服务端的值一致时,才会被响应请求,否则返回412(precondition Failed)
    #二、If-Modified-Since
    If-Modified-Since会告知服务器若If-Modifed-Since字段值早于资源的更新时间,则希望服务端能处理该请求;
    若If-Modifed-Since字段值晚于资源的更新时间,则返回状态码304 Not Modified的响应
    作用:用于确定代理或客户端拥有的本地资源的有效性。
    注:给予客户端请求头部一个If-Modified-Since一个资源时间值,同时服务端也有相应修改时间来描述这个值,只有当请求的值大于服务端文件的值时,这个请求才会被响应,否则返回304 Not Modified
    #三、If-None-Match
    与If-Match相反
    #四、If-Range
    它告知服务器若指定的If-Range字段值和请求资源的ETag值一致时,则作为范围请求处理,返回206 Partial Content,否则返回全部资源
    (这样做也是合理的,因为ETag不变,说明资源未变,则直接返回客户端请求的资源即可;若资源改变,请求的部分资源没有了,应该返回所有的新资源)
    若不用If-Range,则需要发两次请求。因为若资源改变,会返回客户端412;客户端再发起请求,获得新资源
    #五、If-Unmodified-Since

    2.请求头常用的字段
    一、Accept:客户端能够处理的媒体类型,及媒体类型优先级
    媒体类型:文本文件text/html、图片文件image/jpeg、视频文件video/mpeg、应用程序使用的二进制文件application/zip
    二、Accept-Charset:设置接受的字符编码
    utf-8、iso-8859-5、
    三、Accept-Encoding:设置接受的编码格式
    response headers中的content-encoding
    内容编码是指在不丢失实体信息的前提下所进行的压缩
    request headers 中的accept-encoding
    四、Accept-Language:设置接受的语言
    zh-cn、en-us
    五、Host:告诉吴 服务器,请求的资源所处的互联网主机名和端口号
    六、Range:请求部分资源
    请求端:Range
    响应端:Content-Range
    七、Referer:请求的URL是从哪个web页面发起的
    常用于网站的访问统计:比如我在很多地方都做了广告链接到我网站的主页,这时候我就可以通过referer来查看哪些地方跳转过来的人多,说明广告效果好
    也可以用于防盗链
    八、User-Agent:将请求的浏览器和用户代理等名称传给服务器

    3.http1.1包含的所有请求方法
    一、GET
    GET请求会显示请求指定的资源,一般来说,GET方法只会用于数据的读取
    GET请求指定的页面信息,并返回响应主体
    二、HEAD
    HEAD与GET方法一样,都是向服务器请求资源,但是不会返回响应体。这样,我们可以不传输全部内容的情况下,就可以获取服务器的响应头信息。
    常用于客户端查看服务器的性能
    三、POST
    向指定资源提交数据进行处理请求(比如提交表单或上传文件)。数据放在请求体中。post请求可能导致新的资源的建立或已有资源的修改
    四、PUT
    若请求的URI是已经存在的资源,则put请求所附属的实体应被当做修改服务器中的资源,成功的话返回200或204
    若请求的URI资源不存在,则URI可以被定义成新的资源,这是,服务器必须通过201(建立)响应通知用户
    五、DELETE
    请求服务器删除所请求的URI所标识的资源
    六、OPTIONS
    返回该资源所支持的所有HTTP请求方法
    七、TRACE
    回显服务器收到的请求,用于测试和诊断

    4.cookie 和session 的区别:
    (1、存放位置:cookie数据存放在客户的浏览器上,session数据放在服务器上。
    (2、安全性:cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
    考虑到安全应当使用session。
    (3、性能:session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
    考虑到减轻服务器性能方面,应当使用COOKIE。
    (4、大小限制:单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。Session没有大小限制,理论上只与服务器的内存大小有关;
    (5、所以个人建议:
    将登陆信息等重要信息存放为SESSION
    其他信息如果需要保留,可以放在COOKIE中

    5.buffer/cache
    先来提一个问题: buffer 和 cache 应该是两种类型的内存,但是 free 命令为什么会把它们放在一起呢?要回答这个问题需要我们做些准备工作。让我们先来搞清楚 buffer 与 cache 的含义。
    ###buffer 在操作系统中指 buffer cache, 中文一般翻译为 “缓冲区”。要理解缓冲区,必须明确另外两个概念:”扇区” 和 “块”。扇区是设备的最小寻址单元,也叫 “硬扇区” 或 “设备块”。块是操作系统中文件系统的最小寻址单元,也叫 “文件块” 或 “I/O 块”。每个块包含一个或多个扇区,但大小不能超过一个页面,所以一个页可以容纳一个或多个内存中的块。当一个块被调入内存时,它要存储在一个缓冲区中。每个缓冲区与一个块对应,它相当于是磁盘块在内存中的表示。
    注意,buffer cache 只有块的概念而没有文件的概念,它只是把磁盘上的块直接搬到内存中而不关心块中究竟存放的是什么格式的文件。
    ###cache 在操作系统中指 page cache,中文一般翻译为 “页高速缓存”。页高速缓存是内核实现的磁盘缓存。它主要用来减少对磁盘的 I/O 操作。具体地讲,是通过把磁盘中的数据缓存到物理内存中,把对磁盘的访问变为对物理内存的访问。页高速缓存缓存的是内存页面。缓存中的页来自对普通文件、块设备文件(这个指的就是 buffer cache 呀)和内存映射文件的读写。
    页高速缓存对普通文件的缓存我们可以这样理解:当内核要读一个文件(比如 /etc/hosts)时,它会先检查这个文件的数据是不是已经在页高速缓存中了。如果在,就放弃访问磁盘,直接从内存中读取。这个行为称为缓存命中。如果数据不在缓存中,就是未命中缓存,此时内核就要调度块 I/O 操作从磁盘去读取数据。然后内核将读来的数据放入页高速缓存中。这种缓存的目标是文件系统可以识别的文件(比如 /etc/hosts)。
    页高速缓存对块设备文件的缓存就是我们在前面介绍的 buffer cahce。因为独立的磁盘块通过缓冲区也被存入了页高速缓存(缓冲区最终是由页高速缓存来承载的)。
    到这里我们应该搞清楚了:无论是缓冲区还是页高速缓存,它们的实现方式都是一样的。缓冲区只不过是一种概念上比较特殊的页高速缓存罢了。
    那么为什么 free 命令不直接称为 cache 而非要写成 buff/cache? 这是因为缓冲区和页高速缓存的实现并非天生就是统一的。在 linux 内核 2.4 中才将它们统一。更早的内核中有两个独立的磁盘缓存:页高速缓存和缓冲区高速缓存。前者缓存页面,后者缓存缓冲区。当你知道了这些故事之后,输出中列的名称可能已经不再重要了。

    6.atop命令
    #生成日志文件
    http://knowledge.tss.sng.com/knowledgeV3/articledetail/146
    #命令方式保存为日志文件并分析
    atop -a -R -w atop.log #记录日志
    atop -r atop.log #展示日志

    7.云盘制作LVM逻辑卷
    https://cloud.tencent.com/document/product/362/2933
    #创建物理卷PV
    pvcreate /dev/vdc /dev/vdd /dev/vde
    #查看物理卷
    lvmdiskscan | grep LVM
    #创建卷组VG
    vgcreate lvm_demo0 /dev/vdc /dev/vdd
    #添加新的卷到卷组
    vgextend 卷组名 新物理卷路径
    #创建逻辑卷LV
    lvcreate [-L <逻辑卷大小>][ -n <逻辑卷名称>] <VG名称>
    lvcreate -L 8G -n lv_0 lvm_demo0
    #创建文件系统并挂载
    mkfs.ext3 /dev/lvm_demo0/lv_0
    mount /dev/lvm_demo0/lv_0 vg0/
    #动态扩展逻辑卷及文件系统大小
    lvextend [-L +/- <增减容量>] <逻辑卷路径>
    lvextend -L +4G /dev/lvm_demo0/lv_0
    resize2fs /dev/lvm_demo0/lv_0 #调整文件系统大小

    8.多块云盘构建raid组
    #各raid的差异对比
    RAID 级别 简介 优/缺点 使用场景(建议)
    RAID 0 存储模式:数据分段存放在不同的磁盘中。

    虚拟盘大小:阵列中所有盘容量之和。
    优点:读写可以并行。
    理论上读写速率可达单个磁盘的 N 倍(N 为组成 RAID 0 的磁盘个数),但实际上受限于文件大小、文件系统大小等多种因素。
    缺点:没有数据冗余,即便只有单个磁盘损坏,在最严重的情况下也有可能导致所有数据的丢失。
    对 I/O 性能要求很高,并且已通过其他方式对数据进行备份处理或者不需要进行数据备份的场景。
    RAID 1 存储模式:数据被镜像存储在多个磁盘中。

    虚拟盘大小:阵列中容量最小的盘的容量。
    优点:
    读取速度快。
    数据可靠性较高,单个磁盘的损坏不会导致数据的不可修复。
    缺点:
    磁盘利用率最低。
    写入速度受限于单个磁盘的写入速度。
    对读性能要求较高,并且需要对写入的数据进行备份处理的场景。
    RAID 01 先用多个盘构建成 RAID 0,再用多个 RAID 0 构建成 RAID 1。
    优点:同时具备 RAID 0 和 RAID 1 的优点。
    缺点:
    成本相对较高,至少需要使用四块盘。
    单磁盘的损坏会导致同组的磁盘都不可用。

    RAID 10 先用多个盘构建成 RAID 1,再用多个 RAID 1 构建成 RAID 0。
    优点:同时具备 RAID 0 和 RAID 1 的优点。
    缺点:成本相对较高,至少需要使用四块盘。

    #构建raid
    安装mdadm命令
    yum install mdadm -y
    创建raid0
    mdadm –create /dev/md0 –level=0 –raid-devices=4 /dev/vd[cdef]1
    创建文件系统
    mkfs.ext3 /dev/md0
    挂载
    mkdir md0/
    mount /dev/md0 md0/
    tree md0
    查看文件系统详情并记录uuid
    mdadm –detail –scan
    编辑配置文件,输入配置信息
    ———————————————-#示例云盘 raid0
    DEVICE /dev/disk/by-id/virtio-弹性云盘1ID-part1
    DEVICE /dev/disk/by-id/virtio-弹性云盘2ID-part1
    DEVICE /dev/disk/by-id/virtio-弹性云盘3ID-part1
    DEVICE /dev/disk/by-id/virtio-弹性云盘4ID-part1
    ARRAY /dev/md0 metadata=1.2 UUID=3c2adec2:14cf1fa7:999c29c5:7d739349

    9.iostat各项指标说明
    #iostat -d -k 1 10
    tps:该设备每秒的传输次数(Indicate the number of transfers per second that were issued to the device.)。”一次传输”意思是”一次I/O请求”。多个逻辑请求可能会被合并为”一次I/O请求”。”一次传输”请求的大小是未知的。
    kB_read/s:每秒从设备(drive expressed)读取的数据量;
    kB_wrtn/s:每秒向设备(drive expressed)写入的数据量;
    kB_read:读取的总数据量;
    kB_wrtn:写入的总数量数据量;这些单位都为Kilobytes。

    #iostat -d -x -k 1 10
    rrqm/s:每秒这个设备相关的读取请求有多少被Merge了(当系统调用需要读取数据的时候,VFS将请求发到各个FS,如果FS发现不同的读取请求读取的是相同Block的数据,FS会将这个请求合并Merge);wrqm/s:每秒这个设备相关的写入请求有多少被Merge了。
    rsec/s:每秒读取的扇区数;
    wsec/:每秒写入的扇区数。
    rKB/s:The number of read requests that were issued to the device per second;
    wKB/s:The number of write requests that were issued to the device per second;
    avgrq-sz 平均请求扇区的大小
    avgqu-sz 是平均请求队列的长度。毫无疑问,队列长度越短越好。
    await: 每一个IO请求的处理的平均时间(单位是微秒毫秒)。这里可以理解为IO的响应时间,一般地系统IO响应时间应该低于5ms,如果大于10ms就比较大了。
    这个时间包括了队列时间和服务时间,也就是说,一般情况下,await大于svctm,它们的差值越小,则说明队列时间越短,反之差值越大,队列时间越长,说明系统出了问题。
    svctm 表示平均每次设备I/O操作的服务时间(以毫秒为单位)。如果svctm的值与await很接近,表示几乎没有I/O等待,磁盘性能很好,如果await的值远高于svctm的值,则表示I/O队列等待太长, 系统上运行的应用程序将变慢。
    %util: 在统计时间内所有处理IO时间,除以总共统计时间。例如,如果统计间隔1秒,该设备有0.8秒在处理IO,而0.2秒闲置,那么该设备的%util = 0.8/1 = 80%,所以该参数暗示了设备的繁忙程度
    。一般地,如果该参数是100%表示设备已经接近满负荷运行了(当然如果是多磁盘,即使%util是100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)。

    10.io队列和io调度算法
    ————————————————————————————-
    IO调度和IO队列
    1.向块设备写入数据块或是从块设备读出数据块时,IO请求要先进入IO队列,等待调度。
    2.这个IO队列和调度的目标是针对某个块设备而言的,换句话说就是每个块设备都有一个独立的IO队列。
    3.本篇所涉及的所谓的块设备就是iostat命令里面列出的形如sda,sdb这样的块设备,并不是指物理磁盘。假如一个盘被分成5个分区,那么在这个主题下,5个分区代表5个块设备,每个块设备都有自己独立的IO队列。
    4.I/O 调度程序维护这些队列,以便更有效地利用外存设备。简单来说,IO调度程序将无序的IO操作变为大致有序的IO请求。比如调度的时候调整几个IO请求的顺序,合并那些写盘区域相邻的请求,或者按照写磁盘的位置排序这些请求,以降低磁头在磁盘上来回seek的操作,继而加速IO。
    5.每个队列的每一次调度都会把整个队列过一遍,类似于进程调度的时候每次调度都要计算RUN队列的全部进程的优先级。

    IO队列深度
    这个参数是iostat里面呈现的,字面意思显而易见,就是IO队列的深度,这个参数有何意义呢?
    针对每个机械物理盘,如果这个盘对应的IO队列深度超过3,那么基本上表示这个盘处理IO硬件请求有点吃紧,这个盘对应的IO队列深度怎么算呢?
    还拿上面一个盘被切成5个分区说事儿,5个分区对应5个块设备,5个块设备对应5个IO队列,这5个IO队列的深度总和就是这个机械物理盘的IO队列深度了。
    如何解决这个盘的IO请求吃紧呢,最简单的办法硬件加速,把这个盘换成SSD盘:)
    说到这儿,我想提一提RAID卡。咱们使用RAID卡把几个硬盘放在一起,让系统只能看见一个块设备。这个时候,假如有4个盘被放在RAID后面。那么这个RAID卡对应的块设备的IO队列深度允许超过12(4个磁盘,每个盘承受深度为3)。
    SSD盘可承受的IO队列深度值很大,这个多少深度合适,我没有注意具体观察过。

    iostat另一个参数—-“%util”
    实际生产系统上,我观察IO设备是否吃紧,其实是看这个util的。这个值长期高于60,咱们就得考虑物理磁盘IO吃不消了。
    如果是使用机械硬盘的服务器上这个值达到90以上,最简单的解决方案仍然是换SSD盘,换完之后这个值会下降到20左右,非常有效。

    IO调度算法
    IO调度算法存在的意义有两个:一是提高IO吞吐量,二是降低IO响应时间。然而IO吞吐量和IO响应时间往往是矛盾的,为了尽量平衡这两者,IO调度器提供了多种调度算法来适应不同的IO请求场景。
    以下几个算法介绍是网上抄来的,说的很详细,作者水平很高:)

    1、NOOP
    该算法实现了最简单的FIFO队列,所有IO请求大致按照先来后到的顺序进行操作。之所以说”大致”,原因是NOOP在FIFO的基础上还做了相邻IO请求的合并,并不是完完全全按照先进先出的规则满足IO请求。
    假设有如下的io请求序列:
    100,500,101,10,56,1000
    NOOP将会按照如下顺序满足:
    100(101),500,10,56,1000

    2、CFQ
    CFQ算法的全写为Completely Fair Queuing。该算法的特点是按照IO请求的地址进行排序,而不是按照先来后到的顺序来进行响应。
    假设有如下的io请求序列:
    100,500,101,10,56,1000
    CFQ将会按照如下顺序满足:
    100,101,500,1000,10,56
    在传统的SAS盘上,磁盘寻道花去了绝大多数的IO响应时间。CFQ的出发点是对IO地址进行排序,以尽量少的磁盘旋转次数来满足尽可能多的IO请求。在CFQ算法下,SAS盘的吞吐量大大提高了。但是相比于NOOP的缺点是,先来的IO请求并不一定能被满足,可能会出现饿死的情况。

    3、DEADLINE
    DEADLINE在CFQ的基础上,解决了IO请求饿死的极端情况。除了CFQ本身具有的IO排序队列之外,DEADLINE额外分别为读IO和写IO提供了FIFO队列。读FIFO队列的最大等待时间为500ms,写FIFO队列的最大等待时间为5s。FIFO队列内的IO请求优先级要比CFQ队列中的高,而读FIFO队列的优先级又比写FIFO队列的优先级高。优先级可以表示如下:
    FIFO(Read) > FIFO(Write) > CFQ
    这个算法特别适合数据库这种随机读写的场景。

    4、ANTICIPATORY
    CFQ和DEADLINE考虑的焦点在于满足离散IO请求上。对于连续的IO请求,比如顺序读,并没有做优化。为了满足随机IO和顺序IO混合的场景,Linux还支持ANTICIPATORY调度算法。ANTICIPATORY的在DEADLINE的基础上,为每个读IO都设置了6ms的等待时间窗口。如果在这6ms内OS收到了相邻位置的读IO请求,就可以立即满足。

    IO调度器算法的选择,既取决于硬件特征,也取决于应用场景。
    在传统的SAS盘上,CFQ、DEADLINE、ANTICIPATORY都是不错的选择;对于专属的数据库服务器,DEADLINE的吞吐量和响应时间都表现良好。然而在新兴的固态硬盘比如SSD、Fusion IO上,最简单的NOOP反而可能是最好的算法,因为其他三个算法的优化是基于缩短寻道时间的,而固态硬盘没有所谓的寻道时间且IO响应时间非常短。

    IO调度算法的查看和设置
    查看和修改IO调度器的算法非常简单。假设我们要对sda进行操作,如下所示:
    cat /sys/block/sda/queue/scheduler
    echo ‘cfq’ >/sys/block/sda/queue/scheduler
    还有持久化设置,不一一列举了。

    调整IO优先级—-ionice
    这个我本人没用过,但是看起来很诱人:)

    IO性能测试
    工具有fio,iometre和简单实用的dd
    如何系统化的测试和观察RAID卡,SSD,SAS这样的存储介质。后续我会在专门的硬件加速方面介绍。
    ———————————————————————————————————

    11.静态路由和动态路由
    路由选择策略(静态和动态)
    最典型的路由选择策略有两种:静态路由和动态路由。

    所谓的静态是说明路由器不是通过彼此之间动态交换路由信息建立和更新路由表,而是指由网络管理员根据网络拓扑结构图来手动配置。
    动态路由是通过网络中路由器之间的相互通信来传递路由信息,利用接收到的路由信息自动更新路由表。
    静态路由
    静态路由是最简单的路由形式。它由管理员负责完成发现路由和通过网络传播路由的任务。在已经配置了静态路由的路由器上把报文直接转发至预定的端口。
    静态路由可以使网络更安全,因为在路由器中,它只定义了一条流进和流出网络的路由。此外,静态路由可以节省网络传输带宽。无需路由器的CPU来计算路由,并且需要更少的内存。当然静态路由选择也有些缺点,如网络发生问题或拓扑结构发生变化时,网络管理员就必须手工调整这些改变。因此,静态路由比较适用于小型网络。CISCO2500路由器举例说明:先配置路由器名称,各个接口IP及其掩码,然后再手工配置静态路由:
    配置静态路由的格式为:
    Router(config)#ip route [destination_network] [mask] [next_hop_hop_address or exitinterface] [administrative_distance] [permanent], 在命令格式中,
    1) destination_network 是指所要到达的目的网络
    2) mask 为目的网络的子网掩码。
    3) next_hop_address是指下一跳的IP地址,所谓下一跳是指数据包向目的地址前进的下一个路由器的端口,当然必须保证这个端口的IP地址可以PING通。有时候在next_hop_address 这个位置上用 exitinterface,就是数据包离开路由器的接口,但是这种配置方式只可以用于端到端的连接,比如说广域网,在以太网中就不可以使用这种配置方式。
    4) Administative_distance 管理距离(可选),静态路由默认的管理距离是1,可以通过这个参数修改这个权值。
    5) Permanent, 指定此路由即使端口关掉也不被一移掉。在上面拓扑图中,计算机A如果打算向计算机 B发送数据包,必须通过Router1转发,Router1转发计算机A的数据包到计算机B,必须通过Router2和Router3,必须配置一条关于192.168.0.0的路由条目

    动态路由选择策略:
    动态路由是指按照一定的算法,发现、选择和更新路由的过程。动态路由协议是网络设备学习网络中路由信息的方法之一,动态路由协议可以动态地随着网络拓扑结构的变化,并在较短时间内自动更新路由表,使网络达到收敛状态。
    动态路由协议按照区域划分,可分为内部网关协议IGP(Interior Gateway Protocol)和外部网关协议EGP(Exterior Gateway Protocol),
    按照执行的算法分类,又可分为距离矢量路由协议(Distance Vector)和链路状态路由协议(Link State)

    3.1按照路由算法分:距离-矢量路由和链路状态路由协议
    3.1.1距离-矢量路由:RIP
    基于距离-矢量算法将周期性地将路由表发送给与其直连的网络邻居。每个接收者加上一个距离矢量,或它自己的距离“值”到表中,并将其转发给直接邻居。这个过程发生在直接相连的路由器之间,并使得每个路由器得到了其他路由器的信息,最终形成一个网络“距离”的汇集视图。
    几十年来大量的路由选择协议都采用了距离矢量这一算法来计算路由。下面介绍一下距离矢量算法。距离向量算法是基于下面的计算公式:

    D(i,j)=0

    D(i,j)=min[d(i,k)+D(k,j)]

    其中:
    D(i,j)表示从节点(节点为网络或路由器)i到节点J的最短路径,
    d(i,k)表示从节点i到k的直接路径,也就是说节点i和k之间没有中介节点。
    具体运算步骤如下:
    1) 所有的路由器建有一个路由表,使系统中的所有目的地址都出现在表中。每一表项内容包括目的地址和下一站地址,记为元组(N,G)。
    2) 路由器周期性地向邻居发送更新分组,更新分组的内容为路由表中的所有信息。
    3) 邻居路由器接收处理更新分组。设更新分组来自G‘,根据更新分组计算到目的地址N的路由开销为D’,如果D‘<D,采用新的路由(N,G’)。如果当前路由表中所存放的相应下一站地址为G’,也就是G‘=G,采用新的路由,不管D’是大或小。

    在距离矢量法中,相邻路由器之间周期性地相互交换各自的路由表备份。当网络拓扑结构发生变化时,路由器之间也将及时地相互通知有关变更信息。
    3.2.2链路-状态路由选择协议
    链路状态路由选择协议也称为最短路径优先协议SPF(Shortest Path First),是另一种应用比较广泛的动态路由协议。采用这种协议的路由器都要维护一个复杂的网络拓扑数据库,这个数据库可以反映整个网络的拓扑结构。一个路由器的链路状态(Link State)是指它与哪些网络或路由器相邻,以及到这些网络或路由器的度量。路由器通过与网络中其他路由器交换链路状态的通告(LSA,Link-State Advertisment)来建立和更新网络拓扑数据库,随后使用SPF算法计算出连接网络目标的信息,并用这个信息更新路由表。
    事实上,LSA的变化是由网络中的事件触发的,而不是周期进行的,在路由器开始汇聚前,也不需要等待一系列定时器的工作。因此LSA的事件触发可以大大加快汇聚过程

    3.2按照区域划分分:内部和外部网关协议
    路由器上的路由表是用来告诉数据报文该如何转发,由于Internet是一个全球范围的网络,如果路由器上所存在的路由表太多,处理起来将使得开销太大,需要太多的时间,为了解决这一问题,Internet被划分为许多较小的单元,这些较小的单元被称为自治系统(Autonomous System,简称AS)。一个自治系统内的所有网络都属于一个单位来管辖,所以按照自治系统的范围,路由选择协议可以分为两类:

    IGP:内部网关协议(Interior Gateway Protocol):
    EGP:外部网关协议(Extenal Gateway Protocol)
    3.2.1内部网关协议:RIP和OSPF
    是指在一个自治系统内部所使用的路由选择协议,与互联网的其他自治系统选用何种路由协议无关。目前这类路由协议使用的最多,主要有路由信息协议(RIP)和开放式最短路径优先协议(OSPF)两种
    3.2.2外部网关协议:BGP
    若源网络和目的网络处在不同的自治系统中,当数据报文传到一个自治系统的边界时,就需要一种协议将路由信息传递到另一个自治系统中。这样的协议就是外部网关协议EGP。在外部网关协议中目前使用最多的是BGP

    3.3常用的三种动态路由协议:RIP,OSPF和BGP
    路由选择协议是用来实现路由选择的具体实现过程。在路由器之间,利用路由选择协议使它们之间主动地交换路由信息,建立完整的路由表,然后,根据路由表来转发数据包。通过路由选择协议,路由器可以动态地适应网络拓扑结构的变化,并找到目的网络的最佳路径。
    下面将重点讲解三种路由协议,即内部网关协议中的RIP和OSPF,以及外部网关协议BGP

    12.atop各行参数的意义
    ———————————————————————-
    atop:改行列出了服务器的host、当前时间、信息收集的频率

    PRC:该列展示整个系统的性能状况;

    sys:过去10s所有的进程在内核态运行的时间总和
    usr:过去10s所有的进程在用户态的运行时间总和
    #proc:进程总数
    #trun:过去10s转换的进程数
    #zombie:过去10s僵死进程的数量
    #exit:在10s采样周期期间退出的进程数量
    CPU: cpu列展示了服务器的CPU整体的一个状态信息,包括内核和用户所占的比例、处理中断所占的比例、CPU的处于空闲下比例(这里是100%*cpu核心数,CPU有时候也会因为由于磁盘性能问题出现等待的空闲)

    sys:cpu在处理进程时处于内核态的时间所占的比例
    usr:cpu在处理进程时处于用户态的时间所占的比例
    irq:cpu在处理进程的中断请求所占的实际比例
    idle:cpu处于空闲状态下的时间比例(除了本身空闲,还有比如等待磁盘io的情况下也会处于空闲状态)
    cpu:每个核心的状态信息,和总的CPU信息一样,每列加起来的总和就是总的CPU的状态信息。

    CPL:cpl也反应了服务器整体的性能,展示信息包括进程等待队列数,分别从过去1分钟、5分钟、15分钟的采样信息。

    avg1:过去1分钟进程等待队列数
    avg5:过去5分钟进程等待队列数
    avg15:过去15分钟进程等待队列数
    csw(context swapping):上下文交换次数
    intr(interrupt):中断发生的次数
    numcpu:cpu的核心数
    mem:该列主要展示内存的使用信息。

    tot:物理内存总量
    free:空闲内存的大小(不能单单从这个字段就判断内存不足,还需要参考free -m中的-/+ buffers/cache:free因为这块的内容随时就可以拿过来使用,还可以从是否有使用Swap来判断是否内存不足)
    cache:用于页缓存的内存大小
    dirty:内存中的脏页大小
    buff:用于文件缓存的内存大小
    slab:系统内核占用的内存大小
    SWP:交换空间使用情况

    tot:交换空间总量
    free:交换空间剩余空间总量
    PAG列:虚拟内存分页情况

    swin:换入内存页数
    swout:换出内存页数
    LVM/DSK:每个分区信息以一列来进行展示

    busy:磁盘忙时所占比例
    read、KiB/r 、MBr/s:每秒读的请求数和请求的kb、mb数
    write、KiB/w 、MBr/w:每秒写的请求数和请求的kb、mb数
    avq:磁盘平均队列长度(根据实际的监控该列好像是磁盘平均请求数avgrq)
    avio:磁盘的平均io时间

    NET:展示了传输层(TCP/UDP)、网络层(ip)、网络接口的网络传输信息。

    transport:传输层(TCP/UDP)的数据输入输出的展示,例如在服务器的内部进程之间的数据传输就是在传输层展示,以为还不需要往下通过网络进行传输。

    network:网络层(ip)的数据输入输出的展示;

    eth0:默认的网络接口的数据输入输出的展示,也就是通过etho的ip的数据传输的展示,

    sp:网卡的带宽(1000M)
    pcki:传入的数据包的大小
    pcko:传出的数据包的大小
    si:每秒传入的数据大小
    so:每秒传出的数据大小
    coll(collisions):每秒的冲突数
    mlti(MULTICAST):每秒的多路广播的数量
    erri/erro:每秒输入输出的错误数
    drpi/drpo:每秒的输入输出的丢包数
    lo:通过127.0.0.1网络接口的数据传输的数据展示,参数和上面的eth0是一样的

    进程列

    进程列展示了每个进程在过去10S内的数据

    m模式:内存状态模式

    SYSCPU:过去10s内进程处于内核模式占用的CPU时间

    USRCPU:过去10S进程处于用户模式占用的CPU时间

    VSIZE:过去10S进程占用的虚拟空间大小

    RSIZE:过去10S进程占用的内存空间大小

    PSIZE:过去10S进程占用的页大小

    VGROW:过去10S进程增长的虚拟空间大小

    RGROW:过去10S进程增长的内存大小

    SWAPSZ:过去10S进程使用交换空间的大小。

    MEM:过去10S进程占用内存百分比

    d模式:磁盘状态模式

    RDDSK:过去10S进程读磁盘的数据量
    WRDSK:过去10S进程写磁盘的数据量
    DSK:过去10S进程所占磁盘的百分比
    CMD:进程名
    p模式:进程状态模式,同一个名称的进程显示一列,根据进程名进行分组显示

    NPROCS:相同名称的进程数量

    其它的参数上面已经有列出

    v模式:线程状态模式

    u模式:用户模式

    根据用户进行分组显示

    g模式:标准模式

    s:进程当前的状态,包括:s(sleeping),R(runing)等

    atop的相关文件

    /etc/atop:目录保存的是atop的配置文件
    /etc/rc.d/init.d/atop:atop的启动文件
    /etc/cron.d/atop:atop的定时任务文件,默认是每天0点开始
    /var/log/atop:atop日志文件,默认是每天0点开始会产生当天的一个日志文件,然后可以通过atop -r file 查看信息,但是没有找到自动播放的的功能,只能通过输入b显示一个指定的时间的信息,可以写个循环来实现
    /usr/bin/atop:atop命令目录

    atop -r atop_20160510 -b 13:00 -e 17:00
    atop产生的日志文件信息是10分钟一个采样周期进行记录,可以通过修改/etc/atop/atop.daily文件进行修改。

  • 相关阅读:
    4-1 软件原型设计
    3-1 案例分析
    2-1 编程作业
    1-2阅读任务
    1-1 准备工作
    第十周学习总结
    实验报告2&&第四周课程总结
    Java实验报告(一)&&第三周学习总结
    第三周编程总结
    2019年春季学期第二周作业
  • 原文地址:https://www.cnblogs.com/hrers/p/13550639.html
Copyright © 2011-2022 走看看