VoIP單向通話只有一方聽到聲音是什麼原因?
單向通話是指電話明明接通了,卻只有一方聽到對方的聲音,另一方一片安靜。由於電話已經接通,訊號層其實運作正常,問題出在語音資料本身的傳輸路徑。本文從SIP與語音資料分離的架構出發,說明造成單向通話的幾類成因,以及如何分辨欠缺聲音的方向。
接通但無聲:訊號與語音走不同的路
網絡電話有兩條獨立的通道。第一條負責通話控制,例如撥號、接聽、掛線,由 SIP(Session Initiation Protocol,會話發起協議)處理。第二條負責語音資料,由 RTP(Real-time Transport Protocol,實時傳輸協議)承載,規範文件是 RFC 3550。兩者在網絡上並非同一條路徑,亦不使用同一組連接埠。
這個分離架構是理解單向通話的關鍵。電話能夠接通,證明 SIP 訊號在雙方之間往來正常;但接通後聽不到聲音,代表 RTP 語音封包在某一個方向上沒有到達目的地。換言之,控制層成功,資料層單向受阻。
語音通道亦是有方向性的。甲方傳向乙方的語音,與乙方傳向甲方的語音,是兩股獨立的封包流,走的路徑與經過的裝置可能不同。任何一股被擋下來,症狀就是單向通話:一方講話對方聽得到,反方向卻沒有聲音。兩股同時被擋,症狀就變成雙向無聲。
由於 RTP 使用的連接埠是在通話建立時協商決定,並非固定的一組號碼,因此中途的路由器與防火牆處理起來比訊號通道複雜得多,這也是單向通話遠比註冊失敗難排查的原因。
網絡位址轉譯造成的回程受阻
最常見的單向通話成因,是網絡位址轉譯(NAT)令回程語音無法送回話機。辦公室的話機使用內部私有位址,對外通訊時由路由器轉換為公網位址。當話機主動送出語音封包,路由器會建立一項對應紀錄,回程封包依靠這項紀錄才能找到正確的內部話機。
問題在於方向。若對方的語音先送到,而話機這邊尚未送出封包、對應紀錄還未建立,該批回程封包便會被丟棄,因為路由器不知道要交給哪一部內部裝置。結果是對方聽得到我方,我方卻聽不到對方,或者通話開頭數秒無聲,之後才恢復正常。
更棘手的一類是路由器對每個外部目的地都指派不同的對應埠口。這種行為下,話機向甲位址送出封包所建立的紀錄,並不適用於乙位址送來的封包;若語音伺服器與訊號伺服器並非同一位址,回程語音便會落空。這類故障通常需要在話機或系統側啟用 NAT 穿越輔助機制,才能穩定建立雙向通道。
另一種情況是對應紀錄提早過期。長時間單向通話(例如一方持續聆聽而不說話),該方向的封包流可能中斷得夠久,令路由器清除紀錄,之後恢復說話便沒有聲音。話機的持續連線(keep-alive)功能就是為此而設,以極小的封包定期維持通道。
SDP位址與連接埠協商錯誤
通話建立時,雙方要互相告知「語音送到哪裏」。這項協商透過 SDP(Session Description Protocol,會話描述協議)在 SIP 訊息中攜帶,規範文件是 RFC 4566。SDP 內含接收語音的 IP 位址與連接埠,以及可用的編碼格式。
若話機在 SDP 中填寫的是自己的內部私有位址,而通話對方位於互聯網上,對方便會把語音送往一個在公網上不可路由的位址,語音自然到不了。症狀正是單向:話機送出的語音可以到達對方,對方送回的語音卻消失。這是單向通話最典型的成因之一。
處理方法有幾個方向。話機或電話系統可設定對外公佈的公網位址,令 SDP 內容正確;或由會話邊界控制器(Session Border Controller)在邊界代為改寫位址並轉送語音。部分路由器內建的 SIP 輔助功能亦會嘗試改寫 SDP,但若改寫邏輯與電話系統的處理方式重疊或衝突,反而會製造出原本不存在的單向問題。
編碼協商亦可能造成無聲。雙方若沒有共同支援的編碼格式,或一方接受了自己實際上無法解碼的格式,通話會顯示接通而其中一方聽不到內容。排查時應核對兩端的編碼設定,先統一為雙方都確定支援的基本格式測試。
防火牆與QoS的單向規則
防火牆與流量管理設定亦會造成方向性的差異,以下是幾類常見情況。
- 只允許外出的規則——防火牆允許內部裝置對外發起連線,卻沒有為回程的語音封包放行。訊號通道因為使用固定連接埠而較易設定,語音使用的是協商而來的動態連接埠範圍,往往被漏掉。
- 連接埠範圍不一致——電話系統設定的語音連接埠範圍,與防火牆放行的範圍不一致,落在範圍外的通話便會無聲。範圍設定要兩邊對齊。
- SIP輔助功能重複處理——路由器的 SIP 輔助功能會檢視並改寫訊息內容。若電話系統本身已正確處理位址,輔助功能的改寫便屬多餘,可能把正確位址改成錯誤位址。這類故障的特徵是更換路由器後才出現。
- 單向的頻寬限制——上載與下載頻寬不對稱的線路上,若只在其中一個方向做了流量限制或優先權設定,擁塞時就會單向丟包,聽起來像單向無聲。
- 加密設定不對稱——一端要求加密語音而另一端送出未加密封包,封包會被丟棄。RFC 3711 定義的 SRTP 是常用的語音加密方式,兩端設定必須一致。
檢查防火牆時,重點不是「有沒有放行 SIP」,而是「語音連接埠範圍在兩個方向是否都放行」。這個分別,正是單向通話與完全無法撥號的差異所在。
分辨方向與實測排查步驟
排查單向通話,第一步是確定哪一個方向沒有聲音,並縮小範圍。
- 記錄方向——明確記下「內線A聽不到內線B」還是「B聽不到A」。方向錯記會令整個排查走錯路。
- 分辨內線與外線——分別測試內線互撥、撥出外線、接聽外線三種情況。內線互撥正常而只有外線出問題,代表問題在邊界的位址轉譯或防火牆;連內線都單向,則問題在內部網絡或話機本身。
- 更換話機測試——把同一分機的設定套到另一部話機,或把有問題的話機接到另一個埠口。若問題隨話機移動,屬設備或設定問題;若留在原位,屬網絡問題。
- 檢視通話統計——話機或系統的通話紀錄通常會顯示收發封包數目。某一方向的接收封包數為零,即可證實該方向的語音從未到達,範圍立即收窄到路徑上的裝置。
- 逐項還原設定——若近期改動過防火牆、路由器或電話系統設定,先把改動還原再測試,比同時調整多項參數有效。
封包數目這一項最值得重視。接收為零與接收正常但無聲,是兩種完全不同的故障:前者是傳輸路徑問題,後者更可能是編碼、加密或話機音訊設定問題。分清兩者可以省下大量時間。
香港寬頻環境的實際情況
香港的寬頻與樓宇環境,令單向通話有幾種本地常見成因。
- 共用公網位址的寬頻——部分寬頻服務讓多個用戶共用同一公網位址,對應紀錄的存活時間較短且行為較難預測,回程語音容易落空。此類環境下話機的持續連線功能幾乎是必要設定。
- 上載頻寬遠低於下載——不少商業與住宅寬頻計劃的上載頻寬遠低於下載。上載一旦被其他應用佔滿,我方送出的語音會丟包,對方便聽不到我方,症狀正是單向。備份上傳、雲端同步與視像會議都是常見的爭用來源。
- 路由器由服務供應商提供——服務供應商提供的路由器往往預設啟用 SIP 輔助功能,而設定介面未必開放給用戶調整。這類環境下若出現單向通話,可能需要在自置的路由器後面另建一層網絡,或請供應商協助關閉該功能。
- 寫字樓共用網絡——共享辦公空間或由業主提供網絡的單位,防火牆規則不由租戶控制,語音連接埠範圍未必放行。簽約前應確認是否可以提出開放要求。
- 村屋與工廈——家用級路由器在同時處理大量連線時容易清除對應紀錄,令長時間通話中途轉為單向。此類場地宜採用支援語音應用的網絡設備。
通訊事務管理局辦公室亦提醒,IP 電話的話音訊息部分或全部透過互聯網傳送,服務質素可能不受服務供應商控制,用戶應向供應商查詢服務質素詳情。這一點在排查單向通話時值得記住:問題未必在辦公室內部,亦可能在中途的網絡路徑。