要想做出好的視頻通話軟件,必須了解視頻通話的主要技術(shù)。下面是總結(jié)的一些技術(shù),僅供參考。
1、支持標(biāo)準(zhǔn)SIP協(xié)議。
SIP是類似于HTTP的基于文本的協(xié)議。SIP可以減少應(yīng)用特別是高級(jí)應(yīng)用的開發(fā)時(shí)間。由于基于IP協(xié)議的SIP利用了IP網(wǎng)絡(luò),固定網(wǎng)運(yùn)營(yíng)商也會(huì)逐漸認(rèn)識(shí)到SIP技術(shù)對(duì)于他們的深遠(yuǎn)意義。
SIP(Session Initiation Protocol)是一個(gè)應(yīng)用層的信令控制協(xié)議。用于創(chuàng)建、修改和釋放一個(gè)或多個(gè)參與者的會(huì)話。這些會(huì)話可以是Internet多媒體會(huì)議、IP電話或多媒體分發(fā)。會(huì)話的參與者可以通過組播(multicast)、網(wǎng)狀單播(unicast)或兩者的混合體進(jìn)行通信。 使用 SIP,服務(wù)提供商可以隨意選擇標(biāo)準(zhǔn)組件。不論媒體內(nèi)容和參與方數(shù)量,用戶都可以查找和聯(lián)系對(duì)方。SIP 對(duì)會(huì)話進(jìn)行協(xié)商,以便所有參與方都能夠就會(huì)話功能達(dá)成一致以及進(jìn)行修改。它甚至可以添加、刪除或轉(zhuǎn)移用戶。 SIP它既不是會(huì)話描述協(xié)議,也不提供會(huì)議控制功能。為了描述消息內(nèi)容的負(fù)載情況和特點(diǎn),SIP 使用 Internet 的會(huì)話描述協(xié)議 (SDP) 來描述終端設(shè)備的特點(diǎn)。SIP 自身也不提供服務(wù)質(zhì)量 (QoS),它與負(fù)責(zé)語音質(zhì)量的資源預(yù)留協(xié)議(RSVP) 互操作。它還與若干個(gè)其他協(xié)議進(jìn)行協(xié)作,包括負(fù)責(zé)定位的輕型目錄訪問協(xié)議(LDAP)、負(fù)責(zé)身份驗(yàn)證的遠(yuǎn)程身份驗(yàn)證撥入用戶服務(wù) (RADIUS) 以及負(fù)責(zé)實(shí)時(shí)傳輸?shù)?RTP 等多個(gè)協(xié)議。
SIP 規(guī)定了以下基本的通信要求:
1. 用戶定位服務(wù)
2. 會(huì)話建立
3. 會(huì)話參與方管理
4. 特點(diǎn)的有限確定
SIP 會(huì)話使用多達(dá)四個(gè)主要組件:
SIP 用戶代理、SIP 注冊(cè)服務(wù)器、SIP 代理服務(wù)器和 SIP 重定向服務(wù)器。這些系統(tǒng)通過傳輸包括了 SDP 協(xié)議(用于定義消息的內(nèi)容和特點(diǎn))的消息來完成 SIP 會(huì)話。下面概括性地介紹各個(gè) SIP 組件及其在此過程中的作用。
3.1、SIP 用戶代理
SIP 用戶代理(UA) 是終端用戶設(shè)備,如用于創(chuàng)建和管理 SIP 會(huì)話的移動(dòng)電話、多媒體手持設(shè)備、PC、PDA 等。用戶代理客戶機(jī)發(fā)出消息。用戶代理服務(wù)器對(duì)消息進(jìn)行響應(yīng)。
3.2、SIP 注冊(cè)服務(wù)器
SIP 注冊(cè)服務(wù)器是包含域中所有用戶代理的位置的數(shù)據(jù)庫(kù)。在 SIP 通信中,這些服務(wù)器會(huì)檢索參對(duì)方的 IP 地址和其他相關(guān)信息,并將其發(fā)送到 SIP 代理服務(wù)器。
3.3、SIP 代理服務(wù)器
SIP 代理服務(wù)器接受 SIP UA 的會(huì)話請(qǐng)求并查詢 SIP 注冊(cè)服務(wù)器,獲取收件方 UA 的地址信息。然后,它將會(huì)話邀請(qǐng)信息直接轉(zhuǎn)發(fā)給收件方 UA(如果它位于同一域中)或代理服務(wù)器(如果 UA 位于另一域中)。
3.4、SIP 重定向服務(wù)器
SIP 重定向服務(wù)器允許 SIP 代理服務(wù)器將 SIP 會(huì)話邀請(qǐng)信息定向到外部域。SIP 重定向服務(wù)器可以與 SIP 注冊(cè)服務(wù)器和 SIP 代理服務(wù)器同在一個(gè)硬件上。
SIP 的一個(gè)重要特點(diǎn)是它不定義要建立的會(huì)話的類型,而只定義應(yīng)該如何管理會(huì)話。有了這種靈活性,也就意味著SIP可以用于眾多應(yīng)用和服務(wù)中,包括交互式游戲、音樂和視頻點(diǎn)播以及語音、視頻和 Web 會(huì)議。SIP消息是基于文本的,因而易于讀取和調(diào)試。新服務(wù)的編程更加簡(jiǎn)單,對(duì)于設(shè)計(jì)人員而言更加直觀。SIP如同電子郵件客戶機(jī)一樣重用 MIME 類型描述,因此與會(huì)話相關(guān)的應(yīng)用程序可以自動(dòng)啟動(dòng)。SIP 重用幾個(gè)現(xiàn)有的比較成熟的 Internet 服務(wù)和協(xié)議,如 DNS、RTP、RSVP 等。不必再引入新服務(wù)對(duì) SIP 基礎(chǔ)設(shè)施提供支持,因?yàn)樵摶A(chǔ)設(shè)施很多部分已經(jīng)到位或現(xiàn)成可用。 對(duì) SIP 的擴(kuò)充易于定義,可由服務(wù)提供商在新的應(yīng)用中添加,不會(huì)損壞網(wǎng)絡(luò)。網(wǎng)絡(luò)中基于 SIP 的舊設(shè)備不會(huì)妨礙基于 SIP 的新服務(wù)。例如,如果舊 SIP 實(shí)施不支持新的 SIP 應(yīng)用所用的方法/標(biāo)頭,則會(huì)將其忽略。 SIP 獨(dú)立于傳輸層。因此,底層傳輸可以是采用 ATM 的 IP。SIP 使用用戶數(shù)據(jù)報(bào)協(xié)議(UDP) 以及傳輸控制協(xié)議(TCP),將獨(dú)立于底層基礎(chǔ)設(shè)施的用戶靈活地連接起來。SIP 支持多設(shè)備功能調(diào)整和協(xié)商。如果服務(wù)或會(huì)話啟動(dòng)了視頻和語音,則仍然可以將語音傳輸?shù)讲恢С忠曨l的設(shè)備,也可以使用其他設(shè)備功能,如單向視頻流傳輸功能。 通信提供商及其合作伙伴和用戶越來越渴求新一代基于 IP 的服務(wù)?,F(xiàn)在有了 SIP(The Session Initiation Protocol 會(huì)話啟動(dòng)協(xié)議),一解燃眉之急。SIP 是不到十年前在計(jì)算機(jī)科學(xué)實(shí)驗(yàn)室誕生的一個(gè)想法。它是第一個(gè)適合各種媒體內(nèi)容而實(shí)現(xiàn)多用戶會(huì)話的協(xié)議,現(xiàn)在已成了 Internet 工程任務(wù)組 (IETF) 的規(guī)范。 今天,越來越多的運(yùn)營(yíng)商、CLEC(競(jìng)爭(zhēng)本地運(yùn)營(yíng)商)和 ITSP(IP 電話服務(wù)商)都在提供基于 SIP 的服務(wù),如市話和長(zhǎng)途電話技術(shù)、在線信息和即時(shí)消息、IP Centrex/Hosted PBX、語音短信、push-to-talk(按鍵通話)、多媒體會(huì)議等等。獨(dú)立軟件供應(yīng)商 (ISV) 正在開發(fā)新的開發(fā)工具,用來為運(yùn)營(yíng)商網(wǎng)絡(luò)構(gòu)建基于 SIP 的應(yīng)用程序以及 SIP 軟件。網(wǎng)絡(luò)設(shè)備供應(yīng)商 (NEV) 正在開發(fā)支持 SIP 信令和服務(wù)的硬件?,F(xiàn)在,有眾多 IP 電話、用戶代理、網(wǎng)絡(luò)代理服務(wù)器、VOIP 網(wǎng)關(guān)、媒體服務(wù)器和應(yīng)用服務(wù)器都在使用 SIP。 SIP 從類似的權(quán)威協(xié)議--如 Web 超文本傳輸協(xié)議(HTTP) 格式化協(xié)議以及簡(jiǎn)單郵件傳輸協(xié)議(SMTP) 電子郵件協(xié)議--演變而來并且發(fā)展成為一個(gè)功能強(qiáng)大的新標(biāo)準(zhǔn)。但是,盡管 SIP 使用自己獨(dú)特的用戶代理和服務(wù)器,它并非自成一體地封閉工作。SIP 支持提供融合的多媒體服務(wù),與眾多負(fù)責(zé)身份驗(yàn)證、位置信息、語音質(zhì)量等的現(xiàn)有協(xié)議協(xié)同工作。 SIP 較為靈活,可擴(kuò)展,而且是開放的。它激發(fā)了 Internet 以及固定和移動(dòng) IP 網(wǎng)絡(luò)推出新一代服務(wù)的威力。SIP 能夠在多臺(tái) PC 和電話上完成網(wǎng)絡(luò)消息,模擬 Internet 建立會(huì)話。 與存在已久的國(guó)際電信聯(lián)盟(ITU) SS7 標(biāo)準(zhǔn)(用于呼叫建立)和 ITU H.323 視頻協(xié)議組合標(biāo)準(zhǔn)不同,SIP 獨(dú)立工作于底層網(wǎng)絡(luò)傳輸協(xié)議和媒體。它規(guī)定一個(gè)或多個(gè)參與方的終端設(shè)備如何能夠建立、修改和中斷連接,而不論是語音、視頻、數(shù)據(jù)或基于 Web 的內(nèi)容。 SIP 大大優(yōu)于現(xiàn)有的一些協(xié)議,如將 PSTN 音頻信號(hào)轉(zhuǎn)換為 IP 數(shù)據(jù)包的媒體網(wǎng)關(guān)控制協(xié)議(MGCP)。因?yàn)?MGCP 是封閉的純語音標(biāo)準(zhǔn),所以通過信令功能對(duì)其進(jìn)行增強(qiáng)比較復(fù)雜,有時(shí)會(huì)導(dǎo)致消息被破壞或丟棄,從而妨礙提供商增加新的服務(wù)。而使用 SIP,編程人員可以在不影響連接的情況下在消息中增加少量新信息。 例如,SIP 服務(wù)提供商可以建立包含語音、視頻和聊天內(nèi)容的全新媒體。如果使用 MGCP、H.323 或 SS7 標(biāo)準(zhǔn),則提供商必須等待可以支持這種新媒體的協(xié)議新版本。而如果使用 SIP,盡管網(wǎng)關(guān)和設(shè)備可能無法識(shí)別該媒體,但在兩個(gè)大陸上設(shè)有分支機(jī)構(gòu)的公司可以實(shí)現(xiàn)媒體傳輸。 而且,因?yàn)?SIP 的消息構(gòu)建方式類似于 HTTP,開發(fā)人員能夠更加方便便捷地使用通用的編程語言(如 Java)來創(chuàng)建應(yīng)用程序。對(duì)于等待了數(shù)年希望使用 SS7 和高級(jí)智能網(wǎng)絡(luò)(AIN) 部署呼叫等待、主叫號(hào)碼識(shí)別以及其他服務(wù)的運(yùn)營(yíng)商,現(xiàn)在如果使用 SIP,只需數(shù)月時(shí)間即可實(shí)現(xiàn)高級(jí)通信服務(wù)的部署。 這種可擴(kuò)展性已經(jīng)在越來越多基于 SIP 的服務(wù)中取得重大成功。Vonage 是針對(duì)用戶和小企業(yè)用戶的服務(wù)提供商。它使用 SIP 向用戶提供 20,000 多條數(shù)字市話、長(zhǎng)話及語音郵件線路。Deltathree 為服務(wù)提供商提供 Internet 電話技術(shù)產(chǎn)品、服務(wù)和基礎(chǔ)設(shè)施。它提供了基于 SIP 的 PC 至電話解決方案,使 PC 用戶能夠呼叫全球任何一部電話。Denwa Communications 在全球范圍內(nèi)批發(fā)語音服務(wù)。它使用 SIP 提供 PC 至 PC 及電話至 PC 的主叫號(hào)碼識(shí)別、語音郵件,以及電話會(huì)議、統(tǒng)一通信、客戶管理、自配置和基于 Web 的個(gè)性化服務(wù)。 某些權(quán)威人士預(yù)計(jì),SIP 與 IP 的關(guān)系將發(fā)展成為類似 SMTP 和 HTTP 與 Internet 的關(guān)系,但也有人說它可能標(biāo)志著 AIN 的終結(jié)。迄今為止,3G 界已經(jīng)選擇 SIP 作為下一代移動(dòng)網(wǎng)絡(luò)的會(huì)話控制機(jī)制。Microsoft 已經(jīng)選擇 SIP 作為其實(shí)時(shí)通信策略并在 Microsoft XP、Pocket PC 和 MSN Messenger 中進(jìn)行了部署。Microsoft 同時(shí)宣布 CE dot net 的下一個(gè)版本將使用基于 SIP 的 VoIP 應(yīng)用接口層,并承諾向用戶 PC 提供基于 SIP 的語音和視頻呼叫。 另外,MCI 正在使用 SIP 向 IP 通信用戶部署高級(jí)電話技術(shù)服務(wù)。用戶將能夠通知主叫方自己是否有空以及首選的通信方式,如電子郵件、電話或即時(shí)消息。利用在線信息,用戶還能夠即時(shí)建立聊天會(huì)話和召開音頻會(huì)議。使用 SIP 將不斷地實(shí)現(xiàn)各種功能。
2、DTMF方式支持 RFC2833 或者 SIP INFO
3、語音編碼方式優(yōu)先級(jí) G729,G711u,G711a,GSM
4、支持 不加密、VOS加密二種加密方式。
5、支持顯余額功能
6、支持電話本功能
7、支持通話記錄功能
8、支持讀取手機(jī)號(hào)碼,設(shè)置入sip協(xié)議的去電顯示display內(nèi)
9、支持3G wifi撥打
10、支持NAT穿透
NAT,即Network Address Translation,可譯為網(wǎng)絡(luò)地址轉(zhuǎn)換或網(wǎng)絡(luò)地址翻譯。
當(dāng)前的Internet面臨兩大問題,即可用IP地址的短缺和路由表的不斷增大,這使得眾多用戶的接入出現(xiàn)困難。 使用NAT技術(shù)可以使一個(gè)機(jī)構(gòu)內(nèi)的所有用戶通過有限的數(shù)個(gè)(或1個(gè))合法IP地址訪問Internet,從而節(jié)省了Internet上的合法IP地址;另一方面,通過地址轉(zhuǎn)換,可以隱藏內(nèi)網(wǎng)上主機(jī)的真實(shí)IP地址,從而提高網(wǎng)絡(luò)的安全性。 在CCNA階段,主要考察NAT的基本技術(shù),應(yīng)試者應(yīng)掌握下述的NAT術(shù)語和幾個(gè)典型的地址轉(zhuǎn)換類型。
1.NAT術(shù)語 在NAT中,有4個(gè)地址術(shù)語是必須正確理解的,它們是Inside Local、Inside Global、Outside Local和Outside Global 在這些術(shù)語中,Inside(內(nèi)部)是指那些由機(jī)構(gòu)或企業(yè)所擁有的內(nèi)部網(wǎng)絡(luò),這些網(wǎng)絡(luò)上的主機(jī)通常分配了私有地址。這些地址不能直接在Internet上進(jìn)行路由,從而也就不能直接用于對(duì)Internet的訪問,必須通過網(wǎng)絡(luò)地址的轉(zhuǎn)換,以合法IP的身份來訪問Internet。前者即InsideLocal地址。后者則為Inside Glob動(dòng)地址。 Local(本地)的地址是不能在Internet上通信的IP地址;Global(全局)的地址是能在Internet上通信的地址。 Outside(外部)是指除了我們考察的內(nèi)部網(wǎng)絡(luò)之外的所有網(wǎng)絡(luò)。主要指Internets 有了對(duì)Inside、Outsider Local和Global4個(gè)詞的解釋,讓我們來看一看4個(gè)地址的定義。
●Inside Local Address(內(nèi)部本地地址) 指一個(gè)網(wǎng)絡(luò)內(nèi)部分配給網(wǎng)上主機(jī)的IP地址,此地址通常不是Internet上的合法地址,即不是網(wǎng)絡(luò)信息中心 (NIC)或Internet服務(wù)提供商(ISP:internet service provider)所分配的IP地址。
●Inside Global Address(內(nèi)部全局地址) 用來代替一個(gè)或者多個(gè)內(nèi)部本地IP地址的、對(duì)外的、Internet上合法的IP地址。
●Outside Local Address(外部本地地址) 一個(gè)外部主機(jī)相對(duì)于內(nèi)部網(wǎng)所用的IP地址。此地址需要是Internet上合法的地址,但是從內(nèi)部網(wǎng)可以進(jìn)行路由的地址空間中進(jìn)行分配的。
●Outside Global Address(外部全局地址) 由主機(jī)擁有者分配給在外部網(wǎng)上主機(jī)的IP地址。此地址是從一個(gè)從全局可路由的地址或網(wǎng)絡(luò)空間中分配的。
2.靜態(tài)內(nèi)部源地址轉(zhuǎn)換 所謂靜態(tài)內(nèi)部源地址轉(zhuǎn)換是指將一個(gè)內(nèi)部本地的IP地址轉(zhuǎn)換成為惟一的內(nèi)部全局地址,即私有地址和合法地址之間的靜態(tài)一一映射。這種轉(zhuǎn)換通常用在內(nèi)部網(wǎng)上的主機(jī)需要對(duì)外提供服務(wù)(如Web、E-mail服務(wù)等)的情況下。
3.動(dòng)態(tài)內(nèi)部源地址轉(zhuǎn)換 在動(dòng)態(tài)內(nèi)部源地址轉(zhuǎn)換的方式下,一組內(nèi)部本地地址與一個(gè)內(nèi)部全局地址池之間建立起一種動(dòng)態(tài)的一一映射關(guān)系。這種地址轉(zhuǎn)換形式下,內(nèi)部主機(jī)可以訪問外部網(wǎng)絡(luò),外部主機(jī)也能對(duì)內(nèi)部網(wǎng)絡(luò)進(jìn)行訪問,但必須是在內(nèi)網(wǎng)IP地址與內(nèi)部全局地址之間存在映射關(guān)系時(shí)才能成功,并且這種映射關(guān)系是動(dòng)態(tài)的。
4.復(fù)用內(nèi)部全局地址 Cisco路由器可以把內(nèi)部全局地址進(jìn)行復(fù)用性的轉(zhuǎn)換,從而實(shí)現(xiàn)內(nèi)部本地地址對(duì)內(nèi)部全局地址的多對(duì)一的映射。地址復(fù)用被啟用時(shí),路由器在高層協(xié)議(如TCP或UDP端口號(hào))維持有關(guān)的信息,將全局地址轉(zhuǎn)換為本地地址。當(dāng)多個(gè)內(nèi)部本地地址映射到同一個(gè)全局地址時(shí),端口號(hào)將用來區(qū)別不同的本地地址。復(fù)用內(nèi)部全局地址的技術(shù)也被稱為PAT(Port AddressTranslation。端口地址轉(zhuǎn)換)。
一直以來,說起NAT穿透,很多人都會(huì)被告知使用UDP打孔這個(gè)技術(shù),基本上沒有人會(huì)告訴你如何使用TCP協(xié)議去穿透(甚至有的人會(huì)直接告訴你TCP協(xié)議是無法實(shí)現(xiàn)穿透的)。但是,眾所周知的是,UDP是一個(gè)無連接的數(shù)據(jù)報(bào)協(xié)議,使用它就必須自己維護(hù)收發(fā)數(shù)據(jù)包的完整性,這常常會(huì)大大增加程序的復(fù)雜度,而且一些程序由于某些原因,必須使用TCP協(xié)議,這樣就常常令一些開發(fā)TCP網(wǎng)絡(luò)程序的人員“談穿透色變”。那么,使用TCP協(xié)議是不是就不能實(shí)現(xiàn)穿透呢?答案當(dāng)然是否定的:TCP協(xié)議不僅能實(shí)現(xiàn)NAT穿透,而且實(shí)現(xiàn)起來比UDP穿透甚至還簡(jiǎn)單一些。
要了解如何使用TCP穿透NAT,就要首先看看如何使用UDP穿透NAT。
我們假設(shè)在兩個(gè)不同的局域網(wǎng)后面分別有2臺(tái)客戶機(jī)A和 B,AB所在的局域網(wǎng)都分別通過一個(gè)路由器接入互聯(lián)網(wǎng)。互聯(lián)網(wǎng)上有一臺(tái)服務(wù)器S。
現(xiàn)在AB是無法直接和對(duì)方發(fā)送信息的,AB都不知道對(duì)方在互聯(lián)網(wǎng)上真正的IP和端口, AB所在的局域網(wǎng)的路由器只允許內(nèi)部向外主動(dòng)發(fā)送的信息通過。對(duì)于B直接發(fā)送給A的路由器的消息,路由會(huì)認(rèn)為其“不被信任”而直接丟棄。
要實(shí)現(xiàn) AB直接的通訊,就必須進(jìn)行以下3步:A首先連接互聯(lián)網(wǎng)上的服務(wù)器S并發(fā)送一條消息(對(duì)于UDP這種無連接的協(xié)議其實(shí)直接初始會(huì)話發(fā)送消息即可),這樣S就獲取了A在互聯(lián)網(wǎng)上的實(shí)際終端(發(fā)送消息的IP和端口號(hào))。接著 B也進(jìn)行同樣的步驟,S就知道了AB在互聯(lián)網(wǎng)上的終端(這就是“打洞”)。接著S分別告訴A和B對(duì)方客戶端在互聯(lián)網(wǎng)上的實(shí)際終端,也即S告訴A客戶B的會(huì)話終端,S告訴B客戶A的會(huì)話終端。這樣,在AB都知道了對(duì)方的實(shí)際終端之后,就可以直接通過實(shí)際終端發(fā)送消息了(因?yàn)橄惹半p方都向外發(fā)送過消息,路由上已經(jīng)有允許數(shù)據(jù)進(jìn)出的消息通道)。
用UDP來實(shí)現(xiàn)以上3步不存在什么理論上的問題,因?yàn)閁DP是無連接的協(xié)議,它允許socket進(jìn)行“多對(duì)一”的通訊(即幾個(gè)具有不同IP和端口號(hào)的socket向一個(gè)接收socket發(fā)送消息)。但是使用TCP就出現(xiàn)了問題:在一般情況下,TCP socket不允許在已經(jīng)建立連接的端口上再進(jìn)行監(jiān)聽和使用該本地端口。換句話說,當(dāng)AB連接上服務(wù)器S后,S將AB的實(shí)際終端告訴對(duì)方,下一步本該是AB利用對(duì)方的實(shí)際終端進(jìn)行直連,但這時(shí)你會(huì)發(fā)現(xiàn)對(duì)方的實(shí)際終端已經(jīng)被占用了(就是各自連接到服務(wù)器S的會(huì)話占用了終端),無法同時(shí)listen和 connect。于是很多人得出結(jié)論:TCP無法實(shí)現(xiàn)NAT穿透。
于是問題的關(guān)鍵變成了如何復(fù)用一個(gè)TCP連接的本地終端,這其實(shí)不是協(xié)議的問題,而是一個(gè)API的問題。幸運(yùn)的是,所有主流操作系統(tǒng)都支持一個(gè)特定的TCP套接字選項(xiàng)——SO_REUSEADDR。這個(gè)選項(xiàng)允許將多個(gè)socket綁定到同一個(gè)本地終端。我們建立socket的時(shí)候只要加上這么一行:
setsockopt(socket, SOL_SOCKET, SO_REUSEADDR, &flag, len) ; //C++就這么做
_Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, True) '這是vb.NET 更加簡(jiǎn)單
知道上面的知識(shí)就很好辦了,下面我來說說TCP協(xié)議的穿透流程:
機(jī)器布局還是和上面使用UDP的一樣?,F(xiàn)在假設(shè)客戶A想和客戶B建立TCP連接。
首先還是 AB分別和服務(wù)器S分別建立連接,S記錄AB的互聯(lián)網(wǎng)實(shí)際終端。然后S分別向AB發(fā)送對(duì)方的實(shí)際終端。接著,從A和B向S連接時(shí)使用的端口,AB都異步調(diào)用connect函數(shù)連接對(duì)方的實(shí)際終端(就是S告訴的終端),同時(shí),AB雙方都在同一個(gè)本地端口監(jiān)聽到來的連接(也可以先監(jiān)聽,再connect更好)。由于雙方都向?qū)Ψ桨l(fā)送了connect請(qǐng)求(假設(shè)各自的SYN封包已經(jīng)穿過了自己的NAT),因此在對(duì)方connect請(qǐng)求到達(dá)本地的監(jiān)聽端口時(shí),路由器會(huì)認(rèn)為這個(gè)請(qǐng)求是剛剛那個(gè)connect會(huì)話的一部分,是已經(jīng)被許可的,本地監(jiān)聽端口就會(huì)用SYN-ACK響應(yīng),同意連接。這樣,TCP穿透NAT的點(diǎn)對(duì)點(diǎn)連接就成功了。
@import url(http://www.shnenglu.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
posted on 2016-11-05 00:42
聶文龍 閱讀(749)
評(píng)論(0) 編輯 收藏 引用