知其所以然~tcp和udp的區別

張佔嶺發表於2018-07-16

TCP UDP

TCP與UDP基本區別

  1. 基於連線與無連線
  2. TCP要求系統資源較多,UDP較少;
  3. UDP程式結構較簡單
  4. 流模式(TCP)與資料包模式(UDP);
  5. TCP保證資料正確性,UDP可能丟包
  6. TCP保證資料順序,UDP不保證

UDP應用場景:

  1. 面向資料包方式
  2. 網路資料大多為短訊息
  3. 擁有大量Client
  4. 對資料安全性無特殊要求
  5. 網路負擔非常重,但對響應速度要求高

具體程式設計時的區別

  1. socket()的引數不同
  2. UDP Server不需要呼叫listen和accept
  3. UDP收發資料用sendto/recvfrom函式
  4. TCP:地址資訊在connect/accept時確定
  5. UDP:在sendto/recvfrom函式中每次均 需指定地址資訊
  6. UDP:shutdown函式無效

TCP程式設計步驟:

TCP程式設計的伺服器端一般步驟是:

  1. 建立一個socket,用函式socket();
  2. 設定socket屬性,用函式setsockopt(); * 可選
  3. 繫結IP地址、埠等資訊到socket上,用函式bind();
  4. 開啟監聽,用函式listen();
  5. 接收客戶端上來的連線,用函式accept();
  6. 收發資料,用函式send()和recv(),或者read()和write();
  7. 關閉網路連線;
  8. 關閉監聽;

TCP程式設計的客戶端一般步驟是:

  1. 建立一個socket,用函式socket();
  2. 設定socket屬性,用函式setsockopt();* 可選
  3. 繫結IP地址、埠等資訊到socket上,用函式bind();* 可選
  4. 設定要連線的對方的IP地址和埠等屬性;
  5. 連線伺服器,用函式connect();
  6. 收發資料,用函式send()和recv(),或者read()和write();
  7. 關閉網路連線;

UDP程式設計步驟:

UDP服務端一般步驟是:

  1. 建立一個socket,用函式socket();
  2. 設定socket屬性,用函式setsockopt();* 可選
  3. 繫結IP地址、埠等資訊到socket上,用函式bind();
  4. 迴圈接收資料,用函式recvfrom();
  5. 關閉網路連線;

UDP程式設計的客戶端一般步驟是:

  1. 建立一個socket,用函式socket();
  2. 設定socket屬性,用函式setsockopt();* 可選
  3. 繫結IP地址、埠等資訊到socket上,用函式bind();* 可選
  4. 設定對方的IP地址和埠等屬性;
  5. 傳送資料,用函式sendto();
  6. 關閉網路連線;

TCP和UDP是OSI模型中的運輸層中的協議。TCP提供可靠的通訊傳輸,而UDP則常被用於讓廣播和細節控制交給應用的通訊傳輸。

UDP補充:
UDP不提供複雜的控制機制,利用IP提供面向無連線的通訊服務。並且它是將應用程式發來的資料在收到的那一刻,立刻按照原樣傳送到網路上的一種機制。即使是出現網路擁堵的情況下,UDP也無法進行流量控制等避免網路擁塞的行為。此外,傳輸途中如果出現了丟包,UDP也不負責重發。甚至當出現包的到達順序亂掉時也沒有糾正的功能。如果需要這些細節控制,那麼不得不交給由採用UDP應用程式去處理。換句話說,UDP將部分控制轉移到應用程式去處理,自己卻只提供作為傳輸層協議的最基本功能。UDP有點類似於使用者說什麼聽什麼的機制,但是需要使用者充分考慮好上層協議型別並製作相應的應用程式。

TCP補充:
TCP充分實現了資料傳輸時各種控制功能,可以進行丟包的重發控制,還可以對次序亂掉的包進行順序控制。而這些在UDP中都沒有。此外,TCP作為一種面向有連線的協議,只有在確認通訊端存在時才會傳送資料,從而可以控制通訊流量的浪費。TCP通過檢驗、序列號、確認應答、重發控制、連線管理以及視窗控制等機制實現可靠性傳輸。

TCP與UDP區別總結:

  1. TCP面向連線(如打電話要先撥號建立連線);UDP是無連線的,即傳送資料之前不需要建立連線
  2. TCP提供可靠的服務。也就是說,通過TCP連線傳送的資料,無差錯,不丟失,不重複,且按序到達;UDP盡最大努力交付,即不保 證可靠交付
  3. TCP面向位元組流,實際上是TCP把資料看成一連串無結構的位元組流;UDP是面向報文的
    UDP沒有擁塞控制,因此網路出現擁塞不會使源主機的傳送速率降低(對實時應用很有用,如IP電話,實時視訊會議等)
  4. 每一條TCP連線只能是點到點的;UDP支援一對一,一對多,多對一和多對多的互動通訊
  5. TCP首部開銷20位元組;UDP的首部開銷小,只有8個位元組
  6. TCP的邏輯通訊通道是全雙工的可靠通道,UDP則是不可靠通道

相關文章