TIPC協(xié)議

1.TIPC協(xié)議概述

TIPC是愛立信開源的透明進(jìn)程通信協(xié)議,一般用于集群系統(tǒng)中。
雖然tipc是基于socket實(shí)現(xiàn)的涎嚼,但是與一般的socket還有所區(qū)別。平時(shí)我們使用socket挑秉,無論是TCP也好法梯,UDP也好,用來標(biāo)識(shí)一對(duì)socket的通信犀概,無非是用兩個(gè)socket的IP地址和端口號(hào)立哑。比如使用UDP的socket,要發(fā)送一個(gè)datagram到另一個(gè)socket姻灶,需要指定對(duì)端的地址铛绰,這個(gè)地址是由對(duì)端設(shè)備的IP和端口號(hào)組成的。Socket是在內(nèi)核中進(jìn)行管理产喉,當(dāng)內(nèi)核檢測(cè)到socket有數(shù)據(jù)可讀時(shí)捂掰,就會(huì)通知擁有這個(gè)socket的進(jìn)程去讀取數(shù)據(jù)若皱。
這種實(shí)現(xiàn)由一種不方便,就是需要指定對(duì)端的地址尘颓,我們必須知道這個(gè)socket在哪臺(tái)設(shè)備上走触,設(shè)備IP是多少,使用的端口號(hào)是什么疤苹,才能發(fā)送數(shù)據(jù)互广。
TIPC解決了這個(gè)問題。使用TIPC卧土,我們?cè)趧?chuàng)建socket的時(shí)候惫皱,在內(nèi)核中注冊(cè)自己的服務(wù)類型,那么在發(fā)送端尤莺,只需要指定服務(wù)類型就可以由內(nèi)核路由到相應(yīng)的socket旅敷。這個(gè)時(shí)候,對(duì)應(yīng)用層來講颤霎,對(duì)端地址僅僅是一個(gè)服務(wù)類型媳谁。顯然,內(nèi)核維護(hù)著這樣一張路由表友酱,可以根據(jù)服務(wù)類型去找到對(duì)應(yīng)的socket晴音。每臺(tái)設(shè)備都有這樣的路由表,他們的信息就能夠像普通路由表一樣共享到整個(gè)集群網(wǎng)絡(luò)中去缔杉,所有設(shè)備都可以進(jìn)行socket查找锤躁。因此,有了TIPC或详,我們無需關(guān)心socket使用了哪個(gè)IP系羞,哪個(gè)端口。

Tipc還具有如下特性:

  • 有些時(shí)候霸琴,多個(gè)進(jìn)程提供相同的服務(wù)椒振,僅僅是為了負(fù)載均衡或冗余備份等原因,這種情況下可以用一個(gè)整數(shù)變量instance來標(biāo)識(shí)不同的socket沈贝,但是指定同樣的服務(wù)類型杠人。此時(shí),socket是由service type和instance共同指定的宋下。發(fā)送數(shù)據(jù)的時(shí)候只需要指定service type和一個(gè)instance值即可嗡善。也可以指定service type和instance的一個(gè)區(qū)間,這種情況就是broadcast你的datagram
  • 管理tipc路由表的是內(nèi)核中的name server進(jìn)程学歧。他維護(hù)著集群中所有的tipc socket罩引。在發(fā)送datagram給某個(gè)socket之前,可以向他請(qǐng)求

2.實(shí)驗(yàn)結(jié)果

本實(shí)驗(yàn)在Ubuntu 14.04環(huán)境中測(cè)試枝笨,兩臺(tái)虛擬機(jī)搭建集群環(huán)境
虛擬機(jī)操作系統(tǒng)需要先加載tipc模塊袁铐,使用命令

modprobe tipc

編譯并運(yùn)行tipcutils揭蜒,方便我們對(duì)tipc進(jìn)行配置
tipcutils代碼可以在github上獲取https://github.com/parbhu/tipcutils/tree/96413b283861d271bff23f3098565da58536c628
或者
https://github.com/TIPC/tipcutils

2.1.集群配置

配置tipc的網(wǎng)卡和地址,配置成功之后剔桨,兩臺(tái)設(shè)備上都可以發(fā)現(xiàn)tipc鄰居屉更,具體結(jié)果如下圖所示

neighbor-1.png
neighbor-2.png

此時(shí)就可以通過tipc進(jìn)行通信了。

2.2.通信測(cè)試

以hello_world模塊進(jìn)行測(cè)試

  • 1.1.2設(shè)備當(dāng)成集群的服務(wù)端洒缀,運(yùn)行server_tipc程序
  • 1.1.3設(shè)備當(dāng)成集群的客戶端瑰谜,運(yùn)行client_tipc程序
//服務(wù)端可客戶端定義應(yīng)該一樣
#define SERVER_TYPE  18888
#define SERVER_INST  17

服務(wù)端

