即時通訊(Instant Messenger即硼,簡稱IM)軟件多是基于TCP/IP和UDP進(jìn)行通訊的颗搂,TCP/IP和UDP都是建立在更低層的IP協(xié)議上的兩種通訊傳輸協(xié)議。前 者是以數(shù)據(jù)流的形式,將傳輸數(shù)據(jù)經(jīng)分割留量、打包后,通過兩臺機(jī)器之間建立起的虛電路,進(jìn)行連續(xù)的楼熄、雙向的子漩、嚴(yán)格保證數(shù)據(jù)正確性的文件傳輸協(xié)議搭儒。而后者是以數(shù) 據(jù)報的形式,對拆分后的數(shù)據(jù)的先后到達(dá)順序不做要求的文件傳輸協(xié)議。
QQ就是使用UDP協(xié)議進(jìn)行發(fā)送和接收消息的篙程。當(dāng)你的機(jī)器安裝了OICQ以后,實(shí)際上登夫,你既是服務(wù)端(Server)拷邢,又是客戶端(Client)。當(dāng)你登錄OICQ時平斩,你的OICQ作為Client連接到騰訊公司的主服務(wù)器上亚享,當(dāng)你看誰在線時,你的OICQ又一次作為Client從QQ Server上讀取在線網(wǎng)友名單绘面。當(dāng)你和你的OICQ伙伴進(jìn)行聊天時欺税,如果你和對方的連接比較穩(wěn)定,你和他的聊天內(nèi)容都是以UDP的形式飒货,在計算機(jī)之間傳 送魄衅。如果你和對方的連接不是很穩(wěn)定,QQ服務(wù)器將為你們的聊天內(nèi)容進(jìn)行中轉(zhuǎn)塘辅。其他的即時通信軟件原理與此大同小異晃虫。
一般的步驟:
首先,用戶A輸入自己的用戶名和密碼登錄即時通訊服務(wù)器扣墩,服務(wù)器通過讀取用戶數(shù)據(jù)庫來驗(yàn)證用戶身份哲银,如果用戶名、密碼都正確呻惕,就登記用戶A的IP地址荆责、IM客戶端軟件的版本號及使用的TCP/UDP端口號, 然后返回用戶A登錄成功的標(biāo)志亚脆,此時用戶A在 IM系統(tǒng)中的狀態(tài)為在線(Online Presence)做院。
其次,根據(jù)用戶A存儲在IM服務(wù)器上的好友列表 (Buddy List)濒持,服務(wù)器將用戶A在線的相關(guān)信息發(fā)送到也同時在線的即時通訊好友的PC機(jī)键耕,這些信息包括在線狀態(tài)、IP地址柑营、 IM客戶端使用的TCP端口(Port)號等屈雄,即時通訊好友PC機(jī)上的即時通訊軟件收到此信息后將在PC桌面上彈出一個小窗口予以提示。
第三步官套,即時通訊服務(wù)器把用戶A存儲在服務(wù)器上的好友列 表及相關(guān)信息回送到他的PC機(jī)酒奶,這些信息包括也在線狀態(tài)蚁孔、IP地址、IM客戶端使用的TCP端口(Port)號等信息惋嚎,用戶A的PC機(jī)上的IM客戶端收到 后將顯示這些好友列表及其在線狀態(tài)杠氢。
接下來,如果用戶A想與他的在線好友用戶B聊天另伍,他將直接通過服務(wù)器發(fā)送過來的用戶B的IP地址修然、TCP端口號等信息,直接向用戶B的PC機(jī)發(fā)出聊天信息质况,用戶B的IM客戶端軟件收到后顯示在屏幕上愕宋,然后用戶B再直接回復(fù)到用戶A的PC機(jī),這樣雙方的即時文字消息就不通過 IM服務(wù)器中轉(zhuǎn)结榄,而是通過網(wǎng)絡(luò)進(jìn)行點(diǎn)對點(diǎn)的直接通訊中贝,這稱為對等通訊方式(Peer To Peer) 。在商用即時通訊系統(tǒng)中臼朗,如果用戶A與用戶B的點(diǎn)對點(diǎn)通訊由于防火墻邻寿、網(wǎng)絡(luò)速度等原因難以建立或者速度很慢, IM服務(wù)器還提供消息中轉(zhuǎn)服務(wù)视哑,即用戶A和用戶B的即時消息全部先發(fā)送到IM服務(wù)器绣否,再由服務(wù)器轉(zhuǎn)發(fā)給對方。早期的IM系統(tǒng)挡毅,在IM客戶端和IM服務(wù)器之間通訊采用采用UDP協(xié)議蒜撮,UDP協(xié)議是不可靠的傳輸協(xié)議,而在 IM客戶端之間的直接通訊中跪呈,采用具備可靠傳輸能力的TCP協(xié)議段磨。隨著用戶需求和技術(shù)環(huán)境的發(fā)展,目前主流的即時通訊系統(tǒng)傾向于在即時通訊客戶端之間耗绿、即時通訊客戶端和即時通訊服務(wù)器之間都采用TCP協(xié)議 苹支。
S——C1
|
| C1每次想和C2通信,先向S遞一個申請误阻,然后S同意债蜜,把信息轉(zhuǎn)交C2, 以后每次通信都這樣
C2
S——C1
|
| C1第一次想和C2通信,向S遞一個申請究反,S同意寻定,告訴C1,C2,然后 C1和 C2之間建立了一條連接,可以直接通信奴紧,無需經(jīng)過S.
C2
第 一種特姐,對服務(wù)器的性能要求比較高晶丘,要求服務(wù)器可以同時處理很高的連接數(shù)黍氮,因?yàn)樗行畔⒍家ㄟ^服務(wù)器進(jìn)行傳遞唐含,同時,它可以對所傳遞的信息進(jìn)行控制沫浆。
第二種捷枯,僅僅是用戶登陸或下線時與服務(wù)器進(jìn)行連接,平時進(jìn)行通信時专执,是用戶之間直接進(jìn)行點(diǎn)對點(diǎn)的連接淮捆,這種實(shí)現(xiàn)更合理一 些。
QQ聊天信息是在兩個用戶間直接通信的,而MSN要經(jīng)過服務(wù)器中轉(zhuǎn).
QQ當(dāng)用戶登陸時本股,用戶需要首先與qq服務(wù)器進(jìn)行連接進(jìn)行登錄攀痊,服務(wù)器會向客戶返回一些信息,比如你的好有的在線情況以及ip的信息拄显,然后客戶可以與你所請求的朋友進(jìn)行點(diǎn)對點(diǎn)連接苟径,兩者互相通信。
那 如果 c1和c2都在私網(wǎng)內(nèi)躬审,要通過路由器做NAT才能出去的話棘街,他們之間的socket是如何建立的呢?
看一下下面的協(xié)議.
Simple Traversal of User Datagram Protocol (UDP) Through Network
Address Translators (NATs) (STUN)承边。
STUN遭殉,是為了實(shí)現(xiàn)透明的穿透NAT,而定義的一套協(xié) 議博助。他使本地的內(nèi)網(wǎng)的機(jī)器险污,具有取得,能夠得知他的NAT網(wǎng)關(guān)的IP富岳,NAT類型的能力罗心。
為什么需要STUN:
因?yàn)镹AT雖然解決了IP地址稀少的問題,但是也帶來了很多的問題城瞎。比如所有P2P應(yīng)用渤闷,像文件SHARE,多媒體脖镀,和在線游戲等等.
為了解決這個問題飒箭,有人將 Application Layer Gateways (ALGs) 放到了NAT中,
ALGs 也有嚴(yán)重的問題蜒灰,比如跟不上速度太塊的CLIENT弦蹂,每一個應(yīng)用都需要單獨(dú)的實(shí)現(xiàn)。
跟不上應(yīng)用的發(fā)展强窖。
為了克服ALGS的問題凸椿,又提出了the Middlebox Communications (MIDCOM) protocol
中間合協(xié)議〕崮纾可是MIDBOX協(xié)議使 脑漫,一些CLIENT可以控制NAT/防火墻的行為髓抑,通過這個
把應(yīng)用協(xié)議和NAT部分分開,把ALGS從基本NAT里面處理開优幸。不過因?yàn)橐幚鞰IDBOX吨拍,那么
所有的NAT或者防火墻都要升級,
因?yàn)樯厦娣N種原因:
The protocol described here, Simple Traversal of UDP Through NAT
(STUN), allows entities behind a NAT to first discover the presence
of a NAT and the type of NAT, and then to learn the addresses
bindings allocated by the NAT. STUN requires no changes to NATs, and
works with an arbitrary(任意) number of NATs in tandem between the
application entity and the public Internet.
要想穿透NAT网杆,首先知道NAT的一些特性:
NAT分為4種(加上防火墻的話羹饰,多幾種情況):
1.完全透明NAT(Full Cone NAT):
從相同內(nèi)部主機(jī)(IN IPX) +端口(IN PORTX)發(fā)送的數(shù)據(jù)MAPING為相同的IP(OUT IP X)和端口(OUT PORT X)發(fā)送帶外網(wǎng).
并且 從另一個服務(wù)器(Y),如果直連到MAPING的IP(OUT IP X)和端口(OUT PORT X )上碳却,數(shù)據(jù)將會被轉(zhuǎn)發(fā)到內(nèi)部主機(jī)上. (IN IPX), (IN PORTX).
//也就是說進(jìn)內(nèi)部網(wǎng)的數(shù)據(jù)包的SPORT队秩,SPORT不受限制
2.受限NAT(Restricted Cone),
從相同內(nèi)部主機(jī)IN IPX) +端口((IN PORTX))發(fā)送的數(shù)據(jù)MAPING為相同的IP(X)和端口發(fā)送帶外網(wǎng).
和完全NAT不同的是,只有當(dāng)為X時昼浦,外部機(jī)器的的請求就被轉(zhuǎn)發(fā)到主機(jī)IN IPX) +端口((IN PORTX)刹碾。
也就是說進(jìn)內(nèi)部網(wǎng)的數(shù)據(jù)包的,SPORT不受限制座柱,SIP受限制迷帜,只能為NAT MAP數(shù)據(jù)的IP
3,端口受限NAT(Port Restricted Cone:)
和受限NAT不同的是色洞,只有當(dāng)外部主動請求的的源IP和端口戏锹,等于內(nèi)部網(wǎng)發(fā)送的請求的目的IP和端口。
4.對稱NAT(Symmetric)
如果發(fā)送的包的目的IP AND PORT火诸,那么MAPPING IP AND PORT锦针,將相同。
內(nèi)部網(wǎng)同一臺機(jī)器置蜀,同一個端口 如果目的地址不同奈搜,那么MAPPING的端口也不同,
所以只有他主動連的服務(wù)器才可能知道他的MAPPING后端口盯荤,別的服務(wù)器如果想
連他只能靠猜測端口馋吗。
總結(jié):
前面3重NAT,MAPING PORT 和 IP秋秤,是根據(jù)發(fā)送包的的內(nèi)部網(wǎng)的IP和端口決定的宏粤。
如果數(shù)據(jù)的內(nèi)網(wǎng)IP和端口相同,那么MAPPING后的端口和地址是固定灼卢。
這個功能為我們的穿越提供了很好條件绍哎。
第4種NAT,打洞后的MAPPING 地址和端口將變地不可靠鞋真。很難穿越崇堰。
注意SERVERA,和SERVERB是兩個公網(wǎng)地址,而不是兩臺機(jī)器海诲,
STUN 的簡單操作過程:
發(fā)送請求繁莹。請求分為兩種
1. Binding Requests, sent over UDP,
用來發(fā)現(xiàn)是否NAT,用來發(fā)現(xiàn)NAT的公網(wǎng)地址饿肺,和MAPPING后的端口
2.Binding Response,
服務(wù)器產(chǎn)生Binding Response,并把得到的MAPPINGIP 和端口盾似,返回到客戶端敬辣, 客戶端比較MAPPING地址是否 和本機(jī)地址相同,如果是說明是本機(jī)也是公網(wǎng)零院,否則判斷NAT的類型(判斷方法:client uses additional STUN Binding Requests)
3.Binding Error溉跃,
4.Shared Secret Requests, sent over TLS [2] over TCP.
這個請求要求服務(wù)器返回一臨時用戶名和密碼,用來下一步的Binding Requests/ Response,用來驗(yàn)證信息的完整性
5.Shared Secret Response,
6 Shared Secret Error Response告抄。
STUN 信息結(jié)構(gòu)
STUN 由以后數(shù)據(jù)結(jié)構(gòu)構(gòu)成:STUN頭+STUN有效載荷
STUN頭結(jié)構(gòu)如下: 存儲的值都是以網(wǎng)絡(luò)順序存放
字段類型
STUN message type Short int 消息類型
Length Short int 有效載荷長度,不包含頭長度
transaction ID octet[16] 連接的ID值撰茎,檢查Request,
和Response
STUN的有效載荷
SHUN的有效載荷 是一些STUN的屬性構(gòu)成,屬性的類型由信息的類型來決定打洼。
STUN的屬性是定義好了的龄糊,屬性列表(attribute)如下:
MAPPED-ADDRESS 必選 用在Binding Response,(添入MAPING IP 和PORT)
RESPONSEADDRESS 可選 用在Binding Request,指定Response,發(fā)送到哪里
如果沒有指定募疮,Response發(fā)送到MAPING IP 和 PORT
CHANGE-REQUEST 可選 用在Binding Request炫惩。用來決定,CLIENT的NAT類型是限制NAT阿浓,還是端口限制NAT他嚷,(命令服務(wù)器從不同的源端口/IP,Response請求)
CHANGED-ADDRESS 可選 用在Binding Responses告訴Client改變的端口和IP
SOURCE-ADDRESS 必選 只用在Binding Responses芭毙,標(biāo)記信息的源PORT HE IP
USERNAME 可選 Shared Secret Response/ Binding Requests
PASSWORD, 必選 SharedSecret Response
ESSAGEINTEGRITY 可選 用在Binding Responses, Binding Request記錄信息的完整性
ERROR-CODE Binding Error Response and Shared Secret Error Response.
UNKNOWN-ATTRIBUTES
REFLECTED-FROM Binding Responses.用于追溯和防止DDOS
穿透的方法和過程
注意SERVER1筋蓖,和SERVER2是兩個公網(wǎng)地址,而不是兩臺機(jī)器.
一退敦、IM技術(shù)概念
IM技術(shù)全稱Instant Messaging粘咖,中文翻譯“即時通訊”,它是一種使人們能在網(wǎng)上識別在線用戶并與他們實(shí)時交換消息的技術(shù)侈百,是電子郵件發(fā)明以來迅速崛起的在線通訊方 式涂炎。
IM的出現(xiàn)和互聯(lián)網(wǎng)有著密不可分的關(guān)系,IM完全基于 TCP/IP網(wǎng)絡(luò)協(xié)議族實(shí)現(xiàn)设哗,而TCP/IP協(xié)議族則是整個互聯(lián)網(wǎng)得以實(shí)現(xiàn)的技術(shù)基礎(chǔ)唱捣。 最早出現(xiàn)即時通訊協(xié)議是IRC(Internet Relay Chat),但是可惜的是它僅能單純的使用文字网梢、符號的方式通過互聯(lián)網(wǎng)進(jìn)行交談和溝通震缭。隨著互連網(wǎng)變得高度發(fā)達(dá),即時通訊也變得遠(yuǎn)不止聊天這么簡單战虏,自 1996年第一個IM產(chǎn)品ICQ發(fā)明后拣宰,IM的技術(shù)和功能也開始基本成型党涕,語音、視頻巡社、文件共享膛堤、短信發(fā)送等高級信息交換功能都可以在IM工具上實(shí)現(xiàn),于 是功能強(qiáng)大的IM軟件便足以搭建一個完整的通信交流平臺晌该。目前最具代表性的幾款的IM通訊軟件有MSN肥荔、Google Talk、Yahoo朝群、Messenger 燕耿、騰訊QQ等。
二姜胖、IM技術(shù)原理和工作方式
典型的IM工作方式如下:登陸IM通訊中心(IM通訊服務(wù)器)誉帅,獲取一個自建立的歷史的交流對象列表(好友列表),然后自身標(biāo)志為在線狀態(tài)右莱,當(dāng)好友列表中的某人在任何時候登錄上線并試圖通過你的計算機(jī)聯(lián)系你 時蚜锨,IM系統(tǒng)會發(fā)一個消息提醒你,然后你能與他建立一個聊天會話通道進(jìn)行各種消息如鍵入文字慢蜓、通過語音等的交流.
從技術(shù)上來說踏志,IM的基本技術(shù)原理如下:
通過IM服務(wù)器登陸或注銷
用戶A通過列表找到B,用戶B獲得消息并與之交談
通過IM服務(wù)器指引建立與B單獨(dú)的通訊通道
第一步胀瞪,用戶A輸入自己的用戶名和密碼登錄IM服務(wù)器针余, 服務(wù)器通過讀取用戶數(shù)據(jù)庫來驗(yàn)證用戶身份,如果驗(yàn)證通過凄诞,登記用戶A的IP地址圆雁、IM客戶端軟件的版本號及使用的TCP/UDP端口號,然后返回用戶A登錄成功的標(biāo)志帆谍,此時用戶A在IM系統(tǒng)中的狀態(tài)為在線(Online Presence)伪朽。
第二步,根據(jù)用戶A存儲在IM服務(wù)器上的好友列表 (Buddy List)汛蝙,服務(wù)器將用戶A在線的相關(guān)信息發(fā)送給也同時在線的IM好友的PC機(jī)烈涮,這些信息包括在線狀態(tài)、IP地址窖剑、IM客戶端使用的TCP端口 (Port)號等坚洽,IM好友的客戶端收到此信息后將在予以提示。
第三步是IM服務(wù)器把用戶A存儲在服務(wù)器上的好友列表及 相關(guān)信息回送到他的客戶端機(jī)西土,這些信息包括也在線狀態(tài)讶舰、IP地址、IM客戶端使用的TCP端口(Port)號等信息,用戶A的IM客戶端收到后將顯示這些好友列表及其在線狀態(tài)跳昼。
三般甲、IM通訊方式
1.在線直接通訊
如果用戶A想與他的在線好友用戶B聊天,他將直接通過服務(wù)器發(fā)送過來的用戶B的IP地址鹅颊、TCP端口號等信息敷存,直接向用戶B的PC機(jī)發(fā)出聊天信息,用戶B 的IM客戶端軟件收到后顯示在屏幕上堪伍,然后用戶B再直接回復(fù)到用戶A的PC機(jī)锚烦,這樣雙方的即時文字消息就不再IM服務(wù)器中轉(zhuǎn),而是直接通過網(wǎng)絡(luò)進(jìn)行點(diǎn)對點(diǎn) 的通訊杠娱,即對等通訊方式(Peer To Peer)挽牢。
2.在線代理通訊
用戶A與用戶B的點(diǎn)對點(diǎn)通訊由于防火墻谱煤、網(wǎng)絡(luò)速度等原因難以建立或者速度很慢摊求,IM服務(wù)器將會主動提供消息中轉(zhuǎn)服務(wù),即用戶A和用戶B的即時消息全部先發(fā) 送到IM服務(wù)器刘离,再由服務(wù)器轉(zhuǎn)發(fā)給對方室叉。
3.離線代理通訊
用戶A與用戶B由于各種原因不能同時在線的時候,如此時A向B發(fā)送消息硫惕,IM服務(wù)器可以主動寄存A用戶的消息茧痕,到B用戶下一次登陸的時候,自動將消息轉(zhuǎn)發(fā) 給B恼除。
4.擴(kuò)展方式通訊
用戶A可以通過IM服務(wù)器將信息以擴(kuò)展的方式傳遞給B踪旷,如短信發(fā)送方式發(fā)送到B的手機(jī),傳真發(fā)送方式傳遞給B的電話機(jī)豁辉,以email的方式傳遞給B的電子郵箱等令野。
早期的IM系統(tǒng),在IM客戶端和IM服務(wù)器之間通訊采用UDP協(xié)議徽级,UDP協(xié)議是不可靠的傳輸協(xié)議气破,而在IM客戶端之間的直接通訊中,采用具備可靠傳輸能 力的TCP協(xié)議餐抢。隨著用戶需求和技術(shù)環(huán)境的發(fā)展现使,目前主流的IM系統(tǒng)傾向于在IM客戶端之間、IM客戶端和IM服務(wù)器之間都采用TCP協(xié)議旷痕。
即時通訊相對于其他通訊方式如電話碳锈、傳真、email等的最大優(yōu)勢就是消息傳達(dá)的即時性和精確性欺抗,只要消息傳遞雙方均在網(wǎng)絡(luò)上可以互通殴胧,使用即時通訊軟件傳遞消息,傳遞延時僅為1秒種.