国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Linux > 正文

DDNS 的工作原理及其在 Linux 上的實現

2019-11-02 16:10:19
字體:
來源:轉載
供稿:網友

DDNS 工作原理的分析

DDNS 的實現最根本的一點是當主機的 IP 地址發生變化的時候,實現 DNS 映射信息的及時更新,應用程序需要及時地獲得這一信息,主要的方法可分為兩大類:

一類是輪詢機制,即:應用程序每隔一定的時間,去從查詢主機當前的 IP 地址,并與之前的進行比較,從而判斷網絡地址是否發生了變化。顯然,這種方法不僅效率低下,而且對每次查詢 IP 地址的時間間隔很難得到一個折中的數值。

第二類方法是異步實現方式,即:每當主機的 IP 地址發生變化的時候,應用程序能夠被及時地通知到。這的確是一個簡單而又高效的方法,但與此同時,另一個問題又產生了,那就是:通知源又應該由誰來擔當呢?顯然,這是處于用戶空間的應用程序無法勝任的。于是,我們想到了讓內核來充當這一消息源。這樣,在內核空間和用戶空間之間就需要通過消息來進行通信了。

在 Linux 下用戶空間與內核空間的信息交互方式有許多種,比如:軟中斷、系統調用、netlink 等等。關于這些通信方式的介紹以及其各自的優缺點并不在本文的討論范圍內,您可以自行查看參考資源。

在這許多種通信方式中,netlink 憑借其標準的 socket API、模塊化實現、異步通信機制、多播機制等等多種優勢,成為了內核與越來越多應用程序之間交互的主要方式。在 Linux 的內核中,已經為我們封裝了使用 netlink 對特定網絡狀態變化進行消息通知的功能,這就是著名的 rtnetlink。有關 netlink 在內核空間實現的詳細代碼以及其 API 參數的介紹,您可以自行查看參考資源,本文在此不作過多的贅述。

本文討論的重點是針對 DDNS 這一特定的應用,演示 rtnetlink 檢測到 IP 地址發生了變化、并將消息告知用戶空間的應用程序的整個過程,以及應用程序利用 netlink 套接字接收消息、并告知 DNS 服務器的實現方法。

DDNS 工作流程的簡單介紹

結合上述對 DDNS 工作原理的分析,我們可以將 DDNS 的工作流程簡單地用圖 1 來表示:

圖 1. DDNS 的工作流程圖

從圖 1 中可以看到,DDNS 的工作流程主要有三個部分:

應用程序實時感知到 IP 地址發生了變化,如上介紹,利用基于 netlink 的異步通知機制可以讓應用程序及時得到內核空間對這些事件的“通知”,具體可以分為如下 5 個步驟:

1、內核空間初始化 rtnetlink 模塊,創建 NETLINK_ROUTE 協議簇類型的 netlink 套接字;

2、用戶空間創建 NETLINK_ROUTE 協議簇類型的 netlink 套接字,并且綁定到 RTMGRP_IPV4_IFADDR 組播 group 中;

3、用戶空間接收從內核空間發來的消息,如果沒有消息,則阻塞自身;

4、當主機被分配了新的 IPV4 地址,內核空間通過 netlink_broadcast,將 RTM_NEWADDR 消息發送到 RTNLGRP_IPV4_IFADDR 組播 group 中 ;

5、用戶空間接收消息,進行驗證、處理;

應用程序接收到“通知”后,把 DNS update 信息發送給 DNS 服務器,目的是將更新后的 IP 地址及時地通知 DNS 服務器,以便網絡上的主機仍然能夠通過原來的域名訪問到自己,通用的做法是利用開源軟件 nsupdate 發送 DNS update 信息給 DNS 服務器以實現 DNS 信息的動態更新。

最后,對應于第一部分 netlink 套接字的創建,用戶空間和內核空間關閉所創建的 netlink 套接字。

下文將詳細闡述其中的每一環節及其實現。

內核空間 rtnetlink 檢測 IP 地址變化的實現與分析

在我們開始利用 netlink 套接字、實現與內核通信的應用程序之前,先來分析一下內核空間的 rtnetlink 模塊是如何工作的。

內核空間 rtnetlink 的初始化

清單 1. rtnetlink 的初始化

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 昌乐县| 柳州市| 尼勒克县| 会同县| 乌兰县| 安顺市| 陕西省| 阿荣旗| 招远市| 榆林市| 龙游县| 宁都县| 吉水县| 义乌市| 四子王旗| 白城市| 鄄城县| 铜陵市| 吉林市| 康乐县| 渑池县| 榆社县| 广宁县| 灵寿县| 伊川县| 库伦旗| 平度市| 峡江县| 蒙城县| 太谷县| 毕节市| 镇坪县| 华容县| 璧山县| 锦屏县| 兴和县| 永丰县| 千阳县| 农安县| 道孚县| 梅河口市|