1. 程式人生 > 實用技巧 >計算機網路-TCP和UDP總結(區別、優缺點、應用場景)

計算機網路-TCP和UDP總結(區別、優缺點、應用場景)

參考:

https://blog.csdn.net/weixin_43784305/article/details/104918771

https://www.cnblogs.com/xiaomayizoe/p/5258754.html

https://blog.csdn.net/qq_38950316/article/details/81122894

https://blog.csdn.net/xiaoyuerp/article/details/84102318

TCP和UDP總結(區別、優缺點、應用例項)

TCP和UDP的區別和優缺點以及應用例項

TCP和UDP區別總結:

  1. TCP面向連線,UDP是無連線的
    TCP在開始資料傳輸之前要經過三次握手,UDP卻不需要任何準備即可進行資料傳輸,因此UDP不會引入建立連線的時延
  2. TCP提供可靠的服務,UDP盡最大努力交付,即不保證可靠交付
    TCP傳輸資料具有重傳機制,如果在傳輸資料的過程中發生丟包事件,傳送方會重傳丟失的分組,所以TCP保證傳送的分組一定能到達接收方,因此是可靠的。
    UDP在應用層得到資料後,附加上用於多路複用/多路分解服務的源埠號和目的埠號欄位後,直接將形成的報文段傳輸給網路,而網路層是不可靠的,因而不能保證資料傳輸的可靠性。(可以在應用層實現UDP資料傳輸的可靠性)
  3. UDP具有較好的實時性,工作效率比TCP高
    UDP在傳輸資料前不需要建立連線,沒有繁瑣的握手過程,沒有複雜的擁塞控制演算法和重傳機制,所以UDP相對於TCP具有較高的效率。
  4. 每一條TCP連線只能是點到點,UDP支援一對一、一對多、多對多
  5. TCP對系統資源要求較多,UDP對系統資源要求較少
    TCP建立連線後,會為連線分配發送快取和接受快取,維護擁塞控制變數以及序號和確認號的引數,因此需要佔用較多的系統資源。而UDP是無連線的,對系統資源要求較少

為什麼UDP有時比TCP更有優勢?

  1. 網速的提升給UDP的穩定性提供可靠網路保障,丟包率很低,如果使應用層重傳,能夠確保傳輸的可靠性
  2. TCP為了實現網路通訊的可靠性,使用了複雜的擁塞控制機制演算法,建立了繁瑣的握手過程,由於TCP內建的系統協議棧中,極難對其進行改進。
  3. 基於UDP對實時性要求較為嚴格的情況下,採用自定義重傳機制,能夠把丟包產生的延遲降到最低,儘量減少網路對程序造成影響

UDP實現可靠資料傳輸的例項

TCP和UDP應用的例子

TCP應用:

  1. FTP:檔案傳輸協議
  2. SSH:安全登入、檔案傳送(SCP)和埠重定向
  3. Telnet:不安全文字傳送
  4. SMTP:簡單郵件傳輸協議
  5. HTTP:超文字傳輸協議

UDP應用:

  1. 流媒體

    如果採用TCP,一旦發生丟包,TCP會將後續包快取起來,等前面的包重傳並接收到後再繼續傳送,延遲會越來越大。基於UDP的協議入WebRTC使極佳的選擇。

  2. 實時遊戲

    對實時要求較為嚴格的情況下,採用自定義的可靠UDP協議,自定義重傳策略,能哦把丟包產生的延遲降到最低,儘量減少網路問題對遊戲性造成的影響。

  3. 物聯網

TCP和UDP的優缺點及區別

TCP的優點: 可靠,穩定 TCP的可靠體現在TCP在傳遞資料之前,會有三次握手來建立連線,而且在資料傳遞時,有確認、視窗、重傳、擁塞控制機制,在資料傳完後,還會斷開連線用來節約系統資源。 TCP的缺點: 慢,效率低,佔用系統資源高,易被攻擊 TCP在傳遞資料之前,要先建連線,這會消耗時間,而且在資料傳遞時,確認機制、重傳機制、擁塞控制機制等都會消耗大量的時間,而且要在每臺裝置上維護所有的傳輸連線,事實上,每個連線都會佔用系統的CPU、記憶體等硬體資源。 而且,因為TCP有確認機制、三次握手機制,這些也導致TCP容易被人利用,實現DOS、DDOS、CC等攻擊。

