关闭

什么是 daemon

1111人阅读 评论(0) 收藏 举报

什么是 daemon

如果您常常上网去查看一些数据的话,尤其是关于 Unix-Like 的相关操作系统,如 FreeBSD, Unix, Linux 等等,应该会常常听到 daemons 这个字眼,那么 daemon 是什么东西呀!?怎么这么常被见到?呵呵,Daemon 的字面上的意思就是『守护神、恶魔?』还真是有点奇怪呦! ^_^"" 。基本上,我们的 Linux 主机常常会收到一些要求,不论是来自本机系统的要求或者是网络 Client 端的服务要求,反正只要有要求来的时候,通常就是各式各样的 daemons 负责去唤起应该要工作的 Servers 来工作啦!那么 daemons 目前有两种基本的模式,分别是 stand_alone 与 super daemon 两种方式,底下就来说一说这两种 daemon 的工作型态:
  •  stand_alone : 就字面上的意思来说,stand alone 就是『独立的启动』的意思,也就是说,该 daemon 启动之后,就直接常驻在内存当中啰!他虽然会一直的占用系统的资源,但最大的优点就是,他会一直启动的啦!所以当有要求来的时候,他就会很快速的响应啰!常常用在这一种 daemon 的网络服务如常见的 httpd 这一个即是一例!
  • super daemon : 相对于 stand alone 的执行方式,这一种服务的启动方式则是藉由统一的一个 daemon 来负责唤起该服务!这一个统一负责的 daemon 就是 inet 这支服务啦!不过,在后来的 Linux 发展套件中,则是使用 xinet 这个设定啰!我们这里以 Mandrake 的 xinet 来做说明。当有网络的服务要求来的时候,该要求会先送给 xinet 这个服务,然后 xinet 根据该网络要求送来的数据封包的内容 ( 该内容会记录 IP 与 port ) 来将数据封包送给实际运作的服务!而该服务这个时候才会启动的!最常见到的就是 ftp 这支网络服务啦!这种最大的优点就是当没有数据封包来的时候,该服务不会一直占据系统资源 ( 该服务会在 sleeping 的状态吧! ) ,但是相对的,他的反应时间也会比较慢,因为还要花费一段时间去『唤醒』该服务呀!
那么这两种启动的方式哪一个比较好呢?见仁见智啦!而且还要看该主机的工作负荷与实际的用途说!例如当你的主机是用来作为 WWW 服务器的,那么 httpd 自然就以 stand alone 的启动方式较佳!事实上,我们常常开玩笑的说明 stand alone 与 super daemon 的情况,可以银行的窗口来作为说明的范例!
  • stand alone : 在银行里面,假设有一种单一服务的窗口,例如存钱窗口,所以,当你需要存钱的时候,直接前往该窗口,就有『专人』为您服务啦!
  • super daemon : 在银行里面假设还有另外一种复合型态的窗口,同时提供转帐、资金调度、提款等等的业务,那当你需要其中一项业务的时候,就需要前往该窗口,但是坐在窗口的 这个营业员,拿到你的需求单之后,往后面一丢『喂!那个转帐的仁兄!该你的工作了』那么那个仁兄就开始工作去!然而里头还有资金调度与提款等负责业务的仁 兄呢?他们在干嘛?嘿嘿!看看报、喝喝茶啰!那么这里就会引出另外一个问题啦!假设银行今天的人潮特别的汹涌,所以这个窗口后面除了你之外还有很多的人! 那么想一想,这个窗口是要『一个完成再来下一个』还是『全部都把你们的单据拿来,我全部处理掉』呢?呵呵!是不是不太一样?
    • multi-threaded:就是我们提到的,全部的客户之要求都给他拿来,一次给他交办下去,所以一个服务同时会负责好几个程序。
    • single-threaded:这个就是目前我们『人类的银行』最常见的方式啦,不论如何,反正一个一个来,第一个没有处理完之前,后面的请排队!嘿嘿!所以如果 client 的要求突然大增的话,那么这些晚到的 client 可得等上一等!

  •    
另外,需要注意的是,既然银行里头有这两种窗口同时存在,所以啰,在 Linux 系统里面,这两种 daemon 是可以同时存在的啦!也就是说,某些服务可以使用 stand alone 来启动,而有其它的服务则可以使用 xinet ( 或者是 inet ) 大致的情况就是这样啦!了呼!?

  • /etc/services
    • 请特别注意!虽然有的时候您可以藉由修改 /etc/services 来更改一个服务的 port 号,不过并不建议如此做,因为很有可能会造成一些协议的错误情况!这里特此说明一番呦!(除非您要架设一个地下网站,否则的话,使用 /etc/services 原先的设定就好啦!)

  • OK!这个时候就又发生了另一个问题啰!那么我怎么知道要将我的数据送到那个窗口去!咦!那个窗口不是有写说明说他是干嘛用的吗?所以你要存钱、转帐、或者是进行汇款,都可以在不同的窗口来完成,那么换到实际的网络情况来说呢,因为我们的 TCP 封包里面含有 port 与 IP 对吧!将那些已经监听的 port 想成是这些窗口,如此一来你的 TCP 封包便可以依据不同的需求,而到达不一样的 port 来索取服务了!因此,你的联机是 FTP, WWW, smtp 等等都好,绝对不会被搞错啦!
     
    好了,如果我想要知道这个 port 是由那个服务所启动的呢?在 Linux 系统里面有个档案在说明那个窗口与服务的  ( services and ports ) 对应!呵呵!那就是鼎鼎大名的 /etc/services 这个档案啦!我们取一段常常看到的 port 与相关服务的区段来看一下好了!
     
    [root @test root]# vi /etc/services
    .... 略
    ftp-data        20/tcp
    ftp-data        20/udp
    ftp             21/tcp
    ftp             21/udp
    ssh             22/tcp                          # SSH Remote Login Protocol
    ssh             22/udp                          # SSH Remote Login Protocol
    telnet          23/tcp
    telnet          23/udp
    smtp            25/tcp          mail
    smtp            25/udp          mail
    nameserver      42/tcp          name            # IEN 116
    nameserver      42/udp          name            # IEN 116
    domain          53/tcp          nameserver      # name-domain server
    domain          53/udp          nameserver
    .... 略
    <daemon name>   <port 与型态>   < 该服务的说明 >

    像上面说的是,第一栏为 daemon 的名称、第二栏为该 daemon 所使用的 port 号码与其网络数据封包传送时候的类型,主要为较稳定的 tcp 封包与较易破损但较快速之 udp 封包!举个例子说,那个 e-mail 的发信协议为 smtp 这个服务,而这个服务的使用之 port 即为 25 啦!就这样!
     

  • Daemon 的命名规则:

  • 每一个服务的开发者,当初在开发他们的服务时,都有特别的故事啦!不过,无论如何,这些服务的名称被建立之后,被挂上 Linux 使用时,通常在服务的名称之后会加上一个 d ,例如例行性命令的建立的 at, 与 cron 这两个服务,通常会被称为 atd 与 crond,这个 d 代表的就是 daemon 的意思。所以,在资源管理那一章中,我们使用了 ps 与 top 来观察程序时,都会发现到很多的 xxxd 的程序,呵呵!通常那就是一些 daemon 的程序啰!
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:4115次
    • 积分:79
    • 等级:
    • 排名:千里之外
    • 原创:5篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章存档