存档

‘Linux运维技术集锦’ 分类的存档

TCP,IP,HTTP,SOCKET区别和联系

2017年2月15日 评论已被关闭

TCP,IP,HTTP,SOCKET区别和联系

网络由下往上分为:        对应

物理层–

数据链路层–

网络层–IP协议

传输层–TCP协议

会话层–

表示层和应用层–HTTP协议

 

socket则是对TCP/IP协议的封装和应用(程序员层面上)。也可以说,TPC/IP协议是传输层协议,主要解决数据 如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据。关于TCP/IP和HTTP协议的关系,网络有一段比较容易理解的介绍:

“我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如 果没有应用层,便无法识别数据内容,如果想要使传输的数据有意义,则必须使用到应用层协议,应用层协议有很多,比如HTTP、FTP、TELNET等,也 可以自己定义应用层协议。WEB使用HTTP协议作应用层协议,以封装HTTP文本信息,然后使用TCP/IP做传输层协议将它发到网络上。”

我们平时说的最多的socket是什么呢,实际上socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。 实际上,Socket跟TCP/IP协议没有必然的联系。Socket编程接口在设计的时候,就希望也能适应其他的网络协议。所以说,Socket的出现 只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,从而形成了我们知道的一些最基本的函数接口,比如create、 listen、connect、accept、send、read和write等等。网络有一段关于socket和TCP/IP协议关系的说法比较容易理 解:

“TCP/IP只是一个协议栈,就像操作系统的运行机制一样,必须要具体实现,同时还要提供对外的操作接口。这个就像操作系统会提供标准的编程接口,比如win32编程接口一样,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口。”

总结一些基于基于TCP/IP协议的应用和编程接口的知识,也就是刚才说了很多的 HTTP和Socket。

CSDN上有个比较形象的描述:HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。

实际上,传输层的TCP是基于网络层的IP协议的,而应用层的HTTP协议又是基于传输层的TCP协议的,而Socket本身不算是协议,就像上面所说,它只是提供了一个针对TCP或者UDP编程的接口。

下面是一些经常在笔试或者面试中碰到的重要的概念,特在此做摘抄和总结。

一、什么是TCP连接的三次握手

第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭 连接之前,TCP 连接都将被一直保持下去。断开连接时服务器和客户端均可以主动发起断开TCP连接的请求,断开过程需要经过“四次握手”(过程就不细写了,就是服务器和客 户端交互,最终确定断开)

二、利用Socket建立网络连接的步骤

建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket ,另一个运行于服务器端,称为ServerSocket 。

套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。

1。服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。

2。客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。

3。连接确认:当服 务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端 确认了此描述,双方就正式建立连接。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。

三、HTTP链接的特点

HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用。

HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。

四、TCP和UDP的区别

1。TCP是面向链 接的,虽然说网络的不安全不稳定特性决定了多少次握手都不能保证连接的可靠性,但TCP的三次握手在最低限度上(实际上也很大程度上保证了)保证了连接的 可靠性;而UDP不是面向连接的,UDP传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号,发送端不知道数据是否会正确接收,当然也不用重 发,所以说UDP是无连接的、不可靠的一种数据传输协议。

2。也正由于1所说的特点,使得UDP的开销更小数据传输速率更高,因为不必进行收发数据的确认,所以UDP的实时性更好。

知道了TCP和 UDP的区别,就不难理解为何采用TCP传输协议的MSN比采用UDP的QQ传输文件慢了,但并不能说QQ的通信是不安全的,因为程序员可以手动对UDP 的数据收发进行验证,比如发送方对每个数据包进行编号然后由接收方进行验证啊什么的,即使是这样,UDP因为在底层协议的封装上没有采用类似TCP的“三次握手”而实现了TCP所无法达到的传输效率。

PowerPC架构与X86架构

2017年2月14日 评论已被关闭

PowerPC架构与X86架构
http://blog.sina.com.cn/s/blog_6c9670bb0101slkh.html
PowerPC架构
PowerPC是一种精简指令集(RISC)架构的中央处理器(CPU),其基本的设计源自IBM(国际商用机器公司)的POWER(Performance Optimized With Enhanced RISC;《IBM Connect电子报》2007年8月号译为“增强RISC性能优化”)架构。POWER是1991年,Apple(苹果电脑)、IBM、Motorola(摩托罗拉)组成的AIM联盟所发展出的微处理器架构。PowerPC是整个AIM联盟平台的一部分,并且是到目前为止唯一的一部分。但苹果电脑自2005年起,将旗下电脑产品转用Intel CPU。

PowerPC的历史可以追溯到早在1990年随RISC System/6000一起被介绍的IBM POWER架构。该设计是从早期的RISC架构(比如IBM 801)与MIPS架构的处理器得到灵感的。

1990年代,IBM、Apple和Motorola开发PowerPC芯片成功,并制造出基于PowerPC的多处理器计算机。PowerPC架构的特点是可伸缩性好、方便灵活。第一代PowerPC采用0.6微米的生产工艺,晶体管的集成度达到单芯片300万个。1998年,铜芯片问世,开创了一个新的历史纪元。2000年,IBM开始大批推出采用铜芯片的产品,如RS/6000的X80系列产品。铜技术取代了已经沿用了30年的铝技术,使硅芯片多CPU的生产工艺达到了0.20微米的水平,单芯片集成2亿个晶体管,大大提高了运算性能;而1.8V的低电压操作(原为2.5V)大大降低了芯片的功耗,容易散热,从而大大提高了系统的稳定性。
X86架构
30年多前的1978年6月8日,Intel发布了新款16位微处理器“8086”,也同时开创了一个新时代:x86架构诞生了。 x86指的是特定微处理器执行的一些计算机语言指令集,定义了芯片的基本使用规则,一如今天的x64、IA64等。

事实上,8086处理器发布之初并没有获得太多关注,开始也没有被大范围采用,但它在PC业界的地位怎么形容都不为过,这就是因为它带来了x86。它不仅成就了Intel如日中天的地位,也成为了一种业界标准,即使是在当今强大的多核心处理器上也能看到x86的身影。在30年的发展史中,x86家族不断壮大,从桌面转战笔记本、服务器、超级计算机、编写设备,期间还挫败或者限制了很多竞争对手的发展,让不少处理器厂商及其架构技术成为历史名字,即使有些封闭发展的也难以为继,比如苹果就已经放弃PowerPC了。

当然,我们不能忘了x86-64和EM64T的斗争。2003年,AMD推出了业界首款64位处理器Athlon 64,也带来了x86-64,即x86指令集的64位扩展超集,具备向下兼容的特点。当时Intel也在推行64位技术,但其IA64架构并不兼容x86,只是用在服务器处理器Itanium上。为了和AMD展开竞争,Intel也在2004年推出了自己的64位版x86,也就是EM64T。对此,AMD和Intel互相指责对方,但无论如何至少推广了64位技术的发展和普及,也让x86技术得以继续发扬光大。加州大学伯克利分校计算机科学教授、RISC发明人之一David Patterson表示:“这证明,x86指令集的弹性完全可以拿来对付Intel,所以即使Intel统治了整个市场,其他公司依然可以改变x86的发展方向。”

x86是一个intel通用计算机系列的标准编号缩写,也标识一套通用的计算机指令集合,X与处理器没有任何关系,它是一个对所有*86系统的简单的通配符定义,例如:i386, 586,奔腾(pentium)。由于早期intel的CPU编号都是如8086,80286来编号,由于这整个系列的CPU都是指令兼容的,所以都用X86来标识所使用的指令集合如今的奔腾,P2,P4,赛扬系列都是支持X86指令系统的,所以都属于X86家族 。X86指令集是美国Intel公司为其第一块16位CPU(i8086)专门开发的,美国IBM公司1981年推出的世界第一台PC机中的CPU–i8088(i8086简化版)使用的也是X86指令,同时电脑中为提高浮点数据处理能力而增加的X87芯片系列数学协处理器则另外使用X87指令,以后就将X86指令集和X87指令集统称为X86指令集。虽然随着CPU技术的不断发展,Intel陆续研制出更新型的i80386、i80486直到今天的Pentium 4(以下简为P4)系列,但为了保证电脑能继续运行以往开发的各类应用程序以保护和继承丰富的软件资源,所以Intel公司所生产的所有CPU仍然继续使用X86指令集,所以它的CPU仍属于X86系列。

另外除Intel公司之外,AMD和Cyrix等厂家也相继生产出能使用X86指令集的CPU,由于这些CPU能运行所有的为Intel CPU所开发的各种软件,所以电脑业内人士就将这些CPU列为Intel的CPU兼容产品。由于Intel X86系列及其兼容CPU都使用X86指令集,所以就形成了今天庞大的X86系列及兼容CPU阵容。当然在目前的台式(便携式)电脑中并不都是使用X86系列CPU,部分服务器和苹果(Macintosh)机中还使用美国DIGITAL(数字)公司的Alpha 61164和PowerPC 604e系列CPU。

Intel从8086开始,286、386、486、586、P1、P2、P3、P4都用的同一种CPU架构,统称X86。英特尔推出X86架构已满30年了,同486相比,Pentium向前迈进了一大步, 而PⅡ的前进步伐则没有这么大了,X86 CPU的发展似乎已到了尽头。 英特尔非常清楚,是X86指令集限制了CPU性能的进一步提高,因此,他们正同惠普共同努力开发下一代指令集架构(Instruction Set Architecture ,ISA): EPIC(Explicitly Parallel Instruction Computing,显性并行指令计算)。对英特尔而言, IA-64(英特尔的64位架构)是下一个10到15年的架构。新的ISA将使英特尔摆脱X86架构的限制,从而设计出超越所有现有RISC CPU和X86 CPU的新型处理器。那么EPIC的先进之处在什么地方呢?为什么英特尔会放弃使它成为芯片巨人的X86架构呢? 一、IA-32的问题 我们知道,工程师可以通过提高每个时钟的指令执行数来提高性能,英特尔新的指令集的首要目的在于,让指令更容易解码,更容易并行执行。这样就可以不受限制地开发新型处理器。 但是,对工程师而言,兼容8086的X86指令集一直是必须完成的任务。毕竟,兼容前代产品是使英特尔成长壮大起来的关键因素,而且还可以保护用户原先的投资和使用数以百万计应用软件。

既然如此,为什么又要放弃整个X86指令集重新开始呢?X86的不足在什么地方?
(1)可变的指令长度 X86指令的长度是不定的,而且有几种不同的格式,结果造成X86 CPU的解码工作非常复杂,为了提高CPU的工作频率,不得不延长CPU中的流水线,而过长的流水线在分支预测出错的情况下,又会带来CPU工作停滞时间较长的弊端。
(2)寄存器的贫乏 X86指令集架构只有8个通用寄存器,而且实际只能使用6个。这种情况同现代的超标量CPU极不适应,虽然工程师们采用寄存器重命名的技术来弥补这个缺陷,但造成了CPU过于复杂,流水线过长的局面。
(3)内存访问 X86指令可访问内存地址,而现代RISC CPU则使用LOAD/STORE模式,只有LOAD和STORE指令才能从内存中读取数据到寄存器,所有其他指令只对寄存器中的操作数计算。在目前CPU的速度是内存速度的5倍或5倍以上的情况下,后一种工作模式才是正途。
(4)浮点堆栈 X87 FPU是目前最慢的FPU,主要的原因之一就在于X87指令使用一个操作数堆栈。如果没有足够多的寄存器进行计算,你就不得不使用堆栈来存放数据,这会浪费大量的时间来使用FXCH指令(即把正确的数据放到堆栈的顶部)。
(5)4GB限制 这似乎不是问题,但是,在6年前,主流PC只有4MB内存,而目前的绝大部分PC装备了64MB以上的内存,是以前的16倍,所以,在下一个十年,PC内存突破1GB绝对不会令人惊讶,而且目前的大型服务器已经使用了1GB以上的内存,突破4GB内存的情况很快就会出现。
(6)芯片变大 所有用于提高X86 CPU性能的方法,如寄存器重命名、巨大的缓冲器、乱序执行、分支预测、X86指令转化等等,都使CPU的芯片面积变得更大,也限制了工作频率的进一步提高,而额外集成的这些晶体管都只是为了解决X86指令的问题。

centos6.5 iptables实现端口转发

2016年11月12日 评论已被关闭

centos6.5 iptables实现端口转发

http://www.cnblogs.com/apexchu/p/4255551.html

将本地接口IP 61.144.a.b 的3389端口 转发到 116.6.c.d的3389      (主要访问到61.144.a.b的3389端口,就会跳转到116.6.c.d的3389)

【步骤】
1、 首先应该做的是/etc/sysctl.conf配置文件的 net.ipv4.ip_forward = 1 默认是0    这样允许iptalbes FORWARD。
2、 service iptables stop  关闭防火墙
3、 重新配置规则

iptables -t nat -A PREROUTING –dst 61.144.a.b -p tcp –dport 3389 -j DNAT –to-destination 116.
6.c.d:3389

iptables -t nat -A POSTROUTING –dst 116.6.c.d -p tcp –dport 3389 -j SNAT –to-source 61.144.a.b

service iptables save

将当前规则保存到 /etc/sysconfig/iptables
若你对这个文件很熟悉直接修改这里的内容也等于命令行方式输入规则。
5、 启动iptables 服务, service iptables start

可以写进脚本,设备启动自动运行;

# vi /etc/rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don’t
# want to do the full Sys V style init stuff.

touch /var/lock/subsys/local

sh /root/myshipin.log
———————————————————————
vi myshipin.log
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don’t
# want to do the full Sys V style init stuff.

iptables -F -t nat
iptables -t nat -A PREROUTING –dst 61.144.a.b -p tcp –dport 3389 -j DNAT –to-destination 116.6.c.d:3389
iptables -t nat -A POSTROUTING –dst 116.6.a.b -p tcp –dport 3389 -j SNAT –to-source 61.144.c.d
~
—————————————————————-
TCP

iptables -t nat -A PREROUTING –dst 61.144.a.b -p tcp –dport 9304 -j DNAT –to-destination 10.94.a.b:9304
iptables -t nat -A POSTROUTING –dst 10.94.a.b -p tcp –dport 9304 -j SNAT –to-source 61.144.a.b

UDP
iptables -t nat -A PREROUTING –dst 61.144.a.b -p udp –dport 9305 -j DNAT –to-destination 10.94.a.b:9305
iptables -t nat -A POSTROUTING –dst 10.94.a.b -p udp –dport 9305 -j SNAT –to-source 61.144.a.b

另:

iptables配置文件的位置:/etc/sysconfig/iptables 外网地址发变化在配置文件里修改就可以了。

HTTP/1.1与HTTP/1.0的区别

2016年5月29日 评论已被关闭

HTTP/1.1与HTTP/1.0的区别
下面主要从几个不同的方面介绍HTTP/1.0与HTTP/1.1之间的差别,当然,更多的内容是放在解释这种差异背后的机制上。

1 可扩展性

可扩展性的一个重要原则:如果HTTP的某个实现接收到了自身未定义的头域,将自动忽略它。

Ø  在消息中增加版本号,用于兼容性判断。注意,版本号只能用来判断逐段(hop-by-hop)的兼容性,而无法判断端到端(end-to-end)的兼容性。
例如,一台HTTP/1.1的源服务器从使用HTTP/1.1的Proxy那儿接收到一条转发的消息,实际上源服务器并不知道终端客户使用的是HTTP/1.0还是HTTP/1.1。因此,HTTP/1.1定义Via头域,用来记录消息转发的路径,它记录了整个路径上所有发送方使用的版本号。

Ø  HTTP/1.1增加了OPTIONS方法,它允许客户端获取一个服务器支持的方法列表。

Ø  为了与未来的协议规范兼容,HTTP/1.1在请求消息中包含了Upgrade头域,通过该头域,客户端可以让服务器知道它能够支持的其它备用通信协议,服务器可以据此进行协议切换,使用备用协议与客户端进行通信。

2 缓存

在HTTP/1.0中,使用Expire头域来判断资源的fresh或stale,并使用条件请求(conditional request)来判断资源是否仍有效。例如,cache服务器通过If-Modified-Since头域向服务器验证资源的Last-Modefied头域是否有更新,源服务器可能返回304(Not Modified),则表明该对象仍有效;也可能返回200(OK)替换请求的Cache对象。

此外,HTTP/1.0中还定义了Pragma:no-cache头域,客户端使用该头域说明请求资源不能从cache中获取,而必须回源获取。

HTTP/1.1在1.0的基础上加入了一些cache的新特性,当缓存对象的Age超过Expire时变为stale对象,cache不需要直接抛弃stale对象,而是与源服务器进行重新激活(revalidation)。