UDP的優點: 快,比TCP稍安全 UDP沒有TCP的握手、確認、視窗、重傳、擁塞控制等機制,UDP是一個無狀態的傳輸協議,所以它在傳遞資料時非常快。沒有TCP的這些機制,UDP較TCP被攻擊者利用的漏洞就要少一些。但UDP也是無法避免攻擊的,比如:UDP Flood攻擊…… UDP的缺點: 不可靠,不穩定 因為UDP沒有TCP那些可靠的機制,在資料傳遞時,如果網路質量不好,就會很容易丟包。 基於上面的優缺點,那麼: 什麼時候應該使用TCP: 當對網路通訊質量有要求的時候,比如:整個資料要準確無誤的傳遞給對方,這往往用於一些要求可靠的應用,比如HTTP、HTTPS、FTP等傳輸檔案的協議,POP、SMTP等郵件傳輸的協議。 在日常生活中,常見使用TCP協議的應用如下: 瀏覽器,用的HTTP FlashFXP,用的FTP Outlook,用的POP、SMTP Putty,用的Telnet、SSH QQ檔案傳輸 ………… 什麼時候應該使用UDP: 當對網路通訊質量要求不高的時候,要求網路通訊速度能儘量的快,這時就可以使用UDP。 比如,日常生活中,常見使用UDP協議的應用如下: QQ語音 QQ視訊 TFTP ……

有些應用場景對可靠性要求不高會用到UPD,比如長視訊,要求速率

小結TCP與UDP的區別:

1.基於連線與無連線;
2.對系統資源的要求(TCP較多,UDP少);
3.UDP程式結構較簡單;
4.流模式與資料報模式 ;

5.TCP保證資料正確性,UDP可能丟包,TCP保證資料順序,UDP不保證。

tcp協議和udp協議的差別 
TCP UDP
是否連線 面向連線 面向非連線
傳輸可靠性 可靠 不可靠
應用場合 傳輸大量資料 少量資料
速度 慢 快

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則是不可靠通道

TCP與UDP的技術面試考點

面試時回答此類問題,先介紹兩者的概念,再闡述兩者的區別

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

1.TCP(TransmissionControlProtocol)的概念