根據(jù)參數(shù)創(chuàng)建socket之后,就一直處于監(jiān)聽socket树绩,等待數(shù)據(jù)到來萨脑,并對(duì)數(shù)據(jù)進(jìn)行處理

    server_addr.family = AF_TIPC;
    server_addr.addrtype = TIPC_ADDR_NAMESEQ;
    server_addr.addr.nameseq.type = SERVER_TYPE;
    server_addr.addr.nameseq.lower = SERVER_INST;
    server_addr.addr.nameseq.upper = SERVER_INST;
    server_addr.scope = TIPC_ZONE_SCOPE;

    sd = socket(AF_TIPC, SOCK_RDM, 0);

    if (0 != bind(sd, (struct sockaddr *)&server_addr, sizeof(server_addr))) {
        printf("Server: failed to bind port name\n");
        exit(1);
    }

    if (0 >= recvfrom(sd, inbuf, sizeof(inbuf), 0,
                      (struct sockaddr *)&client_addr, &alen)) {
        perror("Server: unexpected message");
    }
    printf("Server: Message received: %s !\n", inbuf);

    if (0 > sendto(sd, outbuf, strlen(outbuf)+1, 0,
                    (struct sockaddr *)&client_addr, sizeof(client_addr))) {
        perror("Server: failed to send");
    }

客戶端

創(chuàng)建socket之后主動(dòng)發(fā)送數(shù)據(jù),監(jiān)聽socket
服務(wù)端調(diào)用wait_for_server來等待server連上

    wait_for_server(SERVER_TYPE, SERVER_INST, 10000);

    sd = socket(AF_TIPC, SOCK_RDM, 0);

    server_addr.family = AF_TIPC;
    server_addr.addrtype = TIPC_ADDR_NAME;
    server_addr.addr.name.name.type = SERVER_TYPE;
    server_addr.addr.name.name.instance = SERVER_INST;
    server_addr.addr.name.domain = 0;

    if (0 > sendto(sd, buf, strlen(buf)+1, 0,
                    (struct sockaddr*)&server_addr, sizeof(server_addr))) {
        perror("Client: failed to send");
        exit(1);
    }

    if (0 >= recv(sd, buf, sizeof(buf), 0)) {
        perror("Client: unexpected response");
        exit(1);
    }

運(yùn)行結(jié)果

server.png
client.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末饺饭,一起剝皮案震驚了整個(gè)濱河市渤早,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌瘫俊,老刑警劉巖鹊杖,帶你破解...
    沈念sama閱讀 218,451評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異军援,居然都是意外死亡仅淑,警方通過查閱死者的電腦和手機(jī)称勋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門胸哥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人赡鲜,你說我怎么就攤上這事空厌。” “怎么了银酬?”我有些...
    開封第一講書人閱讀 164,782評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵嘲更,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我揩瞪,道長(zhǎng)赋朦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,709評(píng)論 1 294
  • 正文 為了忘掉前任李破,我火速辦了婚禮宠哄,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘嗤攻。我一直安慰自己毛嫉,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評(píng)論 6 392
  • 文/花漫 我一把揭開白布妇菱。 她就那樣靜靜地躺著承粤,像睡著了一般暴区。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上辛臊,一...
    開封第一講書人閱讀 51,578評(píng)論 1 305
  • 那天仙粱,我揣著相機(jī)與錄音,去河邊找鬼彻舰。 笑死缰盏,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的淹遵。 我是一名探鬼主播口猜,決...
    沈念sama閱讀 40,320評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼透揣!你這毒婦竟也來了济炎?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,241評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤辐真,失蹤者是張志新(化名)和其女友劉穎须尚,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體侍咱,經(jīng)...
    沈念sama閱讀 45,686評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡耐床,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了楔脯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片撩轰。...
    茶點(diǎn)故事閱讀 39,992評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖昧廷,靈堂內(nèi)的尸體忽然破棺而出堪嫂,到底是詐尸還是另有隱情,我是刑警寧澤木柬,帶...
    沈念sama閱讀 35,715評(píng)論 5 346
  • 正文 年R本政府宣布皆串,位于F島的核電站,受9級(jí)特大地震影響眉枕,放射性物質(zhì)發(fā)生泄漏恶复。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評(píng)論 3 330
  • 文/蒙蒙 一速挑、第九天 我趴在偏房一處隱蔽的房頂上張望谤牡。 院中可真熱鬧,春花似錦梗摇、人聲如沸拓哟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽断序。三九已至流纹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間违诗,已是汗流浹背漱凝。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留诸迟,地道東北人茸炒。 一個(gè)月前我還...
    沈念sama閱讀 48,173評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像阵苇,于是被迫代替她去往敵國(guó)和親壁公。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理绅项,服務(wù)發(fā)現(xiàn)紊册,斷路器,智...
    卡卡羅2017閱讀 134,657評(píng)論 18 139
  • 1.這篇文章不是本人原創(chuàng)的快耿,只是個(gè)人為了對(duì)這部分知識(shí)做一個(gè)整理和系統(tǒng)的輸出而編輯成的囊陡,在此鄭重地向本文所引用文章的...
    SOMCENT閱讀 13,068評(píng)論 6 174
  • 平行時(shí)空下的自己不太可能交匯另一個(gè)自己,同一時(shí)空下的不同人卻每時(shí)每刻都在交匯掀亥。重慶森林里的故事每日都在發(fā)生撞反,人和人...
    飛行家MK閱讀 1,400評(píng)論 0 3
  • 透過這盤香噴噴的餃子, 你看到幕后的故事了嗎搪花? 總有一股力量的存在遏片, 它使饑餓的肚腸奔向家的方向, 它使漂泊的靈魂...
    傾城_ab99閱讀 225評(píng)論 0 1
  • 有個(gè)夢(mèng)想,希望30歲的時(shí)候有個(gè)大大的房子倚聚,住著爸爸媽媽,養(yǎng)幾條大狗凿可,每年可以和爸媽出去旅行一兩次惑折,做著自己喜歡的事...
    來自外太空的大象閱讀 348評(píng)論 0 0