| 摘要:在介紹實(shí)現(xiàn)IP電話基本原理的基礎(chǔ)上,詳細(xì)闡述IP電話的TCP/IP協(xié)議的實(shí)現(xiàn)過程,并簡(jiǎn)要描述1次通話的全過程。 關(guān)鍵詞:IP電話 TCP/IP協(xié)議 ICMP UDP ARP 引 言 隨著網(wǎng)絡(luò)技術(shù)的不斷發(fā)展,計(jì)算機(jī)通信系統(tǒng)已漸漸地與網(wǎng)絡(luò)連為一體了,個(gè)人計(jì)算機(jī)的功能得到了極大的增強(qiáng);與此同時(shí),人們的需求在不斷增加,網(wǎng)絡(luò)的應(yīng)用范圍也在不斷擴(kuò)寬,網(wǎng)絡(luò)電話離人們的生活也越來(lái)越近了。尤其是當(dāng)人們正試圖將網(wǎng)絡(luò)改造成能進(jìn)行實(shí)時(shí)通信的全球信息高速公路的雛形時(shí),它作為一種新的話音業(yè)務(wù),已經(jīng)成為研究和開發(fā)的熱點(diǎn)。 1 IP電話的實(shí)現(xiàn)原理 普通電話通過信令來(lái)控制用戶的呼叫建立、連接、通話、釋放連接等過程。與此類似,IP電話也必須通過電話信令來(lái)控制這些過程,即IP電話要傳送2類數(shù)據(jù):信令數(shù)據(jù)和語(yǔ)音數(shù)據(jù)。與傳統(tǒng)的PSTN電話所不同的是,IP電話是通過網(wǎng)絡(luò)進(jìn)行傳輸?shù)摹Kㄟ^分組交換的方式來(lái)實(shí)現(xiàn),因此TCP/IP協(xié)議是其所應(yīng)遵守的基本協(xié)議。但是TCP/IP協(xié)議是一個(gè)龐大而復(fù)雜的體系結(jié)構(gòu),幾乎涵蓋了網(wǎng)絡(luò)上所有的應(yīng)用,對(duì)于IP電話這一特定的應(yīng)用,實(shí)現(xiàn)整個(gè)TCP/IP協(xié)議是完全沒有必要的。所以在實(shí)現(xiàn)的過程中,可以針對(duì)電話這一特定的要求簡(jiǎn)化TCP/IP協(xié)議。 圖1是一個(gè)簡(jiǎn)化了的TCP/IP協(xié)議的分層結(jié)構(gòu)示意圖。 圖1在遵循OSI的7層結(jié)構(gòu)的基礎(chǔ)上,對(duì)TCP/IP協(xié)議機(jī)制進(jìn)行了適當(dāng)?shù)暮?jiǎn)化。在網(wǎng)絡(luò)接口層,基于帶寬及接口復(fù)雜程度的考慮,我們選擇Ethernet網(wǎng)卡作為接入網(wǎng)絡(luò)的接口,并采用ARP的方式對(duì)電話進(jìn)行尋址。網(wǎng)絡(luò)層仍然用IP數(shù)據(jù)報(bào)的方式封裝從上層傳來(lái)的數(shù)據(jù)包,它包括傳輸層的UDP及ICMP兩種數(shù)據(jù)包,這兩種數(shù)據(jù)包分別傳送信令數(shù)據(jù)和語(yǔ)音數(shù)據(jù)。與TCP的傳輸方式相比,UDP的傳輸方式在網(wǎng)絡(luò)壓力不太大的情況下傳輸效率會(huì)更高。 圖2是IP電話的實(shí)現(xiàn)框圖:以單片機(jī)為核心,包括存儲(chǔ)、輸入輸出、與網(wǎng)絡(luò)的接口及語(yǔ)音的編解碼部分。 2 TCP/IP協(xié)議的設(shè)計(jì) 根據(jù)IP電話實(shí)現(xiàn)的基本原理,可以將TCP/IP協(xié)議固件分為以下4個(gè)模塊來(lái)實(shí)現(xiàn)。 (1)ARP模塊 ARP模塊主要實(shí)現(xiàn)對(duì)電話的尋址功能。在網(wǎng)絡(luò)中,IP電話同計(jì)算機(jī)一樣,每個(gè)IP電話對(duì)應(yīng)1個(gè)IP地址,用戶每次建立連接之前首先要獲得電話的IP地址及物理地址。在局域網(wǎng)中,為了減輕單片機(jī)的負(fù)擔(dān),可以在服務(wù)器中給用戶建立電話號(hào)碼與IP地址及物理地址的對(duì)應(yīng)。用戶建立連接之前,主叫用戶首先給服務(wù)器發(fā)送1個(gè)ARP請(qǐng)求,與服務(wù)器取得聯(lián)系,進(jìn)而再發(fā)送ICMP請(qǐng)求。服務(wù)器將用戶所需的對(duì)方的IP地址及物理地址放到ICMP包中,形成應(yīng)答發(fā)送給主叫用戶。 ARP包的首部采用結(jié)構(gòu)的方式來(lái)封裝,一個(gè)ARP的頭結(jié)構(gòu)ARPKT如下: typedef struct{ WORD hrd, /* 硬件類型 */ pro; /* 協(xié)議類型 */ BYTE hln, /*物理地址長(zhǎng)度*/ pln; /* IP地址長(zhǎng)度*/ WORD op; /* ARP操作字段*/ BYTE smac[MACLEN]; /*源物理地址*/ LWORD sip; /* 源IP地址*/ BYTE dmac[MACLEN]; /* 目的物理地址*/ LWORD dip; /* 目的IP地址 */ } ARPKT; (2)IP模塊 IP模塊主要實(shí)現(xiàn)對(duì)電話信令和語(yǔ)音數(shù)據(jù)的傳輸。在一個(gè)物理網(wǎng)絡(luò)中,數(shù)據(jù)報(bào)可以直接從一個(gè)IP電話傳送到另一個(gè)IP電話,因此不必考慮間接投遞的問題。當(dāng)IP電話要傳送電話信令或語(yǔ)音數(shù)據(jù)時(shí),IP層對(duì)ICMP或UDP包進(jìn)行封裝,進(jìn)而傳遞給物理層形成幀發(fā)送出去。當(dāng)IP數(shù)據(jù)報(bào)到達(dá)IP電話時(shí),網(wǎng)絡(luò)接口軟件把它傳給IP軟件處理。如果其中的目的地址與自己的IP地址匹配,則接收該數(shù)據(jù)報(bào)并上傳給合適的高層協(xié)議;如果不匹配,則丟棄該數(shù)據(jù)報(bào)。 IP數(shù)據(jù)報(bào)的頭部采用結(jié)構(gòu)的形式進(jìn)行封裝,一個(gè)IP數(shù)據(jù)報(bào)的頭部結(jié)構(gòu)如下: typedef struct{ BYTE vhl, /*版本及首部長(zhǎng)度*/ service; /*IP服務(wù)類型*/ WORD len, /*IP數(shù)據(jù)報(bào)總長(zhǎng)度*/ ident, /* 標(biāo)識(shí) */ frags; /*標(biāo)志 */ BYTE ttl, /*生存時(shí)間*/ pcol; /*數(shù)據(jù)區(qū)所用的協(xié)議*/ WORD check; /*首部校驗(yàn)和*/ LWORD sip, /* IP源地址*/ dip; /*IP 目的地址*/ } IPHDR; (3)ICMP模塊 ICMP模塊主要實(shí)現(xiàn)對(duì)電話信令的封裝。 ICMP包可分為2種:ICMP請(qǐng)求和ICMP應(yīng)答。ICMP請(qǐng)求包括2種情況:向服務(wù)器發(fā)送請(qǐng)求獲取對(duì)方用戶的IP地址及物理地址和向?qū)Χ擞脩舭l(fā)送請(qǐng)求進(jìn)行通話連接。相應(yīng)的ICMP應(yīng)答也有2種:服務(wù)器發(fā)送的應(yīng)答和普通用戶的應(yīng)答。 主叫用戶與服務(wù)器取得聯(lián)系后,向服務(wù)器發(fā)送1個(gè)ICMP請(qǐng)求并等待應(yīng)答,從服務(wù)器的應(yīng)答中獲取對(duì)方的IP地址和物理地址,然后再向?qū)Χ税l(fā)送1個(gè)ICMP請(qǐng)求包,從叫用戶收到主叫用戶的請(qǐng)求,做出應(yīng)答。ICMP包的格式如圖3所示。 用數(shù)據(jù)區(qū)的第1個(gè)字節(jié)來(lái)標(biāo)識(shí)2種情況:若第1個(gè)字節(jié)全為零,則在后面的數(shù)據(jù)區(qū)域中可填入IP地址及物理地址。若不全為零,則第1個(gè)字節(jié)為電話信令。電話信令可以自己定義,按照程控交換機(jī)的技術(shù)規(guī)范,只需要以下一些基本信令即可: Req-ID 請(qǐng)求對(duì)應(yīng)IP地址 Ethernet ID號(hào); Req-conn 請(qǐng)求連接; Conn-In 連接指示; Req-lease 請(qǐng)求釋放; Lease-In 釋放指示; Acknowledge 應(yīng)答; ID_In ID 指示。 (4)UDP 模塊 UDP模塊主要實(shí)現(xiàn)對(duì)語(yǔ)音數(shù)據(jù)的封裝。在用戶已經(jīng)確定建立連接之后,將編碼后的語(yǔ)音數(shù)據(jù)放在UDP的數(shù)據(jù)區(qū)域中進(jìn)行傳送。一個(gè)UDP的數(shù)據(jù)包格式如圖4所示。 它包括16bit的源地址、16bit的目的地址、16bit的報(bào)文長(zhǎng)度及16bit的校驗(yàn)和。為了保證語(yǔ)音數(shù)據(jù)的質(zhì)量及傳輸效率,數(shù)據(jù)區(qū)域的長(zhǎng)度應(yīng)適當(dāng)選擇,不宜過大或過小。 3 IP電話的呼叫過程 整個(gè)IP電話的呼叫流程可分為3部分:連接階段、通話階段、拆線階段。 (1)建立連接階段 在空閑狀態(tài)下,CPU一直循環(huán)檢測(cè)是否有摘機(jī)或其它用戶呼入的信號(hào)。用戶摘機(jī)時(shí), CPU檢測(cè)到摘機(jī)信號(hào),就發(fā)送撥號(hào)音給用戶并準(zhǔn)備接收用戶所撥的電話號(hào)碼。待號(hào)碼收齊后,CPU給服務(wù)器發(fā)送ARP請(qǐng)求,收到服務(wù)器的應(yīng)答后再發(fā)送ICMP請(qǐng)求,從服務(wù)器的ICMP應(yīng)答中獲取對(duì)端的IP地址及物理地址,然后開始發(fā)起呼叫。通過ICMP包送到Ethernet,等待被叫用戶回應(yīng),如果等待一段時(shí)間,用戶未回應(yīng),說明用戶不在或線路故障,給用戶送忙音;如果被叫用戶回應(yīng),就給話筒送回鈴音,同時(shí)被叫用戶一方振鈴;若被叫久不摘機(jī), 被叫停止振鈴,并發(fā)ICMP消息給主叫用戶拆線,主叫用戶收到此消息,送忙音,等待主叫用戶掛機(jī);如果被叫用戶在規(guī)定時(shí)間內(nèi)摘機(jī),則停止送振鈴音,并用ICMP應(yīng)答信號(hào),通知主叫用戶,被叫已應(yīng)答,主叫用戶收到此消息,停止送鈴音,通話開始。 (2)通話階段 進(jìn)入通話階段,主叫用戶就開始發(fā)送話音數(shù)據(jù)的IP包。具體過程如下:首先,將編碼后的語(yǔ)音數(shù)據(jù)進(jìn)行接收,并按照UDP進(jìn)行封裝,再封裝成IP包送往Ethernet;同時(shí),將Ethernet Card接收到的語(yǔ)音IP包進(jìn)行拆包,并按一定節(jié)拍將解封語(yǔ)音數(shù)據(jù)進(jìn)行解碼,從而將被叫用戶的話音送到聽筒,將話筒的話音送到被叫方。被叫用戶在通話階段與主叫用戶通話階段所處理的過程完全相同。 (3)拆線階段 當(dāng)雙方通話階段結(jié)束時(shí),如果主叫先掛機(jī),CPU檢測(cè)了掛機(jī)信號(hào),就經(jīng)被叫方送拆線信號(hào)ICMP。被叫方收到此拆線信號(hào),就給被叫方送忙音,提醒被叫方掛機(jī)。如果被叫方掛機(jī),就經(jīng)主叫方送1個(gè)釋放應(yīng)答信號(hào),并停止送忙音,這次通話就宣告結(jié)束。相反地,如果被叫方先掛機(jī),其處理過程與上面是相同的。1次通話過程結(jié)束后,雙方進(jìn)入空閑狀態(tài),CPU再進(jìn)行循環(huán)檢測(cè)是否有摘機(jī)以及其它用戶呼入的信號(hào),然后重復(fù)上面的處理過程。 結(jié)束語(yǔ) 本設(shè)計(jì)方案將傳統(tǒng)電話的實(shí)現(xiàn)方式與網(wǎng)絡(luò)結(jié)合起來(lái),在遵守TCP/IP基本協(xié)議的基礎(chǔ)上,通過對(duì)其進(jìn)行簡(jiǎn)化,在局域網(wǎng)內(nèi)簡(jiǎn)單地實(shí)現(xiàn)IP電話,成本較低。同時(shí),還存在一些缺陷,如時(shí)延、數(shù)據(jù)的丟失及互連互通等問題,這些都影響了話音的傳輸質(zhì)量和電話的推廣。不過可以通過增設(shè)網(wǎng)關(guān)來(lái)實(shí)現(xiàn)IP電話的互連互通性,拓寬網(wǎng)絡(luò)的帶寬可以減少網(wǎng)絡(luò)的時(shí)延等,并且隨著網(wǎng)絡(luò)技術(shù)及其它電子技術(shù)的發(fā)展,這些問題必將迎刃而解! |