服務(wù)器如何接受請(qǐng)求?
服務(wù)器應(yīng)當(dāng)能夠接收任何IP地址、端口和協(xié)議的請(qǐng)求,通過對(duì)該服務(wù)器的SIP或者SIPS URI的DNS進(jìn)行查找,得到這個(gè)服務(wù)器的地址然后進(jìn)行連接和請(qǐng)求發(fā)送。
Handing out包括在Register請(qǐng)求、轉(zhuǎn)發(fā)應(yīng)答的Contact頭域中的添加URI、應(yīng)答的Record-Route頭域中添加一個(gè)URI字段,URI字段可用通過放在網(wǎng)頁上被handing out讀取。
對(duì)于服務(wù)器監(jiān)聽UDP的任何端口和界面,需要在TCP上同時(shí)進(jìn)行監(jiān)聽;如果服務(wù)器在TCP上進(jìn)行監(jiān)聽,那么不一定需要在UDP上同時(shí)進(jìn)行監(jiān)聽。
當(dāng)服務(wù)端事務(wù)從任意一個(gè)通訊層上接收到一個(gè)請(qǐng)求時(shí),必須檢查Via字段的sent-by參數(shù);sent-by參數(shù)的主機(jī)部分包含一個(gè)主機(jī)名或者包含的IP地址和包的源地址不一致時(shí),服務(wù)端需要添加received參數(shù)到Via字段中;received參數(shù)包含收到包的源地址。由于服務(wù)端一定要把應(yīng)答信息發(fā)送給收到請(qǐng)求的源地址,received參數(shù)用于幫助服務(wù)端通訊層發(fā)送應(yīng)答。
1. 安全與綁定策略補(bǔ)充
(1) 接口綁定限制
安全實(shí)踐:雖然理論上服務(wù)器可監(jiān)聽所有接口(0.0.0.0或::),但生產(chǎn)環(huán)境中通常僅綁定特定 IP(如內(nèi)網(wǎng)/公網(wǎng)接口),以減少攻擊面。
防火墻規(guī)則:需開放 SIP 標(biāo)準(zhǔn)端口(UDP/TCP 5060,TLS 5061),并限制來源 IP 范圍(如僅允許運(yùn)營商或合作伙伴 IP)。
(2) 協(xié)議優(yōu)先級(jí)
傳輸層選擇:
UDP:適用于低延遲場景,但需處理丟包重傳(需實(shí)現(xiàn)應(yīng)用層重傳邏輯)。
TCP:確??煽總鬏?,適合大消息(如攜帶 SDP 的 INVITE)。
TLS(SIPS):強(qiáng)制加密,需管理證書鏈(如 Let's Encrypt 或私有 CA)。
2. DNS 解析的深入要求
(1) NAPTR 與 SRV 記錄
SIP 服務(wù)發(fā)現(xiàn):客戶端通過 DNS NAPTR 記錄確定支持的傳輸協(xié)議(如 _sip._udp, _sips._tcp),再通過 SRV 記錄解析服務(wù)器地址和端口。
負(fù)載均衡:SRV 記錄的權(quán)重(priority/weight)支持多服務(wù)器流量分配,需配合健康檢查實(shí)現(xiàn)故障轉(zhuǎn)移。
(2) 多宿主與地理路由
Anycast DNS:全球部署的服務(wù)器可使用 Anycast IP,通過 BGP 路由將請(qǐng)求導(dǎo)向最近節(jié)點(diǎn)。
DNS TTL 管理:設(shè)置合理的 TTL(如 300 秒),平衡故障恢復(fù)速度與 DNS 查詢開銷。
3.Via 字段處理的完整規(guī)則
(1) received 與 rport 參數(shù)
NAT 穿透:當(dāng)客戶端位于 NAT 后時(shí),Via 的 sent-by IP 可能與實(shí)際源 IP 不同。
received:記錄請(qǐng)求的實(shí)際源 IP。
rport:記錄請(qǐng)求的實(shí)際源端口(若與 sent-by 端口不符)。
響應(yīng)路由:服務(wù)器發(fā)送響應(yīng)時(shí),優(yōu)先使用 received:rport 作為目標(biāo)地址,而非 sent-by。
(2) Via 棧操作
代理服務(wù)器行為:每經(jīng)過一個(gè)代理,Via 頭添加當(dāng)前節(jié)點(diǎn)信息,形成“?!苯Y(jié)構(gòu)。
響應(yīng)回傳:響應(yīng)按 Via 棧逆序逐跳返回,確保路徑一致性。