HTTP/1.0中,If-Modified-Since头域使用的是绝对时间戳,精确到秒,但使用绝对时间会带来不同机器上的时钟同步问题。而HTTP/1.1中引入了一个ETag头域用于重激活机制,它的值entity tag可以用来唯一的描述一个资源。请求消息中可以使用If-None-Match头域来匹配资源的entitytag是否有变化。

为了使caching机制更加灵活,HTTP/1.1增加了Cache-Control头域(请求消息和响应消息都可使用),它支持一个可扩展的指令子集:例如max-age指令支持相对时间戳;private和no-store指令禁止对象被缓存;no-transform阻止Proxy进行任何改变响应的行为。

Cache使用关键字索引在磁盘中缓存的对象,在HTTP/1.0中使用资源的URL作为关键字。但可能存在不同的资源基于同一个URL的情况,要区别它们还需要客户端提供更多的信息,如Accept-Language和Accept-Charset头域。为了支持这种内容协商机制(content negotiation mechanism),HTTP/1.1在响应消息中引入了Vary头域,该头域列出了请求消息中需要包含哪些头域用于内容协商。

3 带宽优化

HTTP/1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了。例如,客户端只需要显示一个文档的部分内容,又比如下载大文件时需要支持断点续传功能,而不是在发生断连后不得不重新下载完整的包。

HTTP/1.1中在请求消息中引入了range头域,它允许只请求资源的某个部分。在响应消息中Content-Range头域声明了返回的这部分对象的偏移值和长度。如果服务器相应地返回了对象所请求范围的内容,则响应码为206(Partial Content),它可以防止Cache将响应误以为是完整的一个对象。

另外一种情况是请求消息中如果包含比较大的实体内容,但不确定服务器是否能够接收该请求(如是否有权限),此时若贸然发出带实体的请求,如果被拒绝也会浪费带宽。

HTTP/1.1加入了一个新的状态码100(Continue)。客户端事先发送一个只带头域的请求,如果服务器因为权限拒绝了请求,就回送响应码401(Unauthorized);如果服务器接收此请求就回送响应码100,客户端就可以继续发送带实体的完整请求了。注意,HTTP/1.0的客户端不支持100响应码。但可以让客户端在请求消息中加入Expect头域,并将它的值设置为100-continue。

节省带宽资源的一个非常有效的做法就是压缩要传送的数据。Content-Encoding是对消息进行端到端(end-to-end)的编码,它可能是资源在服务器上保存的固有格式(如jpeg图片格式);在请求消息中加入Accept-Encoding头域,它可以告诉服务器客户端能够解码的编码方式。

而Transfer-Encoding是逐段式(hop-by-hop)的编码,如Chunked编码。在请求消息中加入TE头域用来告诉服务器能够接收的transfer-coding方式,

4 长连接

HTTP 1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求。此外,由于大多数网页的流量都比较小,一次TCP连接很少能通过slow-start区,不利于提高带宽利用率。

HTTP 1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。例如:一个包含有许多图像的网页文件的多个请求和应答可以在一个连接中传输,但每个单独的网页文件的请求和应答仍然需要使用各自的连接。

HTTP 1.1还允许客户端不用等待上一次请求结果返回,就可以发出下一次请求,但服务器端必须按照接收到客户端请求的先后顺序依次回送响应结果,以保证客户端能够区分出每次请求的响应内容,这样也显著地减少了整个下载过程所需要的时间。

在HTTP/1.0中,要建立长连接,可以在请求消息中包含Connection: Keep-Alive头域,如果服务器愿意维持这条连接,在响应消息中也会包含一个Connection: Keep-Alive的头域。同时,可以加入一些指令描述该长连接的属性,如max,timeout等。

事实上,Connection头域可以携带三种不同类型的符号:

1、一个包含若干个头域名的列表,声明仅限于一次hop连接的头域信息;

2、任意值,本次连接的非标准选项,如Keep-Alive等;

3、close值,表示消息传送完成之后关闭长连接;
客户端和源服务器之间的消息传递可能要经过很多中间节点的转发,这是一种逐跳传递(hop-by-hop)。HTTP/1.1相应地引入了hop-by-hop头域,这种头域仅作用于一次hop,而非整个传递路径。每一个中间节点(如Proxy,Gateway)接收到的消息中如果包含Connection头域,会查找Connection头域中的一个头域名列表,并在将消息转发给下一个节点之前先删除消息中这些头域。

通常,HTTP/1.0的Proxy不支持Connection头域,为了不让它们转发可能误导接收者的头域,协议规定所有出现在Connection头域中的头域名都将被忽略。

5 消息传递

HTTP消息中可以包含任意长度的实体,通常它们使用Content-Length来给出消息结束标志。但是,对于很多动态产生的响应,只能通过缓冲完整的消息来判断消息的大小,但这样做会加大延迟。如果不使用长连接,还可以通过连接关闭的信号来判定一个消息的结束。

HTTP/1.1中引入了Chunkedtransfer-coding来解决上面这个问题,发送方将消息分割成若干个任意大小的数据块,每个数据块在发送时都会附上块的长度,最后用一个零长度的块作为消息结束的标志。这种方法允许发送方只缓冲消息的一个片段,避免缓冲整个消息带来的过载。

在HTTP/1.0中,有一个Content-MD5的头域,要计算这个头域需要发送方缓冲完整个消息后才能进行。而HTTP/1.1中,采用chunked分块传递的消息在最后一个块(零长度)结束之后会再传递一个拖尾(trailer),它包含一个或多个头域,这些头域是发送方在传递完所有块之后再计算出值的。发送方会在消息中包含一个Trailer头域告诉接收方这个拖尾的存在。

6 Host头域

在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。

HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。此外,服务器应该接受以绝对路径标记的资源请求。

7 错误提示

HTTP/1.0中只定义了16个状态响应码,对错误或警告的提示不够具体。HTTP/1.1引入了一个Warning头域,增加对错误或警告信息的描述。

此外,在HTTP/1.1中新增了24个状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。

8 内容协商

为了满足互联网使用不同母语和字符集的用户,一些网络资源有不同的语言版本(如中文版、英文版)。HTTP/1.0定义了内容协商(contentnegotiation)的概念,也就是说客户端可以告诉服务器自己可以接收以何种语言(或字符集)表示的资源。例如如果服务器不能明确客户端需要何种类型的资源,会返回300(Multiple Choices),并包含一个列表,用来声明该资源的不同可用版本,然后客户端在请求消息中包含Accept-Language和Accept-Charset头域指定需要的版本。

就像有些人会说几门外语,但每种外语的流利程度并不相同。类似地,网络资源也可以有不同的表达形式,比如有母语版和各种翻译版本。HTTP引入了一个品质因子(quality values)的概念来表示不同版本的可用性,它的取值从0.0到1.0。例如一个母语是英语的人也能讲法语、甚至还学了点丹麦语,那么他的浏览器可用作如下配置:Accept-Language: en, fr;q=0.5, da;q=0.1。这时,服务器会优先选取品质因子高的值对应的资源版本作为响应。
参考资料

[1] Brian Totty, “HTTP: The DefinitiveGuide”, O’REILLY & ASSOC INC, 27, Sep., 2002.

[2] B. Krishnamurthy, J. C. Mogul, and D.M. Kristol, “Key Differences between HTTP/1.0 and HTTP/1.1”,http://www2.research.att.com/~bala/papers/h0vh1.html.

分类: Linux运维技术集锦 标签:

RAID 10和RAID 0+1区别及各自优势图解分析

2016年5月19日 评论已被关闭

RAID 10和RAID 0+1区别及各自优势图解分析

http://www.chinastor.com/a/jishu/raid/0125111352015.html

RAID 10和RAID 0+1的区别和优势比较

RAID 0和RAID 1分别用于增强存储性能(RAID 0 条带)和数据安全性(RAID 1 镜像),而RAID 0+1和RAID 10兼顾了RAID 0和RAID 1的优点,它在提供RAID 1一样的数据安全保证的同时,也提供了与RAID 0近似的存储性能。虽然RAID 0+1和RAID 10基本原理相近,都是RAID0和RAID1的结合,不过还是有些区别。下面做进一步的介绍。

RAID 0+1原理

“图一”是RAID 0+1(加速镜像,即先条带再镜像)原理图。图中有八块物理磁盘,首先RAID控制器通过RAID 0技术分别抓取四块磁盘组成二个虚拟盘,第二步控制器再通过RAID 1技术将二个虚拟盘形成一个虚拟盘,对于外部服务器只有最终形成的虚拟盘可见。

RAID 10原理(RAID 10模式的写和恢复操作模式)

“图二”是RAID 10(镜像加速,即先镜像再条带)原理图,我们可以看到RAID 10也是通过二步完成。首先RAID控制器通过RAID 1技术对八块物理磁盘进行冗余,形成4块虚拟磁盘,第二步控制器再对4块虚拟磁盘进行RAID 0加速,产生一块最终服务器可见的虚拟磁盘。

对于使用RAID 0+1或者RAID 10技术的服务器最终访问的都是具有冗余的加速虚拟磁盘。现在我们的问题是二种RAID技术到底那种更加优秀?

RAID0+1和RAID10的区别

在RAID 0+1技术中,当一块物理磁盘出现故障将导致整个虚拟磁盘损失,因此相当于四块物理磁盘(如图三)的有效故障。如果其它四块物理磁盘有一块丢失,数据将发生丢失。虽然从原理上可以从剩余磁盘数据中重建,但目前市场上的RAID控制器都不能做到数据完全恢复。

图三 RAID 0+1(加速镜像),当一块物理磁盘故障将引发对应内部RAID 0虚拟磁盘失效,因此有效物理磁盘将失效一半,从故障磁盘恢复数据费用昂贵。 而在RAID 10的情况下,当一块独立的物理磁盘故障后(如图四),由于有一块对应镜像磁盘保护数据(除非对应的特定镜像硬盘也同时发生故障),因此不会对性能带来影响,从而显著高于RAID 0+1的容错性。此外,磁盘故障后的恢复成本RAID 10技术也远低于RAID 0+1。在RAID 10技术中只需要重建一块物理磁盘,而RAID 0+1技术必须重建由四块物理磁盘组成的虚拟磁盘,从这点也能够体现出RAID 10相对RAID 0+1的优势。

图四 RAID 10(镜像加速),当一块物理磁盘故障不会引发内部RAID 1虚拟磁盘失效。

小结:RAID 10在整体容错能力和恢复代价上比RAID 0+1更有优势,所以更为常用,更多RAID知识可以参考文章《raid入门一页通,最全的raid技术、原理在线图解》。
,转自中国存储网,原文链接:http://www.chinastor.com/a/jishu/raid/0125111352015.html

 

分类: Linux运维技术集锦 标签:

RAID0+1和RAID1+0的区别

2016年5月19日 评论已被关闭

RAID0+1和RAID1+0的区别

http://blog.chinaunix.net/uid-7761148-id-2044337.html

RAID0+1是先将多块盘做成RAID0, 然后将两个大的虚拟盘做成RAID1.如果是4块盘A,B,C,D如果要做RAID0+1, 可以使用A, C建立一个RAID0, B, D建立一个RAID0,然后将这两个RAID0做成一个RAID1。如图所示:

+———————-+

| +——-+  +——-+ |

| | +—+ |  | +—+ | |

| | | A | |  | | B | | |

| | +—+ |  | +—+ | |

| | RAID0 |  | RAID0 | |

| | +—+ |  | +—+ | |

| | | C | |  | | D | | |

| | +—+ |  | +—+ | |

| +——-+  +——-+ |

|       RAID1          |

+———————-+

RAID1+0是先将多块盘做成RAID1, 然后将两个大的虚拟盘做成RAID0. 如果是4块盘A,B,C,D如果要做RAID0+1, 可以使用A, B建立一个RAID1, C, D建立一个RAID1,然后将这两个RAID1做成一个RAID0。如图所示:

 

+——————+

| +————–+ |

| | +—+  +—+ | |

| | | A |  | B | | |

| | +—+  +—+ | |

| |    RAID1     | |

| +————–+ |

| +————–+ |

| | +—+  +—+ | |

| | | C |  | D | | |

| | +—+  +—+ | |

| |    RAID1     | |

| +————–+ |

|      RAID0       |

+——————+

 

在RAID0+1方案中,如果A出现损坏,则A,C组成的RAID0将不可使用,此时如果B,D中的某一块盘出现问题,则将导致整个RAID0+1失效。

 

在RAID1+0方案中,如果A出现损坏,则A,B组成的RAID1将不可使用,此时如果不是B损坏或者C,D同时损坏,整个阵列依然可用。

 

相比而言RAID1+0比RAID0+1具有更高的可用性,而性能上几乎没有差异。

 

RAID0+1对比RAID1+0的唯一好处就是组成两个RAID0的磁盘个数和容量可以不一致,而RAID1+0则要求所有的磁盘容量完全一致。

 

RAID1+0又被称为RAID10

系统专家之路-推荐书单

2016年5月16日 评论已被关闭

系统专家之路-推荐书单

http://www.jianshu.com/p/7a633fdada4f

“路漫漫其修远兮,吾将上下而求索”。

系统专家

比较接近的词是“Operating System Specialists”。  在一个Team中,他们通常与架构师(Architect),开发工程师(Development Engineer),项目经理(Project Manager),数据库管理员DBA等一起合作。

另一种是专门从事操作系统研究、设计、开发、优化的人群。例如Linux之父之类的大神。

本文的定义侧重于前一种,即在一个业务系统中,负责运营架构规划,提供高可用解决方案,致力于提供7*24*365级别的高质量服务,致力于发现系统性能问题,致力于解决问题的人。

严格来说,很多企业实践中,这都是一个不存在的头衔,其职能由架构师、资深开发者、DBA等人分担。根据笔者的经验,如果你的Team中有一个这样的人,将大大提升所有人的幸福指数,以及项目成功的可能性,不管他挂的是什么头衔。It’s really!

阶段分级

简单划分为入门通识、系统进阶和高阶专题三级。

       入门通识级:包括但不限于计算机网络常识、主机硬件常识、“Linux ABC” , “C语言 ABC”,”Shell ABC” ,“Team ABC”等,理解掌握1-2种常用开发语言等。适用于学生、初学者、0~3年领域专门经验者。

系统进阶级:本阶段的读者已经有一定的基础、工作经验,需要提高相关知识的系统化、结构化程度,需要能够站在全局的高度,俯瞰系统运行。如果只能推荐一本的话,我选择《24小时365天不间断服务-服务器/基础设施核心技术》。

高阶专题级:能够走到这一步的人,首先要恭喜你。恭喜你已经熬过了初入武林的寂寞岁月,打通木人巷、十八铜人阵,在险恶的江湖上占据了一小块地盘,苦尽甘来,走上人生巅峰。

且慢!少侠。我怎么听着这里是个坑呢?”—是的,大多数人稍微有点耐性,是可以走到这里的。只不过,后面是登堂入室,抑或止步于此,就看造化了。“Keep doing it the same way”,一个名叫“就是这样”的恶魔悄然入侵。日复一日地重复,天资聪颖者消磨于斯,鲁钝愚顽者沉沦于斯。

天才大师级:这个级别的神人估计是不需要看书的。天才的世界不是我等凡人可以窥测的。

大师之路

技术栈

一定要记住这张图,她讲伴随你走过漫漫长夜。

画下来挂在办公室、卧室、机柜也是极好的。可以温故知新,可以镇宅辟邪。

入门通识级:市面的书大部分是这个级别。

抱歉。暂时没有印象深刻、值得推荐的。

系统进阶级:《24小时365天不间断服务》

服务器/基础设施核心技术,大规模、高性能、不间断网络服务的搭建和管理。

推荐语:“虽说并非十分前沿和先进。。不得不佩服原书作者和编辑的巧妙心思”(译者序)

来源于一线工程团队,不限于技术本身,关键能明晰概念、体系要素关联关系,方法论的演绎堪称经典(RiboseYim)。

前3章讲解了如何搭建兼具冗余性和可扩展性的服务器/基础设施;

第4章讲解了性能优化方面的内容,特别是对单个服务器的性能提升方法进行了介绍;

第5章讲解了监控、管理等运行方面的内容,以笔者身边的实际生产环境为例,介绍了提升设备运行效率的技巧;

第6章介绍了Hatena与KLab实际运作的网络和服务器基础设施的情况。

本书适合所有致力于运维和网络后端的开发者阅读。

读书笔记:

1.《基于Linux单机的负载评估》

高阶专题级:《性能之巅-洞悉系统、企业与云计算》

Systems Performance:Enterprise and the Cloud

推荐语:系统性能优化方向的葵花宝典。

作者:Brendan Gregg(SUN、ORACLE性能工程师)

DTrace(最早应用于Solaris,现已移植到FreeBSD、Mac OS X)作者

