這篇文章主要介紹了集群服務器通信協議:TIPC簡介,本文講解了TIPC協議簡介、TIPC協議設計假設、TIPC與INET域socket區別、TIPC的其他的特性等內容,需要的朋友可以參考下
1.TIPC協議簡介
TIPC是愛立信公司提出的一種透明進程間通信協議(Transparent Interprocess Communication), 主要適用于高可用(HAL)和動態集群環境. 該軟件當前主要由風河(windriver)公司在維護, 主要支持Linux, Solaris 和 VxWorks三種操作系統, 從Linux內核2.6.34開始支持TIPC的最新版本2.0, 不過還有很多協議設計的功能沒有實現. 在可信網絡環境下, TCP/IP協議的很多操作是冗余的, 例如, 著名的三次握手, 從而導致通信效率下降, 增加了應用程序的通信時間, 不利于對時間響應要求比較高的應用, 比如, 處理集群成員節點由于重啟, down機等各種原因導致的增加和減少. TIPC針對可信網絡環境, 減少了建立通信連接的步驟和尋址目標地址的操作(在TCP/IP協議里, 完成這些操作節點間最少也需要9次包交換, 而使用TIPC則可以減少到2次). 這可以提高節點間信息交換的頻率以及減少節點間等待的時間.
2.TIPC協議設計假設
1、通過協議發送的大部分message都是直接到達目的地
2、大部分message的傳輸時間都很短
3、大部分message都在集群內部節點間傳遞
4、包丟失率很低, 重傳不經常發生
5、可用帶寬和內存都很大
6、所有帶戳包的校驗和都由硬件校驗
7、通信節點的數量在一定時間內是相對受限和靜態的
8、安全在封閉的集群環境里相對Internet來說不是關鍵因素
這些基礎假定允許TIPC是一個基于流量驅動(traffic-driven)和固定大小滑動窗口的信號鏈路層協議. 而不是定時器驅動(timer-driven)的傳輸層協議. 這使得TIPC擁有更早釋放發送buffer, 更早偵測到包丟失并重傳, 更早偵測到節點不可用等優點.
3.TIPC與INET域socket區別
平時我們使用的socket,TCP也好,UDP也好,用來標識一對socket的通信,無非是用兩個socket的IP地址和端口號。比如使用UDP的socket,要發一個datagram到另一個socket,需要指定對端的地址,這個地址是由那臺機的IP和端口組成。socket是在內核中管理,當內核檢測到socket有數據可讀時,就會通知擁有這個socket的進程去讀取里面的數據。
這里的不方便之處在于,要指定對端地址,我們必須知道這個socket在哪臺機,端口是多少,才能發送數據出去。能不能只提供一些應用層的信息,就可以讓內核自己去查到socket的位置,再把消息發過去?TIPC做的就是這樣的事。使用TIPC,我們在創建socket的時候在內核中注冊自己的服務類型service type,那么在發送端,只需要指定服務類型就可以由內核路由到相應的socket。這個時候,對應用層來說,對端地址僅僅是一個服務類型service type!很顯然,內核維護著這么一張TIPC的路由表,即由服務去查找socket。而每臺機都有這樣的路由表,他們之間信息就像能夠共享一樣地為整個集群的TIPC socket服務。有了TIPC,這個socket使用了哪個IP,那個端口,我們都不再需要知道,很好很強大。
4.TIPC的其他的特性
1、有些時候多個進程提供同樣的服務,僅僅是為了負載平衡或其他原因,這種情況可以用一個整數變量instance來標識不同socket,但是指定同樣的service type。這個時候socket的地址是由service type和instance共同來指定。發送數據時候只需要指定service type和一個instance的值,也可以指定service type和instance的一個區間。對于后者,就是broadcast你的datagram。
2.、管理前面說的TIPC路由表的是內核當中的一個進程叫做name server。它知曉著集群中所有的TIPC socket。在發送datagram給服務某個service的socket之前,你可以向它請求服務這個service的socket是否已經在工作了,它會告訴你service的狀態。并且注冊了一個observer,當你關心的socket起來之后發消息通知你,這樣就可以避免你把datagram發給一個根本不存在的socket。
新聞熱點
疑難解答