TCP與UDP


網絡知識學習篇,惡補網絡知識。

講主題之前,先補習一下基礎知識。

OSI網絡模型

OSI模型,Open System Interconnection 開放式通信系統互聯參考模型,是國際標准化組織ISO提出的一個試圖使全世界計算機互聯為網絡的標准框架,簡稱OSI。

OSI網絡模型按照功能划分了七層,由下往上分別是物理層,數據鏈路層,網絡層,傳輸層,會話層,表示層,應用層。

OSI模型是最經典的網絡模型,但是結構過於復雜,我們常用的是TCP/IP模型。

TCP/IP模型

TCP/IP是一個協議族,里面有很多的協議,之所以叫CP/IP是因為TCP和IP是里面兩個很重要的協議,就這樣命名了。TCP/IP現在已經成為了Internet上通信的工業標准。

TCP/IP總共分為四層,從下往上分別是網絡接口層,網絡層,傳輸層和應用層。

應用層:各種服務和應用程序通過該層利用網絡。常用協議:HTTP超文本傳輸協議,FTP文本傳輸協議,SMTP簡單郵件傳輸協議Telnet遠程登錄,SNMP簡單網絡管理協議,DNS域名系統。

傳輸層:確認數據傳輸並進行糾錯處理。常用協議便是今天的主角:TCP傳輸控制協議和UDP用戶數據報協議。

網絡層:負責數據傳輸、路徑及地址選擇。常用協議有IP Internet協議,ICMPI Internet控制信息協議,ARP地址解析協議,RARP方向地址解析協議。

最后是網絡接口層:針對不同的物理網絡連接形式的協議。常用協議比如Ethernet以太網。

咳咳,敲黑板!

TCP

TCP 傳輸控制協議,這是一個面向連接的協議,也就是說在收發數居前,必須和對方建立一個可靠的連接,這也就到了面試中常常問到的一個點,三次握手。

說三次握手之前先來一波名次解釋,下面將會出現。

ACK:TCP報頭的控制位之一,作用是對數據進行確認,確認由目的端發回來告訴發送端這個序列號之前的數據段收到了,ACK位置為1標識有效,為0確認無效,無效將會要求重發數據以保證數據的完整性。

SYN:同步序列號,建立連接的時候使用,發送端將SYN位置置為1向目的端發送。

FIN:當發送完成發送,TCP完成數據傳輸以后需要斷開連接時,提出斷開的一方將FIN置為1.

三次握手過程:

1、主機A向主機B發送一個一個數據段,這個數據段中帶有同步序列號SYN的標志位,向主機B請求連接,說的通俗一點這一步就相當於A告訴B,我要發數據了,行不?你能拿哪個序列號最為起始數據段來回應我啊?

2、主機B收到了A發送的數據段,用一個帶有確認應答ACK和同步序列號SYN標志位的數據段響應主機A,這一步通俗講就是B收到A的問話后回復。我收到了,你可以發數據,你要用那個序列號作為其實數據段來回應我?

3、主機A收到了主機B的響應,再發送一個帶有確認應答ACK的數據段,確認已收到B的響應,這一步通俗講就是A主機告訴B主機,我收到了你的回復,我要開始傳數據了。

這樣三次握手完成,主機A和主機B建立了連接,可以傳輸數據。

TCP建立連接是三次握手,而斷開連接需要四次揮手

四次揮手的過程:

1、主機A完成傳輸數據任務了,需要斷開,就將控制位FIN置1,提出停止連接的請求。

2、主機B收到后做出響應,確認這一方向的TCP連接將關閉,也就是告訴自己的相應的應用程序對方請求關閉,將ACK置1.

3、B主機再向A主機發送斷開請求,FIN置1.

4、主機A收到請求后進行確認,將ACK置1,這樣AB之間雙向關閉結束。

三次握手和四次揮手可以發映出TCP使用面向連接的通信方式,使得數據通信的可靠性大大提高,發送端和接收端在正式傳輸數居前就有了交互,為正式傳輸打下了基礎。

UDP

UDP 用戶數據報協議,是一個非連接的協議,和TCP的面向連接相對,UDP在傳輸數據之前,發送端和接收端不建立連接,當它想傳送數據時就抓取應用程序中的數據盡可能快的將它扔出去。發送端速度只是受到應用程序的生成數據的速度,計算機的能力和帶寬的限制。接收端,UDP會把每個消息段放入隊列,讓應用程序每次從隊列中讀一個消息段。

UDP的吞吐量不受擁擠算法的調整,只受軟件生成數據的速度,發送端接收端機器性能還有帶寬的限制。

UDP傳輸數據的時候不需要建立連接,不需要維持連接狀態,所以對系統資源要求少,且一台服務器可以實現向多台客戶機發送相同的數據。說到資源要求少,UDP信息包的標題為8字節,而TCP包頭最小長度為20字節,相對來說額外開銷小。

UDP不保證可靠交付,使用盡最大努力交付,所以主機不需要維持復雜的鏈接狀態表。

前面也說到,UDP是非連接的協議,而是面向報文的。發送端應用程序交下來的報文,進行添加首部處理后就交付給IP層,不進行其他處理,不拆分要不合並,保留報文辯解,所以以UDP傳輸時,應用程序需要選擇合適的報文大小。

我們平時測試兩台電腦是否通信所說的是否PING通,用的就是UDP,發送方發送一個UDP數據報,對方主機收到數據報的話就反饋回來,那么就是能PING通。

小結

TCP和UDP的主要區別:

1、TCP面向連接,UDP面向報文。TCP是流模式,UDP是數據報模式

2、TCP需要建立連接,維持連接狀態,系統資源要求更多,而UDP不需要維持雙方連接狀態,系統資源要求少,且可以向多台客戶機同時發送數據。

3、TCP包頭最小長度20字節,UDP信息報標題8字節,額外開銷少。

4、TCP的連接保證了數據的可靠性,UDP不保證可靠交付。

5、TCP保證數據的順序,UDP不保證數據順序。

6、UDP結構更為簡單。

這也只是我個人寫的幾點不同,還有很多不同,更有好多知識等着我們學習,大佬們多指點。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM