發表文章

目前顯示的是 七月, 2014的文章

靈修分享:亞略巴古的演講

亞略巴古的演說是使徒行傳一篇非常著名的講道。基督徒往往用這段經文來說明上帝的屬性,同時也會參考這段經文作為和外邦人互動的一個參考方式。最近因為團契查經查到這一段,重新思想後看到了以前沒有考慮過的面向,在這邊記錄一下。

徒17:16-34保羅在雅典等候他們的時候,看見滿城都是偶像,就心裏着急;於是在會堂裏與猶太人和虔敬的人,並每日在市上所遇見的人,辯論。還有伊壁鳩魯和斯多亞兩門的學士,與他爭論。有的說:「這胡言亂語的要說甚麼?」有的說:「他似乎是傳說外邦鬼神的。」這話是因保羅傳講耶穌與復活的道。他們就把他帶到亞略‧巴古,說:「你所講的這新道,我們也可以知道嗎?因為你有些奇怪的事傳到我們耳中,我們願意知道這些事是甚麼意思。」(雅典人和住在那裏的客人都不顧別的事,只將新聞說說聽聽。)
保羅站在亞略‧巴古當中,說:「眾位雅典人哪,我看你們凡事很敬畏鬼神。我遊行的時候,觀看你們所敬拜的,遇見一座壇,上面寫着『未識之神』。你們所不認識而敬拜的,我現在告訴你們。創造宇宙和其中萬物的神,既是天地的主,就不住人手所造的殿,也不用人手服事,好像缺少甚麼;自己倒將生命、氣息、萬物,賜給萬人。他從一本本:有古卷是血脈造出萬族的人,住在全地上,並且預先定準他們的年限和所住的疆界,要叫他們尋求神,或者可以揣摩而得,其實他離我們各人不遠;我們生活、動作、存留,都在乎他。就如你們作詩的,有人說:『我們也是他所生的。』我們既是神所生的,就不當以為神的神性像人用手藝、心思所雕刻的金、銀、石。世人蒙昧無知的時候,神並不監察,如今卻吩咐各處的人都要悔改。因為他已經定了日子,要藉着他所設立的人按公義審判天下,並且叫他從死裏復活,給萬人作可信的憑據。」
眾人聽見從死裏復活的話,就有譏誚他的;又有人說:「我們再聽你講這個吧!」於是保羅從他們當中出去了。 但有幾個人貼近他,信了主,其中有亞略‧巴古的官丟尼修,並一個婦人,名叫大馬哩,還有別人一同信從。

對基督徒來說,保羅這篇講道講的真好,不但講出了上帝的超越性(像是不住人手所造的殿、也不是金銀石的彫刻),也帶出了耶穌基督復活的大能。但最近我才注意到眾人的反應:「眾人聽見從死裏復活的話,就有譏誚他的;又有人說:「我們再聽你講這個吧!」」不曉得你看到這一段有什麼感想?可能我是玻璃心吧,如果我是保羅,我大概會非常非常的難過,看起來似乎沒有人理會這個福音、這篇講道。這篇被基督…

如何利用 OpenFlow 打造一個「無廣播」的網路環境

有沒有試過在實驗室網路或是公司網路內打開 wireshark 來收收看封包?就算自己什麼網路行為都沒做,還是會發現收到一大堆不是自己該收到的封包。為什麼?因為網路上充斥太多的廣播訊息了!什麼是廣播封包?首先,我們先將目光集中在同一個 subnet 中(一般來說,目前的網路設備通常不會讓廣播封包傳到 subnet 的外面),廣播封包就是一種讓同一個 subnet 裏面所有的成員都要收到的封包。常見的封包有 IP 位置為 255.255.255.255 或是 192.168.1.255 這一類的封包以及 MAC 位置為 FF:FF:FF:FF:FF:FF 的訊框。

一般來說,廣播封包的存在有兩個意義:
我不知道我想溝通的對象在哪裡,所以我只好大聲的呼喊希望那個對象會來回應我。

造成這種情況的主因是因為當初網路在設計時是採用分散式的架構。因為分散,所以沒有人知道整個網路的狀況。既然不知道,就只好所有人都去問一遍,這個行為就是廣播。常見的例子是 ARP 以及 DHCP DISCOVER 等。
所有人注意,下面是關於我的資訊 ...
這種情況通常是要招告天下關於我的資訊,所以本來就會廣播給所有人知道。常見的例子是 NetBios 以及 IPv6 Neighbor Discovery 等。 因為過去網路發展的因素,廣播信息似乎是必要的。但其實大部分的人都很討厭廣播,因為在大多數的情況下廣播信息根本不是自己要收的啊,就像是一開始提到的例子。網管人員一般來說也很討厭廣播,因為只會白白佔掉網路頻寬而已。

