admin管理员组

文章数量:1530085

目录

  • 1、 宏观浏览器
    • 进程和线程
    • 计算机网络的七层模型
    • HTTP的请求流程
  • 2、浏览器渲染流程
    • TCP协议
    • 三次握手
    • 渲染流程
  • 3、重绘重排
    • 重绘
    • 重排
    • 优化
  • 4、缓存
    • CDN
    • 浏览器多页面之间的通信
  • 5、强缓存和协商缓存
    • 强缓存
    • 协商缓存
  • 6、浏览器的网络和安全
    • 浏览器中的网络
    • 浏览器的安全
    • 网络攻击

1、 宏观浏览器

浏览器简介
1995年美国的网景公司因"网景浏览器"的发布而快速崛起,之后网景还试图开发一个依靠浏览器的网络操作系统。这引起了微软的关注和警惕,1995年12月7日(12月7日是日本偷袭珍珠港的日子),微软正式进军浏览器市场,同年微软发布windows95,并捆绑了IE,大获成功。IE出来,网景就离死不远了,网景被垄断了操作系统的微软用非技术、非正常竞争的手段打败,97年就倒闭了。到2002年,微软拿下了浏览器市场80%的份额。
直到2008年,chrome横空出世,才打破这种垄断的局面。Chrome浏览器完全颠覆了之前浏览器的架构设计,市场份额占比激增。2019年,chrome占据全球63%的市场份额。
随着云计算的普及和HTML5技术的快速发展,越来越多的应用从C/S架构转化B/S架构。这种改变让浏览器的重要性与日俱增。视频、音频、游戏几大核心场景也都在往Web的使用场景切换。

c/s client --server (王者、吃鸡)
b/s browser --serve(百度、搜狐)

进程和线程

ctrl+alt+delete 任务管理器查看

进程:就是在内存中正在运行的应用程序(eg:手游)
在内存中独占一个内存空间
进程和进程之间是隔离的
【是操作系统最小的执行单位】

线程:就是进程的最小执行单位(eg:微信和多人聊天)
一个进程是由多个线程组成
每一个线程之间也是相互之间隔离的
【CPU最小的执行单位】

浏览器用了多少进程
打开浏览器——更多工具——任务管理器查看

● 浏览器进程:主要负责界面显示、用户交互、子进程管理、同时提供存储等功能。
● 渲染进程:核心任务是将HTML、CSS和JavaScript转换为用户可以与之交互的网页,排版引擎Blink和JavaScript引擎V8都运行在该进程中,默认情况下,Chrome为每一个Tab标签页创建一个渲染进程。出于安全考虑,渲染进程都是运行在沙箱模式下的。
● GPU进程:GPU图形处理器(英语:graphics processing unit,缩写:GPU),负责3D css效果,网页,Chrome ui的绘制。
● 网络进程:主要负责页面的网络资源加载,之前是作为一个模块运行在浏览器进程里面的,直至最近才独立处理,成为单独一个进程。
● 插件进程:主要负责插件的运行,因为插件易崩溃,所以通过插件进程来隔离,以保证插件进程崩溃不会对浏览器和页面造成影响。

计算机网络的七层模型

OSI七层模型推荐所有公司使用这个规范来控制网络,所有公司都有相同的规范,就能互联了
应用层为应用程序提供服务,【HTTP协议】
表示层数据格式转化、数据加密,【翻译 解决传输问题】
会话层建立、管理和维护会话,【断点续传】
传输层建立、管理和维护端到端的连接,【UDP/TCP协议 端口】
网路层IP地址及路由选择,【IP协议】
数据链路层提供介质访问和链路管理,【封装byte】
物理层互联物理链路,物质介质【网线,光纤,无线电波wifi】数据是以0101这样的比特流存在的
七层顺序应用层→物理层(由高到低)


UDP特点:只管发,不管收DNS,微信电话,流媒体
TCP特点:1、重传机制。2、排序机制–根据数据包的编号对数据进行排序,重组数据包。保证数据包的完整性和准确性。

四层说法:
物理层 (物理+数据链路)
网络层
传输层
应用层 (会话+表示+应用)

