ntpd服务会占用服务器多少资源

ntpd服务会占用服务器多少资源,第1张

设置NTP服务器不难但是NTP本身是一个很复杂的协议 这里只是简要地介绍一下实践方法

和上次一样,下面的实验都在RHEL5上运行

1 时间和时区

如果有人问你说现在几点 你看了看表回答他说晚上8点了 这样回答看上去没有什么问题,但是如果问你的这个人在欧洲的话那么你的回答就会让他很疑惑,因为他那里还太阳当空呢

这里就有产生了一个如何定义时间的问题 因为在地球环绕太阳旋转的24个小时中,世界各地日出日落的时间是不一样的所以我们才有划分时区(timezone) 的必要,也就是把全球划分成24个不同的时区 所以我们可以把时间的定义理解为一个时间的值加上所在地的时区(注意这个所在地可以精确到城市)

地理课上我们都学过格林威治时间(GMT), 它也就是0时区时间 但是我们在计算机中经常看到的是UTC 它是Coordinated Universal Time的简写 虽然可以认为UTC和GMT的值相等(误差相当之小),但是UTC已经被认定为是国际标准,所以我们都应该遵守标准只使用UTC

那么假如现在中国当地的时间是晚上8点的话,我们可以有下面两种表示方式

20:00 CST

12:00 UTC

这里的CST是Chinese Standard Time,也就是我们通常所说的北京时间了 因为中国处在UTC+8时区,依次类推那么也就是12:00 UTC了

为什么要说这些呢(呵呵这里不是地理论坛吧)

第一,不管通过任何渠道我们想要同步系统的时间,通常提供方只会给出UTC+0的时间值而不会提供时区(因为它不知道你在哪里)所以当我们设置系统时间的时候,设置好时区是首先要做的工作

第二,很多国家都有夏令时(我记得小时候中国也实行过一次),那就是在一年当中的某一天时钟拨快一小时(比如从UTC+8一下变成UTC+9了),那么同理到时候还要再拨慢回来如果我们设置了正确的时区,当需要改变时间的时候系统就会自动替我们调整

现在我们就来看一下如何在Linux下设置时区,也就是time zone

2 如何设置Linux Time Zone

在Linux下glibc提供了我们事先编译好的许多timezone文件, 他们就放在/usr/share/zoneinfo这个目录下,这里基本涵盖了大部分的国家和城市

代码:

# ls -F /usr/share/zoneinfo/

Africa/ Chile/ Factory Iceland Mexico/ posix/ Universal

America/ CST6CDT GB Indian/ Mideast/ posixrules US/

Antarctica/ Cuba GB-Eire Iran MST PRC UTC

Arctic/ EET GMT iso3166tab MST7MDT PST8PDT WET

Asia/ Egypt GMT0 Israel Navajo right/ W-SU

Atlantic/ Eire GMT-0 Jamaica NZ ROC zonetab

Australia/ EST GMT+0 Japan NZ-CHAT ROK Zulu

Brazil/ EST5EDT Greenwich Kwajalein Pacific/ Singapore

Canada/ Etc/ Hongkong Libya Poland Turkey

CET Europe/ HST MET Portugal UCT在这里面我们就可以找到自己所在城市的time zone文件 那么如果我们想查看对于每个time zone当前的时间我们可以用zdump命令

代码:

# zdump Hongkong

Hongkong Fri Jul 6 06:13:57 2007 HKT那么我们又怎么来告诉系统我们所在time zone是哪个呢 方法有很多,这里举出两种

第一个就是修改/etc/localtime这个文件,这个文件定义了我么所在的local time zone

我们可以在/usr/share/zoneinfo下找到我们的time zone文件然后拷贝去到/etc/localtimezone(或者做个symbolic link)

假设我们现在的time zone是BST(也就是英国的夏令时间,UTC+1)

代码:

# date

Thu Jul 5 23:33:40 BST 2007我们想把time zone换成上海所在的时区就可以这么做

代码:

# ln -sf /usr/share/zoneinfo/posix/Asia/Shanghai /etc/localtime

# date

Fri Jul 6 06:35:52 CST 2007

这样时区就改过来了(注意时间也做了相应的调整)

第二种方法也就设置TZ环境变量的值 许多程序和命令都会用到这个变量的值 TZ的值可以有多种格式,最简单的设置方法就是使用tzselect命令

代码:

# tzselect

TZ='America/Los_Angeles';export TZtzselect

会让你选择所在的国家和城市(我省略了这些步骤),最后输出相应的TZ变量的值那么如果你设置了TZ的值之后时区就又会发生变化

代码:

# date

Thu Jul 5 15:48:11 PDT 2007

通过这两个例子我们也可以发现TZ变量的值会override /etc/localtime 也就是说当TZ变量没有定义的时候系统才使用/etc/localtime来确定time zone 所以你想永久修改time zone的话那么可以把TZ变量的设置写入/etc/profile里

好了现在我们知道怎么设置时区了,下面我们就来看看如何设置Linux的时间吧

3 Real Time Clock(RTC) and System Clock

