TCP 和 UDP

TCP/IP五層網絡結構模型

  • 物理層:物理層創建在物理通訊介質的基礎上,做爲系統和通訊介質的接口,用來實現數據鏈路實體間透明的比特 (bit) 流傳輸。只有該層爲真實物理通訊,其它各層爲虛擬通訊api

  • 數據鏈路層:在物理層提供比特流服務的基礎上,創建相鄰結點之間的數據鏈路,經過差錯控制提供數據幀(Frame)在信道上無差錯的傳輸,並進行各電路上的動做系列。數據的單位稱爲幀(frame)服務器

  • 網絡層:選擇合適的路由,使數據分組(packet)能夠交付到目的主機網絡

  • 傳輸層:負責主機中進程間的通訊併發

  • 應用層:直接爲用戶的應用程序提供服務less

UDP詳解

如下內容來自wiki - 最英俊的百科全書tcp

用戶數據報協議(英語:User Datagram Protocol,縮寫爲UDP),又稱使用者資料包協定,是一個簡單的面向數據報的傳輸層協議,正式規範爲RFC 768。
在TCP/IP模型中,UDP爲網絡層以上和應用層如下提供了一個簡單的接口。UDP只提供數據的不可靠傳遞,它一旦把應用程序發給網絡層的數據發送出去,就不保留數據備份(因此UDP有時候也被認爲是不可靠的數據報協議)。UDP在IP數據報的頭部僅僅加入了複用和數據校驗(字段)。函數

UDP的優勢

  • 無需創建鏈接(減小延遲)
  • 實現簡單:無需維護鏈接狀態
  • 頭部開銷小(最小值爲8byte)
  • 沒有擁塞控制:應用能夠更好的控制發送時間和發送速率

UDP頭部:


UDP的頭部是由源端口號、目標端口號、包長和校驗4個部分組成,其中兩個是可選的。各16bit的來源端口和目的端口用來標記發送和接受的應用進程。由於UDP不須要應答,因此來源端口是可選的,若是來源端口不用,那麼置爲零。在目的端口後面是長度固定的以字節爲單位的長度域,用來指定UDP數據報包括數據部分的長度,長度最小值爲8byte。首部剩下地16bit是用來對首部和數據部分一塊兒作校驗和(Checksum)的,checksum主要是用來檢測UDP段在傳輸中是否發生了錯誤。還有就是,校驗和計算中也須要計算UDP僞頭部,僞頭部包含IP頭部的一些字段。咱們剛纔介紹了識別一個通訊須要5項信息,而UDP頭部只有端口號,餘下的三項在IP頭部,因此引入了僞頭部的概念。(IPv6的IP頭部沒有校驗和字段)ui

基於UDP協議的有:

  • 域名系統(DNS)
  • 簡單網絡管理協議(SNMP)
  • 動態主機配置協議(DHCP)
  • 路由信息協議(RIP)
  • 自舉協議(BOOTP)
  • 簡單文件傳輸協議(TFTP)

TCP詳解

如下內容來自wiki - 最英俊的百科全書
傳輸控制協議(英語:Transmission Control Protocol)是一種面向鏈接的、可靠的、基於字節流的傳輸層通訊協議,由IETF的RFC 793定義。
在因特網協議族(Internet protocol suite)中,TCP層是位於IP層之上,應用層之下的中間層。不一樣主機的應用層之間常常須要可靠的、像管道同樣的鏈接,可是IP層不提供這樣的流機制,而是提供不可靠的包交換。
應用層向TCP層發送用於網間傳輸的、用8位字節表示的數據流,而後TCP把數據流分區成適當長度的報文段(一般受該計算機鏈接的網絡的數據鏈路層的最大傳輸單元(MTU)的限制)。以後TCP把結果包傳給IP層,由它來經過網絡將包傳送給接收端實體的TCP層。TCP爲了保證不發生丟包,就給每一個包一個序號,同時序號也保證了傳送到接收端實體的包的按序接收。而後接收端實體對已成功收到的包發回一個相應的確認(ACK);若是發送端實體在合理的往返時延(RTT)內未收到確認,那麼對應的數據包就被假設爲已丟失將會被進行重傳。TCP用一個校驗和函數來檢驗數據是否有錯誤;在發送和接收時都要計算校驗和編碼

三次握手