HTTP的请求流程

浏览器发送HTTP请求的流程:
1、构造请求行 GET /api/article HTTP/1.1 (请求方式+url地址+http版本)
2、查找缓存 其实浏览器缓存是一种本地保存的资源副本,以供下次请求时直接使用的技术 【有则缓存没有则发送网络请求】
3、准备IP地址和端口号 【用来封装请求的文本信息】并使用TCP/IP作传输层协议将它发到网络上,所以在HTTP工作开始之前,浏览器需要TCP与服务器建立连接。也就是说HTTP的内容是通过TCP的传输数据阶段来实现的
4、等待TCP队列 【一个域名最多建立6个TCP链接】
5、建立TCP链接 IP地址和端口已经准备好了,是不是可以马上建立TCP连接。不行,因为Chrome有个机制,同一个域名同时最多只能建立6个TCP连接。少于6个直接下一步建立TCP连接,或排队等待结束后建立TCP连接
6、发送HTTP请求

服务器处理HTTP请求:
1、返回请求内容
2、断开连接

【当然浏览器还提供了 DNS 数据缓存服务】
数据包是通过IP地址传输给接收方的。由于IP地址是数字标识的,难以记忆,使用一个域名例如www.baidu就容易记忆了,所以基于这个需求又出现了一个服务,负责把域名和IP地址做–映射关系。这套域名映射为IP的系统叫做"域名系统",简称DNS。
这也是为什么第二次打开浏览器会更快 DNS缓存和页面资源缓存这两块数据是会被浏览器缓存的
从进程的角度讨论
从输入url地址到浏览器显示页面 过程中发生了什么:

2、浏览器渲染流程

TCP协议

三次握手

  1. 一次:【发送消息】本地地址发送到服务器地址 SYN=1
  2. 二次:【响应消息】服务器地址发送到本地地址 SYN=1,ACK=1
  3. 三次:【确认消息】ACK=1
SYN 建立连接(同步标志)SYN 建立连接(同步标志) 1发送连接消息
ACK 响应确认(确认标志)ACK 响应确认(确认标志) 1是一个确认消息
FIN 关闭连接

渲染流程

DOM解析→CSS解析→样式计算→布局树→ 图层树→绘制→合并图层
1、使用html解析器转换成浏览器能理解的【DOM树】 ParseHTML
2、将css解析成浏览器能够识别的【CSS 树】
3、CSS树+DOM树创建布局树 并计算元素的布局信息 【布局树】
4、对布局树进行分层,并生成【图层树】(有特殊属性的会生成单独的图层)
5、对每个图层生成绘制列表,并将其提交给合成线程
6、对每个图层进行单独的绘制
7、合并图层
eg:

eg:

解析:

特殊属性图层:
1、css 3D
2、position: fixed
3、video
4、canvas
5、css3动画

补充:
屏幕上页面的可见区域叫视图(viewport)
css要放在顶部,它不会阻塞html的解析
JS会阻塞HTML的解析,所以最好放在底部
HTML会先扫描link和script标签,去并行加载
Encoded Data 65536 Bytes:接受65536比特 ————1kb=1024bytes 所以等同于接受64kb

3、重绘重排

重绘

  • 重绘是一个元素的外观的改变会触发浏览器行为。例如outline,背景色等属性的改变。浏览器会根据元素的新属性重新绘制,使元素的呈现新的外观,重绘不会带来布局,所以不一定伴随重排
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        #app{
            width:100px;
            height: 100px;
            background-color: red;
        }
    </style>
</head>
<body>
    <div id="app">

    </div>
    <script>
        var app = document.getElementById("app");
        setTimeout(()=>{
            app.style.backgroundColor="green"
        },1000)
    </script>
</body>
</html>

重排

  • 重排也称回流,渲染对象在创建完成并添加到渲染树时,并不包含位置和大小信息,计算这些值(位置和大小信息)的过程称为布局或重排
1、放弃传统的DOM,使用虚拟DOM(vue/React)

2、分离读写操作(现代的浏览器都有渲染队列的机制)

前端性能优化: 避免DOM的回流

回流一定会触发重绘,而重绘不一定会回流

优化