说道设置时间这里还要明确另外一个概念就是在一台计算机上我们有两个时钟:一个称之为硬件时间时钟(RTC),还有一个称之为系统时钟(System Clock)

硬件时钟是指嵌在主板上的特殊的电路, 它的存在就是平时我们关机之后还可以计算时间的原因

系统时钟就是操作系统的kernel所用来计算时间的时钟 它从1970年1月1日00:00:00 UTC时间到目前为止秒数总和的值 在Linux下系统时间在开机的时候会和硬件时间同步(synchronization),之后也就各自独立运行了

那么既然两个时钟独自运行,那么时间久了必然就会产生误差了,下面我们来看一个例子

代码:

# date

Fri Jul 6 00:27:13 BST 2007

# hwclock --show

Fri 06 Jul 2007 12:27:17 AM BST -0968931 seconds

通过hwclock --show 命令我们可以查看机器上的硬件时间(always in local time zone), 我们可以看到它和系统时间还是有一定的误差的, 那么我们就需要把他们同步

如果我们想要把硬件时间设置成系统时间我们可以运行以下命令

代码:

# hwclock --hctosys 反之,我们也可以把系统时间设置成硬件时间

代码:

# hwclock --systohc 那么如果想设置硬件时间我们可以开机的时候在BIOS里设定也可以用hwclock命令

代码:

# hwclock --set --date="mm/dd/yy hh:mm:ss" 如果想要修改系统时间那么用date命令就最简单了

代码:

# date -s "dd/mm/yyyy hh:mm:ss" 现在我们知道了如何设置系统和硬件的时间 但问题是如果这两个时间都不准确了怎么办 那么我们就需要在互联网上找到一个可以提供我们准确时间的服务器然后通过一种协议来同步我们的系统时间,那么这个协议就是NTP了 注意接下去我们所要说的同步就都是指系统时间和网络服务器之间的同步了

4 设置NTP Server前的准备

其实这个标题应该改为设置"NTP Relay Server"前的准备更加合适 因为不论我们的计算机配置多好运行时间久了都会产生误差,所以不足以给互联网上的其他服务器做NTP Server 真正能够精确地测算时间的还是原子钟 但由于原子钟十分的昂贵,只有少部分组织拥有, 他们连接到计算机之后就成了一台真正的NTP Server 而我们所要做的就是连接到这些服务器上同步我们系统的时间,然后把我们自己的服务器做成NTP Relay Server再给互联网或者是局域网内的用户提供同步服务

好了,前面讲了一大堆理论,现在我们来动手实践一下吧 架设一个NTP Relay Server其实非常简单,我们先把需要的RPM包装上

是否已经安装了NTP包可以用这条命令来确定:

[root@NTPser ~]# rpm -qa | grep ntp

ntp-422p1-9el5_41

chkfontpath-1101-11

出现以上代码则表示已安装NTP包,否则用下面方法安装:

代码:

# rpm -ivh ntp-422p1-5el5rpm

那么第一步我们就要找到在互联网上给我们提供同步服务的NTP Server

http://wwwpoolntporg是NTP的官方网站,在这上面我们可以找到离我们城市最近的NTP Server NTP建议我们为了保障时间的准确性,最少找两个个NTP Server

那么比如在英国的话就可以选择下面两个服务器

0ukpoolntporg

1ukpoolntporg

它的一般格式都是numbercountrypoolntporg

第二步要做的就是在打开NTP服务器之前先和这些服务器做一个同步,使得我们机器的时间尽量接近标准时间

这里我们可以用ntpdate命令手动更新时间

代码:

# ntpdate 0ukpoolntporg

6 Jul 01:21:49 ntpdate[4528]: step time server 21322219335 offset -38908575181 sec

# ntpdate 0poolntporg

6 Jul 01:21:56 ntpdate[4530]: adjust time server 21322219335 offset -0000065 sec

假如你的时间差的很离谱的话第一次会看到调整的幅度比较大,所以保险起见可以运行两次 那么为什么在打开NTP服务之前先要手动运行同步呢

1 因为根据NTP的设置,如果你的系统时间比正确时间要快的话那么NTP是不会帮你调整的,所以要么你把时间设置回去,要么先做一个手动同步

2 当你的时间设置和NTP服务器的时间相差很大的时候,NTP会花上较长一段时间进行调整所以手动同步可以减少这段时间

5 配置和运行NTP Server

现在我们就来创建NTP的配置文件了, 它就是/etc/ntpconf 我们只需要加入上面的NTP Server和一个driftfile就可以了

代码:

# vi /etc/ntpconf

server 2107214544 #这是中国国家授时中心的IP

server 0ukpoolntporg

server 1ukpoolntporg

fudge 12712710 stratum 0 stratum 这行是时间服务器的层次。设为0则为顶级,如果要向别的NTP服务器更新时间,请不要把它设为0

driftfile /var/lib/ntp/ntpdrift 非常的简单 接下来我们就启动NTP Server,并且设置其在开机后自动运行

代码:

# /etc/initd/ntpd start

# chkconfig --level 35 ntpd on

6 查看NTP服务的运行状况

