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