优化说明:
1、元素位置移动变换时尽量使用css3的transform来代替top left等操作
▲transform结合图层使用不会触发重绘,也不会触发重排
▲transform结合定位position:relative只触发重绘
▲transform单独使用,既重绘也重排
2、使用opacity来替代visibility
▲使用visibility不触发重排,但是依然重绘。
▲使用opacity即触发重绘,又触发重排。(GPU底层设计如此)
▲opacity配合图层使用,不会触发重绘也不触发重排
3、将多次改变样式的操作合并成一次
4、利用文档碎片(documentFragment)
5、不要把获取某些DOM节点的属性值放在一个循环里面当成循环的变量
6、为动画元素新建图层

4、缓存

CDN

CDN(Content Delivery Networks) 内容发布网络
CDN是一组分布在多个不同地理位置的web服务器,用于更加有效的向用户发布内容,系统能够实时地根据网络流量和各节点的连接,负载情况以及用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上

CDN本质上就是根据用户区域的不同,让用户从CDN服务器集群中最其近的节点,去做访问。

浏览器多页面之间的通信

实现多页应用之间各页面之间的通讯,主要有浏览器数据存储和服务器两种方式:
1、浏览器数据存储的方式主要使用本地存储方式解决,Cookie,SessionStorage,LocalStorage这三者都可以被用来在浏览器端存储数据,而且都是字符串类型的键值对(键值对“key = value”,每一个键会对应一个值)

//   cookie在浏览器控制台应用程序中
const koa = require("koa");
const app = new koa();
app.use(async ctx=>{
    ctx.cookies.set("name","cheng",{
        maxAge:1000*60,      //这里我们设置有效时常60秒 打开60秒内在客户端都是可读的
        httpOnly:false
    })
    ctx.body = "hello cookies"
})
app.listen(8080)

2、服务器方式主要使用websocket,目的是在浏览器和服务器之间建立一个不受限的双向通信的通道

补充:
一✦Cookie 是小甜饼的意思。顾名思义,cookie 确实非常小,它的大小限制为4KB左右,是网景公司的前雇员 Lou Montulli 在1993年3月的发明。它的主要用途有保存登录信息,比如你登录网址时,可以将登陆信息保存在cookie中那么久避免了重复登陆的情况。
一✦localStorage 是 HTML5 标准中新加入的技术,特点:除非被清除,否则永久保存。一般大小在5MB。
一✦sessionStorage 是HTML5新增的一个会话存储对象,用于临时保存同一窗口(或标签页)的数据,刷新页面数据依旧存在,在关闭窗口或标签页之后将会删除这些数据。

补充:
一★缓存的定义:浏览器在本地磁盘上将用户之前请求的数据存储起来,当用户再次请求该数据时,不用发送http请求,直接从浏览器本地获取
一★缓存的特点:减少http请求次数;节省带宽,避免网络资源的浪费,减轻服务器的压力;提升网页的加载速度,优化用户体验

5、强缓存和协商缓存

强缓存

强缓存的(响应)header参数
浏览器在加载资源时,会先根据本地缓存资源的 header 中的信息判断是否命中强缓存,如果命中则直接使用缓存中的资源不会再向服务器发送请求,这里的 header 中的信息指的是 expires 和 cahe-control。
【当Cache-control和Expires共存的时候,Cache-control的优先级级别高】

协商缓存

协商缓存是由服务器来确定缓存资源是否可用,所以客户端与服务器端要通过某种标识来进行通信,从而让服务器判断请求资源是否可以缓存访问
1、Last-Modified/If-Modified-Since:二者都是GMT格式的时间字符串
2、etag/if-none-match:这两个值是由服务器生成的每个资源的唯一标识字符串,只要资源有变化这个值才会改变

补充:
一★强缓存与协商缓存的关系:
相同点——都是从浏览器端读取资源
不同点——1、强缓存不发请求给服务器;2、协商缓存发请求给服务器,根据服务器返回的信息决定是否使用缓存

6、浏览器的网络和安全

浏览器中的网络