現在來想想 OpenFlow 的架構,OpenFlow 是一個邏輯上集中式的網路架構,並且在這網路上有個神一般的角色:OpenFlow Controller。那麼,還需要廣播信息的存在嗎?我不知道要溝通的對象在哪裡?沒關係,Controller 應該知道;招告天下,不用,告訴 Controller 就好了。當然要改變 Host 的行為是不可能的事情,但我們可以透過 OpenFlow Entry 的設定來透過非廣播的方式來處理廣播封包。

在額外多討論一件事情。當網路上不存在廣播封包時,請問一個 Loop-Free 的網路是否還是必須的?換句話說,我們還需要 Spanning Tree Protocol 嗎?歡迎大家提出自己的意見(有人會留言嗎?)

相關的研究將會被發表在 Globecom…

Control Groups in the Linux Kernel

Control Groups (簡稱 cgroups)是 Linux Kernel的一個功能。會開始注意到它是因為上次在研究 Linux Network Namespace 時第一次看到這個名詞。簡單來說,在 Linux Kernel 裏面,對資源的分配採用了 group 的概念,每一個 process 都會屬於某個 group,而每個 group 之間資源是彼此獨立的(isolation),並且也可以針對每個 group 進行資源限制以及計費。看到上面的描述大概就知道它要幹嘛了吧 ... 恩,這個計劃的初始提案人是 Google ... 完全不讓人意外。

在每個 group 裏面,Linux Kernel 提供了各種 Namespace 來進行資源的獨立:
PID namespaceNetwork namespaceUTS namespaceMount namespaceIPC namespaceUser namespace 因為並沒有深入研究,所以就不寫太多了。但可以從 docker 的專案看到,這樣的設計有什麼好處。

如何利用 Wireshark 來監聽 IEEE 802.11 的管理封包

因為工作的緣故,需要去監聽無線網路的封包,特別是IEEE802.11的管理控制訊框(frame ... 其實我還是比較喜歡直接叫作封包)。同事直接打開 wireshark 卻擷取 wifi 介面,卻發現聽到了一堆 ethernet 的訊框而聽不到 wifi 的訊框。為什麼呢?來看看 wireshark 的官網怎麼說:

If you're trying to capture network traffic that's not being sent to or from the machine running Wireshark or TShark, i.e. traffic between two or more other machines on an Ethernet segment, or are interested in 802.11 management or control packets, or are interested in radio-layer information about packets, you will probably have to capture in "monitor mode". This is discussed below.

Without any interaction, capturing on WLAN's may capture only user data packets with "fake" Ethernet headers. In this case, you won't see any 802.11 management or control packets at all, and the 802.11 packet headers are "translated" by the network driver to "fake" Ethernet packet headers. 

答案揭曉,原來這是因為 wifi driver 會自動把 wireless frame 轉成 ethernet frame 後再給 kernel,這樣 kernel 裏面的 protocol stack 會比…

Linux Network Namespace

今天要介紹的東西是 Linux Network Namespace。為什麼會知道這東西呢?主要是因為在研究 SDN 模擬器 mininet(正確來說是 OpenFlow 模擬器)時,發現它是透過 Linux Network Namespace 這個技術,將每個 Host 以及 Switch 獨立開來(Isolation),並在當中建立起虛擬的連線,藉這個概念在一台電腦內打造出虛擬的網路拓樸。所以就想說花點時間來看看如何使用這個技術。

我們先來看看在 Wikipedia 上關於 cgroups 的介紹:

cgroups (abbreviated from control groups) is a Linux kernel feature to limit, account, and isolate resource usage (CPU, memory, disk I/O, etc.) of process groups.

Namespace isolation
While not technically part of the cgroups work, a related feature of the Linux kernel is namespace isolation, where groups of processes are separated such that they cannot "see" resources in other groups. For example, a PID namespace provides a separate enumeration of process identifiers within each namespace. Also available are mount, UTS, network and SysV IPC namespaces.

簡單來說,就是透過 group 這樣的觀念,讓每個 process group 間所使用的資源能夠獨立開來而不會互相影響。而這樣的 group 就被稱做是 namespace。而今天要看的是 Network Namespace。用例子來看或許會比較容易了解,下面的例子主要是參考這個網頁所建立出來的。

1. 建立 Network Namespace

$ su…

這個網誌中的熱門文章

如何將Linux打造成OpenFlow Switch:Openvswitch

我弟家的新居感恩禮拜分享:善頌善禱

如何利用 Wireshark 來監聽 IEEE 802.11 的管理封包