现在我们已经启动了NTP的服务,但是我们的系统时间到底和服务器同步了没有呢 为此NTP提供了一个很好的查看工具: ntpq (NTP query)

我建议大家在打开NTP服务器后就可以运行ntpq命令来监测服务器的运行这里我们可以使用watch命令来查看一段时间内服务器各项数值的变化

代码:

# watch ntpq -p

Every 20s: ntpq -p Sat Jul 7 00:41:45 2007

remote refid st t when poll reach delay offset jitter

===========================================================

+1936019975 193622298 2 u 52 64 377 8578 10203 289032

mozartmusicbox 19254141 2 u 54 64 377 19301 -60218 292411

现在我就来解释一下其中的含义

remote: 它指的就是本地机器所连接的远程NTP服务器

refid: 它指的是给远程服务器(eg 1936019975)提供时间同步的服务器

st: 远程服务器的层级别(stratum) 由于NTP是层型结构,有顶端的服务器,多层的Relay Server再到客户端 所以服务器从高到低级别可以设定为1-16 为了减缓负荷和网络堵塞,原则上应该避免直接连接到级别为1的服务器的

t: 这个我也不知道啥意思^_^

when: 我个人把它理解为一个计时器用来告诉我们还有多久本地机器就需要和远程服务器进行一次时间同步

poll: 本地机和远程服务器多少时间进行一次同步(单位为秒) 在一开始运行NTP的时候这个poll值会比较小,那样和服务器同步的频率也就增加了,可以尽快调整到正确的时间范围之后poll值会逐渐增大,同步的频率也就会相应减小

reach: 这是一个八进制值,用来测试能否和服务器连接每成功连接一次它的值就会增加

delay: 从本地机发送同步要求到服务器的round trip time

offset: 这是个最关键的值, 它告诉了我们本地机和服务器之间的时间差别 offset越接近于0,我们就和服务器的时间越接近

jitter: 这是一个用来做统计的值 它统计了在特定个连续的连接数里offset的分布情况 简单地说这个数值的绝对值越小我们和服务器的时间就越精确

那么大家细心的话就会发现两个问题: 第一我们连接的是0ukpoolntporg为什么和remote server不一样 第二那个最前面的+和都是什么意思呢

第一个问题不难理解,因为NTP提供给我们的是一个cluster server所以每次连接的得到的服务器都有可能是不一样同样这也告诉我们了在指定NTP Server的时候应该使用hostname而不是IP

第二个问题和第一个相关,既然有这么多的服务器就是为了在发生问题的时候其他的服务器还可以正常地给我们提供服务那么如何知道这些服务器的状态呢 这就是第一个记号会告诉我们的信息

它告诉我们远端的服务器已经被确认为我们的主NTP Server,我们系统的时间将由这台机器所提供

+ 它将作为辅助的NTP Server和带有号的服务器一起为我们提供同步服务 当号服务器不可用时它就可以接管

- 远程服务器被clustering algorithm认为是不合格的NTP Server

x 远程服务器不可用

了解这些之后我们就可以实时监测我们系统的时间同步状况了

7 NTP安全设置

运行一个NTP Server不需要占用很多的系统资源,所以也不用专门配置独立的服务器,就可以给许多client提供时间同步服务, 但是一些基本的安全设置还是很有必要的

那么这里一个很简单的思路就是第一我们只允许局域网内一部分的用户连接到我们的服务器 第二个就是这些client不能修改我们服务器上的时间

关于权限设定部分

权限的设定主要以 restrict 这个参数来设定,主要的语法为:

restrict IP地址 mask 子网掩码 参数

其中 IP 可以是IP地址,也可以是 default ,default 就是指所有的IP

参数有以下几个:

ignore :关闭所有的 NTP 联机服务

nomodify:客户端不能更改服务端的时间参数,但是客户端可以通过服务端进行网络校时。

notrust :客户端除非通过认证,否则该客户端来源将被视为不信任子网

noquery :不提供客户端的时间查询

注意:如果参数没有设定,那就表示该 IP (或子网)没有任何限制!

在/etc/ntpconf文件中我们可以用restrict关键字来配置上面的要求

首先我们对于默认的client拒绝所有的操作

代码:

restrict default kod nomodify notrap nopeer noquery

然后允许本机地址一切的操作

代码:

restrict 127001

最后我们允许局域网内所有client连接到这台服务器同步时间但是拒绝让他们修改服务器上的时间

代码:

restrict 19216810 mask 2552552550 nomodify

把这三条加入到/etc/ntpconf中就完成了我们的简单配置 NTP还可以用key来做authentication,这里就不详细介绍了

8 NTP client的设置

做到这里我们已经有了一台自己的Relay Server如果我们想让局域网内的其他client都进行时间同步的话那么我们就都应该照样再搭建一台Relay Server,然后把所有的client都指向这两台服务器(注意不要把所有的client都指向Internet上的服务器) 只要在client的/etc/ntpconf加上这你自己的服务器就可以了

代码:

server ntp1leonardcom

server ntp2leonardcom

LINUX客户端使用

ntpdate 17230218114

来向NTP服务器同步自己的时间

其它LINUX如果仅作为只客户端的话,则不能启动ntpd服务!否则无法运行ntpdata 服务器地址 来同步时间

