有兩種類型的Internet協(xié)議(IP)通信。 它們是TCP(傳輸控制協(xié)議)以及UDP(用戶數(shù)據(jù)報(bào)協(xié)議)。 TCP是面向連接的 – 建立連接后,可以雙向發(fā)送數(shù)據(jù)疏魏。UDP是一種更簡(jiǎn)單的無連接Internet協(xié)議。 使用UDP將多條消息作為數(shù)據(jù)包成塊發(fā)送晤愧。
1. TCP和UDP的區(qū)別
下面是TCP和UDP的對(duì)比和區(qū)別:
比較項(xiàng) | TCP | UDP |
---|---|---|
全稱 | Transmission Control Protocol | User Datagram Protocol 或 Universal Datagram Protocol |
連接 | 傳輸控制協(xié)議是一種面向連接的協(xié)議大莫。 | 用戶數(shù)據(jù)報(bào)協(xié)議是無連接協(xié)議。 |
功能 | 消息通過互聯(lián)網(wǎng)從一臺(tái)計(jì)算機(jī)傳播到另一臺(tái)計(jì)算機(jī)官份。這是基于連接的只厘。 | UDP還是用于消息傳輸或傳輸?shù)膮f(xié)議。它不是基于連接的贯吓,這意味著一個(gè)程序可以向另一程序發(fā)送大量的數(shù)據(jù)包懈凹,不管對(duì)方能不能收到蜀变。 |
使用/適用 | TCP適用于要求高可靠性的應(yīng)用程序悄谐,并且傳輸時(shí)間的重要性相對(duì)較低。 | UDP適用于需要快速库北,高效傳輸?shù)膽?yīng)用程序爬舰,例如游戲。 UDP的無狀態(tài)性質(zhì)對(duì)于回答來自大量客戶端的小查詢的服務(wù)器也很有用寒瓦。 |
被其他協(xié)議使用 | HTTP, HTTPs, FTP, SMTP, Telnet | DNS, DHCP, TFTP, SNMP, RIP, VOIP |
數(shù)據(jù)包順序 | TCP按照指定的順序重新排列數(shù)據(jù)包情屹。 | UDP沒有固有的順序,因?yàn)樗袛?shù)據(jù)包都是相互獨(dú)立的杂腰。 如果需要指定順序垃你,則必須由應(yīng)用程序?qū)舆M(jìn)行管理。 |
傳輸速度 | TCP的速度比UDP慢。 | UDP速度更快惜颇,因?yàn)閁DP未嘗試進(jìn)行錯(cuò)誤恢復(fù)皆刺。它是“盡力而為”協(xié)議。 |
可靠性 | 絕對(duì)保證所傳輸?shù)臄?shù)據(jù)保持完整并以與發(fā)送時(shí)相同的順序到達(dá)凌摄。 | 不能保證發(fā)送的消息或數(shù)據(jù)包將完全到達(dá)羡蛾。 |
標(biāo)頭大小 | TCP標(biāo)頭大小為20個(gè)字節(jié) | TCP標(biāo)頭大小為8個(gè)字節(jié) |
通用標(biāo)頭字段 | 源端口,目標(biāo)端口锨亏,校驗(yàn)和 | 源端口痴怨,目標(biāo)端口,校驗(yàn)和 |
數(shù)據(jù)流 | 數(shù)據(jù)被作為字節(jié)流讀取器予,沒有區(qū)別的指示被發(fā)送到信號(hào)消息(段)邊界浪藻。 | 數(shù)據(jù)包是單獨(dú)發(fā)送的,只有到達(dá)時(shí)才檢查完整性乾翔。 數(shù)據(jù)包具有確定的邊界珠移,在接收時(shí)會(huì)遵守這些邊界,因此在接收方套接字上進(jìn)行的讀取操作將產(chǎn)生原始發(fā)送的完整消息末融。 |
重量級(jí) | TCP是重量級(jí)的钧惧。在發(fā)送任何用戶數(shù)據(jù)之前,TCP需要三個(gè)數(shù)據(jù)包來建立套接字連接勾习。 TCP處理可靠性和擁塞控制浓瞪。 | UDP是輕量級(jí)的。 沒有消息排序巧婶,沒有跟蹤連接等乾颁。它是設(shè)計(jì)在IP之上的小型傳輸層。 |
數(shù)據(jù)流控制 | TCP進(jìn)行流控制艺栈。 在發(fā)送任何用戶數(shù)據(jù)之前英岭,TCP需要三個(gè)數(shù)據(jù)包來建立套接字連接。 TCP處理可靠性和擁塞控制湿右。 | UDP沒有用于流量控制的選項(xiàng)诅妹。 |
錯(cuò)誤檢查 | TCP執(zhí)行錯(cuò)誤檢查和錯(cuò)誤恢復(fù),錯(cuò)誤的數(shù)據(jù)包將從源重新傳輸?shù)侥康牡亍?/td> | UDP會(huì)執(zhí)行錯(cuò)誤檢查毅人,但只會(huì)丟棄錯(cuò)誤的數(shù)據(jù)包吭狡。 不嘗試錯(cuò)誤恢復(fù)。 |
位域 | 1.序列號(hào)丈莺,2.AcK編號(hào)划煮,3.數(shù)據(jù)偏移,4.保留缔俄,5.控制位弛秋,6.窗口器躏,7.緊急指針,8.選項(xiàng)蟹略,9.填充邀桑,10.檢查和,11.源端口科乎, 12.目的端口 | 1.長(zhǎng)度壁畸,2.源端口,3.目標(biāo)端口茅茂,4.校驗(yàn)和 |
確認(rèn) | 確認(rèn)段 | 不確認(rèn) |
握手 | SYN, SYN-ACK, ACK | 無握手(無連接協(xié)議) |
2. 數(shù)據(jù)傳輸功能的區(qū)別
TCP確保從用戶到服務(wù)器的字節(jié)流可靠有序地傳遞捏萍,反之亦然。 UDP不專用于端對(duì)端連接空闲,并且通信不檢查接收器的準(zhǔn)備情況令杈。
2.1. 可靠性
TCP更可靠,因?yàn)樗梢怨芾硐⒋_認(rèn)和部分丟失的情況下的重傳碴倾。 因此逗噩,絕對(duì)沒有丟失的數(shù)據(jù)。 由于不存在確認(rèn)跌榔,超時(shí)和重傳的概念异雁,UDP無法確保通信已到達(dá)接收方。
2.2. 順序
TCP傳輸按順序發(fā)送僧须,并按相同的順序接收纲刀。如果數(shù)據(jù)段順序錯(cuò)誤,TCP將重新排序并交付應(yīng)用程序担平。 對(duì)于UDP示绊,發(fā)送的消息序列在到達(dá)接收應(yīng)用程序時(shí)可能無法維護(hù)。 絕對(duì)沒有辦法預(yù)測(cè)接收消息的順序暂论。
2.3. 連接
TCP是一個(gè)重量級(jí)的連接面褐,需要三個(gè)數(shù)據(jù)包用于套接字連接,并處理擁塞控制和可靠性取胎。 UDP是在IP之上設(shè)計(jì)的輕量級(jí)傳輸層展哭。 沒有跟蹤連接或消息順序。
2.4. 傳輸方式
TCP讀取數(shù)據(jù)作為字節(jié)流扼菠,并將消息傳輸?shù)蕉芜吔纭?UDP消息是單獨(dú)發(fā)送的數(shù)據(jù)包摄杂,到達(dá)時(shí)將檢查其完整性。 數(shù)據(jù)包沒有邊界時(shí)循榆,數(shù)據(jù)包已定義邊界。
2.5. 錯(cuò)誤檢測(cè)
UDP在“盡力而為”的基礎(chǔ)上工作墨坚。 UDP協(xié)議支持通過校驗(yàn)和進(jìn)行錯(cuò)誤檢測(cè)秧饮,但是當(dāng)檢測(cè)到錯(cuò)誤時(shí)映挂,將丟棄數(shù)據(jù)包。 沒有嘗試重新發(fā)送數(shù)據(jù)包以從該錯(cuò)誤中恢復(fù)盗尸。 這是因?yàn)閁DP通常用于對(duì)時(shí)間敏感的應(yīng)用程序柑船,例如游戲或語音傳輸。 從錯(cuò)誤中恢復(fù)將是毫無意義的泼各,因?yàn)榈街匦掳l(fā)送的數(shù)據(jù)包被接收時(shí)鞍时,它將毫無用處。
TCP同時(shí)使用錯(cuò)誤檢測(cè)和錯(cuò)誤恢復(fù)扣蜻。 錯(cuò)誤通過校驗(yàn)和檢測(cè)逆巍,如果數(shù)據(jù)包錯(cuò)誤,則接收方不會(huì)確認(rèn)該錯(cuò)誤莽使,從而觸發(fā)發(fā)送方重新發(fā)送锐极。 此操作機(jī)制稱為“帶重傳的肯定確認(rèn)”(PAR)。
3. TCP和UDP如何工作
TCP連接是通過三向握手建立的芳肌,握手是啟動(dòng)和確認(rèn)連接的過程灵再。 建立連接后,即可開始數(shù)據(jù)傳輸亿笤。 傳輸后翎迁,通過關(guān)閉所有已建立的虛擬電路來終止連接。
UDP使用一種簡(jiǎn)單的傳輸模型净薛,而不使用隱式的握手對(duì)話來保證可靠性鸳兽,排序或數(shù)據(jù)完整性。因此罕拂,UDP提供了不可靠的服務(wù)揍异,數(shù)據(jù)報(bào)可能會(huì)亂序到達(dá),出現(xiàn)重復(fù)或丟失而不會(huì)發(fā)出通知爆班。 UDP假定不需要或不需要在應(yīng)用程序中執(zhí)行錯(cuò)誤檢查和糾正衷掷,從而避免了在網(wǎng)絡(luò)接口級(jí)別進(jìn)行此類處理的開銷。與TCP不同柿菩,UDP與包廣播(發(fā)送到本地網(wǎng)絡(luò)上的所有包)和多播(發(fā)送到所有訂戶)兼容戚嗅。
4. TCP和UDP的不同應(yīng)用
Web瀏覽,電子郵件和文件傳輸是使用TCP的常見應(yīng)用程序枢舶。 TCP用于控制段大小懦胞,數(shù)據(jù)交換速率,流量控制和網(wǎng)絡(luò)擁塞凉泄。在網(wǎng)絡(luò)接口級(jí)別需要糾錯(cuò)功能的情況下躏尉,首選TCP。 UDP主要用于對(duì)時(shí)間敏感的應(yīng)用程序以及回答來自大量客戶端的少量查詢的服務(wù)器后众。 UDP與數(shù)據(jù)包廣播兼容-發(fā)送到網(wǎng)絡(luò)上的所有人并進(jìn)行多播-發(fā)送給所有用戶胀糜。 UDP通常用于域名系統(tǒng)颅拦,IP語音,普通文件傳輸協(xié)議和在線游戲中教藻。
5. TCP與UDP游戲服務(wù)器
對(duì)于大型多人在線(MMO)游戲距帅,開發(fā)人員通常不得不在使用UDP或TCP持久連接之間做出架構(gòu)選擇。 TCP的優(yōu)點(diǎn)是持久的連接括堤,可靠性以及能夠使用任意大小的數(shù)據(jù)包碌秸。 在這種情況下,TCP的最大問題是其擁塞控制算法悄窃,該算法將數(shù)據(jù)包丟失視為帶寬限制的標(biāo)志讥电,并自動(dòng)限制數(shù)據(jù)包的發(fā)送。 在3G或Wi-Fi網(wǎng)絡(luò)上广匙,這可能會(huì)導(dǎo)致嚴(yán)重的延遲允趟。
經(jīng)驗(yàn)豐富的開發(fā)人員會(huì)權(quán)衡利弊,并建議以下條件來選擇在游戲中使用TCP還是UDP:
- 如果可以偶爾出現(xiàn)延遲鸦致,請(qǐng)使用HTTP潮剪,客戶端啟動(dòng)的無狀態(tài)查詢。
- 如果客戶端和服務(wù)器都獨(dú)立發(fā)送數(shù)據(jù)包分唾,但偶爾會(huì)有延遲(例如抗碰,在線撲克,許多MMO)绽乔,請(qǐng)使用持久性普通TCP套接字弧蝇。
- 如果客戶端和服務(wù)器都可以獨(dú)立發(fā)送數(shù)據(jù)包并且偶爾出現(xiàn)滯后現(xiàn)象(例如,大多數(shù)多人動(dòng)作游戲折砸,某些MMO)看疗,請(qǐng)使用UDP。
【TCP和UDP的區(qū)別】轉(zhuǎn)載自:http://www.hasdiffer.com/tcp-vs-udp.html