TCP是一種面向連線的,提供可靠交付服務和全雙工通訊的,基於位元組流的端到端的傳輸層通訊協議。
TCP在傳輸資料之前必須先建立連線(TCP連線過程參見:https://blog.csdn.net/qq_38950316/article/details/81087809),資料傳輸結束後要釋放連線。
每一條TCP連線只能有2個端點,故TCP不提供廣播或多播服務。
TCP提供可靠交付,通過TCP連線傳輸的資料,無差錯、不丟失、不重複、並且按序到達。
TCP是面向位元組流的。雖然應用程序和TCP的互動是一次一個資料塊(大小不等),但TCP把英語程式交下來的資料看成僅僅是一連串的無結構的位元組流。TCP並不知道所傳輸的位元組流的含義。


2 . UDP(UserDataProtocol,使用者資料報協議)
(1)UDP是一個非連線的協議,傳輸資料之前源端和終端不建立連線,當它想傳送時就簡單地去抓取來自應用程式的資料,並儘可能快地把它扔到網路上。在傳送端,UDP傳送資料的速度僅僅是受應用程式生成資料的速度、計算機的能力和傳輸頻寬的限制;在接收端,UDP把每個訊息段放在佇列中,應用程式每次從佇列中讀一個訊息段。
(2)由於傳輸資料不建立連線,因此也就不需要維護連線狀態,包括收發狀態等,因此一臺服務機可同時向多個客戶機傳輸相同的訊息。
(3)UDP資訊包的標題很短,只有8個位元組,相對於TCP的20個位元組資訊包的額外開銷很小。
(4)吞吐量不受擁擠控制演算法的調節,只受應用軟體生成資料的速率、傳輸頻寬、源端和終端主機效能的限制。
(5)UDP使用盡最大努力交付,即不保證可靠交付,因此主機不需要維持複雜的連結狀態表(這裡面有許多引數)。
(6)UDP是面向報文的。傳送方的UDP對應用程式交下來的報文,在新增首部後就向下交付給IP層。既不拆分,也不合並,而是保留這些報文的邊界,因此,應用程式需要選擇合適的報文大小。

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

3. 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則是不可靠通道

TCP和UDP的區別

 (1)同步:埠下如果同是來了兩個客戶端請求,第一個連線得到響應,與服務端建立通訊,而第二個請求就會被一直阻塞直到第一個請求完成操作,各請求之間排隊,順序執行。
 (2)非同步呢,就是同時來兩個或者多個請求,服務端就同時響應多個客戶端,同時給他們連線。各個客戶端與伺服器的通訊是並行的,一個客戶端不必等另一個客戶端完成操作。通常用這兩個方法來接收一個客戶端請求。
 (3)阻塞 呼叫是指呼叫結果返回之前,當前執行緒會被掛起。比如:Console.ReadLine(),如果你不向控制檯輸入資料,這個方法就會一直等待,知道你輸入資料後才會向下執行。這個時候當前執行緒被掛起來了,讓CPU去做其他事情。
 (4)非阻塞和阻塞的概念相對應,指在不能立刻得到結果之前,該函式不會阻塞當前執行緒,而會立刻返回。

syn攻擊

在三次握手過程中,伺服器傳送SYN-ACK之後,收到客戶端的ACK之前的TCP連線稱為半連線(half-open connect).此時伺服器處於Syn_RECV狀態.當收到ACK後,伺服器轉入ESTABLISHED狀態.
Syn攻擊就是 攻擊客戶端 在短時間內偽造大量不存在的IP地址,向伺服器不斷地傳送syn包,伺服器回覆確認包,並等待客戶的確認,由於源地址是不存在的,伺服器需要不斷的重發直 至超時,這些偽造的SYN包將長時間佔用未連線佇列,正常的SYN請求被丟棄,目標系統執行緩慢,嚴重者引起網路堵塞甚至系統癱瘓。
Syn攻擊是一個典型的DDOS攻擊。檢測SYN攻擊非常的方便,當你在伺服器上看到大量的半連線狀態時,特別是源IP地址是隨機的,基本上可以斷定這是一次SYN攻擊.在Linux下可以如下命令檢測是否被Syn攻擊
netstat -n -p TCP | grep SYN_RECV
一般較新的TCP/IP協議棧都對這一過程進行修正來防範Syn攻擊,修改tcp協議實現。主要方法有SynAttackProtect保護機制、SYN cookies技術、增加最大半連線和縮短超時時間等.
但是不能完全防範syn攻擊。

TCP和UDP是OSI模型中的運輸層中的協議。TCP提供可靠的通訊傳輸,而UDP則常被用於廣播提供面向無連線的通訊服務

握手

“我想給你發資料,可以嗎?” (請提供序列號作為起始資料段)SYN:同步序列編號(Synchronize Sequence Numbers)
“可以,你什麼時候發?” (已提供序列號)SYN+ACK應答
“我現在就發,你接著吧!”ACK訊息響應

揮手 (A為主動關閉方,可以是SERVICE也可以是CLIENT)

SERVER:傳輸好了,我要關了 1 ) 當主機A完成資料傳輸後,傳送FIN,提出停止TCP連線的請求,進入FIN_WAIT1狀態
CLIENT:我看一下 2 ) 主機B收到FIN後,將傳送ACK,進入CLOSE_WAIT狀態
CLIENT:OK ,可以關 3 ) 由B 端再提出反方向的關閉請求,將傳送FIN,並進入LAST_ACK狀態
SERVER: 嗯,我關了 4 ) 主機A對主機B的請求進行確認收到FIN,將傳送ACK,雙方向的關閉結束.進入TIME_WAIT狀態,經過2MSL時間後關閉


UDP(User Data Protocol,使用者資料報協議)
我們經常使用“ping”命令來測試兩臺主機之間TCP/IP通訊是否正常,其實“ping”命令的原理就是向對方主機發送UDP資料包,然後對方主機確認收到資料包,如果資料包是否到達的訊息及時反饋回來,那麼網路就是通的。
UDP應用場景:1.面向資料報方式 2.網路資料大多為短訊息 3.擁有大量Client 4.對資料安全性無特殊要求 5.網路負擔非常重,但對響應速度要求高

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

TCP:
TCP程式設計的伺服器端一般步驟是:TCP包頭的最小長度,為20位元組。
  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程式設計步驟要簡單許多,分別如下:
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、關閉網路連線;