之后可以使用cron或修改crontab文件定期向NTP服务器更新时间,并用

# hwclock --systohc

将系统时间设置为硬件时间

9 一些补充和拾遗(挺重要)

1 配置文件中的driftfile是什么

我们每一个system clock的频率都有小小的误差,这个就是为什么机器运行一段时间后会不精确 NTP会自动来监测我们时钟的误差值并予以调整但问题是这是一个冗长的过程,所以它会把记录下来的误差先写入driftfile这样即使你重新开机以后之前的计算结果也就不会丢失了

2 如何同步硬件时钟

NTP一般只会同步system clock 但是如果我们也要同步RTC(hwclock)的话那么只需要把下面的选项打开就可以了

代码:

# vi /etc/sysconfig/ntpd

SYNC_HWCLOCK=yes

3、利用crontab让LINUX NTP定时更新时间

注:让linux运行ntpdate更新时间时,linux不能开启NTP服务,否则会提示端口被占用:如下

[root@ESXI ~]# ntpdate 1rhelpoolntporg

20 May 09:34:14 ntpdate[6747]: the NTP socket is in use, exiting

crontab文件配置简要说明

命令格式的前一部分是对时间的设定,后面一部分是要执行的命令。时间的设定我们有一定的约定,前面五个号代表五个数字,数字的取值范围和含义如下:

分钟 (0-59)

小时 (0-23)

日期 (1-31)

月份 (1-12)

星期 (0-6)//0代表星期天

除了数字还有几个个特殊的符号就是“”、“/”和“-”、“,”,“”代表所有的取值范围内的数字,“/”代表每的意思,“/5”表示每5个单位,“-”代表从某个数字到某个数字,“,”分开几个离散的数字。以下举几个例子说明问题:

每天早上6点:

0 6 command

每两个小时:

0 /2 command

晚上11点到早上8点之间每两个小时,早上八点:

0 23-7/2,8 command

每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点:

0 11 4 1-3 command

1月1日早上4点:

0 4 1 1 command

33、设置开机自动启动服务

运行setup或其它服务设置工具,将crond服务勾选上

chkconfig --level 2345 crond on 定义在这几个系统运行级别上启用crond (系统安装完默认就是这个设置)

__________________________________________

10NTP客户端的设置

一、LINUX做为客户端自动同步时间

如果想定时进行时间校准,可以使用crond服务来定时执行。

编辑 /etc/crontab 文件

加入下面一行:

30 8 root /usr/sbin/ntpdate 19216801; /sbin/hwclock -w #19216801是NTP服务器的IP地址

然后重启crond服务

service crond restart

这样,每天 8:30 Linux 系统就会自动的进行网络时间校准。

二、WINDOWS 需要打开windows time服务和RPC的二个服务

如果在打开windows time 服务,时报 错误1058,进行下面操作

1运行 cmd 进入命令行,然后键入

w32tm /register 进行注册

正确的响应为:W32Time 成功注册。

2如果上一步正确,用 net start "windows time" 或 net start w32time 启动服务。

11其它造成无法成功更新的原因:

1、客户端的日期必须要设置正确,不能超出正常时间24小时,不然会因为安全原因被拒绝更新。其次客户端的时区必须要设置好,以确保不会更新成其它时区的时间。

2、fudge 12712710 stratum 10 如果是LINUX做为NTP服务器,stratum(层级)的值不能太大,如果要向上级NTP更新可以设成2

3、LINUX的NTP服务器必须记得将从上级NTP更新的时间从系统时间写到硬件里去 hwclock --systohc

NTP一般只会同步system clock 但是如果我们也要同步RTC(hwclock)的话那么只需要把下面的选项打开就可以了

代码:

# vi /etc/sysconfig/ntpd

SYNC_HWCLOCK=yes

4、Linux如果开启了NTP服务,则不能手动运行ntpdate更新时间(会报端口被占用),它只能根据/etc/ntpconf 里server 字段后的服务器地址按一定时间间隔自动向上级NTP服务器更新时间。可以运行命令 ntpstat 查看每次更新间隔如:

[root@ESXI ~]# ntpstat

synchronised to NTP server (2107214544) at stratum 2 #本NTP服务器层次为2,已向2107214544 NTP同步过

time correct to within 93 ms #时间校正到相差93ms之内

