精华内容
下载资源
问答
  • 互联网工作原理图解
    千次阅读
    2017-07-10 08:50:32

    原文:How does the internet work
    翻译:安翔
    审校/责编:屠敏,关注物联网、移动开发领域,寻求报道或投稿请发邮件tumin@csdn.net

    假设你在意大利度假,此时此刻正在一个提供免费 WiFi 的咖啡厅里享受下午茶。前几天的旅途中,你拍摄了很多靓照,你迫不及待地想要分享给国内的老爹老妈。

    鉴于二老对 Dropbox 或者 Google Drive 这种高级货一无所知,因此你只能用邮件附件的方式发送这些照片。

    当你用鼠标点击邮件发送按钮之后,分分钟,邮件就穿越时空到达了老妈的收件箱。

    那么这封邮件到底经历了什么,它是如何从意大利的咖啡馆来到妈妈的邮箱的呢?

    网络基础

    在我们正式探索之前,首先了解一下网络的基本组件。
    网络由多种设备连接组成,这些设备统称为“节点”。大多数现代网络都包含如下节点:

    • 网卡/适配器
    • 交换机
    • 路由器
    • 无线接入点

    网卡

    也称为网络适配器,它是安装在计算机(比如笔记本或者PC)上的硬件设备。它自身不是节点,安装了它的计算机或者其他电子设备作为节点接入网络。

    交换机

    交换机通过快速创建和删除连接点,实现相同网络中节点之间的消息转发,它是网络的中心节点。可以将其理解为网络管理员,它维护无线和有线网络中设备之间的信息流。

    路由器

    路由器是连接两个或多个独立网络的设备。通过不同网络的路由器之间不断的转发和接力,数据才能最终达到它的目的地。

    无线接入点(WAP)

    WAP 允许附近的计算机和节点通过 WiFi 等无线方式接入网络。它们是向有线网络提供无线功能的节点。

    单独的 WAP 接入能力有限,比如在大型建筑中可以使用多个 WAP 以增大无线网络的覆盖范围。 当然,WAP并不是网络的必需组件,因为有线网络能够满足大部分需求。

    WiFi连接与Internet连接

    在此处需要声明的是,与普遍认识相反,实际上 WiFi 与 Internet 连接没有任何关系,很多人将这两者混淆。

    WiFi 仅仅反应你连接到局域网中的无线接入点的强度,Internet 连接则用来衡量你的路由器与互联网的连接强度。 WiFi 信号很强,并不代表网速就很快。

    这里有关于WiFi的8件事来帮助你更好地了解 WiFi。

    互联网的诞生

    互联网起源于1960年代末和70年代初,它是由美国国防部创建的一种新的网络技术。 它被称为ARPANET(Advanced Research Projects Agency Network)。

    当时从事国防工程相关工作的人员不仅包括国防部的科学家,还有遍布美国各地的研究员,ARPANET 的最初目的就是将这些工作人员联系起来,实现远程协同工作。研究员将 ARPANET 纳入他们在大学工作的网络中。随着越来越多的网络加入系统,互联网逐步开始形成。

    什么是互联网

    从根本上讲,互联网是一个使用网络协议进行通信的全球互联的网络集合。可以将 Internet 看作网络的网络,每个网络都是一个节点。
    然而,新的设备和技术已经创造出通过互联网连接到网络的新途径。 它们的组合通常用于建立这些连接。

    有线网络

    有线网络是接入互联网的最常见方式。 全世界铺设了数十万英里的电缆,比如电话线(DSL)、光纤,等等。

    数据可以通过光纤电缆实现高达70%光速的传输速度。为了防止退化,大部分电缆铺设在地下或水下。当然,在陆地上,也会很便利地铺设在公路旁。这些电缆有的可以跨越数千英里,例如连接欧洲和美国、加拿大的大西洋水下通信电缆。

    总之,有线网络是访问互联网最理想和最快速的方式。

    卫星互联网

    在某些第三世界国家和人口极少的地区,当地没有提供有线网络,那么此时卫星网络就很有必要了,人们可以通过卫星信号接入互联网。

    虽然卫星相对较快,但是由于更长的传输距离,因此实际上它比有线网络要慢。此外,如果数据的接收端和发送端不在同一个卫星的覆盖范围内(比如发送给你父母的电子邮件),则数据需要多个卫星之间的转发。

    移动互联网

    如今,手机早已可以接入互联网。手机的直接连接点是基站,基站再通过物理电缆接入互联网。

    实际上,基站是非常广泛的无线接入点,它不仅支持手机还支持其他的终端设备。手机还可以通过开启热点的方式扮演无线路由器的角色,笔记本电脑或者其他终端都可以通过手机提供的热点上网。

    通过上文的描述,我们对互联网有了进一步的了解,此时是时候讨论文章开头邮件的事了。

    互联网如何工作

    你发送完邮件,关闭你的笔记本电脑,然后继续你的意大利之旅。此时,你的邮件也将开始它的旅程,尽管旅程的时间非常短暂。

    当你点击发送时,笔记本电脑的网卡使用 WiFi 将电子邮件中的数据发送到无线接入点, 然后,WAP 将数据发送到本地路由器。

    本地路由器接收到该数据并将其发送到另一个路由器,该路由器将数据发送到另一个路由器,通过多个路由器的转发,直到数据通过一条跨大西洋的电缆传输到美国。

    数据最终到达 Google 数据中心(因为你父母使用Gmail),然后 Google 向你父母的笔记本电脑发送通知,提示他们收到了一封新邮件。
    妈妈看到提示之后,转到她的电子邮件帐户,点击电子邮件。 数据通过多条线路从Google 数据中心开始传输,并到达你家的路由器,然后通过网线到达笔记本电脑的网卡,并最终显示在她的屏幕上。

    以上所有的一切都发生在眨眼之间。互联网真是酷毙了!

    更多相关内容
  • 有一定技术基础的互联网用户都知道DNS是做什么用的,但大多数人都不清楚DNS如何查找域名。 Ven发现了一幅图片,这幅图片非常形象地描述了DNS查找下的连锁反应,对不了解DNS运行的人们可能会有些帮助。 下面这张图片...
  • 图解离合器的工作原理.docx图解离合器的工作原理.docx图解离合器的工作原理.docx图解离合器的工作原理.docx图解离合器的工作原理.docx图解离合器的工作原理.docx图解离合器的工作原理.docx图解离合器的工作原理.docx...
  • Web服务器工作原理详解(基础篇)

    万次阅读 多人点赞 2018-08-14 17:12:00
    一、Web服务器工作原理图解 首先我们暂时不考虑HTTP协议的各种请求方式,我们先跟着**(Web服务器工作原理总体描述01) 这张图,将一次Web服务的工作流程过一遍,我们假设以浏览器作为客户端 (1) 用户做出了一个...

    概述:Web服务器概念较为广泛,我们最常说的Web服务器指的是网站服务器,它是建立在Internet之上并且驻留在某种计算机上的程序。Web服务器可以向Web客户端(如浏览器)提供文档或其他服务,只要是遵循HTTP协议而设计的网络应用程序都可以是Web客户端。

    Web服务器和HTTP服务器可以说是同一个东西,当然非得细分的话,HTTP服务器是建立在HTTP协议之上的提供文档浏览的服务器,更多的是提供静态的文件。而Web服务器涵盖了HTTP服务器(这一点可以自行百度百科), Web服务器不仅能够存储信息,还能在用户通过Web浏览器提供的信息的基础上运行脚本和程序。
    Web服务器 约等于 HTTP服务器 + 其他服务

    目前所熟知的Web服务器有很多,其最主流的是 Apache, Nginx, IIS
    各大Web服务器的实现细节都不同,是为了某种情形而设计开发的。但是它们的基础工作原理是相同的,这也是本次基础篇所讲解的内容。

    一、Web服务器工作原理图解

    这里写图片描述
    首先我们暂时不考虑HTTP协议的各种请求方式,我们先跟着**(Web服务器工作原理总体描述01)这张图,将一次Web服务的工作流程过一遍,我们假设以浏览器作为客户端
    (1) 用户做出了一个操作,可以是填写网址敲回车,可以是点击链接,可以是点击按键等,接着浏览器获取了该事件。
    (2) 浏览器与对端服务程序建立TCP连接。
    (3) 浏览器将用户的事件
    按照HTTP协议格式**打包成一个数据包,其实质就是在待发送缓冲区中的一段有着HTTP协议格式的字节流。
    (4) 浏览器确认对端可写,并将该数据包推入Internet,该包经过网络最终递交到对端服务程序。
    (5) 服务端程序拿到该数据包后,同样以HTTP协议格式解包,然后解析客户端的意图。
    (6) 得知客户端意图后,进行分类处理,或是提供某种文件、或是处理数据。
    (7) 将结果装入缓冲区,或是HTML文件、或是一张图片等。
    (8) 按照HTTP协议格式将(7)中的数据打包
    (9) 服务器确认对端可写,并将该数据包推入Internet,该包经过网络最终递交到客户端。
    (10) 浏览器拿到包后,以HTTP协议格式解包,然后解析数据,假设是HTML文件。
    (11) 浏览器将HTML文件展示在页面
    以上为Web服务器工作基本原理。其实不难发现,这仅仅只是一个简单的网络通信。我们应该深信,作为一个服务器,其根本的工作无非有三个

    1. 接收数据 2. 发送数据 3. 数据处理
      而Web服务器的本质就是 接收数据 ⇒ HTTP解析 ⇒ 逻辑处理 ⇒ HTTP封包 ⇒ 发送数据
      高级的服务器无非就是将这三个部分更加细致的设计了。

    二、Web服务器之提供静态文件工作原理图解

    Web服务器最主要的功能是提供静态的文件。日常的上网浏览大多是网页浏览,少数时候才会有一些数据的提交操作。因此,我们结合上一张图示来重点讲解在GET请求下的Web服务器工作原理。
    这里写图片描述
    其他流程基本不变,着重在于红色与蓝色部分。
    (1) 当用户点击一个网页链接或浏览器加载一些资源(css,jpg …)时产生。
    (6) 服务程序解包后,确定其为GET请求,并且是对该服务器上的某一资源的请求。首先服务程序会去确认该路径是否存在,再确定该路径的文件是否可以获取。
    (7-1) 如果请求的路径有误,或者该资源不能被用户获取,则返回错误提示页面。很多服务器的错误页面只有404,更专业的应该是将错误分类并返回对应的错误代码页面。
    (7-2) 如果该路径合法且文件可以被获取,那么服务程序将根据该文件类型进行不同的装载过程,记录其类型作为(8)中HTTP协议中对应的返回类型,并加入响应头。

    假设以点击一个页面链接为例,浏览器首先将HTML文件请求过来,再以同样的流程对HTML文件中包含的资源文件路径进行依次请求。
    这里写图片描述

    三、Web服务器之数据提交工作原理图解

    仅仅只是网页的浏览并不能满足所有人的需求,客户端与服务器应当是有数据交互的。
    即使单方面的资源请求任然是网络的主力军。
    我们应该清楚的知道,数据提交对于用户来说有什么作用。
    (1) 资源上传 (2) 登陆验证 (3) API接口调用 (4) 远程指令等
    数据提交使得用户的操作性有了质的飞跃,它使得HTTP短连接获取静态文件的方式提升到了动态交互的层次上。该性质也催化出各式各样的编程语言、框架。例如PHP,JavaWeb。
    如果你留意目前主流的那些大型服务器,你会发现再高级再牛逼的东西实际是也是最基础的东西建造的。那么我们还可以顺便学习一下最古老的动态技术CGI
    这里写图片描述
    其他流程基本不变,着重在于红色与蓝色部分。
    (1) 用户提交数据,假设用户点击一个按键提交填好的信息。在(3)中将以POST格式写入,并填入提交至服务端的可执行程序的路径。
    (6) 服务端将参数与该CGI绑定,复制进程,用管道传递参数和接收结果
    (7) 子进程执行CGI,接收(6)父进程传来的参数,运算完成返回结果。
    最后父进程将结果装入静态模板文件,放入缓冲区

    四、动态技术

    我们得明白,Web服务器是以短连接为主,并且获取的数据到达浏览器的那一刻一定是静态的不变的。那么所谓动态实际是指两种情况

    1. 服务端产生
      (1) 用户POST提交数据到某个程序,程序根据该数据作为参数运行,得出结果并装入静态的模板页面中,返回该静态页面。但对于用户来说,同一个页面,做了一个操作后数据不一样了。好了,这就是动态页面。(CGI原理)
      (2) PHP的原理是,用户GET请求一个php后缀的文件,服务器先执行该php后缀文件中的PHP代码,将结果填入代码的位置,再返回。当然也可以提交数据参与运算再返回。
    2. 客户端产生
      (1) 用户GET请求一个JavaScript文件,服务端不做任何运算返回该静态文件。浏览器收到该JS文件,在本地执行并更新页面。
      (2) 用户POST提交数据到服务端,服务端根据该提交的数据指令返回静态文件,浏览器收到后执行并更新。
    展开全文
  • 电脑主板CPU供电电路原理图解.docx电脑主板CPU供电电路原理图解.docx电脑主板CPU供电电路原理图解.docx电脑主板CPU供电电路原理图解.docx电脑主板CPU供电电路原理图解.docx电脑主板CPU供电电路原理图解.docx电脑主板...
  • 电脑主板CPU供电电路原理图解.pdf电脑主板CPU供电电路原理图解.pdf电脑主板CPU供电电路原理图解.pdf电脑主板CPU供电电路原理图解.pdf电脑主板CPU供电电路原理图解.pdf电脑主板CPU供电电路原理图解.pdf电脑主板CPU...
  • SSL协议的工作原理 图解安全套接字SSL协议的工作原理 1密码学的相关概念 密码学cryptography目的是通过将信息编码使其不可读从而达到安全性明文plain text发送人接受人和任何访问消息的人都能理解的消息密文cipher ...
  • 图解 Git 工作原理

    2021-05-14 00:20:35
    上一篇:3600万中国人在抖音“上清华”链接:http://marklodato.github.io/visual-git-guide/index-zh-cn.html 本文图解Git中的...

    上一篇:3600万中国人在抖音“上清华”

    链接:http://marklodato.github.io/visual-git-guide/index-zh-cn.html
    

    本文图解Git中的最常用命令。如果你稍微理解Git的工作原理,这篇文章能够让你理解的更透彻。

    基本用法

    上面的四条命令在工作目录、暂存目录(也叫做索引)和仓库之间复制文件。

    • git add files把当前文件放入暂存区域。

    • git commit给暂存区域生成快照并提交。

    • git reset – files用来撤销最后一次git add files,你也可以用git reset撤销所有暂存区域文件。

    • git checkout – files把文件从暂存区域复制到工作目录,用来丢弃本地修改。

    你可以用git reset -p,git checkout -p,or git add -p进入交互模式。

    也可以跳过暂存区域直接从仓库取出文件或者直接提交代码。

    • git commit -a相当于运行git add把所有当前目录下的文件加入暂存区域再运行。

    • git commit files进行一次包含最后一次提交加上工作目录中文件快照的提交。并且文件被添加到暂存区域。

    • git checkout HEAD – files回滚到复制最后一次提交。

    约定

    后文中以下面的形式使用图片。

    绿色的5位字符表示提交的ID,分别指向父节点。分支用橘色显示,分别指向特定的提交。当前分支由附在其上的HEAD标识。这张图片里显示最后5次提交,ed489是最新提交。master分支指向此次提交,另一个maint分支指向祖父提交节点。

    命令详解

    Diff

    有许多种方法查看两次提交之间的变动,下面是一些示例。

    Commit

    提交时,Git用暂存区域的文件创建一个新的提交,并把此时的节点设为父节点。然后把当前分支指向新的提交节点。下图中,当前分支是master。在运行命令之前,master指向ed489,提交后,master指向新的节点f0cec并以ed489作为父节点。

    即便当前分支是某次提交的祖父节点,git会同样操作。下图中,在master分支的祖父节点maint分支进行一次提交,生成了1800b。这样,maint分支就不再是master分支的祖父节点。此时,合并[1](或者衍合[2])是必须的。

    如果想更改一次提交,使用git commit –amend。Git会使用与当前提交相同的父节点进行一次新提交,旧的提交会被取消。

    另一个例子是分离HEAD提交[3],后文讲。

    Checkout

    Checkout命令用于从历史提交(或者暂存区域)中拷贝文件到工作目录,也可用于切换分支。

    当给定某个文件名(或者打开-p选项,或者文件名和-p选项同时打开)时,Git会从指定的提交中拷贝文件到暂存区域和工作目录。比如,git checkout HEAD~ foo.c会将提交节点HEAD~(即当前提交节点的父节点)中的foo.c复制到工作目录并且加到暂存区域中。(如果命令中没有指定提交节点,则会从暂存区域中拷贝内容。)注意当前分支不会发生变化。

    当不指定文件名,而是给出一个(本地)分支时,那么HEAD标识会移动到那个分支(也就是说,我们“切换”到那个分支了),然后暂存区域和工作目录中的内容会和HEAD对应的提交节点一致。新提交节点(下图中的a47c3)中的所有文件都会被复制(到暂存区域和工作目录中);只存在于老的提交节点(ed489)中的文件会被删除;不属于上述两者的文件会被忽略,不受影响。

    如果既没有指定文件名,也没有指定分支名,而是一个标签、远程分支、SHA-1值或者是像master~3类似的东西,就得到一个匿名分支,称作detached HEAD(被分离的HEAD标识)。这样可以很方便地在历史版本之间互相切换。比如说你想要编译1.6.6.1版本的Git,你可以运行git checkout v1.6.6.1(这是一个标签,而非分支名),编译,安装,然后切换回另一个分支,比如说git checkout master。然而,当提交操作涉及到“分离的HEAD”时,其行为会略有不同,详情见在下面。

    HEAD标识处于分离状态时的提交操作

    当HEAD处于分离状态(不依附于任一分支)时,提交操作可以正常进行,但是不会更新任何已命名的分支。(你可以认为这是在更新一个匿名分支。)

    一旦此后你切换到别的分支,比如说master,那么这个提交节点(可能)再也不会被引用到,然后就会被丢弃掉了。注意这个命令之后就不会有东西引用2eecb。

    但是,如果你想保存这个状态,可以用命令git checkout -b name来创建一个新的分支。

    Reset

    Reset命令把当前分支指向另一个位置,并且有选择的变动工作目录和索引。也用来在从历史仓库中复制文件到索引,而不动工作目录。

    如果不给选项,那么当前分支指向到那个提交。如果用–hard选项,那么工作目录也更新,如果用–soft选项,那么都不变。

    如果没有给出提交点的版本号,那么默认用HEAD。这样,分支指向不变,但是索引会回滚到最后一次提交,如果用–hard选项,工作目录也同样。

    如果给了文件名(或者-p选项),那么工作效果和带文件名的checkout差不多,除了索引被更新。

    Merge

    Merge命令把不同分支合并起来。合并前,索引必须和当前提交相同。如果另一个分支是当前提交的祖父节点,那么合并命令将什么也不做。另一种情况是如果当前提交是另一个分支的祖父节点,就导致fast-forward合并。指向只是简单的移动,并生成一个新的提交。

    否则就是一次真正的合并。默认把当前提交(ed489 如下所示)和另一个提交(33104)以及他们的共同祖父节点(b325c)进行一次三方合并[4]。结果是先保存当前目录和索引,然后和父节点33104一起做一次新提交。

    Cherry Pick

    cherry-pick命令“复制”一个提交节点并在当前分支做一次完全一样的新提交。

    Rebase

    衍合是合并命令的另一种选择。合并把两个父分支合并进行一次提交,提交历史不是线性的。衍合在当前分支上重演另一个分支的历史,提交历史是线性的。本质上,这是线性化的自动的 cherry-pick。

    上面的命令都在topic分支中进行,而不是master分支,在master分支上重演,并且把分支指向新的节点。注意旧提交没有被引用,将被回收。

    要限制回滚范围,使用–onto选项。下面的命令在master分支上重演当前分支从169a6以来的最近几个提交,即2c33a。

    同样有git rebase –interactive让你更方便的完成一些复杂操作,比如丢弃、重排、修改、合并提交。没有图片体现这些,细节看这里:git-rebase(1)[5]。

    技术说明

    文件内容并没有真正存储在索引(.git/index)或者提交对象中,而是以blob的形式分别存储在数据库中(.git/objects),并用SHA-1值来校验。索引文件用识别码列出相关的blob文件以及别的数据。对于提交来说,以树(tree)的形式存储,同样用对于的哈希值识别。树对应着工作目录中的文件夹,树中包含的 树或者blob对象对应着相应的子目录和文件。每次提交都存储下它的上一级树的识别码。

    如果用detached HEAD提交,那么最后一次提交会被the reflog for HEAD引用。但是过一段时间就失效,最终被回收,与git commit –amend或者git rebase很像。

    相关链接:

    1. http://marklodato.github.io/visual-git-guide/index-zh-cn.html#merge

    2. http://marklodato.github.io/visual-git-guide/index-zh-cn.html#rebase

    3. http://marklodato.github.io/visual-git-guide/index-zh-cn.html#detached

    4. http://en.wikipedia.org/wiki/Three-way_merge

    5. http://www.kernel.org/pub/software/scm/git/docs/git-rebase.html#_interactive_mode

    看完这篇文章,你有什么收获?欢迎在留言区与10w+Java开发者一起讨论~

    关注微信公众号:互联网架构师,在后台回复:2T,可以获取我整理的教程,都是干货。


    猜你喜欢

    1、GitHub 标星 3.2w!史上最全技术人员面试手册!FackBoo发起和总结

    2、如何才能成为优秀的架构师?

    3、从零开始搭建创业公司后台技术栈

    4、程序员一般可以从什么平台接私活?

    5、37岁程序员被裁,120天没找到工作,无奈去小公司,结果懵了...

    6、滴滴业务中台构建实践,首次曝光

    7、不认命,从10年流水线工人,到谷歌上班的程序媛,一位湖南妹子的励志故事

    8、15张图看懂瞎忙和高效的区别

    9、2T架构师学习资料干货分享

    展开全文
  • 电脑主板 CPU 供电电路原理图解 一多相供电模块的优点 可以提供更大的电流单相供电最大能提供 25A 的电流相对现在主流的处 理器来说单相供电无法提供足够可靠的动力所以现在主板的供电电路设计都 采用了两相甚至多相...
  • 干货化工厂常见的十四种设备结构及原理动态图解.pdf干货化工厂常见的十四种设备结构及原理动态图解.pdf干货化工厂常见的十四种设备结构及原理动态图解.pdf干货化工厂常见的十四种设备结构及原理动态图解.pdf干货化工...
  • 干货化工厂常见的十四种设备结构及原理动态图解.docx干货化工厂常见的十四种设备结构及原理动态图解.docx干货化工厂常见的十四种设备结构及原理动态图解.docx干货化工厂常见的十四种设备结构及原理动态图解.docx干货...
  • 三、LVS基本工作原理   当用户向负载均衡调度器(Director Server)发起请求,调度器将请求发往至内核空间。 PREROUTING链首先会接收到用户请求,判断目标IP确定是本机IP,将数据包发往INPUT链。 ...

    一、LVS简介

    LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器,是一个由章文嵩博士发起的自由软件项目,官方站点是:http://www.linuxvirtualserver.org。现在LVS已经是Linux标准内核的一部分,在Linux2.4内核以前,使用LVS时必须重新编译内核以支持LVS功能模块,但是从Linux2.4内核心之后,已经完全内置了LVS的各个功能模块,无需给内核打任何补丁,可以直接使用LVS提供的各种功能。

    使用LVS技术要达到的目标是:通过LVS提供的负载均衡技术和Linux操作系统实现一个高性能,高可用的服务器群集,它具有良好的可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的服务性能。

    二、LVS体系架构

    使用LVS架设的服务器集群系统有三个部分组成:最前端的负载均衡层(Loader Balancer),中间的服务器群组层,用Server Array表示,最底层的数据共享存储层,用Shared Storage表示。在用户看来所有的应用都是透明的,用户只是在使用一个虚拟服务器提供的高性能服务。

    LVS的体系架构如图:

     

    LVS的各个层次的详细介绍:

    Load Balancer层:位于整个集群系统的最前端,有一台或者多台负载调度器(Director Server)组成,LVS模块就安装在Director Server上,而Director的主要作用类似于一个路由器,它含有完成LVS功能所设定的路由表,通过这些路由表把用户的请求分发给Server Array层的应用服务器(Real Server)上。同时,在Director Server上还要安装对Real Server服务的监控模块Ldirectord,此模块用于监测各个Real Server服务的健康状况。在Real Server不可用时把它从LVS路由表中剔除,恢复时重新加入。

    Server Array层:由一组实际运行应用服务的机器组成,Real Server可以是WEB服务器、MAIL服务器、FTP服务器、DNS服务器、视频服务器中的一个或者多个,每个Real Server之间通过高速的LAN或分布在各地的WAN相连接。在实际的应用中,Director Server也可以同时兼任Real Server的角色。

    Shared Storage层:是为所有Real Server提供共享存储空间和内容一致性的存储区域,在物理上,一般有磁盘阵列设备组成,为了提供内容的一致性,一般可以通过NFS网络文件系统共享数 据,但是NFS在繁忙的业务系统中,性能并不是很好,此时可以采用集群文件系统,例如Red hat的GFS文件系统,oracle提供的OCFS2文件系统等。

    从整个LVS结构可以看出,Director Server是整个LVS的核心,目前,用于Director Server的操作系统只能是Linux和FreeBSD,linux2.6内核不用任何设置就可以支持LVS功能,而FreeBSD作为 Director Server的应用还不是很多,性能也不是很好。对于Real Server,几乎可以是所有的系统平台,Linux、windows、Solaris、AIX、BSD系列都能很好的支持。

    三、LVS基本工作原理

     

    1. 当用户向负载均衡调度器(Director Server)发起请求,调度器将请求发往至内核空间。
    2. PREROUTING链首先会接收到用户请求,判断目标IP确定是本机IP,将数据包发往INPUT链。
    3. IPVS是工作在INPUT链上的,当用户请求到达INPUT时,IPVS会将用户请求和自己已定义好的集群服务进行比对,如果用户请求的就是定义的集群服务,那么此时IPVS会强行修改数据包里的目标IP地址及端口,并将新的数据包发往POSTROUTING链。
    4. POSTROUTING链接收数据包后发现目标IP地址刚好是自己的后端服务器,那么此时通过选路,将数据包最终发送给后端的服务器。

    三、LVS组成

    LVS 由2部分程序组成,包括 ipvs 和 ipvsadm。

    1. IPVS(ip virtual server):一段代码工作在内核空间,叫IPVS,是真正生效实现调度的代码。IPVS的总体结构主要由IP包处理、负载均衡算法、系统配置与管理三个模块及虚拟服务器与真实服务器链表组成。
    2. ipvsadm:另外一段是工作在用户空间,叫ipvsadm,即IPVS管理器,负责为ipvs内核框架编写规则,定义谁是集群服务,而谁是后端真实的服务器(Real Server)。

    四、LVS技术术语

    • DS:Director Server。指的是前端负载均衡器节点。
    • RS:Real Server。后端真实的工作服务器。
    • VIP:Virtual IP,向外部直接面向用户请求,作为用户请求的目标的IP地址。
    • DIP:Director Server IP,主要用于和内部主机通讯的IP地址。
    • RIP:Real Server IP,后端服务器的IP地址。
    • CIP:Client IP,访问客户端的IP地址。

    五、LVS工作模式和原理

    5.1、NAT模式

    5.1.1、NAT模式工作原理

     

    1. 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP。
    2. PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链。
    3. IPVS比对数据包请求的服务是否为集群服务,若是,修改数据包的目标IP地址为后端服务器IP,然后将数据包发至POSTROUTING链。 此时报文的源IP为CIP,目标IP为RIP。
    4. POSTROUTING链通过选路,将数据包发送给Real Server
    5. Real Server比对发现目标为自己的IP,开始构建响应报文发回给Director Server。 此时报文的源IP为RIP,目标IP为CIP。
    6. Director Server在响应客户端前,此时会将源IP地址修改为自己的VIP地址,然后响应给客户端。 此时报文的源IP为VIP,目标IP为CIP。

    5.1.2、NAT特性

    • RIP最好是内网IP
    • RS的网关必须指向DIP。
    • DIP和RIP必须在同一个网段内。
    • 请求和回应的报文都必须经过director,director容易成为瓶颈。
    • nat支持端口转发。

    5.2、DR模式

    5.2.1、DR模式工作原理

    1. 首先用户用CIP请求VIP。
    2. 根据上图可以看到,不管是Director Server还是Real Server上都需要配置相同的VIP,那么当用户请求到达我们的集群网络的前端路由器的时候,请求数据包的源地址为CIP目标地址为VIP,此时路由器会发广播问谁是VIP,那么我们集群中所有的节点都配置有VIP,此时谁先响应路由器那么路由器就会将用户请求发给谁,这样一来我们的集群系统是不是没有意义了,那我们可以在网关路由器上配置静态路由指定VIP就是Director Server,或者使用一种机制不让Real Server 接收来自网络中的ARP地址解析请求,这样一来用户的请求数据包都会经过Director Servrer。
    3. 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP。
    4.  PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链。
    5.  IPVS比对数据包请求的服务是否为集群服务,若是,将请求报文中的源MAC地址修改为DIP的MAC地址,将目标MAC地址修改RIP的MAC地址,然后将数据包发至POSTROUTING链。 此时的源IP和目的IP均未修改,仅修改了源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址
    6.  由于DS和RS在同一个网络中,所以是通过二层来传输。POSTROUTING链检查目标MAC地址为RIP的MAC地址,那么此时数据包将会发至Real Server。
    7.  RS发现请求报文的MAC地址是自己的MAC地址,就接收此报文。处理完成之后,将响应报文通过lo接口传送给eth0网卡然后向外发出。 此时的源IP地址为VIP,目标IP为CIP
    8. 响应报文最终送达至客户端。

    5.2.2、配置DR有三种方式:

    第一种方式:

    在路由器上明显说明vip对应的地址一定是Director上的MAC,只要绑定,以后再跟vip通信也不用再请求了,这个绑定是静态的,所以它也不会失效,也不会再次发起请求,但是有个前提,我们的路由设备必须有操作权限能够绑定MAC地址,万一这个路由器是运行商操作的,我们没法操作怎么办?第一种方式固然很简便,但未必可行。

    第二种方式:

    在给别主机上(例如:红帽)它们引进的有一种程序arptables,它有点类似于iptables,它肯定是基于arp或基于MAC做访问控制的,很显然我们只需要在每一个real server上定义arptables规则,如果用户arp广播请求的目标地址是本机的vip则不予相应,或者说相应的报文不让出去,很显然网关(gateway)是接受不到的,也就是director相应的报文才能到达gateway,这个也行。第二种方式我们可以基于arptables。

    第三种方式:

    在相对较新的版本中新增了两个内核参数(kernelparameter),第一个是arp_ignore定义接受到ARP请求时的相应级别;第二个是arp_announce定义将自己地址向外通告时的通告级别。【提示:很显然我们现在的系统一般在内核中都是支持这些参数的,我们用参数的方式进行调整更具有朴实性,它还不依赖于额外的条件,像arptables,也不依赖外在路由配置的设置,反而通常我们使用的是第三种配置】

    arp_ignore:定义接受到ARP请求时的相应级别

    0:  只要本地配置的有相应地址,就给予响应。(默认)

    1:  仅回应目标IP地址是本地的入网地址的arp请求。

    2:  仅回应目标IP地址是本地的入网地址,而且源IP和目标IP在同一个子网的arp请   求。

    3:  不回应该网络界面的arp请求,而只对设置的唯一和连接地址做出回应

    4-7:保留未使用

    8:  不回应所有的arp请求。

    arp_announce:定义将自己地址向外通告是的通告级别;

    0:    将本地任何接口上的任何地址向外通告

    1:  试图仅向目标网络通告与其网络匹配的地址

    2:  仅向与本地接口上地址匹配的网络进行通告

    5.2.3、DR特性

    • 特点1:保证前端路由将目标地址为VIP报文统统发给Director Server,而不是RS。
    • Director和RS的VIP为同一个VIP。
    • RS可以使用私有地址;也可以是公网地址,如果使用公网地址,此时可以通过互联网对RIP进行直接访问。
    • RS跟Director Server必须在同一个物理网络中。
    • 所有的请求报文经由Director Server,但响应报文必须不能进过Director Server。
    • 不支持地址转换,也不支持端口映射
    • RS可以是大多数常见的操作系统
    • RS的网关绝不允许指向DIP(因为我们不允许他经过director)
    • RS上的lo接口配置VIP的IP地址
    • DR模式是市面上用得最广的。
    • 缺陷:RS和DS必须在同一机房中

    补充:特点1的解决方法

    1. 在前端路由器做静态地址路由绑定,将对于VIP的地址仅路由到Director Server。存在问题:用户未必有路由操作权限,因为有可能是运营商提供的,所以这个方法未必实用。
    2. arptables:在arp的层次上实现在ARP解析时做防火墙规则,过滤RS响应ARP请求。这是由iptables提供的。
    3. 修改RS上内核参数(arp_ignore和arp_announce)将RS上的VIP配置在lo接口的别名上,并限制其不能响应对VIP地址解析请求。

    5.3、Tunnel模式

    5.3.1、Tunnel模式工作原理

    1. 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP 。
    2. PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链。
    3. IPVS比对数据包请求的服务是否为集群服务,若是,在请求报文的首部再次封装一层IP报文,封装源IP为为DIP,目标IP为RIP。然后发至POSTROUTING链。 此时源IP为DIP,目标IP为RIP。
    4. POSTROUTING链根据最新封装的IP报文,将数据包发至RS(因为在外层封装多了一层IP首部,所以可以理解为此时通过隧道传输)。 此时源IP为DIP,目标IP为RIP。
    5. RS接收到报文后发现是自己的IP地址,就将报文接收下来,拆除掉最外层的IP后,会发现里面还有一层IP首部,而且目标是自己的lo接口VIP,那么此时RS开始处理此请求,处理完成之后,通过lo接口送给eth0网卡,然后向外传递。 此时的源IP地址为VIP,目标IP为CIP
    6. 响应报文最终送达至客户端

    5.3.2、Tunnel模式特性

    • RIP、VIP、DIP全是公网地址。
    • RS的网关不会也不可能指向DIP
    • 所有的请求报文经由Director Server,但响应报文必须不能进过Director Server
    • 不支持端口映射
    • RS的系统必须支持隧道

    六、LVS的调度算法


     

    固定调度算法:rr,wrr,dh,sh

    动态调度算法:wlc,lc,lblc,lblcr

    固定调度算法:即调度器不会去判断后端服务器的繁忙与否,一如既往得将请求派发下去。

    动态调度算法:调度器会去判断后端服务器的繁忙程度,然后依据调度算法动态得派发请求。

    6.1、rr:轮询(round robin)

    这种算法是最简单的,就是按依次循环的方式将请求调度到不同的服务器上,该算法最大的特点就是简单。轮询算法假设所有的服务器处理请求的能力都是一样的,调度器会将所有的请求平均分配给每个真实服务器,不管后端 RS 配置和处理能力,非常均衡地分发下去。这个调度的缺点是,不管后端服务器的繁忙程度是怎样的,调度器都会讲请求依次发下去。如果A服务器上的请求很快请求完了,而B服务器的请求一直持续着,将会导致B服务器一直很忙,而A很闲,这样便没起到均衡的左右。

    6.2、wrr:加权轮询(weight round robin)

    这种算法比 rr 的算法多了一个权重的概念,可以给 RS 设置权重,权重越高,那么分发的请求数越多,权重的取值范围 0 – 100。主要是对rr算法的一种优化和补充, LVS 会考虑每台服务器的性能,并给每台服务器添加要给权值,如果服务器A的权值为1,服务器B的权值为2,则调度到服务器B的请求会是服务器A的2倍。权值越高的服务器,处理的请求越多。

    6.3、dh:目标地址散列调度算法 (destination hash)

    简单的说,即将同一类型的请求分配给同一个后端服务器,例如将以 .jgp、.png等结尾的请求转发到同一个节点。这种算法其实不是为了真正意义的负载均衡,而是为了资源的分类管理。这种调度算法主要应用在使用了缓存节点的系统中,提高缓存的命中率。

    6.4、sh:源地址散列调度算法(source hash)

    即将来自同一个ip的请求发给后端的同一个服务器,如果后端服务器工作正常没有超负荷的话。这可以解决session共享的问题,但是这里有个问题,很多企业、社区、学校都是共用的一个IP,这将导致请求分配的不均衡。

    6.5、lc:最少连接数(least-connection)

    这个算法会根据后端 RS 的连接数来决定把请求分发给谁,比如 RS1 连接数比 RS2 连接数少,那么请求就优先发给 RS1。这里问题是无法做到会话保持,即session共享。

    6.6、wlc:加权最少连接数(weight least-connection)

    这个比最少连接数多了一个加权的概念,即在最少连接数的基础上加一个权重值,当连接数相近,权重值越大,越优先被分派请求。

    6.7、lblc:基于局部性的最少连接调度算法(locality-based least-connection)

    将来自同一目的地址的请求分配给同一台RS如果这台服务器尚未满负荷,否则分配给连接数最小的RS,并以它为下一次分配的首先考虑。

    6.8、lblcr:基于地址的带重复最小连接数调度 (Locality-Based Least-Connection with Replication)

    这个用得少,可以略过。

    七、LVS部署


     

    7.1、ipvsadm命令详解

    ipvsadm是ipvs的管理器,需要yum安装。

    基本用法:

    ipvsadm COMMAND [protocol] service-address [scheduling-method] [persistence options]

    ipvsadm COMMAND [protocol] service-address server-address [packet-forwarding-method] [weight options]

    第一条命令用于向LVS系统中添加一个用于负载均衡的virtual server(VS);第二条命令用来修改已经存在的VS的配置,service address用来指定涉及的虚拟服务即虚拟地址,server-address指定涉及的真实地址。

     

    命令参数:

    -A, --add-service:     为ipvs虚拟服务器添加一个虚拟服务,即添加一个需要被负载均衡的虚拟地址。虚拟地址需要是ip地址,端口号,协议的形式。

    -E, --edit-service:     修改一个虚拟服务。

    -D, --delete-service: 删除一个虚拟服务。

    -C, --clear:               清除所有虚拟服务。

    -R, --restore:            从标准输入获取ipvsadm命令。一般结合下边的-S使用。

    -S, --save:                从标准输出输出虚拟服务器的规则。可以将虚拟服务器的规则保存,在以后通过-R直接读入,以实现自动化配置。

    -a, --add-server:      为虚拟服务添加一个real server(RS)

    -e, --edit-server:      修改RS

    -d, --delete-server:  删除

    -L, -l, --list:              列出虚拟服务表中的所有虚拟服务。可以指定地址。添加-c显示连接表。

    -Z, --zero:               将所有数据相关的记录清零。这些记录一般用于调度策略。

    --set tcp tcpfin udp:修改协议的超时时间。

    --start-daemon state:设置虚拟服务器的备服务器,用来实现主备服务器冗余。(注:该功能只支持ipv4)

    --stop-daemon:      停止备服务器。

    -h, --help:               帮助。

     

    参数:以下参数可以接在上边的命令后边。

    -t, --tcp-service service-address: 

    指定虚拟服务为tcp服务。service-address要是host[:port]的形式。端口是0表示任意端口。如果需要将端口设置为0,还需要加上-p选项(持久连接)。

    -u, --udp-service service-address:

    使用udp服务,其他同上。

    -f, --fwmark-service integer:         

    用firewall mark取代虚拟地址来指定要被负载均衡的数据包,可以通过这个命令实现把不同址、端口的虚拟地址整合成一个虚拟服务,可以让虚拟服务器同时截获处理去往多个不同地址的数据包。fwmark可以通过iptables命令指定。如果用在ipv6需要加上-6。

    -s, --scheduler scheduling-method:

    指定调度算法。调度算法可以指定以下8种:rr(轮询),wrr(权重),lc(最后连接),wlc(权重),lblc(本地最后连接),lblcr(带复制的本地最后连接),dh(目的地址哈希),sh(源地址哈希),sed(最小期望延迟),nq(永不排队)

    -p, --persistent [timeout]:             

    设置持久连接,这个模式可以使来自客户的多个请求被送到同一个真实服务器,通常用于ftp或者ssl中。

    -M, --netmask netmask:               

    指定客户地址的子网掩码。用于将同属一个子网的客户的请求转发到相同服务器。

    -r, --real-server server-address:  

    为虚拟服务指定数据可以转发到的真实服务器的地址。可以添加端口号。如果没有指定端口号,则等效于使用虚拟地址的端口号。

    [packet-forwarding-method]:

    此选项指定某个真实服务器所使用的数据转发模式。需要对每个真实服务器分别指定模式。

    -g, --gatewaying:              使用网关(即直接路由),此模式是默认模式。

    -i, --ipip:                            使用ipip隧道模式。

    -m, --masquerading:         使用NAT模式。

    -w, --weight weight:                         

    设置权重。权重是0~65535的整数。如果将某个真实服务器的权重设置为0,那么它不会收到新的连接,但是已有连接还会继续维持(这点和直接把某个真实服务器删除时不同的)。

    -x, --u-threshold uthreshold:        

    设置一个服务器可以维持的连接上限。0~65535。设置为0表示没有上限。

    -y, --l-threshold lthreshold:           

    设置一个服务器的连接下限。当服务器的连接数低于此值的时候服务器才可以重新接收连接。如果此值未设置,则当服务器的连接数连续三次低于uthreshold时服务器才可以接收到新的连接。(PS:笔者以为此设定可能是为了防止服务器在能否接收连接这两个状态上频繁变换)

    --mcast-interface interface:         

    指定使用备服务器时候的广播接口。

    --syncid syncid:                           

    指定syncid,同样用于主备服务器的同步。

    以下选项用于list命令:

    -c, --connection:                           

    列出当前的IPVS连接。

    --timeout:                                     

    列出超时

    --daemon:

    --stats:                                         

    状态信息

    --rate:                                           

    传输速率

    --thresholds:                               

    列出阈值

    --persistent-conn:                       

    坚持连接

    --sor:                                           

    把列表排序。

    --nosort:                                     

    不排序

    -n, --numeric:                             

    不对ip地址进行dns查询

    --exact:                                       

    单位

    -6:                                               

    如果fwmark用的是ipv6地址需要指定此选项。     

    其他注意事项:

    1.  如果使用IPv6地址,需要在地址两端加上“[]”。例如:ipvsadm -A -t [2001:db8::80]:80 -s rr
    2.  可以通过设置以下虚拟文件的值来防御DoS攻击:/proc/sys/net/ipv4/vs/drop_entry /proc/sys/net/ipv4/vs/drop_packet /proc/sys/net/ipv4/vs/secure_tcp
    3. 对于某一目的地址,对应有一个RS子集。对此地址的请求,为它分配子集中连接数最小的RS;如果子集中所有的服务器均已满负荷,则从集群中选择一个连接数较小的服务器,将它加入到此子集并分配连接;若一定时间内,这个子集未被做任何修改,则将子集中负载最大的节点从子集删除。

    7.2、NAT模式测试

    1)测试环境:

    Director:         centos 6.8      VIP:192.168.1.111

                                                    DIP:192.168.229.133

    RealServer1: centos6.8        RIP:192.168.229.132

    RealServer2: centos6.8        RIP:192.168.229.134

    2)Director配置

    安装ipvsadm:

    [root@ShiYanLou LVS]# yum install ipvsadm –y

    编辑脚本:/LVS/install.sh

    #director设置 nat 防火墙
    iptables -t nat -F
    
    #!/bin/bash
    VIP=192.168.1.111
    DIP=192.168.229.133
    RIP1=192.168.229.132
    RIP2=192.168.229.134
    # director服务器上开启路由转发功能:
    echo 1 > /proc/sys/net/ipv4/ip_forward
    # 关闭 icmp 的重定向
    echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
    echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
    echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects
    echo 0 > /proc/sys/net/ipv4/conf/eth1/send_redirects
    # director设置 ipvsadm
    IPVSADM='/sbin/ipvsadm'
    $IPVSADM -C
    $IPVSADM -A -t $VIP:80 -s rr
    $IPVSADM -a -t $VIP:80 -r $RIP1:80 -m
    $IPVSADM -a -t $VIP:80 -r $RIP2:80 -m

     

    3)RealServer配置

    1. 配置RealServer1和RealServer2的网关为DIP。如:

       

      vi /etc/sysconfig/network-scripts/ifcfg-eth0
      DEVICE=eth0
      HWADDR=00:0C:29:46:3B:8C
      TYPE=Ethernet
      UUID=e2fa0e51-7240-4ef9-8572-bf82ef8bb6a8
      ONBOOT=yes
      NM_CONTROLLED=yes
      BOOTPROTO=static
      IPADDR=192.168.229.132
      NETMASK=255.255.255.0
      GATEWAY=192.168.229.133                #配置网关为DIP

       

    2. 安装httpd
      yum –y install httpd
      标记网页:
      RealServer1:echo ”I am RealServer1 192.168.229.132”>/var/www/html/index.html
      RealServer2:echo “I am RealServer2 192.168.229.134”>/var/www/html/index.html

    4)验证

    多次访问http://192.168.1.111

    会轮询得到“I am RealServer1 192.168.229.132”“I am RealServer2 192.168.229.134”

    注意:关闭Director的防火墙iptables,不然访问不成功。

    7.3、DR模式测试

    1)测试环境

    Director:        centos 6.8        VIP:eth0:0:192.168.229.111

                                                     DIP:eth0:192.168.229.133

    RealServer1: centos6.8        RIP:eth0:192.168.229.132

                                                     VIP:lo:0:192.168.229.111

    RealServer2: centos6.8        RIP:eth0:192.168.229.134

                                                     VIP:lo:0:192.168.229.111

    2)Director配置

    脚本如下:

     

    #! /bin/bash
    echo 1 > /proc/sys/net/ipv4/ip_forward
    ipv=/sbin/ipvsadm
    vip=192.168.229.111
    rs1=192.168.229.132
    rs2=192.168.229.134
    ifconfig eth0:0 down
    ifconfig eth0:0 $vip broadcast $vip netmask 255.255.255.0 up
    route add -host $vip dev eth0:0
    $ipv -C
    $ipv -A -t $vip:80 -s rr
    $ipv -a -t $vip:80 -r $rs1:80 -g
    $ipv -a -t $vip:80 -r $rs2:80 –g

     

     

    3)RealServer配置

    脚本如下:

     

     

    #!/bin/bash
    vip=192.168.229.111
    ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
    route add -host $vip lo:0
    echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
    echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
    echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
    echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce

     

     

    4)验证

    多次访问http://192.168.1.111

    会轮询得到“I am RealServer1 192.168.229.132”  “I am RealServer2 192.168.229.134”

    注意:关闭Director的防火墙iptables,不然访问不成功。

    7.4、Tun模式测试

    1)测试环境

    Director:        centos 6.8        VIP:eth0:0:192.168.299.111

                                                     DIP:eth0:192.168.229.133

    RealServer1: centos6.8        RIP:eth0:192.168.229.132

                                                     VIP:tunl0:192.168.229.111

    RealServer2: centos6.8        RIP:eth0:192.168.229.134

                                                     VIP:tunl0:192.168.229.111

    2)Director配置

    脚本如下:

     

     

    #! /bin/bash
    echo 1 > /proc/sys/net/ipv4/ip_forward
    ipv=/sbin/ipvsadm
    vip=192.168.229.111
    rs1=192.168.229.132
    rs2=192.168.229.134
    ifconfig eth0:0 down
    ifconfig eth0:0 $vip broadcast $vip netmask 255.255.255.0 up
    route add -host $vip dev eth0:0
    iptables -t nat -F
    setenforce 0
    $ipv -C
    $ipv -A -t $vip:80 -s rr
    $ipv -a -t $vip:80 -r $rs1:80 -i
    $ipv -a -t $vip:80 -r $rs2:80 -i

     

     

    3)RealServer配置

    a、加载ipip模块

    [root@ulife3test LVS]# modprobe ipip

    b、配置VIP:

     

     

    [root@ulife3test LVS]# cd /etc/sysconfig/network-scripts/
    [root@ulife3test network-scripts]# cp ifcfg-lo ifcfg-tunl0
    [root@ulife3test network-scripts]# vi ifcfg-tunl0
    DEVICE=tunl0
    IPADDR=192.168.229.111
    NETMASK=255.255.255.0
    ONBOOT=yes
    NAME=tunl0
    [root@ulife3test network-scripts]# service network restart

     

     

    c、关闭arp转发:

     

    [root@ulife3test network-scripts]# echo '0'>/proc/sys/net/ipv4/ip_forward
    [root@ulife3test network-scripts]# vi /etc/sysctl.conf                #加入以下行
    net.ipv4.conf.tunl0.arp_ignore = 1
    net.ipv4.conf.tunl0.arp_announce = 2
    net.ipv4.conf.all.arp_ignore = 1
    net.ipv4.conf.all.arp_announce = 2
    net.ipv4.conf.tunl0.rp_filter = 0
    net.ipv4.conf.all.rp_filter = 0
    [root@ulife3test network-scripts]# sysctl -p                           #永久生效
    net.ipv4.ip_forward = 0
    net.ipv4.conf.default.rp_filter = 1
    net.ipv4.conf.default.accept_source_route = 0
    kernel.sysrq = 0
    kernel.core_uses_pid = 1
    net.ipv4.tcp_syncookies = 1
    net.ipv4.conf.tunl0.arp_ignore = 1
    net.ipv4.conf.tunl0.arp_announce = 2
    net.ipv4.conf.all.arp_ignore = 1
    net.ipv4.conf.all.arp_announce = 2
    net.ipv4.conf.tunl0.rp_filter = 0
    net.ipv4.conf.all.rp_filter = 0

     

     

    d、关闭selinux

    setenforce 0或者修改/etc/selinux/config 配置文件中SELINUX=disabled然后重启系统。

    4)验证

    多次访问http://192.168.1.111

    会轮询得到“I am RealServer1 192.168.229.132”“I am RealServer2 192.168.229.134”

    注意:关闭Director的防火墙iptables,不然访问不成功。

    展开全文
  • Java反射原理图解

    2020-08-20 10:32:16
    利用反射技术获取类的属性、方法、构造函数 获取类的属性和方法 感谢 博主在此给大家安利一款分享学习资料的app,此app的主要目的就是收集互联网上的各种学习资料做整合并免费分享。里面涵盖了Android、java、python...
  • 图解LVS的工作原理

    万次阅读 多人点赞 2018-05-14 22:46:30
    LVS内核工作模型 LVS常见术语 LVS模式介绍 NAT模式 DR模式 其他模式 LVS调度算法介绍 LVS的部署 NAT模式的实现 DR模式的实现 调度器配置 WEB后端服务器配置 实验测试 ...
  • 图解:Ping 命令的工作原理

    千次阅读 2021-03-26 15:37:27
    二、ping —— 工作原理分析 1、打个 ICMP 数据包 - 网络层 2、打个 IP 数据包 - 网络层: 3、加入 Mac 头信息 - 数据链路层 4、接收端 拆解包:物理层-数据链路层-网络层 5、接收端 构建响应包,返回给发送端 ...
  • 【集群】图解 LVS-NAT工作原理

    千次阅读 2020-12-12 17:22:19
    lVS工作原理 客户端发来的数据包的IP头的目的地址,在负载均衡器上换成其中一台RS的IP地址,并发至此RS来处理。 RS处理完成后把数据交给经过负载均衡器,负载均衡器再把数据包的原IP地址改为自己的IP,将目的地址改为...
  • Docker原理图解+秒懂+史上最全)

    万次阅读 多人点赞 2021-10-13 17:00:46
    (面试必备) 4: 面试必备:秒杀超卖 解决方案 (史上最全) 5:面试必备之:Reactor模式 6: 10分钟看懂, Java NIO 底层原理 7:TCP/IP(图解+秒懂+史上最全) 8:Feign原理图解) 9:DNS图解(秒懂 + 史上最全 + ...
  • 网站工作原理,你搞懂了吗?

    千次阅读 2021-02-19 22:24:31
    网站工作原理,你搞懂了吗?网站工作原理输入网站地址,按下回车会发生啥?1. DNS解析2. TCP连接2.1 TCP介绍3. 发送HTTP请求3.1 HTTPS协议3.2 HTTPS过程3.3 HTTP请求4.服务器处理请求并返回Http报文5.浏览器解析渲染...
  • 首先,我们每个人的家中电流箱都很弱.... 谁再次断开了与互联网的连接?重新启动了吗? 原文来自鲜枣教室 本文来自电脑杂谈,转载请注明本文网址: http://www.pc-fly.com/a/tongxinshuyu/article-277948-1.html
  • WiFi工作原理简述

    千次阅读 2022-04-13 15:51:41
    由“在地址栏输入URL到网页显示发生了什么”这个问题想到在wifi的环境下这个过程该如何实现。 其实环节基本一样,不过是需要一个无线路由器实现从路由器到设备网卡这段的信息传播... 参考资料: 什么是WiFi及其工作原理
  • 服务化有什么好处? 服务化的一个好处就是,不限定服务的提供方使用什么技术选型,能够实现大公司跨团队的技术...但实际上,大部分互联网公司,研发团队规模有限,大都使用同一套技术体系来实现服务: 这样的话,如...
  • 前文拆解了2G GSM手机语音通话的工作原理开始,重点关注单个终端的通信技术:语音编码、信道编码、逻辑信道、物理信道、TDMA时分多址、GMSK调制。 本章将拆解2G GSM基站的工作原理以及多终端共享信道场景下的技术,...
  • LVS原理图解

    2021-09-29 12:50:41
    随着互联网在人们生活中的普及,企业级应用迎来了海量数据的冲击,如微信、美团外卖、微信支付等应用每天的使用人数都在千万以上,仅靠单台机器提供服务已经行不通了。 我们可以使用多台服务器分摊这些压力,当一定...
  • 脑结构、脑工作原理最详细图解

    千次阅读 2019-07-30 08:48:02
    来源:深度学习进阶学习社这个帖子很好地提醒了我,为什么我愿意跟如此美丽可爱的大脑一起工作。因为真正的大脑非常不可爱,长得也难看。但是,过去一个月,我一直生活在充斥着红色...
  • java web中http协议、文件下载、ServletContext总结(request&response原理图解,response乱码问题以及重定向图解)
  • 简洁生动 | 图解 DALL-E 2 工作原理

    千次阅读 2022-04-27 00:54:29
    选自assemblyai作者:Ryan O'Connor 机器之心编译编辑:蛋酱效果惊艳的 DALL-E 2,到底是怎么工作的?2022 年 4 月初,OpenAI 的 DALL-E2,为图像生成和处理领域树立了新的标杆。只需输入简短的文字 prompt,DALL-E ...
  • 我们通常使用此模式在木材激光雕刻机激光头运动原理 百科,丙烯酸,纸张和其他材料上进行穿透切割激光雕刻机激光头运动原理 百科,并在各种材料的表面上进行标记。 *雕刻速度:雕刻速度是指激光头的移动速度,通常...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,199
精华内容 2,879
热门标签
关键字:

互联网工作原理图解