Mac OS X EI Capatian

dtrace -V

dtrace: Sun D 1.12.1

中文版推荐序

拿到新书之后,首先翻一翻推荐、序言是个人习惯,一来可以用最快的速度了解全书大意,也可以建立一个参照系,使后续阅读在多一些观察视角,特别是身边找不到人讨论这本书的时候,意义尤为重要。

“性能分析要求我们对于操作系统、网络的性能要了如指掌,明晰各个部分的执行时间数量级,做出合理的判断,这部分在书中有详细的讨论,让读者可以明确地将这些性能指标应用在80:20法则上”。---从磊 新浪SAE创始人

一些复杂的问题,常常需要多方面的知识,需要对系统有全面了解,既有大局观,能俯瞰全局,又能探微索隐,深入到关键的细节,可谓是“致广大而尽精微”。---张银奎 《软件调试》作者

附录G 系统性能名人录

技术的历史演化所展示出的洞察力能深化你的理解。

John Allspaw:容量规划

Jeff Bonwick:发明了内核块分配器

Rey Card : ext2 和 ext3 文件系统的主要开发者

Guillaume Chartrain: Linux中的 iotop

Sebastien Godard: Linux中的sys stat包

Van Jacobson: traceroute

Bill Joy: vmstat

William Lefebvre: 开发了最初版的top

Mike Muss: ping

……………………………..

全书哲学

框架结构

框架结构

读书笔记:

1.原书作者的Blog:《Netflix性能分析模型:In 60 Seconds》(翻译)

2.第10.6节,介绍了其中Linux部分网络性能分析工具的使用方法

(未完待续)201605

 

文/RiboseYim(简书作者)
原文链接:http://www.jianshu.com/p/7a633fdada4f
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

 

DBA的职业发展机会

2016年5月16日 评论已被关闭

DBA的职业发展机会

http://blog.csdn.net/dba_waterbin/article/details/17187257

前天看了这篇Vage:高级DBA的突破之路,云计算革命是DBA发展的瓶颈吗?
现在,我想就这个问题谈谈自己或许不成熟的看法。
关键得不断地思考自己给企业创造什么价值,自己需要寻找什么样的环境来帮助自己提升。
我倒觉得DBA走下神坛是个伪命题,相反地,工作机会会越来越多,同时需求也在不断的提高,不管软件如何完善,终究是要人去做决定
我们不会有人希望凭借一招鲜吃遍天吃了一辈子吧?

㈠ OldSQL?NoSQL?NewSQL?

精细化运维是指用数据说话,定义各种运维指标,统一收集日志,借助MongoDB等工具做实时数据分析
与此同时,所有数据写入Hadoop集群,利用大数据技术对日志做更多维度的离线分析
这些数据绘成各种曲线图,和之前定义的指标对比,并与监控系统关联,实现全网性能、可用性以及趋势分析

从这个角度看,NoSQL似乎不可撼动。但NoSQL不支持SQL查询和ACID也让自身一直处于风口浪尖上
此情此景下,NewSQL便应运而生了。所以NewSQL可以看成是传统数据OldSQL和NoSQL的一个折衷或优化
既保留关系模型优势(SQL查询与ACID),又有NoSQL的扩展性和灵活性,或将关系性数据库的性提高到一个根本不用考虑再做扩展的水平

要整合OldSQL和NoSQL的优势,NewSQL首先要傍一个信得过的OldSQL才能有可观的ROI

作为开源OldSQL的老大,MySQL毫无疑问地成为了NewSQL的首选。哈哈。。

我们不能武断地说某一种数据库过时了,不同的数据库模型都有它的历史意义,在这个我们都高呼大数据的时代,每一种SQL都有它无可比拟的优势
OldSQL、NoSQL以及NewSQL都是一些具体的数据管理的表现形式,他们主要面对什么客户、解决什么问题、带来什么价值
看透了这些,我们就不会被表象所牵引,而企业在搭建系统时首先要考虑的是想要达到什么样的目的,然后才是选择什么样的数据库产品

㈡ DevOps?
在强调DevOps的今天,很多公司并不遵照传统对运维与产品DBA数据库人员的规划
诚如Jonathan Lewis所言,未来DBA可能会更多地与应用开发部门协作,从后端为程序员提供帮助和指导,更多地向业务部门靠拢
即:不懂业务的DBA,不是好DBA

这必然淘汰一大批初级的数据库修理工,在开源数据库领域达到中等水平的门槛较低
而进入高级的门栏又过高,需要源码以及开发功力级别的支持,DBA的竞争会很快进入到这个阶段
开发功力的结合能更好地认知数据,从而在数据库架构与应用设计时给出更好的解决方案
即:不懂开发的DBA,不是好DBA
㈢ 数据可视化?

大数据时代,数据可视化应该是做数据报道时的必备思路,没有准备好这个,数据对谁都是白水一杯
使不可视的运维数据变成可视的炫丽图形,展现出各个关键业务的可用性以及连续性
让技术人员和非技术人员都能直观地理解并关注、这个过程虽然会给DBA带来新的压力
但数据是不可作假的、一旦出现故障,所有人都能看见,都会问为什么,这也能体现DBA的价值

㈣ DBA还是DA?

数据库产品的爆炸时期,技术方面多种计算模式融合,产品方面,不断深入垂直领域引导业务
从支撑业务发展到驱动业务发展,从而进入到企业核心价值链上

DBA不仅应该管理好企业的数据,还要从企业经营的角度考虑如何使这些数据为企业创造更多的价值
关键的还需要解决好数据的挖掘与分析,而后者的规则和维度来自于业务部门而不是技术部门,
从这个角度来看,还有很多的工作要做,也包括在数据库之上的应用的设计

数据即服务(DaaS),大家如果从思考DBA过渡到思考DA(data administrator),你的前途会更光明

By 迦叶

2013-12-7

Good Lcuk

分类: Linux运维技术集锦 标签:

运维 DBA 的消亡

2016年5月16日 评论已被关闭

运维 DBA 的消亡

https://dbarobin.com/2016/03/20/withering-away-of-dba/

文/温国兵

早在 2013 年,好友 waterbin 就写过一篇文章,标题叫做DBA 的职业发展机会。在这篇文章中,waterbin 提到了几个话题,亦即:一,OldSQL、NoSQL、NewSQL;二,DevOps;三,数据可视化;四,DBA 还是 DA。文章中的不少观点,现在看来依然不过时。而这篇文章,笔者想讲讲运维 DBA 的消亡。

整个信息时代,就是信息不断积累,不断膨胀的发展历程。「失控」一书提到:万物源于比特(It from bit)。还可以这样说,一切皆信息。那数据是什么,数据是信息的表现形式和载体。再者,数据库是什么,按照维基百科的解释,「数据库指的是以一定方式储存在一起、能为多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。」数据的规模呈指数级增长,规模与多样性是并存的,数据库的丛林也同步千姿百态。DBA 在这种规模效应中应运而生。DBA 的触角不断蔓延,从最开始的大型公司,再到中型,再到小型。从一家公司的 DBA 团队规模,大抵可以估摸这家公司的技术水平、行业影响力等等。

数据库的发展也趋渐多样化,从传统的关系型数据库、到 NoSQL,再到整合前两者的 NewSQL。关系型数据库中,有我们熟悉的 Oracle、SQL Server 和 MySQL,还有很多适用不同场景的关系型数据库。从 NoSQL Databases 官网中可以看到,列表中已经有超过 225 个不同类型的 NoSQL,这些 NoSQL 有很多种类,包括但不限于 Wide Column Store / Column Families、Document Store、Key Value / Tuple Store、Graph Databases、Multimodel Databases、Object Databases 等等。数据库的总体发展趋势,从有型到无型,从硬盘到内存。当然,每种类型的数据库都有各自的适应场景,评判高下,就像争论什么是好的编程语言一样,没有意义。

DBA 在多年以前是一个很风光的行业,那时会搭 DG 都是件特别牛逼的事情。从之前 Oracle 的风生水起,再到现在 MySQL 的遍地开花,DBA 越来越贬值。物以稀为贵,这是亘古不变的真理。每个行业的人才都是如此,顶尖的很少,大部分的都是处在中间位置。DBA 的门槛相对其它岗位,目前还是偏高的,但这个门槛会越来越低。

四火从淘汰 Oracle 数据库的事情说起一文中提到一个观点很有意思:「维护」要么因为简单而能被机器和软件替代掉,要么因为复杂而被革命掉。不少公司的 DBA,做的工作基本上是偏运维的,比如日常的变更工单、故障处理、隐患处理、备份恢复、SQL 优化等等。纯粹的没有开发能力的运维 DBA,是没有前途的。

A Wheatfield, with Cypresses

运维 DBA 为什么会消亡,笔者做下不成熟的分析,理由如下:

第一,运维的成本越来越低。目前各个公司都在建立或者说已经完成各自的运维平台,机械化程度越来越高,人工干预程度越来越低。随着开源的盛行,建立运维平台的成本也越来越低,有研发能力的运维团队会独立开发,研发能力不足的会拿开源产品二次开发,没有研发能力的干脆选用一款成熟的开源产品。既然运维平台就可以完成的事情,运维 DBA 的人才需求就会逐步减少。

第二,企业对 DBA 人才的要求越来越高。运维 DBA 从事的工作,技术含量偏低,可替代型较大。然而,一个人的核心竞争力,来自于不可替代性。一个 DBA 要想有很好的发展,必须懂业务,必须懂开发。懂业务,懂开发,才有可能根据业务特性选取适合的架构方案,才有可能对一个开源产品了如指掌,才有可能产出数据层的产品。

第三,数据层的丰富性。因为丰富,导致了运维 DBA 不能满足需求。运维,更多偏向于维护成熟的产品。而新技术不断蓬勃发展,对 DBA 的技术要求会更广。新技术的深入引入,需要对源码有所了解,运维 DBA 很难胜任。如果对一个开源产品无法从源码级别进行剖析,那平时遇到的莫名其妙的问题,很难定位到根本的原因,也无法提出解决方案。可以这样说,运维 DBA 对待开源产品,就像是盲人摸象,无法有全方位的掌控;就像是在黑夜中行走,稍不注意就掉坑里。要知道,DBA 这个行业,懂开发的是相对较少的。

未来运维 DBA 会越来越不值钱,会更加懂业务,会往研发型或者其它方向转型。

那么,运维 DBA 的机会在哪里?给出以下几个关键词,仅做抛砖引玉吧。

  • DA
  • BI
  • 中间件
  • 数据层产品

数据库的发展今后依然会变化不穷,依然会马不停蹄。但有一样东西不会变,那就是数据的核心地位。

延伸阅读:

–EOF–

题图:© Vincent Willem van Gogh/A Wheatfield, with Cypresses/Wikipedia

分类: Linux运维技术集锦 标签:

运维工程师指北

2016年5月16日 评论已被关闭

运维工程师指北

http://www.tuicool.com/articles/i2ANfef

目录

  • 目录
    • 工作内容
    • 职业现状
    • 工作场景
    • 合作对象
    • 技能列表
    • 信息源
    • 编辑者背景
    • 额外

文/温国兵

工作内容

基础运维工程师

  • 负责日常网络及各子系统管理维护;
  • 负责设计并部署相关应用平台,并提出平台的实施、运行报告;
  • 负责配合开发搭建测试平台,协助开发设计、推行、实施和持续改进;
  • 负责相关故障、疑难问题排查处理,编制汇总故障、问题,定期提交汇总报告;
  • 负责网络监控和应急反应,以确保网络系统有 7*24 小时的持续运作能力;
  • 负责日常系统维护,及监控,提供IT软硬件方面的服务和支持,保证系统的稳定。

高级运维工程师

  • 参与设计、审核、优化公司IT系统以及各应用系统的体系架构;
  • 全面负责公司运维项目的系统升级、扩容需求与资源落实,配合开发需求,测试、调整运维平台;
  • 负责网络以及服务器的网络设置、维护和优化、网络的安全监控 、系统性能管理和优化、网络性能管理和优化;
  • 建立面向开发部门,业务部门的服务流程和服务标准;
  • 负责IT运维相关流程的规划、设计、推行、实施和持续改进;
  • 负责内部分派下发,对实施结果负责。

运维部门经理

  • 负责部门规划和管理,包括完善内部运维团队,技术规划,团队建设等;
  • 负责运维制度的制定,包括运维制度的细化和监督执行;
  • 根据公司及部门总体目标,制定团队发展的中长期计划;
  • 负责公司的IT资源管理:分配、实施、采购、成本控制;
  • 负责各个系统及网络架构的规划、管理和维护;
  • 安排并实施相关业务的第三方技术服务合作;
  • 负责整体把握运维服务质量,数据分析质量,资源规划等。

以上摘自 百度百科

职业现状

国内一线城市紧缺,特别是互联网公司。小公司的运维工程师负责事情较多,基本上服务器沾边的工作都是你在做。大公司的运维人才要求较高。当然,国内的运维人才很难符合企业的实际要求,人才分布符合二八原则,大多数的人技术平庸,很多都源自培训机构。还有一个不争的事实,那大部分的人期望的工资远远高于他能为公司创造的价值。可以这样说,国内大多数的运维人才都处于一个较低的层次,他们会写脚本,会做一些基础工作,但基本上都是照葫芦画瓢,看文档,找参考,而没有去挖掘底层或者更上层的东西。

一般运维工程师的发展路线有如下两条:

  • 运维应用–>系统架构–>运维开发–>系统开发;
  • 运维应用–>应用 DBA–>架构 DBA–>开发 DBA。

来自 老男孩

基础的运维实际上相对简单,做好的前提下应该考虑更长远的发展。

技术发展道路上,能做到架构级别已经相当不容易了。系统开发和开发 DBA 需要极强的开发功底,大多数的人都是望而止步的。

工作场景

  • 基础运维工程师需要和开发工程师沟通协作,需要听取部门经理的指导,必要时指出合理的建议;
  • 需要随时待命,有故障需要立马解决,服务器宕机带来的损失是非常巨大的,能在越短的时间修复越好;
  • 项目上线、维护、更新基本上会选择凌晨,要有心理准备。可见,运维需要有一颗强大的心脏和一个强壮的身体。

合作对象

  • 开发工程师,应用的发布、故障的处理;
  • 其他运维工程师,协作关系;
  • DBA 工程师,协作关系;
  • 部门经理,汇报工作,参与讨论。

技能列表

  • Linux 基础。比如操作系统基础知识、熟悉 Vi 编辑器、至少熟悉一个发行版(Ubuntu 入门,CentOS 进阶)等;4
  • Linux 基础命令。这是刚需,命令都会不爱熟练运用,不用往下谈了。BTW,grep、sed、awk 这几个命令非常重要;5
  • 基础服务,如 DNS、Samba、Postfix、DHCP、FTP、NTP、 LAMP/LNMP…… 这一部分需要达到熟练,最好能够理解原理;4
  • Shell 脚本,当然会 Python、Perl 更好。脚本非常重要,切记!5
  • 运维平台工具,比如 Nagios、Zabbix、Puppet 等。这一部分可以提高不少效率和便利;3
  • 网络。熟悉 TCP/IP 协议,熟练使用 tcpdump,对运维帮助非常大;3
  • 安全。熟练掌握 iptables 配置,熟悉 SELinux。安全对运维可以说至关重要;4
  • 硬件。毕竟做运维,经常需要和服务器打交道,熟悉硬件是必不可少的;3
  • Linux 内核。这一部分可以加深内功,但需要较强的 C 语言功底。我认为每个运维人员都需要关注;3
  • 数据库。熟悉常见的数据库,基本安装配置,区别与联系;3
  • 大数据、虚拟化、云计算、分布式等。此部分做了解,当然,如果想往这方面发展,得深挖了。2

信息源

博客地址

PS:博客就分享那么多,其他的博客需要您发现了。

其他网站

书籍

说明:

  • 以上书籍没有全部看完,有些在看,有些在规划中,且当做个列表吧;
  • 关于数据库的书籍,参考MySQL DBA Tips,在此不赘述。

资源

编辑者背景

ID:Wentasy,英文名 Robin Wen,真实姓名是温国兵。目前就职于某创业公司,担任运维工程师一职,兼任 MySQL DBA。

联系方式:dbarobinwen@gmail.com

额外

PS:为什么我上学那会没看到这篇文章呢?读者都太幸运了,哈哈。其他该说的话,都在我的博客。DBA@Robin

–EOF–

版权声明:自由转载-非商用-非衍生-保持署名 (创意共享3.0许可证)

分类: Linux运维技术集锦 标签:

运维工程师必须掌握的基础技能有哪些?

2016年5月16日 评论已被关闭

运维工程师必须掌握的基础技能有哪些?

https://www.zhihu.com/question/23665108/answer/25299881