polling server every 1024 s #每1024秒会向上级NTP轮询更新一次时间

  首先说明:

  sv_ 以及sys_ 系列参数,是服务器端的命令,如果是在非本地服务器上修改这些系列参数的命令,你需要获得服务器管理员的权限、

  ex_interp和cl_updaterate的关系是非常紧密的,这两个参数的说明都请必须阅读。

  文章中假设玩家的网络都在宽带接入的方式下进行。

  ------------------------------------------------------------------------------------------------

  参数介绍:

  cl_cmdrate:

  这个命令决定了客户端向每秒钟服务端发送数据包的数量。很明显地,这个参数的数值设定得越高,那么服务器就能相应客户端处理信息的速度越快,基本上数值设定得高是没什么错的。如果你与你的朋友都在局域网中游戏,而延时非常严重,那么很可能就是这个参数没有设置好。事实上,大多数的宽带接入没有提供足量的上行带宽,这也恰好是这个命令需要的。

  cl_updaterate:

  cl_updaterate与cl_cmdrate是类似的,不过方向是相反的。它控制的是客户端每秒钟从服务端接收数据包的数量。因此,它和你的下行带宽是紧密相连的。cl_updaterate的数值设定得越高,你和服务器的同步率就越高。因为只有服务器才会决定你开枪是否命中,所以你需要足够的更新数据包(upadates)。

  sv_maxupdaterate:

  cl_updaterate控制客户端每秒接收来自服务端的数据更新包数量(只对客户端本身控制),而sv_maxupdaterate就指定了服务端每秒发送多少数据包到客户端上(对服务端进行控制)。因此,客户端cl_updaterate的数值设定比服务端sv_maxupdaterate的数值要高,是不能增加客户端接受的更新数据包数量的。

  sys_ticrate:

  这个命令设定了服务器每秒能处理的最大数据“帧”数。默认设定下,这个参数设置为100。为什么服务器的fps那么重要?这个参数决定了服务器的感应能力。我敢肯定我们都觉得服务器好像在TI-83 Plus(图形计算器)上工作一样,而我们就是在LAN上进行这些图形计算器的处理。

  sys_ticrate只是指定你的服务器所能计算的最大fps。默认设定下,服务器不会达到你所设定的数值,因为运算系统可能在处理某些其他的进程。市面上有不同的加速("boost")服务器fps的软件,不过大多数(如果不是全部的话)服务器加速软件是靠网络服务器供应商处理的,记住,这样的加速会加重服务器CPU的负荷。(出于某些原因,在de_inferno和de_aztec上用服务器加速软件的话,会剧烈增加CPU的负荷,大家可能曾经有过这样的体验。)在默认设置下,Half-life服务器,基于Win32的服务器一般在64fps,而基于Linux的服务器一般在50fps。如果使用加速软件的话,可能可以提升到512fps或者更高。这么高的服务器fps是受到争议的,不过我感觉如果在200fps左右就能感觉到明显的改进了。

  一致性才是关键的。Fps从100飙升到512,这样可能会带来一个更差的游戏环境,因为sys_ticrate只在150左右,150是大多数服务器硬件所能承受的了的。

  如果你有一个服务器的权限,而且想测试一下服务器的fps,那么在控制台输入rcon stats,看看你的服务器是否加速了:暂时地把sys_ticrate调到10000,然后在看看服务器的fps是否超过100,如果超过100,那就是加速了的。

  ex_interp:

  在解释这个参数之前,我们看看Webster字典对interpolate(添加,改写)这个词的解释

  (以下是Webster字典的解释,译者这里不将原英文去掉,是让大家容易看到原有的解释)

  Main Entry: in•ter•po•late

  主要条目: in•ter•po•late

  3 : to estimate values of (a function) between two known values

  3 : 评估两个已知值之间的量的关系

  intransitive senses : to make insertions (as of estimated values)

  不及物动词:进行插入(到已评估的值之中)

  每一秒你只能从服务器获得有限的更新,因此是不可能每次都那么精确地及时地与服务器达到同步。举个例子:

  下面的图形显示的是圆的线性内插法。当数据点(更新数据包)的数量增加的时候,则插入的量则变得更加地准确。在CS中,你可以将这个比喻成在一秒内一个人物位置变化所跨越的范围。在服务器看来,这是一个精准的圆圈,而从客户端就需要在两个“真正”的数据包中插入一定的数据。

  这就是ex_interp作用所在。在每一个更新包之间都会有一个很小的时间增量存在,这个时间由half-life的预处理系统计算。ex_interp设置了在每两个连续的更新之间的插入数(时间单位是秒)。在上面所看到的图象中,这些小的时间间隔会表示为图象的直边。因为插入值的处理是在客户端进行的,所以在服务器看来并不是完全的同步的。没有什么可以代替从服务端发出的真实的数据更新包,不过插入值的计算在大体上还是能达到要求。(译者注:感谢inbremen找到的)

  ------------------------------------------------------------------------------------------------

  对线上游戏(互联网对战)的推荐值:

  rate

  我之前已经假设rate的数值为20000。把它调到20000以上不会有任何的改善,还可能会造成更不好的影响。

  推荐值:

  rate 20000

  sv_maxrate:

  这个值在大多数的情况下设置为0。我会解释一下为什么在线上游戏时这并不是个理想的数值。sv_maxrate 0 会检测每一个客户端rate的设置,并尽量满足每一个玩家的需求。假设对half-life引擎来说每一秒允许玩家使用的rate参数的数值超过20000。如果有一个玩家将这个数值设定为一个超高值(比如:999999999),那么服务器会尽量的去满足这个玩家的需要。那么这样会潜在的浪费带宽,并且会对服务器造成更多的负担,也许会超过服务器所能承受的范围。因此,我提出一个比较安全的建议,sv_maxrate在20000的时候会有比较好的表现。在现实中,sv_maxrate 0和sv_maxrate 20000的效果对游戏的进行而言可能都是一样的,不过提高一些预防的范围总是好的。

  推荐值:

  sv_maxrate 20000

  cl_cmdrate:在理想情况下,这个数值应该和服务器的fps是相等的(不是有些人所认为的客户端的fps)。如果你对服务器的更新超过了在同一时段内服务器所能处理的帧数的话,多余的更新包会被服务器所丢弃。因此,cl_cmdrate设置得太高会有不好的效果,直接造成带宽的浪费。

  推荐值:

  cl_cmdrate与服务器的fps值相等或者稍高。

  ex_interp:

  把这个参数设为0或者什么都不写。CS会自动的把ex_interp设置为1/cl_updaterate(比如你的console窗口会显示“ex_interp forced up to xx msec")。这就是你想你的客户端要进行插入的时间长度。改变cl_updaterate会自动地改变ex_interp(当ex_interp=0时发生)。因此我推荐只改变cl_updaterate,让CS去设置你的ex_interp。现在已经不可能把ex_interp设定得比1/cl_updaterate更低了,把它设定得高一些却会产生错误。设置一个比1/cl_updaterate更高的值会造成你开枪的时候打在屏幕中人物的后面(译者注:就是实际上你并没有打中人物,而只打在他的后面)。举个例子,如果你用cl_updaterate 101,那么ex_interp应该是1/101=0009(9毫秒),那么使用默认的ex_interp 01,而cl_updaterate还是这么高的话,那么之前所说的错误就会产生。

  推荐值:

  ex_interp 0

  cl_updaterate:长期以来,大家都认为cl_updaterate的规定是在101,这样能使你获得少量的"choke(阻塞)"。Choke可以用命令net_graph 3看到。个人认为,choke是我不会考虑的东西。其实cl_updatarete的最佳值是很复杂的。CAL的服务端的config提供sv_maxupdaterate为101,那么很多人会总结为我们也应该把cl_updaterate设置为101。在理想的状况下,这是正确地,不过在实际情况下,并不是那么有用。在北美,大多数的服务器都不能负荷每秒100帧的运算,这就意味着服务器无法发出每秒100个更新包,而玩家们就会觉得很“卡”了。由于我们从客户端如果没有远程控制密码(远程控制权限)的话是无法窥探服务端的fps的,如何选择最适当的数值就像猜谜游戏一样了。你可能会说,“好吧,那就把cl_updaterate设置为101就不管了,我会获得服务器给我更新的最大值。”问题就在忽视了cl_updaterate对ex_interp的影响以及两者之间微妙的平衡关系。寻找一个适当的cl_updaterate值(记住要把ex_interp先设为0),从101开始逐渐减小,你会发现人物只是“微小的闪动”(译者注:原文是“slightyly skip around”,从实际操作来看,我们可以看到人物的重影,就像闪动一样,我就把它翻译成“闪动”了)。“微小的闪动”是优先的选择,只要ex_interp等于1/cl_updaterate,那么人物就会在应有的位置上出现。在不同的服务器中游戏你都要改变cl_updaterate。如果必要的话,把它设置低于50也不要担心。预处理系统会发挥好它的作用的。备注:大多数的公众服务器都会使用默认的sv_maxupdaterate 30,那么在那种情况下,cl_updaterate就最好了。

  请注意,从一个低的cl_updaterate数值(比如说20)逐渐增加是不行的,一旦你把它设定得更高,ex_interp是不会重新设定的,你需要不断手动地将ex_interp置0。这里我提供一个简易的脚本给大家调整你的cl_updaterate。

  点击这里下载config

  推荐值:

  cl_updaterate应该与服务器的fps相等,不应该超过服务器的sv_maxupdaterate数值

  sys_ticrate:

  找合适的sys_ticrate就需要进行一些实验了。首先,如果你的服务器没有被加速,提高这个数值并超过100就不会有任何效果。如果你正好租用了一个高性能的服务器的话(你的服务器可能已被加速),那么你就有空间这么做。总体上来说,服务端有更高的fps是一件好事,提高sys_ticrate超过200(或者比200低)是毫无效果的。如果把sys_ticrate设为9999,你的服务器fps会根据现有的情况在150到1000之间不停的跳变,把sys_ticrate设定为低于200的数值会有一个更一致的环境,不过会对服务器的性能有所减弱。同样的,在一个物理服务器(一台电脑或者服务器主机)上都可能运行不同的HLDS(Half-Life Dedicated Server),那么如果每一个HLDS都把sys_ticrate设为10000的话,服务器的CPU的负荷就相当大了。这样的情况下,会潜在地造成在那台物理服务器上的性能的下降(也可能提高你每月的租用费用)。最后,服务器的fps只会在某几个数值上作用,举例来说,我的服务器fps只在85,102,128,170,256等数值上,而不是在他们之间(比如91)。如果你把sys_ticrate设为100,你的服务器fps最大值就会在100以下(比如85),因此,设定sys_ticrate大于目标fps数值约20到50左右比较合适。

  推荐值:

  sys_ticrate 110-180,结合你的服务器性能考虑。

  ------------------------------------------------------------------------------------------------

  关于局域网对战的备注:

  局域网对战,比如the CPL,cl_updaterate设置为101,这与局域网服务器的质量有关。通常在LAN上,只有一小部分的服务器会在虚拟盒中运行,因此服务器使用更少的资源。如果服务器都加速超过了100fps,那么cl_updaterate 101就是一个非常理想的数值。判断一个LAN服务器最快的方法就是看看玩家们ping的平均值。一个运行在50到64fps的默认服务器,在LAN下的平均ping值为15ms,而加速过的服务器会使ping值下降,大概在5ms左右。据我所知,the CPL,ESWC还有WCG都是使用加速过的服务器的。

  -------------------------------------------------------------------------------------------

  在参照CPL比赛服务器的config文件和本人亲自与战队的朋友试验后,最佳的参数设置如下:

  // “sv_maxrate 0” 会自动监测所有玩家的连接速度,并满足每个人的要求。为防止系统过载,应设置为20000左右。

  sv_maxrate 25000

  sv_minrate 2500

  // 每秒钟服务器端允许客户端接收的最大数据包数量。16中sv_maxupdaterate默认是30

  sv_maxupdaterate 101

  // 设定你服务器的最大FPS。其值应该等于服务器一般状态下的fps值+20。

  sys_ticrate 10000

  // 客户端最大移动速度

  sv_maxspeed 320

  这样的设置用起比较理想,基本上玩家没有choke,前提是客户端的cl_cmdrate和cl_updaterate不能设得比服务器端sv_maxupdaterate的值101高,如果超过的话会产生choke。下面将给出客户端的最佳设置。

  如何最佳设置最佳CS16的客户端网络参数:

  在比赛中,客户端的cmdrate updaterate rate ex_interp是允许修改的。在lan比赛中,网络带比较好的情况下,这几个数值是最佳的设置。

  rate 20000 默认值为空

  sv_maxrate 20000 默认值 0

  cl_cmdrate 101 默认值 30

  cl_updaterate 101 默认值 30

  ex_interp 0 默认值 01

  sys_ticrate 100 取默认值 100

  fps_max 101 默认值 101

  服务端的sys_ticrate 和 sv_maxupdaterate都是由服务器OP决定,玩家无法更改。这就引出一个问题:当我们进入一个没有OP权限的服务器时,根本就不知道服务器的sv_maxupdaterate值是多少,也就没有依据来设置客户端的cl_cmdrate和cl_updaterate值,如果服务器的sv_maxupdaterate值是50,而你的cl_cmdrate和cl_updaterate值设置成101的话,就会有choke产生。这时的解决办法是在控制台输入“net_graph 3”命令来查看是否有choke产生,如果有的话逐渐降低cl_cmdrate和cl_updaterate值,直到没有choke产生为止。

  补充一下,由于同一服务器在不同人数的时候需要设定的updaterate值是不一样的(如果网络带宽足够用的话,这种情况也不会发生),假如你知道服务器的sv_maxupdaterate值是101,建议你把cl_cmdrate和cl_updaterate值都设成比101低一点,大家可根据实际情况进行设置。

应邀回答行业问题

Linux系统广泛被应用在服务器上,服务器存储着公司的业务数据,对于互联网公司数据的安全至关重要,各方面都要都要以安全为最高优先级,不管是服务器在云端还在公司局域网内,都要慎之又慎。

如果黑客入侵到公司的Linux服务器上,执行下面的命令,好吧,这是要彻底摧毁的节奏,5分钟后你只能呵呵的看着服务器了,为什么要seek呢?给你留个MBR分区。

dd if=/dev/zero of=/dev/sda bs=4M seek=1

Linux系统的安全加固可分为系统加固和网络加固,每个企业的业务需求都不一样,要根据实际情况来配置。比如SSH安全、账户弱口令安全、环境安全、关闭无用服务、开启防火墙等,已经Centos7为例,简单说下linux系统SSH网络安全加固。

SSH安全

将ssh服务的默认端口22修改为其他端口,并限制root用户登陆,配置firewall允许ssh端口通过。

[root@api ~]#sed -i 's#Port 22#Port 6022#' /etc/ssh/sshd_config

[root@api ~]#echo 'PermitRootLogin no' /etc/ssh/sshd_config

[root@api ~]# firewall-cmd --zone=public --add-port=6022/tcp --permanent

[root@api ~]# firewall-cmd --reload

限制访问ssh的用户和IP

[root@api ~]#echo 'AllowUsers NAME' >>/etc/ssh/sshd_config

[root@api ~]# echo 'sshd:xxxxx:allow' >>/etc/

hostsallow

[root@api ~]# systemctl restart sshd

禁止ping测试服务器,禁止IP伪装。

[root@api ~]# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

[root@api ~]# echo nospoof on >> /etc/hostconf

在Centos7以后iptables将被firewall替代,当然我们还能够使用iptables,首先需要删除firewall后,才能够使用iptables,技术总是在进步的,老的会慢慢被替代。

Linux系统安全加固还有很多,想要继续可以查阅资料。

随着PHP越来越流行,Linux VPS/服务器的使用也越来越多,Linux的安全问题也需要日渐加强,如果你安装过DenyHosts并设置过邮件提醒,你每天可能会受到数封DenyHosts Report将前来破解SSH密码的IP加入/etc/hostsdeny。

Linux SSH登录有两种:

1、使用密码验证登录

通常VPS或服务器开通后都是直接提供IP和root密码,使用这种方式就是通过密码方式登录。如果密码不够强壮,而且没有安装DenyHosts之类的防止SSH密码破解的软件,那么系统安全将存在很大的隐患。

2、使用密钥验证登录

基于密钥的安全验证必须为用户自己创建一对密钥,并把共有的密钥放在需要访问的服务器上。当需要连接到SSH服务器上时,客户端软件就会向服务器发出请求,请求使用客户端的密钥进行安全验证。服务器收到请求之后,先在该用户的根目录下寻找共有密钥,然后把它和发送过来的公有密钥进行比较。如果两个密钥一致,服务器就用公有的密钥加密“质询”,并把它发送给客户端软件(putty,xshell等)。客户端收到质询之后,就可以用本地的私人密钥解密再把它发送给服务器,这种方式是相当安全的。

一、生成密钥

因为puttygen生成的密钥有问题可能会出现:“Server refused our key”,最好使用XShell生成密钥或者在远程Linux VPS/服务器生成密钥。

1、在Linux远程服务器生成密钥:

登录远程Linux VPS/服务器,执行:

root@vpser:~# ssh-keygen -t rsa //先运行这个命令

Generating public/private rsa key pair

Enter file in which to save the key (/root/ssh/id_rsa): //直接回车

Created directory ‘/root/ssh’

Enter passphrase (empty for no passphrase): //输入密钥密码

Enter same passphrase again: //重复密钥密码

Your identification has been saved in /root/ssh/id_rsa //提示公钥和私钥已经存放在/root/ssh/目录下

Your public key has been saved in /root/ssh/id_rsapub

The key fingerprint is:

15:23:a1:41:90:10:05:29:4c:d6:c0:11:61:13:23:dd root@vpsernet

The key’s randomart image is:

+–[ RSA 2048]—-+

|=@Bo+o oo |

|=o=E o o |

| |

| |

| S |

| |

| |

| |

| |

+—————–+

root@vpser:~#

将/root/ssh/下面的id_rsa和id_rsdpub妥善保存。

2、使用XShell生成密钥

Xshell是一款Windows下面功能强大的SSH客户端,能够按分类保存N多会话、支持Tab、支持多密钥管理等等,管理比较多的VPS/服务器使用XShell算是比较方便的,推荐使用。

下载XShell,安装,运行XShell,点击菜单:Tool -User Key Generation Wizard,出现如下提示:

  点击Save as file将密钥保存为id_rsapub。

二、将密钥添加到远程Linux服务器

1、用winscp,将id_rsapub文件上传到/root/ssh/下面(如果没有则创建此目录),并重命名为:authorized_keys(如果是在Linux服务器上生成的密钥直接执行:mv /root/ssh/id_rsapub /root/ssh/authorized_keys),再执行:chmod 600 /root/ssh/authorized_keys 修改权限。

2、修改/etc/ssh/sshd_config 文件,将RSAAuthentication 和 PubkeyAuthentication 后面的值都改成yes ,保存。

3、重启sshd服务,Debian/Ubuntu执行/etc/initd/ssh restart ;CentOS执行:/etc/initd/sshd restart。

三、客户端测试使用密钥登录

1、使用putty登录

putty使用的私钥文件和Linux服务器或XShell的私钥格式不同,如果使用putty的话,需要将Linux主机上生成的id_rsa文件下载的本地。运行putty压缩包里面的puttygenexe,选择Conversions-Import key选择私钥文件id_rsa,输入密钥文件的密码,会出现如下界面:

  点击“Save Private Key”,将私钥保存为id_rsappk

运行putty,在Host Name填写:root@主机名或ip

  如果设置了密钥密码,出现:Passphrase for key “imported-openssh-key”时输入密钥密码。

如果设置没问题就会登录成功,出现用户提示符。

2、XShell登录

运行XShell,选择菜单File-New,按如下提示填写:

  打开创建好的Session

  如果设置没问题就会登录成功,出现用户提示符。

3、Linux客户端登录测试

在Linux客户端执行:chmod 600 /root/id_rsa 再执行:ssh root@wwwvpsernet -i /root/id_rsa /root/id_rsa为私钥文件,第一次链接可能会提示确认,输入yes即可,再按提示输入密钥密码,没有问题就会出现用户提示符。

四、修改远程Linux服务器sshd服务配置

1、修改/etc/ssh/sshd_config 文件

将PasswordAuthentication yes 修改成 PasswordAuthentication no

2、重启sshd服务

Debian/Ubuntu执行/etc/initd/ssh restart ;CentOS执行:/etc/initd/sshd restart。

ok,设置完成。

再提醒一下一定要保存好Putty私钥文件id_rsappk或Linux服务器下载下来的id_rsa私钥文件

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » ntpd服务会占用服务器多少资源

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情