ip**的呼叫過程整個ip**的呼叫流程可分為3部分:連線階段、通話階段、拆線階段。
(1)建立連線階段
在空閒狀態下,cpu一直迴圈檢測是否有摘機或其它使用者呼入的訊號。使用者摘機時, cpu檢測到摘機訊號,就傳送撥號音給使用者並準備接收使用者所撥的**號碼。待號碼收齊後,cpu給伺服器傳送arp請求,收到伺服器的應答後再傳送icmp請求,從伺服器的icmp應答
中獲取對端的ip位址及實體地址,然後開始發起呼叫。通過icmp包送到ethernet,等待被叫使用者回應,如果等待一段時間,使用者未回應,說明使用者不在或線路故障,給使用者送忙音;如果被叫使用者回應,就給話筒送回鈴音,同時被叫使用者一方振鈴;若被叫久不摘機,被叫停止振鈴,併發icmp訊息給主叫使用者拆線,主叫使用者收到此訊息,送忙音,等待主叫使用者掛機;如果被叫使用者在規定時間內摘機,則停止送振鈴音,並用icmp應答訊號,通知主叫使用者,被叫已應答,主叫使用者收到此訊息,停止送鈴音,通話開始。
(2)通話階段
進入通話階段,主叫使用者就開始傳送話音資料的ip包。具體過程如下:首先,將編碼後的語音資料進行接收,並按照udp進行封裝,再封裝成ip包送往ethernet;同時,將ethernet card接收到的語音ip包進行拆包,並按一定節拍將解封語音資料進行解碼,從而將被叫使用者的話音送到聽筒,將話筒的話音送到被叫方。被叫使用者在通話階段與主叫使用者通
話階段所處理的過程完全相同。
(3)拆線階段
當雙方通話階段結束時,如果主叫先掛機,cpu檢測了掛機訊號,就經被叫方送拆線訊號icmp。被叫方收到此拆線訊號,就給被叫方送忙音,提醒被叫方掛機。如果被叫方掛機,就經主叫方送1個釋放應答訊號,並停止送忙音,這次通話就宣告結束。相反地,如果被叫方先掛機,其處理過程與上面是相同的。1次通話過程結束後,雙方進入空閒狀態,cpu再進行迴圈檢測是否有摘機以及其它使用者呼入的訊號,然後重複上面的處理過程。
icmp模組
icmp模組主要實現對**信令的封裝。icmp包可分為2種:icmp請求和icmp應答。icmp請求包括2種情況:向伺服器傳送請求獲取對方使用者的ip位址及實體地址和向對端使用者傳送請求進行通話連線。相應的icmp應答也有2種:伺服器傳送的應答和普通使用者的應答。
主叫使用者與伺服器取得聯絡後,向伺服器傳送1個icmp請求並等待應答,從伺服器的應答中獲取對方的ip位址和實體地址,然後再向對端傳送1個icmp請求包,從叫使用者收到主叫使用者的請求,做出應答。icmp包的格式如圖3所示。
用資料區的第1個位元組來標識2種情況:若第1個位元組全為零,則在後面的資料區域中可填入ip位址及實體地址。若不全為零,則第1個位元組為**信令。**信令可以自己定義,按照程式控制交換機的技術規範,只需要以下一些基本信令即可:(通過觀察通話過程,發現只有結束通話時才通過icmp通知對方說,不可達)
函式的呼叫過程
計算機在執行呼叫函式的過程中,會根據函式完成一些工作,比如資料的傳遞 形參拷貝 返回值 記憶體的分配和釋放 執行控制和轉移,這些操作需要通過形成乙個棧幀來完成。棧幀 stack frame 棧幀就是函式執行的環境。每個函式在被呼叫的時候都會在棧區形成乙個叫做棧幀的結構,這個結構儲存了函式引數 區域性...
驅動呼叫過程
驅動呼叫過程 剛接觸到linux下驅動程式設計,一般都是照著模式寫 或是修改一下已有原始碼,對驅動的呼叫過程並不是很熟悉。在網上不斷的 算是有點明白了,現在我就說下自己的了解。我們載入驅動模組後都會做乙個工作,就是通過mknod在 dev資料夾下建立乙個裝置檔案 如mknod dev c major...
probe呼叫過程
這幾天搞ti的vpfe,裡面裝置的註冊使用platform,平台裝置註冊方式來註冊的。一直都知道 cpp view plain copy print 112 struct device driver 裡的probe函式,但是不知道是何時被呼叫的。經過跟蹤 在module init vpfe init...