主要谈论HTTP协议,HTTP协议是浏览器中最重要且使用最多的协议,是浏览器和服务器进行通信的语言
1、超文本传输协议 HTTP/0.9
HTTP/0.9是1991年诞生的,当时主要用于学术交流,当时设计的时候,需求简单–用于网络之间传递HTML,所以又被称为超文本传输协议。
它的实现很简单,采用了基于请求和响应的模式,客户端发请求,服务器响应数据。

2、被浏览器推动的HTTP/1.0
1994年,网景公司推出了一款基于拨号上网的浏览器,从此万维网就不在局限于学术交流了,进入了高速发展的阶段。HTTP/0.9已经不能满足于当时新兴的网络,因为当时浏览器展示的已经不是单纯的HTML文件,还包括JavaScript,CSS,图片,音频,视频等不同类型的文件。支持多类型文件下载是HTTP/1.0的核心诉求。因为文件的格式不能仅仅局限于ASCII编码,还有其他很多类型编码的文件。为了让客户端和服务器能更深入的交流,HTTP/1.0引入了请求头和响应头,它们都以key-value形式保存的,在HTTP发送请求时,会带上请求头信息。 服务器返回数据时,会先返回响应头信息。

3、HTTP/1.1
随着需要的迭代,HTTP/1.0已经不能满足用户的需求了,所以HTTP/1.1在HTTP/1.0的基础上做了大量的更新。
HTTP/1.0每进行一次HTTP通信,都需要经历TCP连接,输出HTTP数据,断开TCP连接三个阶段。

HTTP/1.1的主要问题:
1、对带宽的利用不理想。带宽是指每秒最大能发送或接收的字节数
2、慢启动和TCP连接之间互相竞争带宽是由于TCP本身的机制导致的
4、HTTP/2
HTTP/2的思路就是一个域名只使用一个TCP长连接来传输数据,这样整个页面资源的下载过程只需要一次慢启动,同时避免了多个TCP连接竞争带宽所带来的问题。
HTTP/2的解决方案可以总结为: 一个域名只使用一个TCP长连接和消除队头阻塞问题。即【多路复用】

浏览器的安全

浏览器安全可以分为三个大块:
● Web页面安全
● 浏览器网络安全
● 浏览器系统安全

一个问题:如果没有网络安全和应对措施会怎样?(写到这突然想到了我学习python爬虫学一半就放弃的理由 是为了正义。。。)

● 被恶意修改站点的DOM,CSSOM
● 在站点内嵌JavaScript脚本或乱码
● 劫持用户登录的用户名和密码做非法事项
● 读取站点的Cookie,IndexDB等数据
● 甚至在用户不知情的情况下伪造一些虚假的请求信息
● 盗取IP犯罪 最常见的是个人服务器被恶意多次调用去攻击了别人的网站 以至于网络瘫痪(以前的12306一ε(┬┬﹏┬┬)3)
●…
在没有安全保障的Web世界中,我们是没有隐私的,因此需要安全策略来保障我们的隐私和数据的安全
什么是同源策略
如果两个url的协议,子域名,主域名,端口号都相同,我们就称这两个URL同源。
浏览器默认两个相同的源之间是可以相互访问资源和操作DOM的。不同的源之间是不能相互访问资源操作DOM的。
它们具有相同的协议HTTPS,相同的子域名(www)和主域名baidu,以及相同的端口号443,所以我们就说这两个URL是同源的。

https://www.baidu.com/?category=1
https://www.baidu.com/?category=0

同源策略主要表现在DOM,Web数据和网络这三个层面
1、DOM层面
同源策略限制了来自不同源的JavaScript脚本对当前DOM对象读和写的操作。
只有同一个域的才能读写,不同域之间是不能读写的。
2、数据层面
同源策略限制了不同源的站点读取当前站点的Cookie,IndexDB,LocalStorage等数据。
3、网络层面
同源策略限制了通过XMLHttpRequest(ajax核心对象)将站点的数据,发送不同源的站点。

安全性和便利性的权衡
同源策略会隔离不同源的DOM操作,页面数据,网络通信,进而实现Web页面的安全。
不过安全性和便利性是相互对立的,让不同的源之间绝对隔离,无疑是最安全的措施。但是这会使得Web项目难以开发和使用,因为我们就要在这之间做出权衡,出让一些安全性来满足灵活性。
1、页面中可以嵌入第三资源