TCP用三路握手(three-way handshake)過程建立一個鏈接。在鏈接建立過程當中,不少參數要被初始化,例如序號被初始化以保證按序傳輸和鏈接的強壯性。3d

  • 客戶端經過向服務器端發送一個SYN來建立一個主動打開,做爲三路握手的一部分。客戶端把這段鏈接的序號設定爲隨機數A。
  • 服務器端應當爲一個合法的SYN回送一個SYN/ACK。ACK的確認碼應爲A+1,SYN/ACK包自己又有一個隨機序號B。
  • 最後,客戶端再發送一個ACK。當服務端受到這個ACK的時候,就完成了三路握手,並進入了鏈接建立狀態。此時包序號被設定爲收到的確認號A+1,而響應則爲B+1。

TCP狀態編碼

下表爲TCP狀態碼列表,以S指代服務器,C指代客戶端,S&C表示二者,S/C表示二者之一:[1]

  • LISTEN S
    等待從任意遠程TCP端口的鏈接請求。偵聽狀態。
  • SYN-SENT C
    在發送鏈接請求後等待匹配的鏈接請求。經過connect()函數向服務器發出一個同步(SYNC)信號後進入此狀態。
  • SYN-RECEIVED S
    已經收到併發送同步(SYNC)信號以後等待確認(ACK)請求。
  • ESTABLISHED S&C
    鏈接已經打開,收到的數據能夠發送給用戶。數據傳輸步驟的正常狀況。此時鏈接兩端是平等的。
  • FIN-WAIT-1 S&C
    主動關閉端調用close()函數發出FIN請求包,表示本方的數據發送所有結束,等待TCP鏈接另外一端的確認包或FIN請求包。
  • FIN-WAIT-2 S&C
    主動關閉端在FIN-WAIT-1狀態下收到確認包,進入等待遠程TCP的鏈接終止請求的半關閉狀態。這時能夠接收數據,但再也不發送數據。
  • CLOSE-WAIT S&C
    被動關閉端接到FIN後,就發出ACK以迴應FIN請求,並進入等待本地用戶的鏈接終止請求的半關閉狀態。這時能夠發送數據,但再也不接收數據。
  • CLOSING S&C
    在發出FIN後,又收到對方發來的FIN後,進入等待對方對鏈接終止(FIN)的確認(ACK)的狀態。少見。
  • LAST-ACK S&C
    被動關閉端所有數據發送完成以後,向主動關閉端發送FIN,進入等待確認包的狀態。
  • TIME-WAIT S/C
    主動關閉端接收到FIN後,就發送ACK包,等待足夠時間以確保被動關閉端收到了終止請求的確認包。【按照RFC 793,一個鏈接能夠在TIME-WAIT保證最大四分鐘,即最大分段壽命(maximum segment lifetime)的2倍】
  • CLOSED S&C
    徹底沒有鏈接。

基於TCP實現的協議有

  • HTTP/HTTPS,
  • Telnet
  • FTP
  • SMTP

TCP(Transmission Control Protocol)和UDP(User DataGram Protocol)的區別

下面咱們主要從鏈接性(Connectivity)、可靠性(Reliability)、有序性(Ordering)、有界性(Boundary)、擁塞控制(Congestion or Flow control)、傳輸速度(Speed)、量級(Heavy/Light weight)、頭部大小(Header size)等8個方面來對比它們:

  1. TCP是面向鏈接(Connection oriented)的協議,UDP是無鏈接(Connection less)協議;
    TCP用三次握手創建鏈接:1) Client向server發送SYN;2) Server接收到SYN,回覆Client一個SYN-ACK;3) Client接收到SYN_ACK,回覆Server一個ACK。到此,鏈接建成。UDP發送數據前不須要創建鏈接。
  2. TCP可靠,UDP不可靠;TCP丟包會自動重傳,UDP不會。
  3. TCP有序,UDP無序;消息在傳輸過程當中可能會亂序,後發送的消息可能會先到達,TCP會對其進行重排序,UDP不會。
  4. TCP無界,UDP有界;TCP經過字節流傳輸,UDP中每個包都是單獨的。
  5. TCP有流量控制(擁塞控制),UDP沒有;主要靠三次握手實現。
  6. TCP傳輸慢,UDP傳輸快;由於TCP須要創建鏈接、保證可靠性和有序性,因此比較耗時。這就是爲何視頻流、廣播電視、在線多媒體遊戲等選擇使用UDP。
  7. TCP是重量級的,UDP是輕量級的;TCP要創建鏈接、保證可靠性和有序性,就會傳輸更多的信息,如TCP的包頭比較大。
  8. TCP的頭部比UDP大;TCP頭部須要20字節,UDP頭部只要8個字節
相關文章
相關標籤/搜索