TCP与UDP的选择--结合QQ来说明
生活随笔
收集整理的這篇文章主要介紹了
TCP与UDP的选择--结合QQ来说明
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
TCP與UDP的選擇
如果比較UDP包和TCP包的結(jié)構(gòu),很明顯UDP包不具備TCP包復(fù)雜的可靠性與控制機制。與TCP協(xié)議相同,UDP的源端口數(shù)和目的端口數(shù)也都支持一臺 主機上的多個應(yīng)用。一個16位的UDP包包含了一個字節(jié)長的頭部和數(shù)據(jù)的長度,校驗碼域使其可以進行整體校驗。(許多應(yīng)用只支持UDP,如:多媒體數(shù)據(jù) 流,不產(chǎn)生任何額外的數(shù)據(jù),即使知道有破壞的包也不進行重發(fā)。)?
??????? 很明顯,當(dāng)數(shù)據(jù)傳輸?shù)男阅鼙仨氉屛挥跀?shù)據(jù)傳輸?shù)耐暾浴⒖煽刂菩院涂煽啃詴r,TCP協(xié)議是當(dāng)然的選擇。當(dāng)強調(diào)傳輸性能而不是傳輸?shù)耐暾詴r,如:音頻和多 媒體應(yīng)用,UDP是最好的選擇。在數(shù)據(jù)傳輸時間很短,以至于此前的連接過程成為整個流量主體的情況下,UDP也是一個好的選擇,如:DNS交換。把 SNMP建立在UDP上的部分原因是設(shè)計者認(rèn)為當(dāng)發(fā)生網(wǎng)絡(luò)阻塞時,UDP較低的開銷使其有更好的機會去傳送管理數(shù)據(jù)。TCP豐富的功能有時會導(dǎo)致不可預(yù)料 的性能低下,但是我們相信在不遠(yuǎn)的將來,TCP可靠的點對點連接將會用于絕大多數(shù)的網(wǎng)絡(luò)應(yīng)用。 QQ通信原理--
我研究的是 QQ2007beta4 版本的通信原理,相信之后的版本暫時也不會有改動。。?
1 、登陸。不管 UDP 還是 TCP ,最終登陸成功之后, QQ 都會有一個 TCP 連接來保持在線狀態(tài)。這個 TCP 連接的遠(yuǎn)程端口一般是 80 ,采用 UDP 方式登陸的時候,端口是 8000 。因此,假如你所在的網(wǎng)絡(luò)開放了 80 端口( 80 端口是最常用端口。。就是通常訪問 Web 的端口,禁掉它的話,你的網(wǎng)絡(luò)對你來說價值已經(jīng)不大了),但沒有屏蔽騰訊的服務(wù)器 IP ,恭喜你,你是可以登陸成功 QQ 的。?
2 、聊天消息通信。采用 UDP 協(xié)議,通過服務(wù)器中轉(zhuǎn)方式。因此,現(xiàn)在的 IP 偵探在你僅僅跟對方發(fā)送聊天消息的時候是無法獲取到 IP 的。大家都知道, UDP 協(xié)議是不可靠協(xié)議,它只管發(fā)送,不管對方是否收到的,但它的傳輸很高效。但是,作為聊天軟件,怎么可以采用這樣的不可靠方式來傳輸消息呢?于是,騰訊采用 了上層協(xié)議來保證可靠傳輸:如果客戶端使用 UDP 協(xié)議發(fā)出消息后,服務(wù)器收到該包,需要使用 UDP 協(xié)議發(fā)回一個應(yīng)答包。如此來保證消息可以無遺漏傳輸。之所以會發(fā)生在客戶端明明看到 “ 消息發(fā)送失敗 ” 但對方又收到了這個消息 的情況,就是因為客戶端發(fā)出的消息服務(wù)器已經(jīng)收到并轉(zhuǎn)發(fā)成功,但客戶端由于網(wǎng)絡(luò)原因沒有收到服務(wù)器的應(yīng)答包引起的。?
3 、文件 / 自定義表情傳送。大家都知道, QQ 可以傳送文件,可以發(fā)送自定義表情。先說官方表情。官方表情實際發(fā)送的是命令字,而沒有發(fā)送表情。客戶端收到命令字后,會自動解釋為對應(yīng)的表情。因此, QQ2007 正式版的客戶端發(fā)出的新版表情,在 2007beta4 及以前的版本無法找到相對應(yīng)的表情,就無法解釋,看到的就會是空白信息,但查聊天記錄就會有 [ 表情 ] 字樣。自定義表情的傳送是以文件傳輸方式進行的。下面說文件傳輸方式: A 要向 B 發(fā)送一個文件,于是發(fā)出一個文件傳送請求。服務(wù)器收到這個文件傳送請求后,轉(zhuǎn)發(fā)給 B ,同時或者在 B 應(yīng)答后,將 A 的 IP 地址同時發(fā)送給 B 。 B 這個時候就得到了 A 的真實 IP 。這里的 IP 是你的本機 IP 。也就是說,如果 A 處在內(nèi)網(wǎng), B 得到的地址就是一個內(nèi)網(wǎng)地址。 B 得到了 A 的地址之后,就會嘗試去連接 A 。如果 B 也處于內(nèi)網(wǎng),那么,顯然 A 跟 B 之間的連接是無法建立的。這個時候,客戶端就會請求服務(wù)器進行文件中轉(zhuǎn)。因為服務(wù)器具有公網(wǎng) IP ,處在內(nèi)網(wǎng)的 A 跟 B 都是可以連接到服務(wù)器的,于是, A 跟 B 的文件傳送就通過服務(wù)器中轉(zhuǎn)的方式,順利進行。(注:服務(wù)器文件中轉(zhuǎn)使用 443 端口)?
“ 穿透內(nèi)網(wǎng) ” 的原理就是這樣的。至于其中的程序細(xì)節(jié),暫時還沒研究到。。誰有空就研究研究吧,呵呵?
4 、小結(jié)。結(jié)合 1 跟 2 ,可以知道,如果一個局域網(wǎng)只開放 80 端口, QQ 是可以登陸成功的,也可以進行聊天。但傳送文件也是不可以的,除非你們都在同一個內(nèi)網(wǎng)。如果局域網(wǎng)還同時開放 443 端口,那么,恭喜你, QQ 的功能你都可以正常使用。
??????? 很明顯,當(dāng)數(shù)據(jù)傳輸?shù)男阅鼙仨氉屛挥跀?shù)據(jù)傳輸?shù)耐暾浴⒖煽刂菩院涂煽啃詴r,TCP協(xié)議是當(dāng)然的選擇。當(dāng)強調(diào)傳輸性能而不是傳輸?shù)耐暾詴r,如:音頻和多 媒體應(yīng)用,UDP是最好的選擇。在數(shù)據(jù)傳輸時間很短,以至于此前的連接過程成為整個流量主體的情況下,UDP也是一個好的選擇,如:DNS交換。把 SNMP建立在UDP上的部分原因是設(shè)計者認(rèn)為當(dāng)發(fā)生網(wǎng)絡(luò)阻塞時,UDP較低的開銷使其有更好的機會去傳送管理數(shù)據(jù)。TCP豐富的功能有時會導(dǎo)致不可預(yù)料 的性能低下,但是我們相信在不遠(yuǎn)的將來,TCP可靠的點對點連接將會用于絕大多數(shù)的網(wǎng)絡(luò)應(yīng)用。 QQ通信原理--
我研究的是 QQ2007beta4 版本的通信原理,相信之后的版本暫時也不會有改動。。?
1 、登陸。不管 UDP 還是 TCP ,最終登陸成功之后, QQ 都會有一個 TCP 連接來保持在線狀態(tài)。這個 TCP 連接的遠(yuǎn)程端口一般是 80 ,采用 UDP 方式登陸的時候,端口是 8000 。因此,假如你所在的網(wǎng)絡(luò)開放了 80 端口( 80 端口是最常用端口。。就是通常訪問 Web 的端口,禁掉它的話,你的網(wǎng)絡(luò)對你來說價值已經(jīng)不大了),但沒有屏蔽騰訊的服務(wù)器 IP ,恭喜你,你是可以登陸成功 QQ 的。?
2 、聊天消息通信。采用 UDP 協(xié)議,通過服務(wù)器中轉(zhuǎn)方式。因此,現(xiàn)在的 IP 偵探在你僅僅跟對方發(fā)送聊天消息的時候是無法獲取到 IP 的。大家都知道, UDP 協(xié)議是不可靠協(xié)議,它只管發(fā)送,不管對方是否收到的,但它的傳輸很高效。但是,作為聊天軟件,怎么可以采用這樣的不可靠方式來傳輸消息呢?于是,騰訊采用 了上層協(xié)議來保證可靠傳輸:如果客戶端使用 UDP 協(xié)議發(fā)出消息后,服務(wù)器收到該包,需要使用 UDP 協(xié)議發(fā)回一個應(yīng)答包。如此來保證消息可以無遺漏傳輸。之所以會發(fā)生在客戶端明明看到 “ 消息發(fā)送失敗 ” 但對方又收到了這個消息 的情況,就是因為客戶端發(fā)出的消息服務(wù)器已經(jīng)收到并轉(zhuǎn)發(fā)成功,但客戶端由于網(wǎng)絡(luò)原因沒有收到服務(wù)器的應(yīng)答包引起的。?
3 、文件 / 自定義表情傳送。大家都知道, QQ 可以傳送文件,可以發(fā)送自定義表情。先說官方表情。官方表情實際發(fā)送的是命令字,而沒有發(fā)送表情。客戶端收到命令字后,會自動解釋為對應(yīng)的表情。因此, QQ2007 正式版的客戶端發(fā)出的新版表情,在 2007beta4 及以前的版本無法找到相對應(yīng)的表情,就無法解釋,看到的就會是空白信息,但查聊天記錄就會有 [ 表情 ] 字樣。自定義表情的傳送是以文件傳輸方式進行的。下面說文件傳輸方式: A 要向 B 發(fā)送一個文件,于是發(fā)出一個文件傳送請求。服務(wù)器收到這個文件傳送請求后,轉(zhuǎn)發(fā)給 B ,同時或者在 B 應(yīng)答后,將 A 的 IP 地址同時發(fā)送給 B 。 B 這個時候就得到了 A 的真實 IP 。這里的 IP 是你的本機 IP 。也就是說,如果 A 處在內(nèi)網(wǎng), B 得到的地址就是一個內(nèi)網(wǎng)地址。 B 得到了 A 的地址之后,就會嘗試去連接 A 。如果 B 也處于內(nèi)網(wǎng),那么,顯然 A 跟 B 之間的連接是無法建立的。這個時候,客戶端就會請求服務(wù)器進行文件中轉(zhuǎn)。因為服務(wù)器具有公網(wǎng) IP ,處在內(nèi)網(wǎng)的 A 跟 B 都是可以連接到服務(wù)器的,于是, A 跟 B 的文件傳送就通過服務(wù)器中轉(zhuǎn)的方式,順利進行。(注:服務(wù)器文件中轉(zhuǎn)使用 443 端口)?
“ 穿透內(nèi)網(wǎng) ” 的原理就是這樣的。至于其中的程序細(xì)節(jié),暫時還沒研究到。。誰有空就研究研究吧,呵呵?
4 、小結(jié)。結(jié)合 1 跟 2 ,可以知道,如果一個局域網(wǎng)只開放 80 端口, QQ 是可以登陸成功的,也可以進行聊天。但傳送文件也是不可以的,除非你們都在同一個內(nèi)網(wǎng)。如果局域網(wǎng)還同時開放 443 端口,那么,恭喜你, QQ 的功能你都可以正常使用。
總結(jié)
以上是生活随笔為你收集整理的TCP与UDP的选择--结合QQ来说明的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 51单片机+DS18B20+LCD160
- 下一篇: C/C++二维数组名和二级指针的联系与区