2、跨域资源共享
为了解决跨域资源不能互相访问的问题,引入了跨域资源共享(CORS),使用该机制可以进行跨域访问控制,从而使跨域数据传输得以安全进行。

网络攻击

跨站脚本攻击
1、什么是XSS攻击
XSS全程是Cross Site Scripting,为了和"CSS"区分开来,故简称XSS。翻译过来就是"跨站脚本"。XSS攻击是指黑客往HTML文件中或DOM中注入恶意脚本,从而在用户浏览页面时,利用注入的恶意脚本对用户实施攻击的一种手段。
最开始的时候,这种攻击是通过跨域实现的,所以叫"跨域脚本"。但是发展到如今,往HTML文件注入恶意代码的方式越来越多,所以是否跨域注入脚本已经不是唯一的注入手段了,但是XSS这个名字却一直保留至今。

当页面被注入恶意脚本时,浏览器无法区别,所以注入的脚本也拥有了正常脚本的权限。如果页面被注入恶意脚本,脚本能够做哪些事情
● 可以窃取Cookie信息,恶意代码通过document.cookie获取Cookie信息,然后通过XMLHttpRequest加上Cors功能将数据发送给恶意服务器。恶意服务器拿到用户的Cookie信息之后,就可以在其他电脑上模拟用户的登录,然后进行转账等操作。
● 可以监听用户行为,恶意JavaScript可以使用"addEventListener"接口监听键盘事件,比如可以获取用户输入的信用卡等信息,将其发送到恶意服务器。黑客掌握了这些信息之后,又可以做很多违法的事情。
● 可以通过修改DOM,伪造假的登录窗口,用来欺骗用户输入用户名和密码等信息。
● 还可以在页面内生成浮窗广告,这些广告会严重的影响用户体验。

如果让页面被插入恶意脚本,那么就相当于把我们页面的隐私数据和行为完全暴露给黑客了。

2、恶意脚本是怎么注入的
常见的恶意脚本注入有以下几种,存储型XSS攻击,反射型XSS攻击,基于DOM的XSS攻击

CSRF攻击
CSRF(Cross-site request forgery)跨站请求伪造;顾名思义,是伪造请求,冒充用户在站内的正常操作;
该攻击可以在受害者毫不知情的情况下,以受害者名义伪造请求,发送给受攻击的站点。从而在未授权的情况下执行在权限保护之下的操作,具有很大的危害性,具体来讲,CSRF攻击。攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的。但是却完成了攻击者所期望的一个操作,比如以你的名义,发送邮件发送消息,盗用你的账号,添加系统管理员。
跨站请求伪造,指黑客引用用户打开黑客的网站,在黑客的网站中,利用用户的登录状态发起的跨站请求。简单来讲,CSRF攻击就是黑客利用了用户的登录状态,并通过第三方站点来做一些坏事。

用户登录微博账号,这时黑客给你一个美女图片的链接,你点击之后进入黑客的网站,他获取你的登录状态,利用你的账号传播一些乱七八糟的信息。
和XSS不同的是,CSRF攻击不需要将恶意代码注入用户的页面,仅仅是利用服务器的漏洞和用户的登录状态来实施攻击。
你这可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账…造成的问题包括:个人隐私泄露以及财产安全。
其他攻击
一☢TCP SYN拒绝服务攻击
目标计算机收到报文后,建立TCP连接控制结构(TCB),并回应一个ACK,等待发起者的回应
而发起者则不向目标计算机回应ACK报文,这样导致目标计算机一直处于等待状态。
可以看出,目标计算机如果接收到大量的TCP SYN报文,而没有收到发起者的第三次ACK回应,会一直等待,处于这样尴尬状态的半连接。如果很多的话,则会把目标计算机的资源(TCB控制结构,TCB,一般情况下是有限的)耗尽,而不能响应正常的TCP连接请求。

一☢ICMP洪水
正常情况下,为了对网络进行诊断,一些诊断程序,比如PING等,会发出ICMP响应请求报文(ICMP ECHO),接收计算机接收到ICMP ECHO后,会回应一个ICMP ECHO Reply报文。而这个过程是需要CPU处理的,有的情况下还可能消耗掉大量的资源,比如处理分片的时候。这样如果攻击者向目标计算机发送大量的ICMP ECHO报文(产生ICMP洪水),则目标计算机会忙于处理这些ECHO报文,而无法继续处理其它的网络数据报文,这也是一种拒绝服务攻击(DOS)。

一☢UDP洪水
  原理与ICMP洪水类似,攻击者通过发送大量的UDP报文给目标计算机,导致目标计算机忙于处理这些UDP报文而无法继续处理正常的报文。

一☢分片IP报文攻击
我们知道,为了传送一个大的IP报文,IP协议栈需要根据链路接口的MTU对该IP报文进行分片,通过填充适当的IP头中的分片指示字段,接收计算机可以很容易的把这些IP分片报文组装起来。
目标计算机在处理这些分片报文的时候,会把先到的分片报文缓存起来,然后一直等待后续的分片报文,这个过程会消耗掉一部分内存,以及一些IP协议栈的数据结构。

一☢没有设置任何标志的TCP报文攻击
正常情况下,任何TCP报文都会设置SYN,FIN,ACK,RST,PSH五个标志中的至少一个标志,第一个TCP报文(TCP连接请求报文)设置SYN标志,后续报文都设置ACK标志。

一☢死亡之PING
TCP/IP规范要求IP报文的长度在一定范围内(比如,0-64K),但有的攻击计算机可能向目标计算机发出大于64K长度的PING报文,导致目标计算机IP协议栈崩溃。

一☢地址猜测攻击
跟端口扫描攻击类似,攻击者通过发送目标地址变化的大量的ICMP ECHO报文,来判断目标计算机是否存在。如果收到了对应的ECMP ECHO REPLY报文,则说明目标计算机是存在的,便可以针对该计算机进行下一步的攻击。

一☢泪滴攻击
  对于一些大的IP包,需要对其进行分片传送,这是为了迎合链路层的MTU(最大传输单元)的要求。比如,一个4500字节的IP包,在MTU为1500的链路上传输的时候,就需要分成三个IP包。

一☢带源路由选项的IP报文
  为了实现一些附加功能,IP协议规范在IP报头中增加了选项字段,这个字段可以有选择的携带一些数据,以指明中间设备(路由器)或最终目标计算机对这些IP报文进行额外的处理。

一☢IP地址欺骗
  一般情况下,路由器在转发报文的时候,只根据报文的目的地址查路由表,而不管报文的源地址是什么,因此,这样就可能面临一种危险:如果一个攻击者向一台目标计算机发出一个报文,而把报文的源地址填写为第三方的一个IP地址,这样这个报文在到达目标计算机后,目标计算机便可能向毫无知觉的第三方计算机回应。这便是所谓的IP地址欺骗攻击。

一☢WinNuke攻击
  NetBIOS作为一种基本的网络资源访问接口,广泛的应用于文件共享,打印共享,进程间通信(IPC),以及不同操作系统之间的数据交换。一般情况下,NetBIOS是运行在LLC2链路协议之上的,是一种基于组播的网络访问接口。
  
一☢Land攻击
  LAND攻击利用了TCP连接建立的三次握手过程,通过向一个目标计算机发送一个TCP SYN报文(连接建立请求报文)而完成对目标计算机的攻击。

一☢Script/ActiveX攻击
Script是一种可执行的脚本,它一般由一些脚本语言写成,比如常见的JAVA SCRIPT,VB SCRIPT等。

一☢Smurf攻击
  ICMP ECHO请求包用来对网络进行诊断,当一台计算机接收到这样一个报文后,会向报文的源地址回应一个ICMP ECHO REPLY。一般情况下,计算机是不检查该ECHO请求的源地址的,因此,如果一个恶意的攻击者把ECHO的源地址设置为一个广播地址,这样计算机在恢复REPLY的时候,就会以广播地址为目的地址,这样本地网络上所有的计算机都必须处理这些广播报文。如果攻击者发送的ECHO 请求报文足够多,产生的REPLY广播报文就可能把整个网络淹没。这就是所谓的smurf攻击。