作者:Tanky Woo
链接:https://www.zhihu.com/question/23665108/answer/25299881
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

这个问题挺好的,回答这个问题也是对自身的审查,看看自己还欠缺哪些。(所以我估计得好好思考下,也许下一刻我就会突然惊醒,发现我还是战⑤渣)

首先限定在Linux运维工程师

回答仅代表我想到,不代表我都会 :(

技能

1. Linux基础

包括对Linux整体的理解/使用和基本命令:

2. 运维的命令:

运维相关的工具(命令),了解它能解决很多问题。

前几天刚回答了一个问题:如何才能更深入的学习linux?

里面的图在这里也可以用到:

可以对着图对学习了解这些命令 (<strike>抱歉图片的原始来源我没有搜到,如果有朋友知道,麻烦告诉我,谢谢</strike> 感谢 @jeremy yang 的提示,已经搜到来源 brendangregg.com/linuxpslideshare.net/brendang)。

另外我个人也会对平时用到的这些工具做一个整理和记录,总结到我的个人维基上:Wiki · Tanky Woo

3. 基础服务:

  • LAMP或LNMP :Apache/Nginx,MySQL,PHP/Python/Perl LAMP (software bundle)
  • FTP
  • DNS
  • SAMBA
  • EMAIL
  • NTP
  • DHCP

可以本地搭建练练手

这里推荐鸟哥另外一本书 服务器架设篇: 鸟哥的Linux私房菜 (豆瓣)

4. 运维平台工具:

也在这个问题 如何才能更深入的学习linux? 里提到了:

  • Nagios
  • Puppet
  • Zabbix
  • Cacti
  • SaltStack
  • ….

可以选择性的折腾下,因为这个涉及到业务,没有实际环境,很难去理解他们的功能和特点。

5. 脚本:

  • 必备:Shell
  • 额外:Python,Perl…

6. 底层:

  • Linux C,内核

7. 网络:

网络是非常重要的一块

  • 把《TCP/IP协议详解》多看几遍,理解。
  • 熟练使用tcpdump等抓包工具

8. 安全:

  • 防火墙配置,如 iptables, ipset

9. 硬件:

  • 接口类型
  • 查看硬件信息
  • 知道各类型服务器,如塔式、机架式、刀片式

10. 其它:

了解更多特定技能要求的方式:

Google搜”Linux运维工程师 招聘”,看看他们的需求。

最后推荐一本书:Unix/Linux系统管理技术手册 UNIX/Linux 系统管理技术手册 (豆瓣)

后续想到再做补充

素养/处理方式

除了技能,我觉得素养(态度)也可以谈谈

这个正好看到右边相关问题:运维工程师需要具备哪些性格特质?

1. 安全

运维人员的权限很大,所以一定要保证帐号/私钥的安全。

  • 最好使用加密工具存储。比如truecrypt,1password
  • 基于本地存储。切勿用网盘,也不建议用lastpass等
  • ssh私钥添加密码

以上任何一点都很重要,否则弄丢了,风险会非常大。

2. 责任心

如上面那个帖子里 @山大 提到的 Owner 意识

  • 遇到报警,第一时间处理,而不要等着他人去处理
  • 如果无法处理,应该第一时间让同事协助帮忙,而不要禁止报警,让问题掩盖

3. 细心

你的任何一个操作,都可能造成系统的损坏、业务出问题。所以敲命令时一定要细心、再三确认。你敲的再快,也就节省那么一点时间,出了问题才是大事。

4. 推进/改善

如果代码有问题,导致系统开销很大,比如负载,io等。应该第一时间和开发部门确认,要求优化代码。

5. 进取心/不断学习

运维的知识范围很广,要不断学习。遇到问题,做好分析记录,事后还可以在部门内分享交流。

这也是我为什么热衷于写技术博客和维基的原因,好记性不如烂笔头。记录整理的过程也是一个思考升华的过程。

再给一个干货,我们公司(知道创宇)的技能表:blog.knownsec.com/Known,里面的技能点非常全面,也包含了运维相关

TCP不会造成IP分片,而UDP和ICMP则会造成IP分片

2016年5月16日 评论已被关闭

TCP不会造成IP分片,而UDP和ICMP则会造成IP分片

http://www.2cto.com/net/201308/235363.html

TCP不会造成IP分片,而UDP和ICMP则会造成IP分片
为什么TCP不会造成IP分片呢?原因是TCP自身支持分段:当TCP要传输长度超过MSS(Maxitum Segment Size)的数据时,会先对数据进行分段,正常情况下,MSS小于MTU,因此,TCP一般不会造成IP分片。
而UDP和ICMP就不支持这种分段功能了,UDP和ICMP认为网络层可以传输无限长(实际上有65535的限制)的数据,当这两种协议发送数据时,它们不考虑数据长度,仅在其头部添加UDP或ICMP首部,然后直接交给网络层就万事大吉了。
接着网络层IP协议对这种“身长头短”的数据进行分片,不要指望IP能很“智能”地识别传给它的数据上层头部在哪里,载荷又在哪里,它会直接将整个的数据切成N个分片,这样做的结果是,只有第一个分片具有UDP或者ICMP首部,而其它分片则没有。
详细如下图:

LINUX知识要点

2016年5月12日 评论已被关闭

LINUX知识要点

http://88fly.blog.163.com/blog/static/122680390200962510548827/?suggestedreading&wumii

第一课
1、Linux起源及特点
Linux起源于古老的UNIX。它是一种多用户、多任务的操作系统。它的创始人是Linus Torvalds(芬兰赫尔辛基大学学生),1991年Linux在Minix的基础上开发了Linux,并将0.02版放到Internet上,使其成为自由和开放源代码的自由软件。
Linux的标志是可爱的企鹅,取自芬兰的吉祥物。
2、Linux特点及主要优势
作为操作系统,Linux在短短几年内得到了迅猛的发展因为其具有如下特点:
(1) 免费的专业级操作系统
(2) 良好的可移植性
(3) 良好的用户界面
(4) 低成本
(5) 内核的定制和剪裁
(6) 广泛的协议支持
3、LINUX的组成
LINUX的内核:内核是系统的核心,是运行程序和管理像磁盘和打印机等硬件设备的核心程序。
LINUX SHELL:shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。
LINUX文件系统:linux文件系统是文件存放在磁盘等存储设备上的组织方法。Linux能支持多种目前的文件系统,如EXT2、EXT3、FAT、VFAT、ISO9660、NFS、SMB等。
LINUX应用系统:标准的linux 系统都有一整套称为应用程序的程序集,包括文本编辑器、编程语言、Xwinds\办公套件、Internet工具、数据库等。
4、LINUX版本分为内核版本和发行版本两类。内核版本是指LINUX系统自身的版本号,而发行版本是指由不同的公司或组织将LINUX内核与应用程序、文档组织在一起,构成的一个发行套装。内核是系统的心脏,是运行程序和管理像磁盘和打印机等硬件设备的核心程序。
5、LINUX内核版本号命名:主版本号   次版本号     末版本号
次版本号若为奇数则为开发版本,若为偶数则稳定版本
6、LINUX发行版本
Red Hat  Slackware    Debain    Mandrake    SuSe   Linux   Trubo  Linux
Blue Point  Red Flag  Xteam 等。
7、Linux与Unix的区别
前者免费,后者昂贵
Linux超级用户;Unix许可用户
LINUX移植性好,UNIX捆绑性强
LINUX:应用广泛,前途无量
Unix:基于高端,发展缓慢
8、LINUX与DOS区别
DOS:单用户、单任务;较少的软件资源
LINUX:多用户、多任务;丰富的软件资源
DOS:局限使用内存
LINUX:充分利用资源
DOS界面,纯的;Linux命令方式+X windows

特点  Windows 2003 Linux
安全性能 一般 好
稳定性 好 很好
软件支持 很好 好
硬件支持 好 一般
源代码 保密 开放
系统可调节性 基于界面的规范性, 更易于调节 具有极大的可调节性
使用方便性 非常方便 方便
版权限制和费用 有 无
技术支持 好 基于社团形式的
9、硬件需求与兼容性
Linux系统对硬件资源的需求相对较底,但对硬件兼容性却有较高的要求。
10、终端常用命令
pwd命令用于从屏幕上输出当前的工作目录
uname –r命令用于显示操作系统信息
hostname命令用于显示当前本地主机的名称
free命令用于显示当前内存和交换分区的使用情况
date命令于显示系统当前的日期、时间。
whoami查看当前登录的用户信息。
11、目录结构
/usr/local是存放你新装的软件的目录。
/bin目录 存放着普通用户可执行的命令,系统中的任何用户都可以执行该目录中的命令
/boot目录用于存放linux操作系统启动时所需使用的文件,为了系统能够启动,通常该目录需要使用独立的分区,这样boot分区和根分区相互独立可以保证启动文件更加安全可靠
/mnt目录中的子目录用于作为系统中可移动存储设备的挂载点。
/root目录是超级用户root的宿主目录
/sbin目录类似/bin,也用于存储二进制文件,因为其中的大部分文件多是系统管理员使用的基本系统程序,所以虽然普通拥护必要且允许时可以使用,但一般不给普通用户使用。
/tmp为系统临时目录,很多命令程序在该目录中存放临时使用的文件
/usr目录用于存放大量的系统应用程序及相关文件
/dev目录用于存放系统中的所有设备文件
/etc目录用于存放系统中的配置文件
/home目录用于存放系统中普通用户的宿主目录,每个用户在该目录下都有一个与用户同名的 目录。
/lib许多系统激活时需要用到重要的共享函式库均放在此,包含最重要的GNUibrary,凡档名为library.so.version的共享函式库,通常在/bin目录下。
/lost+found一般重启或关闭系统,本目录乃记录硬盘上的分区于资料流失时作fsck寻找回来的遗失文件片段。
/proc本目录为一个虚拟的文件系统,其功能乃在统一文件与行程,它不占用任何硬盘空间,因为该目录下的文件均放在内存内;每当你存取/proc文件系统时kernel会拦截你的存取动作撷取相关信息再动态的产生目录与文件内容。
GPL
GPL(General Pulic License)许可协议的主要目标是保证软件对所有的用户都是自由的
LGPL(Lesser General Pulic License)为使用linux平台开发商业软件提供了更多的空间
OSD(Open Source Definition)开放源代码软件的 定义文本可以从官方网站查阅
12、 LINUX系统至少一个根分区和一个交换分区,根分区默认采用EXT3格式
13、 计算机的发展
Windows95 98 ME 2000 professional  2000server xp 2003server VISTA
其中服务器是2000server  2003server
2003版本有:web datacenter  standard  enterprise
Xp版本有:home   professional
第二课
1、 Shell简介
Shell:命令行解释器,是用户与系统沟通时的媒介。
2、[root@localhost root]#
[当前用户名·主机名 当前所在位置]
#代表超级用户 $代表普通用户
LINUX中盘
3、 目录操作
cd 改变当前路径
pwd查看当前完整路径
mkdir创建目录
rmdir删除空目录
touch 创建文件
rm –r –f 删除目录(里面可以有内容)或文件
ls 查看文件
cp 拷贝文件
mv 剪切文件
rm 删除文件
cat 查看文件内容
more逐屏察看文件内容
less逐行查看文件内容
head显示文件开头部分内容(默认为十行)
tail显示文件结尾部分内容(默认为十行)
帮助
如:mkdir –help  man mkdir   info mkdir
4、 VI简介
LINUX上最常见的文本编辑器VI。文本编辑器是所有电脑系统中组常使用的一种工具。用户使用电脑的时候,往往需要创建自己的文件,无论是一般的文字文件、资料文件,还是编写源程序,这些工作都离不开编辑器。它可以根据自己的需要对其执行输出、删除、查找、替换等众多文本操作,而且用户可以根据自己的需要对其进行定制,这是其他编辑程序所没有的。它不像word或WPS那样可以对字体、格式、段落等其他属性进行编排,它只是一个文本编辑程序。它没有菜单,只有命令,且命令繁多。
5、 VI三种模式
命令模式(Command mode)
插入模式(Input mode)
末行模式(Last line mode)
三种模式的相互转换
进入命令模式用vi ,编辑文本I(即插入模式),退出插入模式按ESC,按:进入即进入末行模式,退出末行模式用q!(不保存退出),wq!(保存并退出)X!保存并退出
6、 分区
Swap交换分区,等于物理内存的1.5倍——2倍,主要用在提高机器的速度,
/boot如果说在一台机器上同时安装多个系统,那么就需要创建/boot
/剩余空间可以给的
Mount挂载
Umount卸载
切换用户 su 用户名
7、 运行级别
Init0 关机  init3文本模式  Init5图形化模式  init6重新启动
8、 翻页
Ctrl+f:向文件尾一屏
Ctrl+b:向文件首页翻一屏
9、 用户和组管理
用户口令文件——/etc/shadow
用户账号文件——/etc/passwd
用户组账号文件——/etx/group
Group的加密信息文件——/etc/gshadow
创建用户 useradd 用户名  passwd 用户名(必须给用户设置密码才能使用)
添加组  groupadd 组名
删除用户 userdel 用户名   删除组 groupdel 组名(有时必须删除创建该组的用户才能删除组)加入参数-r将删除与账号相关的文件
将新用户添加到组中
useradd –g 组名 用户名
将已存在的用户放到新的组中
usermod –G 组名 用户名
添加用户到组使用的命令格式
gpasswd –a 用户名 组名
从组中删除用户的命令格式
gpasswd –d 用户名 组名
设置用户为组管理员的命令格式
gpasswd –A 组管理员用户列表 用户组
10、 id命令
id命令用于显示用户当前的UID,gid以及所属群组的组列表该指令的语法格式为:
id [选项] [用户名称]
该命令所使用的选项参数说明如下:
-g 显示用户所属群组的ID
-G 显示用户所属附加群组的ID
-n 显示用户所属群组或附加群组的名称
-r 显示实际ID
-u 显示用户ID
11、whoami命令用于显示当前用户名称   su  命令用于切换用户
groups命令用于显示制定用户所属的组。groups 用户名
12、多系统的安装和引导
安装虚拟机XP Professinnal,在安装前将选择硬盘大小为10G;将镜像包放入,在进行格式化分区时将XP Professionnal 系统盘分区设为3G,再在剩余分区中划分两个分区(或者在系统安装好后再划分)
在装好的XP Professionnal 中我的电脑/管理/磁盘管理/将没有划分的分区删除,再新建分区,再新建一个大小为6G的主要分区用于安装LINUX系统,将剩余的空间化为逻辑分区
将安好的XP Professionnal 系统重新启动,将LINUX镜像插入,当系统重新启动时,按F2,进入BIOS设置将CD-ROM调为第一驱动,保存并退出;在安装过程中,选择图形模式安装,并选择简体中文进行安装,其他都设为默认;当到了分区时,选择手动分区,在已有的主分区上(6G),先创建SWAP分区,再创建/分区,再在/分区下创建/boot 分区;在选择使用防火墙时,选择无防火墙;到格式化分区时,将会提醒安装第二张光盘和第三张光盘;格式化完毕后,其他设置都是默认设置,在选择引导盘是否创建时选择不创建,到了系统安装完毕后,就可以进入LINUX系统,
启动XP Professionnal,在我的电脑——属性——高级——安全故障和设置——设置——编辑中可以查看,所支持的系统情况(默认启动,但是看不到LINUX系统);也可以看到系统选择时停留时间,在这里可以对此进行设置
重新启动XP Professionnal后选择系统进入LINUX中,在终端中进入/boot/grub/menu.lst或者是/boot/grub/grub.conf中可以看到,进入系统选择进入哪个系统时界面的停留时间,也可以看到默认进入哪个系统;在这里可以用VI编辑器进行编辑,可以调整停留时间,也可以调整默认进入哪个系统。
13、调运行级别
在/etc/inittab中调试
配置文件/boot/grub/grub.conf    /boot/grub/menu.lst
14、磁盘管理
df 显示磁盘用量  若加-h或-m则将用量以MB呈现
df  盘符  用于显示该盘的用量情况
du 目录 用于显示该目录的磁盘用量情况
15、 离开系统
重启  reboot ; shutdown –r now;   init 6..
关机halt;   init 0 ;  shutdown  -h  now ;poweroff;
16、配置IP
vi /etc/sysconfig/network-scripts/ifcfg-eth0(永久生效)
改dhcp 为static  IPADDR=     NETMASK=    GATEWAY=
iconfig eth0 IP  netmask MASK(临时生效)
route add default  gw  网关(网关的作用是指引去寻找路由)
要修改文件首先将文件做一个备份
第三课
1、 系统启动过程
(1) 主机启动,并从硬盘进行引导
(2) 从硬盘MBR 读取并运行Boot Loader程序
(3) 由Boot Loader引导linux内核程序运行
(4) 由linux内核运行INIT进程
(5) 进入指定运行级别,运行系统服务程序
(6) 运行终端程序,等待用户登录

2、 linux系统中运行级别

运行级别 说明
0 停机
1 单用户模式,用于root用户对系统进行维护
2 多用户模式,在此模式下不能使用NFS
3 完全多用户模式,主机做为服务器使用时通常在此运行级别
4 未分配使用
5 图形登录的多用户模式,用户在该模式下可进行图形界面登录
6 重新启动
查看当前运行级别命令:runlevel
3、 设备管理
设备管理分为两种:块设备文件;字符设备文件
块设备文件
/dev/hd(a-t):IDE设备
/dev/sd(a-z):SCSI设备
/dev/fd(0-7)标准软驱
/dev/md(0——31)软raid设备
Loop(0-19):本地回访设备
ram(0-19):内存
字符设备文件
/dev/null:无限数据接收设备
/dev/zero:无限零资源
/dev/tty(0-31) 虚拟终端
/dev/lp(0-3):并口
/dev/ttys(0_9):串口
/dev/console:控制台
/dev/fb(0-31):framebuffer
4、 文件和目录管理
改变文件的拥有者或者群组chown
设置文件或者目录的权限chmod
? 权限代号
p r读取目录或者文件的权限 用数字4表示
p w写入目录或者文件的权限 用数字2表是
p x 执行目录或者文件的权限 用数字1表示
p -删除目录或者文件的所有权限  用数字0表示
p u 目录或者文件的当前用户
p g 目录或者文件的当前的群组
p o  当前用户和当前的群组用户的其他用户
例如:chown 所有者:组群 文件名
chown 所有者 文件名(只改变所有者不改变组群) 文件名
chown :组群(只改变组群不改变所有者) 文件名
设置权限
chmod  u(/g/o)+(-)r(wx)  文件名
针对文件设置所有者(u)、组群(g)、其它(o)赋予(+)或取消(-)权限(r:可读;w:写入;x:执行)
5、 服务控制命令
service 服务名  start   服务启动
service 服务名  restart   服务重启
service 服务名  stop   服务停止
service 服务名  status  服务状态
列出服务在各个运行级别下的状态 chkconfig ——list
查看某服务在各个运行级别下的状态(默认状态) chkconfig ——list 服务名
改变某服务在某运行级别下的状态  chkconfig ——level 级别  服务名  on/off/reset
6、 常用的系统日志
/var/log/dmeg核心启动日志(此日志文件写在系统每次启动时,包含了核心装入时系统的所有输出数据;可以用命令dmesg直接查看)
/var/log/messages系统报错日志(这是一份标准系统日志,记录着大部分系统服务的输出,包括启动时非关核心的一些输出)
/var/log/maillog邮件系统日志(此日志包含所有由sendmail送出的信息和报错)
/var/log/xferlogFTP服务用日志(此日志用于记录所有由ftp服务汇报的信息和报错)
/var/log/secure安全信息(系统登录与网络连接的信息)
/var/log/wtmp登录记录(系统每一次登录,都会在此日志中添加记录。为了防止有人篡改,该文件为二进制文件。只能用last这一类的命令读取)
第四课
1、 查看网络接口信息
ifconfig命令用于查看网络接口信息
/sbin/ifconfig
查看所有网络接口信息
/sbin/ifconfig –a
查看指定网络接口信息
/sbin/ifconfig  eth0
route命令可查看主机的路由信息
/sbin/route
指定ping命令的测试数据包
ping –c n ip
测试与其他主机网络连接路径
traceroute命令测试当前主机到目的主机之间经过的所有网络节点
traceroute    ip
查看当前主机的名称
hostname
更改主机名称 hostname name
域名查询
nslookup(nslookup ip 将 ip解析成域名 ; nslookup 域名;将域名解析成ip
route命令可以维护系统路由表信息
route add default gw ip添加缺省网关
route del default gw ip删除缺省网关
设置主机名称
hostname  name   (只能即时生效)
2、修改配置文件进行网络配置
使用工具进行网络配置 netconfig    setup
网络服务启动脚本/etc/init.d/network
网络接口配置文件
/etc/sysconfig/network-scripts(停止网络接口 ifdown eth0; 网络接口ifup eth0;
或者用命令service network restart)
主机名称配置文件/etc/sysconfig/network
本地主机名称解析文件/etc/hosts
域名服务器配置文件/etc/resolv.conf(文件中最多可以有3个nameserver配置记录
系统会优先使用文件中最前面的nameserver配置记录;当前面的DNS服务器无效时系统会自动使用后面的DNS服务器进行解析)
小结
RH 中提供了network工具用于网络配置文件的修改
netwrok用于设置系统的网络属性
ifcfg-eth0文件用于设置网络接口eth0属性
/etc/sysconfig目录中的network文件用于保存主机名称信息
/etc/hosts文件用于保存主机名称和地址解析记录
/etc/resolv.conf文件用于保存系统使用的DNS服务器的地址
hosts文件和DNS服务器功能的比较
在hosts文件中设置内容只在当前的linux主机中有效,无法作用于整个网络
在hosts文件中设置主机名称解析更加灵活,可以立即生效
Hosts文件无法完全取代DNS服务器的作用,只能完成辅助的本地主机名称解析
/etc类似于windows中的windows
/usr类似于windows中的program files
/home类似于windows中的documents and settings
第五课
1、Windows文件共享与samba服务器区别
Windows主机之间使用SMB/CIFS网络协议实现文件和打印资源的共享;Windows无法与UNIX/linux主机之间实现资源共享
Samba服务器在UNIX系统中实现了SMB/CIPFS协议;通过samba服务可以实现UNIX/linux主机与Windows主机之间的资源互访;
(CIFS是一个新提出的协议,它使程序可以访问远程Internet计算机上的文件并要求此计算机的服务。CIFS使用客户/服务器模式。客户模式程序请求永远在服务器上的服务器程序为它提供服务。服务器获得请求并返回响应。CIFS是公共的或开放的SMB协议版本,并由Microsoft使用。SMB协议现在是局域网上用于服务器文件访问和打印的协议。像SMB协议一样,CIFS在高层运行,而不像TCP/IP协议那样运行在底层。CIFS可以看做是应用程序协议如文件传输协议和超文本传输协议的一个实现。CIFS功能:访问服务器本地文件并读写这些文件;与其它用户一起共享一些文件块;在断线时自动恢复与网络的连接;使用西欧字符文件名。一般来说CIFS使用户得到比FTP 更好的对文件的控制。它提供潜在的更直接地服务器程序接口,这比HTTP协议的浏览器更好。CIFS是开放的标准而且已经被作为Internet应用程序标准被提交到IETF。)
2、Samba服务器的服务程序
Samba服务器包括两个服务程序
smbd服务程序为客户机提供了服务器中共享资源的访问
nmbd服务程序提供了NETBIOS主机名称的解析为Windows网络中域或者工作组内的主机进行主机名称的解析、
3、samba服务的安装
samba-common软件包提供了 samba服务器和客户机中都必须使用的公共文件
samba软件包中包括了samba服务器程序的所有文件
samba-client软件包中提供了RedHat公司专门为samba服务管理编写的图形界面的管理程序。该程序是RedhHat系统管理工具中的一部分
samba服务配置文件/etc/samba/smb.conf
4、samba服务器的安全级别

Security值 含义
share 表示用户不需要账户及密码即可登入sambaf服务器
user 表示由服务的samba服务器负责检查账户及密码
server 表示检查账户及密码的工作指定由另一台windows服务器或sanba服务器负责
domain  表示指定windows域控制服务器来验证用户的账户及密码
5、sanba用户账号
sanmba账号管理
samba用户账号使用独立的smbpasswd文件保存用户的账号和加密口令信息
samba服务器中的用户账号应该具有与其同名的Linux系统用户账号,因为samba用户是使用同名的系统账号身份访问Linux系统资源的
samba用户的口令和同名系统用户的口令是独立的可以相同或不同,需要分别进行维护和更改
当samba用户不需要登录Linux系统时,同名的系统用户账号可不设置口令。
6、edquota命令
编辑用户配额
edquota –u username
编辑组配额
edquota  -g  groupname
quota命令
显示用户配额情况  quota –u uername
显示组配额情况  quota –g groupname
7、NFS服务的搭建
NFS是系统间进行文件共享的一种网络协议
在NFS的应用结构中有服务器和客户机两种角色
1》NFS的安装
portmap软件包 :提供了运行portmap服务所需的文件。Portmap服务为NFS等服务器程序提供RPC(Remote Process Call)服务的支持。
nfs-utils软件包:提供了服务器的启动脚本和管理维护工具
2》共享的发布
vi /etc/exports
内容设置是:如:/home/xx  网段 (sync,ro)
注意:/home/xx是共享目录位置  网段可以用*代替  ro 也可以是rw ;ro表示只读; rw表示可读、可写。ro 和rw不能同时使用
3》共享的挂载:
显示挂载的共享showmount –e IP
挂载共享:mount –t nfs ip:/home/xx 挂载点
卸载挂载:umount 挂载点
8、计划任务的使用
Cron是一个可以用来根据时间、日期、月份、星期的组合来调度对周期性任务执行的守护进程;
cron软件包 :软件包名称是vixie-cron
挂载的是Red Hat Linux 9的第一张光盘
cron服务的名称是crond
复习一下服务的启动与停止
启动crond服务      service crond start
查询服务状态        service crond status
停止服务            service crond stop
重新启动服务        service crond restart
计划任务的格式
* * * * * * 命令
从左到右的顺序是:分钟 (0-59)小时(0-23) 日期(1-31) 月(1-12) 星期(0-6)
系统的任务配置文件
/etc/crontab中设置的是Linux 系统维护所需的任务,一般不需要人为的去修改
用户cron任务配置目录  /var/spool/cron在该目录下保存有与目录同名的文件
查看用户的cron任务    crontab  -l
编辑用户的cron任务    crontab –u

调用文本编辑器对cron任务进行编辑    crontab –e
删除用户现有的cron 任务              crontab –r
在这些命令中不加-u username 表示执行对当前登陆用户命令
9、at 命令
at 程序是一种任务管理工具,允许用户将一个或多个命令放入队列中,按时执行
与cron不同的是,at 设置的任务只某个特定的时刻执行,并且只执行一次
查看at任务命令     atq
第六课
1、 文件查找
文件查找find  path  -name file(可借助*)
按文件属主查找
find path –user teacher
2、.tar.gz文件解压缩和压缩
解压:tar zxvf  filename.tar.gz
压缩:tar zcvf filename.tar.gz(解压成的压缩包名称)要压缩的文件名称
2、 linux应用程序与命令
应用程序与命令的关系
基本命令是linux系统中不可缺少的组成部分
命令保存在/bin 和/sbin目录中
应用程序保存在/usr/bin和/usr/sbin目录中
命令的作用是完成对LINUX系统本身的管理工作,应用程序则完成与LINUX系统管理相对独立的任务
命令只能以命令形式运行,命令格式中包括命令字、命令选项和命令参数
应用程序可以是以命令行的形式运行,也可以是字符界面的窗口程序,形式比较多样
3、程序与第三方应用程序的比较
系统应用程序通常遵从LINUX发行版本中软件包管理格式进行安装和卸载
第三方应用程序可能以LINUX发行版本中使用的软件包的格式提供安装程序,也可能使用来自安装程序或其他的形式提供应用程序的安装
3、 RPM软件包
bash-3.0-19.2.i386.rpm
bash代表软件包名称3.0-19.2.代表软件版本号 i386代表软件运行硬件平台 rpm代表软件包扩展名
rpm命令可以完成对rpm软件包的所有管理功能
——查询已安装在LINUX系统中的RPM软件包的信息
——查询RPM软件包安装文件的信息
——安装RPM软件包到当前LINUX系统
——从当前LINUX系统中卸载以安装的RPM软件包
——升级当前LINUX系统中已安装的RPM软件包
安装 rpm软件包 rpm –ivh 软件包名称

命令 功能
rpm -qa 查询Linux系统中的所有软件包
rpm -q  包名称  查询指定名称的软件包是否安装
rpm -qi  包名称  查询指定名称软件包的详细信息
rpm -ql  包名称  查询指定名称软件包中所包括的文件列表
rpm -qf  文件名称  查询指定文件所属的软件包
rpm -qpi 包文件名  查询指定RPM包文件的详细信息
rpm -qpl 包文件名  查询指定RPM包中包含的文件列表

分类: Linux运维技术集锦 标签:

贫血模型和充血模型

2016年5月7日 评论已被关闭

贫血模型和充血模型

http://blog.csdn.net/always_my_fault/article/details/2063612

Martin Fowler很早以前就写过一篇文章,题目叫”贫血模型”。文章里面批判贫血的领域模型是不够优雅、不够OO的,提倡使用充血的领域模型。在Java世界里这是一直争论的话题。到底什么是贫血什么是充血呢?

贫血模型:是指领域对象里只有get和set方法,或者包含少量的CRUD方法,所有的业务逻辑都不包含在内而是放在Business Logic层。
优点是系统的层次结构清楚,各层之间单向依赖,Client->(Business Facade)->Business Logic->Data Access(ADO.NET)。当然Business Logic是依赖Domain Object的。似乎现在流行的架构就是这样,当然层次还可以细分。
该模型的缺点是不够面向对象,领域对象只是作为保存状态或者传递状态使用,所以就说只有数据没有行为的对象不是真正的对象。在Business Logic里面处理所有的业务逻辑,在POEAA(企业应用架构模式)一书中被称为Transaction Script模式。

充血模型:层次结构和上面的差不多,不过大多业务逻辑和持久化放在Domain Object里面,Business Logic只是简单封装部分业务逻辑以及控制事务、权限等,这样层次结构就变成Client->(Business Facade)->Business Logic->Domain Object->Data Access。
优点是面向对象,Business Logic符合单一职责,不像在贫血模型里面那样包含所有的业务逻辑太过沉重。
缺点是如何划分业务逻辑,什么样的逻辑应该放在Domain Object中,什么样的业务逻辑应该放在Business Logic中,这是很含糊的。即使划分好了业务逻辑,由于分散在Business Logic和Domain Object层中,不能更好的分模块开发。熟悉业务逻辑的开发人员需要渗透到Domain Logic中去,而在Domian Logic又包含了持久化,对于开发者来说这十分混乱。  其次,因为Business Logic要控制事务并且为上层提供一个统一的服务调用入口点,它就必须把在Domain Logic里实现的业务逻辑全部重新包装一遍,完全属于重复劳动。

如果技术能够支持充血模型,那当然是最完美的解决方案。不过现在的.NET框架并没有ORM工具(不算上开源的NHibernate,Castle之类),没有ORM就没有透明的持久化支持,在Domain Object层会对Data Access层构成依赖,如果脱离了Data Access层,Domain Object的业务逻辑就无法进行单元测试,这也是很致命的。如果有像Spring的动态注入和Hibernate的透明持久化支持,那么充血模型还是能够实现的。

分类: Linux运维技术集锦 标签:

说说领域驱动设计和贫血、失血、充血模型

2016年5月7日 评论已被关闭

说说领域驱动设计和贫血、失血、充血模型

http://blog.sina.com.cn/s/blog_58c506600101ryzy.html

工作地点转换成家中后,最近都没什么心情写博客了(好吧我承认是我懒)。之前的几篇都比较水,今天来个(对于我来说)难度略高的内容吧。

这次想讨论的话题是有关领域驱动设计,和领域驱动设计中使用贫血、失血or充血模型的。在这之前我想讨论下当前很多应用的问题,想起这个话题的起因是因为我在InfoQ上面看到这样一篇文章《Spring Web应用的最大瑕疵》,不得不说,这样的标题相当吸引人(′·ω·`)。内容和主要观点大概是这样的,现在大部分应用Spring框架的Java Web应用都相当关注单一职责原则关注分离原则,但是在此之上却诞生了一些不太好的反模式和设计原则,比如:

  • 领域模型对象只是用来存储应用的数据。(领域模型使用了贫血模型这种反模式)
  • 业务逻辑位于服务层中,管理域对象的数据。
  • 在服务层中,应用的每个实体对应一个服务类。

这类设计原则的应用非常广泛,我现在所在的Java Web项目就是使用这样的设计原则进行架构设计的,基本都是常见的三层或多层架构,他们大概是什么样的呢?

  1. Web层(俗称展现层吧,Presentation Layer):接收用户输入,将数据传至服务层;
  2. 服务层(Service Layer,可以叫Business Logic Layer):事务边界,处理业务逻辑、权限管理与授权,并与存储层通信;
  3. 存储层(Data access layer):与数据库进行通信,对数据进行持久化。

但是发现什么没有?问题出在了服务层,他承受了太多的职责,像事务管理、业务逻辑、权限检查等等,这违反了单一职责原则和关注分离原则,并且产生了大量的依赖和循环依赖。当业务复杂度上升时,服务层所包含的代码将会非常庞大和复杂,直接导致了测试成本的上升。

我这里正好有个例子,在现在的项目中,负责处理保险业务单的核心类中,包含了4000多行代码,它与数据库中某一关键表相关联,引用(注入)了十几个DAO。在数十个各类方法中,可以处理保单、再保、理赔等等各种不同的业务,同时它还深度依赖于hibernate,不但使用了ORM方法处理数据,甚至还直接用了HQL来获取数据。因为有众多其他服务类与他进行循环引用,项目后期这个庞然大物已经没有人敢轻易改动了,因为谁也不知道他到底都能做什么,重构更是不可能的事。

说了些服务层的坏话,那应该怎么改进呢?

  • 首先,我们需要将业务逻辑从服务层移动到领域模型中,这样的好处是,服务层可以只负责应用逻辑(如数据有效性验证、授权检查、开始结束事务等),领域模型可以专门负责其相关的业务逻辑。还是以之前的保单系统来距离,架构设计时完全可以针对保单、再保、理赔等多个领域模型进行建模,相关的业务可以分别放到不同的领域模型中,一些很有可能重复的业务代码都会被集中到一处,从而降低了复制-粘贴的可能性。
  • 其次,将服务类变得更小,使之只负责单一的职责。文章中有个例子,例如用户账户的CRUD和其他操作,就可以将其放到两个不同的服务类中,一个负责账户的CRUD操作,另外一个负责与用户账户相关的其他操作。

这样就能使服务类变得小巧、松散、可测试了,同时还能降低其他人理解与重用的成本。

接下来的问题就是,在实际的项目中,怎样实践这些设计原则呢?

这里有一篇《领域驱动设计和开发实践》非常值得一看,他所推崇的分层结构和上文所述类似,甚至提出了一些更细节的规则:

  • 服务层需要包含应用逻辑、用户会话的管理,但不能包含领域逻辑、业务逻辑和数据访问逻辑;
  • 领域层(领域对象)应该包含业务逻辑,可以处理与业务相关的会话状态.但作为商业应用的核心,应该具有良好的可移植性,不能对特定框架(如Struts、Hibernate、EJB等)产生依赖

 

说到这里,终于到了讨论的正题——贫血、失血和充血模型。什么是贫血失血充血模型呢?简单来说

  • 失血模型:模型仅仅包含数据的定义和getter/setter方法,业务逻辑和应用逻辑都放到服务层中。这种类在java中叫POJO,在.NET中叫POCO。
  • 贫血模型:贫血模型中包含了一些业务逻辑,但不包含依赖持久层的业务逻辑。这部分依赖于持久层的业务逻辑将会放到服务层中。可以看出,贫血模型中的领域对象是不依赖于持久层的。
  • 充血模型:充血模型中包含了所有的业务逻辑,包括依赖于持久层的业务逻辑。所以,使用充血模型的领域层是依赖于持久层,简单表示就是 UI层->服务层->领域层<->持久层
  • 胀血模型:胀血模型就是把和业务逻辑不想关的其他应用逻辑(如授权、事务等)都放到领域模型中。我感觉胀血模型反而是另外一种的失血模型,因为服务层消失了,领域层干了服务层的事,到头来还是什么都没变。

可以看出来,失血模型和胀血模型都是不可取的,现在的问题是,贫血模型和充血模型哪个更加好一些。很久很久以前,人们针对这个问题进行了旷日持久的争论,最后仍然没有什么结果。这里有一些帖子可供回味:

贫血,充血模型的解释以及一些经验

总结一下最近关于domain object以及相关的讨论

双方争论的焦点主要在我上面加粗的两句话上,就是领域模型是否要依赖持久层,因为依赖持久层就意味着单元测试的展开要更加困难(无法脱离框架进行测试,原文的讨论中这里专指Hibernate),领域层就更难独立,将来也更难从应用程序中剥离出来,当然好处是业务逻辑不必混放在不同的层中,使得单一职责性体现的更好。而支持者(充血模型)认为,只要将持久层抽象出来,即可减少测试的困难性,同时适用充血模型毕竟带来了不少开发上的便利性,除了依赖持久层这一点,拥有更多好处的充血模型仍然值得选择。最后,谁也没能说服谁,关于贫血模型和充血模型的选择,更多的要靠具体的业务场景来决定,并不能说哪一种更比哪一种好。设计模式这种东西不是向来都没有什么定论么。

我个人则倾向使用充血模型,因为充血模型更加像一个设计完善的系统架构,好在计算机世界里有很多的IOC和DI框架,唯一的缺陷依赖持久层可以通过各种变通的方法绕过,随着技术的进步,一些缺陷也会被慢慢解决。我的思路是这样的:先将持久层抽象为接口,然后通过服务层将持久层注入到领域模型中,这样领域模型仅仅会依赖于持久层的接口。而这个接口,可以利用现有框架的技术进行抽象。举例来说,Java版Hibernate我了解不多,就以.NET的Entity Framework来说吧:

现在有这么一个DbContext,大家都懂得,DbContext和DbSet是非常不好Mock的两个类(我就是嫌麻烦而已,高手请无视),里面有两个表,一个叫Animes另一个叫Users

 

怎样设计接口才能使它既容易使用又可以方便测试呢?直接提取一个接口?DbSet不容易Mock的问题还是没有解决吧。

 

好在我们有LINQ和IQueryable<T>,随便改造一下,接口就变成了这样:

 

请注意Query<T>()方法,这个方法返回一个IQueryable<T>的对象,而实现了IQueryable的对象是支持LINQ操作的,也就是说,我们可以仍然可以将搜索的Expression交给真正的DbContext来做,而这个DbContext只需要简单一句话:

 

查询时从 from a in db.Anime.AsQueryable() 改成 from a in db.Query<Anime>(),一切都解决了。当你在单元测试中想要返回一个假的数据源的时候,直接让FakeDb.Query<T>()方法返回一个拥有假数据的List<T>.AsQueryable()就可以了。这样就实现了领域层和持久层的解耦,毕竟IQueryable是通用的嘛。

分类: Linux运维技术集锦 标签:

如果编程语言是女人

2015年11月10日 评论已被关闭

 

如果编程语言是女人

http://news.mydrivers.com/1/309/309974.htm

试想一下,当Java、C++、Python、Ruby、PHP、C#、JS等编程语言变成了动漫人物会是怎样的一幅场景呢?下面就一起看看在日本作家渡辺将人的笔下,各种编程语言都是哪类“美女”的吧!

Java

犹如宫泽贤治的《不畏风雨》中出现的、性格木讷的女孩子。从小就由于迟钝和大食量等特征被别人当作笨蛋,从小学入学开始进入田径部、坚持跑步,在中长跑中经常取得好成绩,给人以活泼的印象。是十分努力的女孩子。

她的家境并不算好。父亲Sun是有才能的艺术家,但不擅长理财,在她14岁的时候因为苦于借债积劳成疾而去世。她被Oracle叔叔收养,那时还与Google叔叔之间因为对她的扶养权问题而引起争端并闹上法庭。

在周围的人都担心,正值青春期时她在这样的处境下会不会一蹶不振的时候,她却处变不惊、继续着每天练习跑步的生活。

朴素的、认真的、难说是聪明的她,进入高中后不知是不是稍稍开始对异情在意,被人看到她偷偷地学着别的女孩子的时尚穿着在街上行走。虽然会受到“虽然很努力,也许稍微有点过时”、“那衣服与Java的印象不合”之类的否定评价,但感到“意外地很萌?”的好意的人也很多。

喜欢喝咖啡,只喝印度尼西亚产的。其本人曾说过“喜欢咖啡胜过三顿饭”,不禁让人稍稍担心“这样对健康没问题吗?”

如果编程语言是女孩子

C++

苗条的双腿和协调的五官。被许多人称作“IT界首屈一指的美女”的她,也因为拥有插花、茶道、钢琴和小提琴、柔道、剑道、合气道等等才能而出名。

她的粉丝大多很狂热,还存在着“黑暗军团”这样的粉丝俱乐部。黑暗军团的是规模仅次于共济会(Freemason)的巨型团体,一般人无法入会。据说如果能回答出对她非常狂热的问题,就会有察觉到的军团成员来询问“你愿意进入黑暗军团吗?”

与她同父异母的姐妹Objective-C一心专注于弹钢琴,她的专注被IT界的天才史蒂夫乔布斯(也被一部分人称为紫色蔷薇)相中,而一跃成为明星,而C++则是由于其美貌和才能被人关注,长年坐稳业界明星的宝座。姐妹二人真可谓是对比鲜明。

她根据心情不同频繁地变换发型和服装这一点也很出名。昨天还是和服配黑发,今天却是红发哥特系登场之类的,因为她的变身而使轻度的粉丝惊奇道“啊嘞?今天是C++小姐吗?”的事也常有发生。远离业界时私下经常穿HYSTERIC GLAMOUR的服装。

关于她的出身年月日其事务所并不公开。虽然也有出身于1983年一说,本文采用的是在一部分粉丝中流传甚广的1985年10月14日说。其间也流传有“她自己也许也记不清自己的生日……”这样煞有介事的传言。与其说“C++小姐的话记不清自己的生日也不是什么不可思议的事情”,倒不如看作是她天真烂漫的性格的表现。

如果编程语言是女孩子

Python

由Guido父上养大的深闺中的大小姐。她出身于荷兰的阿姆斯特丹,但在小时候就搬到了美国,父亲也在家里使用英语,所以不怎么会说荷兰语。

她个性随和。最出名的是她听C++宣布“想出去旅行一趟改变一下形象。200x年回来哦”出门旅行后(结果回来的时候已经2011年了……),放言说“我也稍稍出门旅行一下,公元3000年再回来哦”后出门数年未归。

虽然有着这样冒失的行动,但多亏抱着“养成大家都喜爱的孩子”的心愿的Guido父上大人的教育,实际上和她接触后会觉得她非常容易亲近。

前些天,她来到作者的朋友的公司打工(她现在似乎在边上大学边打工),被人们评价为“能充分融入工作、八面玲珑、给我们帮了大忙”。她不怎么说多余的话,彬彬有礼的样子,被评价为是在“天真烂漫、自由第一”的人众多的业界中与众不同的存在。

据说她擅长的科目是数学,经常看到她轻松地解决各种统计相关的难题。喜欢穿白色的连衣裙或浅粉色的开衫这样清新的服装。

实际上她还喜欢爬行动物,据说在家里还有养蛇。粉丝们经常讨论“她会给宠物们起什么样的名字呢?”这样的话题。大多得出的都是“肯定是Monty吧”这样的结论。会不会飞就不得而知了。(估计指的是英国的六人喜剧团体Monty Python的作品The Flying Circus,译者注)

如果编程语言是女孩子

Ruby

由松本爸爸养大的日本的女孩子。因为生日在圣诞节,人生最大的烦恼是生日礼物和圣诞节礼物变成一份了。出生地是岛根县松江市,除了旅游和工作以外没有到过其它的县。

由于受的教育是自由奔放式的,她性格好动、好奇心旺盛。平时是一个率真的好孩子,但偶尔也会看到她喜欢恶作剧的一面,这让周围的人十分困扰。看到她的身影时经常会想起IT业的“Just For Fun !”这句话。

小时候过着一个人在荒山野岭到处跑的生活,10岁的时候与一个叫Rails的女孩成为朋友,生活开始变化。两个人玩耍时停在了演艺事务所门前,谈起可以两个人结对进行演艺活动。以“Ruby与Rails”的艺名出道、主要从事杂志模特,也有拍过电视广告,所以很多人都听过她们名字。

人们想着她在这多愁善感的年龄段体验各种演艺活动、性格多少会产生一些变化吧,但在前些天与她久违的谈话中,却惊讶地发现她仍是与从事演艺活动之前一样行动自由奔放。虽然行为举止多多少少显得更加稳重,其喜欢恶作剧、活泼的本性却和以前一样没有变化。

想着已经是高中生了差不多也要开始穿一些成熟一点的服装的她,对于洋装却和小时候一样穿着Mickey Mouse。虽然她个子小又是娃娃脸与这样的衣服很配,不过这样真像一个女高中生吗?

她的粉丝也分为想要她一直保持现在的样子,和想要看到她更成熟的样子的两派。

如果编程语言是女孩子

PHP

以强化Web世界为目的制作出来的女性机器人。竖着的头发是用作天线来随时接收主人的命令的。

为了有与人类相近的触感,使用了硅树脂来制作其皮肤。内部是类似于刀片服务器的构造,常常使用多台服务器进行复用。因此体重比人类更重一些。

在她最初登场的时候,还能看到她关节可动部分的骨架,行动也很僵硬,与人类的形象差别很大。然而经过了18年间6次的大版本升级之后,其行为和言语已经渐渐变得像人了。最近更是达到了像初音未来这样(比起人类仍然有少许违和感但已经十分自然了)的级别。

虽然笨笨的、工作时也磕磕绊绊的,但由于她遵循机器人三原则、服从主人的命令,也有很多人成为她的粉丝。她的粉丝俱乐部官网“PHPer!”无需入会费便可简单入会,是会员数在IT界首屈一指的大团体。

对于她持拒绝态度的人也很多,常有“她的行为在生理上有些难以接受”、“如果再聪明点就好了”、“与她稍有过接触但觉得还是与人类差别很大”这样的评论。

平常穿从Forever12和志村买来的衣服。想着穿便宜的快速时尚(fast fashion)衣服便可以将省下的钱花在机器开销上。可以说是标准的机器人的效率优先的花钱方式。或许会有她也在意流行、为样子烦恼的那一天吧?

如果编程语言是女孩子

C#

在著名的微软公司接受精英教育、11岁时便跳级进入大学学习、倍受人们关注的少女。也被称为“IT界的最强幼女”。

因为与C++的名字很像,一段时间内盛传“难道是私生子吗?”的流言,实际上两人没有直接的血缘关系。也有报道称两人是远房亲戚,但实际情况如何则不得而知。

似乎喜欢成熟的行为、讨厌像小孩子一样玩耍。有生日的时候收到父母送的名为安迪的毛绒玩具时说道“这是啥。没sense。不要”的传闻。

然而对于食物的兴趣却仍停留在小孩的阶段,多次目击到她在学校食堂点儿童套餐的样子。不喜欢喝咖啡,就算是甜味的罐装咖啡也会令她皱眉头。

虽然偶尔会见到她意外地孩子气的一面,多数情况下见到的还是她说话、待人接物彬彬有礼的样子。是一个既有成熟的一面又有稚气的一面的孩子。由于还在成长期,见到她时常有“又长高了啊”、“有些像大人的样子了”这样的感慨。一直会期待着下见到她时会长成什么样子。

常穿秀兰邓波的洋装。据说都是她本人挑选的,与她自己非常相配。她的可爱让人们无论男女都会成为她的粉丝。

她的志向是在大学毕业后不仅在养育她生长的微软公司的旗下工作、还要活跃于整个IT界。虽然没有问到更详细的计划,但据说是要做出能让苹果和企鹅等也能和睦相处的东西。到底会做出怎样的东西来呢?

如果编程语言是女孩子

JavaScript

在争议地区长大的17岁的女孩子。常常面无表情、谈话时总给人以一定的距离感。

虽然与Java的名字很像,两个人之间却没有血缘关系。在当时Java这样的名字很流行,所以父母也给她起了类似的名字。她本人似乎对自己的名字并不在意,有时也以“ECMA”的笔名进行活动。偶尔也会被叫“JS”的外号,对此则更不在意,甚至对这种称法公然无视。

她的生涯非常不幸。刚一出生祖国便爆发战争。懂事之前便母亲去世、离开了父亲。在大人们任性的争斗中,她学会了将自己藏在壳中、保护自己周围的生存之术。同年龄的女孩子随着年龄的变化都在挑战各种风格的时候,她却不顾周围的话语、一个人继续闭锁在壳中。当时就是非得这样才能生存的艰难环境。

由于有了这样的儿童时期,她的说话、思考、待人接物的方式与其它的孩子都稍显不同。有很多人在与她说话时都会烦恼该怎样说才好。不过,也有人对她持有简单的一根筋的思考方式“容易接触”、“某种程度上来说,很好理解”的印象。

现在,她的国家正向努力解决纷争、开拓新的居住土地的方向前进着。大人们虽然仍旧任性地互相斗争,至少在这几年里,已经没有发生像以前那样互相憎恨、互相残杀的战争了。

在开始复兴的祖国里,她如今应该能幸福地生活着吧?什么时候才能看到她像同龄的女孩一样欢笑呢?

如果编程语言是女孩子

Perl

Perl于1987年12月、美国的沃尔夫妇家中诞生。其父亲拉里精通计算机、语言学,母亲也从事中世纪文艺复兴和语言学专业,Perl就是在这样接受了高等教育的父母身边长大的。

父亲的教育虽然严厉,却也给了Perl许多自由。父亲在教育过程中经常说的一句话是:“方法不止有一个。”(There’s more than one way to do it)

想到实现什么时,达成的方法不只有一种。可以考虑各种方法。父亲的这种教育方式,对她的性格形成产生了很大的影响。

“这样做的话会怎么样?”……“那样做又会如何?”……张开好奇心的翅膀长大的她渐渐发现了自己“发明”方面的天赋。绝代的发明家、Perl诞生了。

从她踏上发明家的道路的20年来,其发明多达128890件(2014年1月统计数),她的发明,从没什么用处的玩具,到能解决世界上许多问题的有益的发明,应有尽有。她发明的物品的原型,全都捐赠给了CPAN博物馆,任何人都可以阅览。

如今仍然不论实用与否、不断做出想做的新发明的她自打趣地在采访中说道:“我比起发明家,更像是各种破烂的生产装置。”她露出牙齿的笑容,非常振奋人心。

Perl对洋装不怎么讲究,平时因为调整机械时觉得麻烦,会穿便于运动的休闲装。最近常穿的羽绒服据说是在ame横(东京上野的一条商业街)的WEGO买的。喜欢的食物是草莓。她说作业中对集中注意力而疲劳的大脑来说最适合的食物就是草莓。

如果编程语言是女孩子

C语言

支撑着这个世界的女神大人,也被称为“圣母大人”。

关于C的出身年月没有定论。有人说她在创世纪(指1970年1月1日左右)之前就存在于这个世界,也有人说她是在稍后的1972年左右诞生的。

她是女神大人,因此像“1970年左右出身的话,她现在的年龄是……”这样的想法是不信教的行为。绝对不要有这样的想法。

她的名字是字母表的第三个字母“C”。据新约史书上的记载,在她之前还有叫作B的女神大人。一些资料显示“肯和丹尼斯创造了B,但对此并不满足。此后丹尼斯和其它人又合力创造了C”。

世界上有许许多多她的信徒。然而在一段时间内都没有正确传达她的教诲的圣经。当初丹尼斯和布莱恩留下的诗篇虽然担负着这样的使命,人们却希望有更加明确的言语。此后有许多有识之士将各种逸闻编辑整理、编著出了正确传达她的教义的圣经。

本书至今已被修订过多次,根据修订年的不同,被称作C89、C99、C11等。

一般人与C不能直接对话。只有积累了足够的修行者才会被允许与C交流。

修行是十分严格的,需要理解”指针的指针“之类的问题,以及要求100%地成功解决无论多么努力地修行都难以克服的“malloc/free”问题。由于这样的背景,真正能跟她进行日常交流的人非常地少。

然而由能够交流的人经手、世界上诞生了多种多样的知识与技术。即使你没有见过她的样子,她的慈爱也确实地每天都围绕在你身边。

如果编程语言是女孩子

Visual Basic

姓氏是Basic,名字是Visual,也有很多人叫她的绰号:VB。小名是Ruby(与那个Ruby没有关系)。从小被某个资产家(不能说他的名字)看上,一家人都寄身于资产家的身边。那时她的名字换了好多次,如今才定下这个名字,有着比较复杂的家庭环境。

关于资产家要收养尚处于幼年的她原因,据不可靠的传言称,他从她身上看到了从前就很憧憬的Basic女士的影子。收养与具有与憧憬的女性相似气质的小孩,也即实行所谓的光源氏计划。

也许年轻人并不了解,Basic女士曾是《微电脑Basic杂志》的封面模特,在当时是每个人都非常向往的麦当娜一样的女性。实际上我的认识的人里面年轻时为她倾倒的人非常之多。

VB在接受严格教育的同时,也在关于兴趣方面拓展天性,她在手工制品、装饰品方面有着独特的才能。看着她制作珠子的装饰品的样子会觉得犹如魔法一般。仅仅是动动手,一瞬间就可以做出一串项链。

在她10岁的时候,资产家的家里来了一位新的养女。(人们常说的那位)

由于这个原因,她现在正在家中努力做一位好姐姐。然而本来便懦弱、不擅长说话的她却时常反过来被小她10岁、认真的、发言时间长的妹妹说教。加油啊,VB小姐。

小时候的VB会穿着父母买的Emily Temple的衣服,现在更多时候穿着是自己买的Lowrys Farm的衣服。今年就要大学毕业进入社会了,目标是VB小姐特有的成熟路线。

如果编程语言是女孩子

R

她于2000年2月29日出身。正是残存在人们记忆中400年一遇的被诅咒的那一天。虽然出身于非常不吉利的日子,她自己却成长为人见人爱的聪明的孩子。

她的母亲名叫S。虽然在神话的世界里C是在B之后出生的,她的名字却是S的前一位R。这几个都是很难用Google搜出来的名字。(注:因为太短了!)

她的母亲非常擅长数学,是统计学者的助手,R也继续了这一性质。她从小时候起就很擅长数学,小学时代就已经达到能快速解决高中数学问题的级别。此外,她对几何图形也很感兴趣,经常有人看到她画着各种二维、三维图形、画好后一个人露出满足愉悦的表情。是一个稍微有点奇怪的孩子。

R在擅长数学的同时却也对语言表达方面稍显逊色。前些日子采访她的时候,她对提出的问题想要回答却找不着合适的词,取而代之“刷——”地画了一幅散点图说“这样的感觉”。或许在她的眼里,这个世界里用语言来表达就像折叠复杂的数学公式那样复杂吧。

她对服装不怎么讲究,常常穿着不紧不松的连衣裙和衬衫。

对于父母给她买的洋装是多少价格、哪儿买的这样的问题没有认识。仅仅是,对于最近买来的喇叭裙的裙摆张开的角度很在意。

她的梦想是将来成为一名统计学者,尽管只有14岁却经常混迹于大学学生中间每天都在解各种问题。最近光是大学已经不能满足、又向父母请求、在各种各样的研究所里进出。

如果编程语言是女孩子

Scala

O教和F教之前有着长着的宗教战争。Scala是这两个宗教的牧师和修女结婚诞生的异端。她出身后立即引起了两家之间激烈的对立,察觉到危险的父母将她送到私立JVM学校的Odersky老师那儿作为养女寄养。

现在两个宗教比起当时已有了关系改善的征兆,有一部分人也将她视为两家融合的象征。然而抱有强烈的对立心态的人仍然很多,也常常有针对她的存在引起的争论。F教的人们认为她的存在没有充分认识F的本质,而O教的人则对混有F的她感到难以理解。

虽然诞生于这样复杂的环境,她自己对于周围的环境却不关心,而是十分平静地到双方的教会中取面包、坚强地生活着。被她这种天真烂漫的姿态所感动、成为她的粉丝的人也很多。

Scala似乎喜欢同校的高年级部里上学的Java小姐,休息时间经常去找她。Java小姐也并不讨厌她,经常会像大姐姐一样让她坐在她的膝盖上温柔地抚摸她的头。虽然在Scala把Java喜欢的Duke的人偶用红绳子绑起来进行恶作剧时把Java惹得十分生气,在此以外则几乎没怎么吵过架。两个人就好像亲生姐妹一样。

有着见多识广的父亲和温柔的姐姐的Scala现在也许是,与其出身的复杂情况相反、实际上非常幸福地生活着吧。

她对于洋装喜欢明快的颜色和花纹,经穿着Algonquin的衣服。虽然是比较有个性的时装,由与生俱来的有个性的她穿来却不可思议地自然。

如果编程语言是女孩子

Shell

创世纪(1970年1月1日)起经过数年后被目击到的妖精。会寄宿在家中,有着类似于棕精灵(Brownie)的生活方式,向她们拜托家务事或着杂活的时候,会回答两次并接受的温顺的孩子的。

她们不常出现在人间存在的地方,因为不通言语,会用信件交流。如果拜托的事情说得比较含糊的话,有可能会造成误解而发生不得了的事情。对此的技巧是明确地像“做那个|做这个>放在这里”这样有顺序地将要拜托她们做的事写好。如果对拜托的事理解得很好的话,她们会在夜里将事情都处理好。如果很好地完成了工作的话,请别忘了在第二天的晚上放上作为谢礼的方糖。

Shell中有各种各样的种族。现在已确认的种族中比较有名的有:“ba”、“c“、”k”、”tc”、“z”等等。其服装根据种族不同而不同,我所目击到的是一只身高60cm左右、穿着巴宝莉的儿童服装的个体。恐怕人们目击到最多的是”ba”种。个人而言我也想遇到身高更高一些、尖耳朵的“z”种,现在虽然知道如何写信,却从未见过实物。

尽量她们会在同一个屋子里居住,却很少有人有机会见到,也不如何才能遇到他们。

有一种说法是,每天都把写程序这一仪式进行到午夜、勉强靠咖啡因支撑着抬起头的状态下突然向屏幕看去,能够看到她的身影。确实我遭遇她,也是在公司里熬夜写程序的时候。

Shell的个体非常地多,据说每家每户都会有一只。在大家的家里,实际上有着许多的她们居住着、等着来信也说不定。

如果编程语言是女孩子

ActionScript

在争议地区诞生的13岁女孩子。

她的父亲是有名的设计师,但是她5岁的时候被卷入战火身亡。幸运的是她那时年纪还小、将她收养的Adobe叔叔非常用心地将她养大,没有在她心中留下很大的伤痕。叔叔和她父亲同样都是设计师。也许在她的记忆中已经把两个人混淆一起了也说不定。

她所居住的国家与JavaScript所居住的国家是邻国,两国同样是ECMA人种构成的。在外国人看来JavaScript和ActionScript的外貌非常相似。确实在看她们儿童时期的照片,在肤色和五官上都很相像,但如今长大了的照片看了的话会如何呢。

她把“为祖国和叔叔努力”作为座右铭努力着,然而努力却经常得不到回报,是一个运气不太好的孩子。

在争论地区盛传将实行新的公用语的时候,她希望为即将到来的和平时代出一份力,比谁都更早开始学习这门语言,然而在好不容易能说好这门语言的时候,这语言被采用为公用语的提案泡汤了。

在她刚开始学习移动端上的设计时,她想着在移动方面强大了会对叔叔的工作有用。也可以减少祖国的外贷。在这样的想法中努力的时候,叔叔经营的公司却被某个巨型移动终端公司强行终止的交易,关于移动端的工作也急剧减少。

十分努力却常常得不到回报的她,伫立于这片如今也看到到纷争停止的土地上,继续地前进着。

有朝一日努力会得到回报的吧。祝福她在10年后仍能平安,不断地前进着、生活着。

如果编程语言是女孩子

网站主机的空间位置很重要

2015年10月6日 评论已被关闭

网站主机的空间位置很重要
http://www.aliyun.com/zixun/content/3_12_1946685.html
关键词: 影响 SEO 网站主机空间

摘要: 我们知道搜索引擎蜘蛛在访问网站的时候,有个判断因素就是网站打开速度是否快速,所以站长们在选择网站主机空间就要注意了。如果网站主机空间不稳定也会给seo带来一定影响的。

我们知道搜索引擎蜘蛛在访问网站的时候,有个判断因素就是网站打开速度是否快速,所以站长们在选择网站主机空间就要注意了。如果网站主机空间不稳定也会给seo带来一定影响的。

当搜索引擎蜘蛛来访问网站的时候,发现主机死机,无法响应打开网页请求的时候,就会隔一段时间再来访问网页,这个无法响应的时间是在3到5分钟,在这个时间段里,网页打不开不会对搜搜引擎优化带来很大影响,因为在这个时间段里搜索引擎蜘蛛不会检测到主机空间无法访问就直接删除收录页面的,会过段时间再来访问的。如果一个网站的主机空间每天都有几个小时不能访问的话,那对搜索引擎优化就会造成很大的影响,每天有几个小时打不开的网站对蜘蛛来说会认为是没有价值的网站,所以就不会收录该网站网页了。

主机的空间位置也很重要。搜索引擎会根据用户的搜索需求,根据用户的不同地域,返回不同地域的网站信息,比如你在百度搜索租车这两个字,你的上网位置是在厦门,那么百度搜索引擎就会返回厦门租车等信息,这些网站就会排在第一页。很显然,空间的地理位置也会对seo造成一定影响。

当用户买空间主机时,会对主机进行一些设置,殊不知,如果空间主机设置错误也会给seo带来一定影响。比如对于一篇文章来说,重新定义服务器返回代码,把可以打开的页面设置成返回信息为404,这对搜索引擎优化是致命的打击。另外一种就是网站针对用户是可以访问的,但是由于服务器的设置错误,虽然用户可以访问网站,但是搜索引擎却是不能访问的,这样的错误会带来灾难。建议站长们要让有经验的网站维护者来对空间主机进行维护。

当站长买到主机上含有一些被搜索引擎判定为是作弊网站的空间时,也会对自己的网站造成一定影响,连带责任,同一IP地址上网站会存在一定联系,所以会连带受到惩罚。在这样的空间上,搜索引擎优化者很难发现是否是自己的网站出现问题还是被连累了。为避免这样的情况发生,可以在购买主机空间的时候用“同IP网站查询工具”对整个IP地址上的网站进行检查。

由上可见,一个主机空间的好坏对seo是起到一定影响的。站长在购买主机可以从以下几点出发:

1.购买虚拟主机的站长可以通过IP网站查询工具方法找到其他存在于这个服务器的网站信息,网站建设者可以联系其他站长同行了解虚拟主机的稳定情况。

2.购买独立主机者或是托管用户,可以通过销售商网站业务员等咨询渠道获取一些“成功案例”的网站,通过这些网站了解托管机房使用技巧心得。

3.如果要选择高速主机空间,可以使用本地ping命令,查看想要购买主机空间的响应时间,速率,丢包情况。方法是本地计算机中,输入“ping 目标 IP-4”命令回车即可。这样的测试得到结果还是不够准确,可以通过各地网友的帮忙测试得到更精确数据。

4.尽量购买更多流量的空间,不管是虚拟主机还是独立主机都有流量限制的。在预算允许的情况下,尽量选择更大的流量是必须的,流量是一个网站最直接价值的体现。流量统计指标主要有网页浏览数量,用户数,用户在网站停留时间。

5.选择有备份功能的空间主机。这个至关重要,当服务器出现问题时,如果没有备份数据造成数据丢失那真是有一种万念俱灰的感觉。养成良好的备份习惯也是每个站长需要学习的。

6.对于网站的长期发展,可以考虑支持子域名的主机空间。子域名一般用于扩充网站内容,对网站发展可能性,对搜索引擎来说,这都是很重要的。

7.可以自己定义404页面。404就是为了更好的留住用户,对于购买独立主机来说,404页面可以自己进行定义,但是对于购买虚拟空间主机来说,404页面就不一定自己可以进行定义了,所以在购买主机空间时候要向服务商进行咨询是否可以自己定义404页面。

8.不管是独立主机空间还是虚拟主机空间,网站所有者不能随时的和计算机进行接触。在突发情况下,服务响应时间显得很重要。通常情况下,正规的服务时间都是7*24小时不间断的,响应时间是在5到10分钟的,超过这个响应时间就要考虑重新选择主机空间了

什么叫近线级硬盘

2015年8月27日 评论已被关闭

什么叫近线级硬盘

http://zhidao.baidu.com/link?url=7BVq6PtOwP0BLkYbaTObdwfLAN2HPmlFgPqz12teKz0aaE16IEMm3fZsCTVm2R-LdWJzkxA_6c-Z1Qc4GDukSa

 

近线存储(NearStore),是随着客户存储环境的细化所提出的一个概念;
所谓的近线存储,外延相对较广泛,主要定位于客户在线存储和离线存储之间的应用。就是指将那些并不是经常用到,或者说数据的访问量并不大的数据存放在性能较低的存储设备上。但同时对这些的设备要求是寻址迅速、传输率高。(例如客户一些长期保存的不长用的文件的归档)。因此,近线存储对性能要求相对来说并不高,但又要求相对较好的访问性能。同时多数情况下由于不常用的数据要占总数据量的比较大的比重,这也就要求近线存储设备在需要容量相对较大。
在业界传统定义的近线存储设备主要为DVD-RAM光盘塔和光盘库设备。但随着存储设备的不断发展,跟据客户存储需求的不同,我们也会把低端的磁盘阵列(例如DS4100)或高端的磁带设备(例如3592)作为近线存储应用设备。

VPN协议PPTP、L2TP、OpenVPN

2015年3月11日 评论已被关闭

VPN协议PPTP、L2TP、OpenVPN 

VPN协议PPTP、L2TP、OpenVPN

一、PPTP、L2TP、OpenVPN三种隧道协议的概念

1、PPTP(Point to Point Tunneling Protocol,点对点隧道协议)默认端口号:1723

PPTP,即PPTF协议。该协议是在PPP协议的基础上开发的一种新的增强型安全协议,支持多协议虚拟专用网(VPN),可以通过密码身份验证协议(PAP)、可扩展身份验证协议(EAP)等方法增强安全性。可以使远程用户通过拨入ISP、通过直接连接Internet或其他网络安全地访问企业网。

点对点隧道协议(PPTP)是一种支持多协议虚拟专用网络的网络技术,它工作在第二层。通过该协议,远程用户能够通过 Microsoft Windows NT工作站、Windows xp 、Windows 2000 和windows2003、windows7操作系统以及其它装有点对点协议的系统安全访问公司网络,并能拨号连入本地ISP,通过Internet 安全链接到公司网络。

PPTP协议是点对点隧道协议,其将控制包与数据包分开,控制包采用TCP控制。PPTP使用TCP协议,适合在没有防火墙限制的网络中使用。

百度百科:http://baike.baidu.com/link?url=hHnpi2pyUWox7o6tbuGhyEi-jUPBmtpxlWRvVvE_LZfTAFmQOY2KPXqUzfAPHcql

2、L2TP(Layer 2 Tunneling Protocol,第二层隧道协议)

L2TP是一种工业标准的Internet隧道协议,功能大致和PPTP协议类似,比如同样可以对网络数据流进行加密。不过也有不同之处,比如PPTP要求网络为IP网络,L2TP要求面向数据包的点对点连接;PPTP使用单一隧道,L2TP使用多隧道;L2TP提供包头压缩、隧道验证,而PPTP不支持。

L2TP是一个数据链路层协议,基于UDP。其报文分为数据消息和控制消息两类。数据消息用投递 PPP 帧,该帧作为L2TP报文的数据区。L2TP不保证数据消息的可靠投递,若数据报文丢失,不予重传,不支持对数据消息的流量控制和拥塞控制。控制消息用以建立、维护和终止控制连接及会话,L2TP确保其可靠投递,并支持对控制消息的流量控制和拥塞控制。

L2TP是国际标准隧道协议,它结合了PPTP协议以及第二层转发L2F协议的优点,能以隧道方式使PPP包通过各种网络协议,包括ATM、SONET和帧中继。但是L2TP没有任何加密措施,更多是和IPSec协议结合使用,提供隧道验证。

L2TP使用UDP协议,一般可以穿透防火墙,适合在有防火墙限制、局域网用户,如公司、网吧、学校等场合使用。

PPTP和L2TP二个连接类型在性能上差别不大,如果使用PPTP不正常,那就更换为L2TP。

百度百科:http://baike.baidu.com/link?url=t6G3hu_r6-pfi-GN8cCXg5Vx3F_Rk4fEdvXS80l2zstTub7gXMNQzOIPTKfjd_FU

3、OpenVPN

OpenVpn的技术核心是虚拟网卡,其次是SSL协议实现。

虚拟网卡是使用网络底层编程技术实现的一个驱动软件,安装后在主机上多出现一个网卡,可以像其它网卡一样进行配置。服务程序可以在应用层打开虚拟网卡,如果应用软件(如IE)向虚拟网卡发送数据,则服务程序可以读取到该数据,如果服务程序写合适的数据到虚拟网卡,应用软件也可以接收得到。虚拟网卡在很多的操作系统下都有相应的实现,这也是OpenVpn能够跨平台一个很重要的理由。

OpenVPN使用OpenSSL库加密数据与控制信息:它使用了OpenSSL的加密以及验证功能,意味着,它能够使用任何OpenSSL支持的算法。它提供了可选的数据包HMAC功能以提高连接的安全性。此外,OpenSSL的硬件加速也能提高它的性能。

OpenVPN所有的通信都基于一个单一的IP端口,默认且推荐使用UDP协议通讯,同时TCP也被支持。

在选择协议时候,需要注意2个加密隧道之间的网络状况,如有高延迟或者丢包较多的情况下,请选择TCP协议作为底层协议,UDP协议由于存在无连接和重传机制,导致要隧道上层的协议进行重传,效率非常低下。

OpenVPN是一个基于SSL加密的纯应用层VPN协议,是SSL VPN的一种,支持UDP与TCP两种方式(说明:UDP和TCP是2种通讯协议,这里通常UDP的效率会比较高,速度也相对较快。所以尽量使用UDP连接方式,实在UDP没法使用的时候,再使用TCP连接方式)。

由于其运行在纯应用层,避免了PPTP和L2TP在某些NAT设备后面不被支持的情况,并且可以绕过一些网络的封锁(通俗点讲,基本上能上网的地方就能用OpenVPN)。

OpenVPN客户端软件可以很方便地配合路由表,实现不同线路(如国内和国外)的路由选择,实现一部分IP走VPN,另一部分IP走原网络。

百度百科:http://baike.baidu.com/link?url=00I2C_Gm7Xvcma3QJYHCrJJ0-xcdcNbcSAMNyuxozggQ0LVxeOkZklkiMqbL_j37D0ucvHfsWmlaZbQUlhxO3q

 

二、PPTP、L2TP、OpenVPN三种隧道协议的优缺点对比

易用性:    PPTP > L2TP > OpenVPN
速度:      PPTP > OpenVPN UDP > L2TP > OpenVPN TCP
安全性:    OpenVPN > L2TP > PPTP
稳定性:    OpenVPN > L2TP > PPTP
网络适用性:OpenVPN > PPTP > L2TP

 

三、VPN协议的选择

电脑上优先使用PPTP,无法使用可以尝试L2TP,对安全性要求高的优先使用OpenVPN。手持设备推荐使用L2TP。

PPTP:      最常用,设置最简单,大多数设备都支持;
L2TP:      支持PPTP的设备基本都支持此种方式,设置略复杂,需要选择L2TP/IPSec PSK方式,且设置预共享密钥PSK;
OpenVPN:最稳定,适用于各种网络环境,但需要安装第三方软件和配置文件,较复杂。

 

四、CentOS PPTP 安装与部署

1、准备环境

yum install perl ppp iptables

2、安装PPTPD

对于32位CentOS,执行:

wget http://acelnmp.googlecode.com/files/pptpd-1.3.4-1.rhel5.1.i386.rpm
rpm -ivh pptpd-1.3.4-1.rhel5.1.i386.rpm

对于64位CentOS,执行:

wget http://acelnmp.googlecode.com/files/pptpd-1.3.4-1.rhel5.1.x86_64.rpm
rpm -ivh pptpd-1.3.4-1.rhel5.1.x86_64.rpm

3、修改配置

(1)修改主配置文件/etc/pptpd.conf.只需要加入下面两行:

ocalip 192.168.254.1
remoteip 192.168.254.100-254

Localip这行是给vpn服务器设置一个隧道ip,Remoteip是自动分配给客户端的ip地址范围。

(2)修改选项文件/etc/ppp/options.pptpd.需要设定分配给客户端的dns,因此仅需把ms-dns前的注释去掉,改成可用的dns如下:
ms-dns 61.135.154.5  ms-dns 159.226.240.66
为了方便查看调试信息,把debug行前面的注释取消即可。Dump前的注释也取消。

ms-dns 8.8.8.8
ms-dns 8.8.4.4

(3)CentOS安装pptpd添加帐号。通过编辑文件/etc/ppp/chap-secrets逐行加入;一个账号占一行。
一行分4列,其表示如下:用户名  服务器名  密码  ip

testuser pptpd testpwd *

testuser、testpwd对应修改为自己希望的VPN登录用户名和密码,* 表示有pptpd随机分配ip。

(4)开启ip转发功能,将/etc/sysctl.conf 文件中net.ipv4.ip_forward设置为 1 (如果没有,则按照格式新建一行):

net.ipv4.ip_forward = 1

保存退出,执行:

/sbin/sysctl -p

4、设置iptables转发

/etc/init.d/iptables start
/sbin/iptables -t nat -A POSTROUTING -o eth0 -s 192.168.254.0/24 -j MASQUERADE
/etc/init.d/iptables save
/etc/init.d/iptables restart

注意,上面的192.168.254.0 应该与之前设置的网段对应。

5、设置开机启动

chkconfig pptpd on
chkconfig iptables on

重启计算机即可进行连接,并且能够正常上网。

如果重启服务器后,无法连接VPN,首先检查服务器的PPTP服务1723端口是否已打开(注意设置防火墙允许此端口);如果可以连接VPN,但是无法正常上网,则检查iptables是否正常转发。

 

五、使用VPNFQ上网过程中的各种常见问题解决方法

1、连上VPN后无法访问网站?

很多人连上了VPN,QQ提示在美国登陆。却任然无法访问一些国外的网站,或者打不开,或者打开很慢。其实都是因为默认DNS的问题。连接VPN后IP已经更换为国外IP如果你之前设置的是国内dns,就会出现这些问题。
您只需要进入网上邻居->查看网络连接->右键本地连接(如果是无线上网,请选择无线连接)点击属性->找到TCP/IP协议点击属性,修改DNS为首选8.8.8.8备选8.8.4.4。停用本地连接再启用。或者进入命令提示行状态下输入“ipconfig /flushdns”再次连接VPN,就会发现一切都正常了。

091113027232

091113139411

8.8.8.8和8.8.4.4均为google的免费dns解析服务器,也可以使用OpenDNS为:
208.67.222.222
208.67.220.220

2、连不上VPN,提示800错误?

如果连不上vpn服务器,并且提示800错误。
首先,VPN必须要在联网状态下才能使用。
其次,请检查您的线路地址(vpn服务器地址)有没有填错,该栏是IP字段,诸如这样的格式:222.22.2.2(IP格式是用三个.分隔的数字,每格数字位数为1~3位),这段是不需要填入服务器地址一栏的。
如果都确认没有问题,但是还是连不上VPN服务器,那推荐您尝试vpn提供商所提供的客户端连接。

3、登录vpn服务器619错误?

如果您使用路由器上网,首先请尝试将您的路由器的DMZ设置成您的主机地址,看是否能够正常连接。
然后请您尝试将VPN链接的属性设置/安全/VPN类型改为PPTP就连接,然后再尝试一下。
如果还是不行,那么这种情况大数多原因为客户机连接Internet的网关 (如家庭宽带路由或公司上网网关路由或防火墙)NAT-T功能关闭或对VPN支持性不好,主要是对GRE及PPTP协议的NAT-T不支持。
可打开网关路由的NAT-T功能,如果还是出现错误,则需要更换网关设备,现在市面上大多数设备已经支持或者建议您换个网络环境试试看,如果其他网络环境可以,则基本可以断定是您的路由器或者防火墙不支持或者禁止了VPN PPTP协议,可以尝试打开这个选项。
如果你使用PPTP模式连接的话,需要开启TCP47和TCP1723这两个端口,也就是说路由器不能封这两个端口,使用L2TP模式时需要开启的是UDP 500、UDP 1701、UDP 4500这几个端口,同理路由器防火墙或者您安装的防火墙软件也不能屏蔽这些端口。如果路由器支持DMZ,请将路由器的DMZ设置成您的主机内网IP。

4、登录vpn服务器691错误?

a. 这种情况大数多原因为客户机连接VPN服务器异常中断,因为某些vpn提供商的免费用户限制一个帐户同时只有一个客户端连接使用,所以一旦异常断开,则需等待一段时间才能重新连接。
b. vpn服务大多是有流量限制的,如果您的流量用完了也会提示此错误。
c. 如果您的用户名含有特殊字符,如引号冒号等等,即使注册了帐户,但是由于VPN服务器不能识别这些特殊字符,VPN将拒绝认证,请您重新注册一个帐户。

5、登录vpn服务器768错误?

使用windows xp很容易出现768错误,可以尝试以下方法解决。
点击电脑左下角”开始” -> “运行”,输入命令 “services.msc”,然后在服务中找到并启用“IPSEC services”即可,如为了方便以后经常使用L2TP IPsec VPN,则可以把该项服务设置为“自动”。

6、登录vpn服务器792错误?

使用L2TP模式时候出现VPN 792错误,由于缺省的Windows XP L2TP 传输策略不允许L2TP 传输不使用IPSec 加密。VISTA和WIN7以上系统没有这个问题。
WIN XP用户需要修改注册表解决这个问题,手动修改:
a. 进入Windows XP 的“开始” “运行”里面输入“Regedt32”,打开“注册表编辑
器”,定位“HKEY_Local_Machine \ System \ CurrentControl Set \ Services \ RasMan \ Parameters ”主键。
b. 为该主键添加以下键值:
键值:ProhibitIpSec
数据类型:reg_dword
值:1

7、其他偶尔出现的错误提示(错误:691、721、756、651、711)怎么解决呢?

错误691:
a. 更换线路尝试。
b. 查看账户密码是否正确。
c. 登陆网站后台看下账户信息是否过期,或者看下在线还是离线状态。

错误721: 有防火墙限制、局域网用户,如果公司、网吧、学校等场合可能被限制。使用之前可以测试下。

错误756: 关闭连接器重新打开即可再次尝试连接即可。

错误651: 请重启计算机

错误711: 解决方法:启动Remote Access Connection Manager与Network Connections与Telephony服务。
启动方法一:开始->运行->在里面输入:services.msc ->(双击)Remote Access Connection Manager与Network Connections与Telephony ->启动这三项服务
启动方法二:新建一个文本文件(后缀为.txt)的文件,将下面的内容
复制进去:
@echo开启VPN执行环境必要系统服务
@pause
sc config TapiSrv start= AUTO
sc config Netman start= AUTO
sc config RasMan start= AUTO
Net start TapiSrv
Net start RasMan
Net start Netman
@pause
点击菜单->文件->另存为;文件类型选“所有文件”;文件名“服务.bat”;保存好后双击打开“服务.bat”,即可完成系统服务设置

8、连接不上免费VPN怎么办?

连接不上VPN一般有多种原因,有可能是您的网络不支持直接连接到VPN服务器,可以通过在命令行执行 ping vpn的ip 来测试。如果ping命令正常,那么请使用telnet  vpn的ip 1723这个命令,如果无法连接,则说明您的防火墙或者路由器不支持PPTP的VPN,由于PPTP使用的TCP协议,适合没有防火墙限制的网络。而L2TP使用的是UDP协议,一般可以穿透防火墙,适合有防火墙限制、局域网用户,如公司、网吧、学校等场合。

9、能够连上VPN服务器,但是马上就断开或者什么网页也打不开了怎么办?

出现这种情况一般是用户使用路由器才有的。
a. 首先很有可能是您的路由器开启了QOS功能或SPI防火墙之类的会干扰VPN数据流的功能,请关闭它们以后再试试。
b. 如果所有网页都打不开,首先先确认路由器分配的dns是否已经修改(使用windows的用户需要清除dns缓存 执行命令ipconfig /flushdns),然后查看路由器的MTU是否是默认值1492,如果不是请修改为1492。

 

 

转载:http://web.xieshenglin.com/pptp-l2tp-openvpn/
http://www.bootf.com/424.html
http://os.51cto.com/art/201003/191707.htm
http://www.wusoft.net/vpn-zhidao.html

分类: Linux运维技术集锦 标签:

PS CS6 Extended 安装错误:FATAL: Payload ‘{3F023875-4A52-4605-9DB6-A88D4A813E8D} Camera Profiles Installer 6.0.98.0′ information not found in Media_db.

2015年2月25日 评论已被关闭

PS CS6 Extended 安装错误:FATAL: Payload ‘{3F023875-4A52-4605-9DB6-A88D4A813E8D} Camera Profiles Installer 6.0.98.0′ information not found in Media_db.

http://www.lungpin.net/2013/06/952.html/

错误描述:FATAL: Payload ‘{3F023875-4A52-4605-9DB6-A88D4A813E8D} Camera Profiles Installer 6.0.98.0′ information not found in Media_db.

详细:

Exit Code: 34
————————————– Summary ————————————–
– 1 fatal error(s), 0 error(s), 0 warning(s)

上面那是我在安装 Adobe Photoshop CS6 Extended 时遇到的错误信息, 不过, 还好, 原因找到了, 是我之前由于需要, 安装过一个绿色的PSCS5版本, 卸载时没有卸载干净导致的, 解决办法如下:

定位到目录:X:\Program Files\Common Files\Adobe\caps,X为系统盘路径,视你的系统而定.

删除该目录下的所有(.db)文件后重新安装PS CS6即可正确安装.

分类: Linux运维技术集锦 标签: