天天看點

@TCP/IP是什麼?TCP/UDP協定又是什麼?

引語:

約42.9億個IPv4位址中,你需要的資料是怎麼準确地傳到你的電腦上的?你的下載下傳是怎麼經過惡劣的網絡環境完整準确地到達你的電腦的?

這裡,我們不得不提到TCP/IP協定,TCP/IP協定為整個網際網路連接配接的穩定性,資料包的準确性分開看,從IP講起.

**

1. IP(網際協定)

**

**網際網路協定位址(Internet Protocol Address)又稱IP位址,**在我們計算機中,IP層是最接近硬體的軟體層,也是網絡與計算機互動的軟體底層.**IP層接受網絡傳輸過來的資料包傳給後一層,我們将此處的資料包稱為IP資料包,此時的後一層就是我們之後會提到的TCP/UDP層,我們稱之為計算機網絡結構的上層.此時的資料包中主要包含了版本,片偏移,生存時間,首部檢驗和,源位址,目的位址和資料.**是以不難了解,IP層作為計算機網路連接配接的底層,其IP資料包包含了全部計算機與網絡通信需要的資料,哪麼為什麼我們還需要TCP/UDP協定呢?

2. TCP協定

傳輸控制協定(Transmission Control Protocol)是一種位于IP協定之上的資料交換控制協定.我們不妨想象一下你下載下傳電影時的場景,網絡不可能把接近2G的電影直接傳給你,因為一點網絡錯誤例如丢包,資料錯誤,整個檔案出現問題.于是,将一個大檔案分為大量極小的資料包這樣的天才想法出現了,解決了大檔案下載下傳的問題,但同時又帶來了另外的麻煩,如何保證資料包是正确的?資料包的順序是怎樣的?資料包出現錯誤怎麼辦?其實這些問題在TCP協定之前都有解決方法.比如通過md5,Hash,CRC驗證資料包的完整性,但對大量資料包進行這樣的校驗未免有些占用性能,況且整個網絡需要的是一套大家都遵循的規範.此時TCP協定誕生了.通過為每一個包指派一個序号,解決了丢包和傳輸順序的問題.不僅如此,發送端還會向接收端發送一個校驗包來確定資料包的正确性.同時在接收到資料包之後接收端會向發送端發出一個确認信号(ACK),在合理的延遲(RTT)後如果發送端還未收到确認即認為這個包需要重發.這樣一來,解決了網絡資訊傳輸的一系列問題.總體來看,TCP需要雙方保持互相的連結才能傳輸資料,是以,TCP也被稱為面向連接配接的協定.

3.UDP協定

使用者資料報協定(User Datagram Protocol)與TCP協定一樣是一種位于IP層之上的協定,既然兩者為同級協定,那UDP與TCP有什麼差別呢?剛才TCP協定中對資料包分組,排序和傳回确認的功能在UDP中都沒有,但UDP協定仍是有校驗能力的,當UDP協定檢測到資料包有問題的時候,它并不會要求發送端重發,是以UDP被認為是一種不可靠的傳輸協定,但這樣的不可靠也并不是完全的不可靠,這時資料包的錯誤修正就交給應用層去處理.相應地,UDP被稱為面向非連接配接的協定.

TCP/UDP

剛才談到了UDP的種種不足,那麼相比于TCP,UDP存在的意義如何?我們不妨對比一下TCP和UDP協定工作的的整個過程.

@TCP/IP是什麼?TCP/UDP協定又是什麼?

不難發現,TCP協定會對資料包校驗并做相應處理,并且會傳回一個确認資訊,而UDP協定做的隻有接收.這樣一來,UDP協定相對TCP協定的優勢就非常明顯,就是性能消耗低,從IP層到應用層的時延也就更低,換一個角度,由于少了TCP協定中的校驗包和傳回值,理論上傳輸同一檔案的流量消耗也就更低.這樣的優勢,在某些應用場景下顯得格外重要.;例如語音聊天的時候,當然甯願某一瞬間丢掉一點也不願意TCP協定為了等待一個資料包而停掉後面的語音.

那可能有讀者會問,UDP效率如此之高,為什麼不将所有的校驗工作和糾錯工作都交給應用層完成呢?這樣既可以兼顧UDP的高效率低延遲的優勢,又能保證TCP的準确性.這樣的想法無疑是優秀的,但明顯這會大大增加程式編寫人員的工作量,但這樣的想法仍是值得借鑒的.例如目前都提供TCP和UDP兩種協定接口,應用開發者根據應用類型自行選擇.另外,淺談一下目前大型網絡遊戲的解決方案,網絡遊戲本身對時延的要求極高,而對使用者網絡環境容錯率又不能太差,采用TCP協定導緻延遲太高,可能UDP協定300ms的延遲用TCP就能達到1000ms,于是部分遊戲會先判斷網絡環境,采取不同的協定,并利用動畫掩蓋延遲.這也是相當不錯的解決方案.

前景

或許不久之後,随着寬帶提供商和内容服務商伺服器的提升,或許UDP的劣勢會越來的不明顯,又或許以後會有更先進的協定能結合TCP和UDP的優勢取代前者.

因編者水準能力有限,若有不足與錯誤,歡迎指正.

繼續閱讀