除了把ECHO报文的源地址设置为广播地址外,攻击者还可能把源地址设置为一个子网广播地址,这样,该子网所在的计算机就可能受影响。

一☢虚拟终端(VTY)耗尽攻击
  这是一种针对网络设备的攻击,比如路由器,交换机等。这些网络设备为了便于远程管理,一般设置了一些TELNET用户界面,即用户可以通过TELNET到该设备上,对这些设备进行管理。
  
一☢路由协议攻击
  网络设备之间为了交换路由信息,常常运行一些动态的路由协议,这些路由协议可以完成诸如路由表的建立,路由信息的分发等功能。常见的路由协议有RIP,OSPF,IS-IS,BGP等。这些路由协议在方便路由信息管理和传递的同时,也存在一些缺陷,如果攻击者利用了路由协议的这些权限,对网络进行攻击,可能造成网络设备路由表紊乱(这足可以导致网络中断),网络设备资源大量消耗,甚至导致网络设备瘫痪。
  
下面列举一些常见路由协议的攻击方式及原理:
一☢针对RIP协议的攻击
  RIP,即路由信息协议,是通过周期性(一般情况下为30S)的路由更新报文来维护路由表的,一台运行RIP路由协议的路由器,如果从一个接口上接收到了一个路由更新报文,它就会分析其中包含的路由信息,并与自己的路由表作出比较,如果该路由器认为这些路由信息比自己所掌握的要有效,它便把这些路由信息引入自己的路由表中。

一☢针对OSPF路由协议的攻击
  OSPF,即开放最短路径优先,是一种应用广泛的链路状态路由协议。该路由协议基于链路状态算法,具有收敛速度快,平稳,杜绝环路等优点,十分适合大型的计算机网络使用。OSPF路由协议通过建立邻接关系,来交换路由器的本地链路信息,然后形成一个整网的链路状态数据库,针对该数据库,路由器就可以很容易的计算出路由表。

一☢针对IS-IS路由协议的攻击
  IS-IS路由协议,即中间系统到中间系统,是ISO提出来对ISO的CLNS网络服务进行路由的一种协议,这种协议也是基于链路状态的,原理与OSPF类似。IS-IS路由协议经过 扩展,可以运行在IP网络中,对IP报文进行选路。这种路由协议也是通过建立邻居关系,收集路由器本地链路状态的手段来完成链路状态数据库同步的。该协议的邻居关系建立比OSPF简单,而且也省略了OSPF特有的一些特性,使该协议简单明了,伸缩性更强。

一☢针对设备转发表的攻击
  为了合理有限的转发数据,网络设备上一般都建立一些寄存器表项,比如MAC地址表,ARP表,路由表,快速转发表,以及一些基于更多报文头字段的表格,比如多层交换表,流项目表等。这些表结构都存储在设备本地的内存中,或者芯片的片上内存中,数量有限。如果一个攻击者通过发送合适的数据报,促使设备建立大量的此类表格,就会使设备的存储结构消耗尽,从而不能正常的转发数据或崩溃。

一☢针对MAC地址表的攻击
MAC地址表一般存在于以太网交换机上,以太网通过分析接收到的数据幀的目的MAC地址,来查本地的MAC地址表,然后作出合适的转发决定。

一☢针对ARP表的攻击
  ARP表是IP地址和MAC地址的映射关系表,任何实现了IP协议栈的设备,一般情况下都通过该表维护IP地址和MAC地址的对应关系,这是为了避免ARP解析而造成的广播数据报文对网络造成冲击。

一☢针对流项目表的攻击
有的网络设备为了加快转发效率,建立了所谓的流缓存。所谓流,可以理解为一台计算机的一个进程到另外一台计算机的一个进程之间的数据流。如果表现在TCP/IP协议上,则是由(源IP地址,目的IP地址,协议号,源端口号,目的端口号)五元组共同确定的所有数据报文。

↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑爆肝万字↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑爆肝万字↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑爆肝万字↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

本文标签: 网络安全工作原理浏览器