知其(qi)所以(yi)然~tcp和udp的區別
TCP UDP
TCP與UDP基本區別
- 基于連接與無連接
- TCP要求系統資源較多,UDP較少;
- UDP程序結構較簡單
- 流模式(TCP)與數據報模式(UDP);
- TCP保證數據正確性,UDP可能丟包
- TCP保證數據順序,UDP不保證
UDP應用場景:
- 面向數據報方式
- 網絡數據大多為短消息
- 擁有大量Client
- 對數據安全性無特殊要求
- 網絡負擔非常重,但對響應速度要求高
具體編程時的區別
- socket()的參數不同
- UDP Server不需要調用listen和accept
- UDP收發數據用sendto/recvfrom函數
- TCP:地址信息在connect/accept時確定
- UDP:在sendto/recvfrom函數中每次均 需指定地址信息
- UDP:shutdown函數無效
TCP編程步驟:
TCP編程的服務器端一般(ban)步驟(zou)是:
- 創建一個socket,用函數socket();
- 設置socket屬性,用函數setsockopt(); * 可選
- 綁定IP地址、端口等信息到socket上,用函數bind();
- 開啟監聽,用函數listen();
- 接收客戶端上來的連接,用函數accept();
- 收發數據,用函數send()和recv(),或者read()和write();
- 關閉網絡連接;
- 關閉監聽;
TCP編程的客戶端一般步驟是:
- 創建一個socket,用函數socket();
- 設置socket屬性,用函數setsockopt();* 可選
- 綁定IP地址、端口等信息到socket上,用函數bind();* 可選
- 設置要連接的對方的IP地址和端口等屬性;
- 連接服務器,用函數connect();
- 收發數據,用函數send()和recv(),或者read()和write();
- 關閉網絡連接;
UDP編程步驟:
UDP服務(wu)端(duan)一般步驟是:
- 創建一個socket,用函數socket();
- 設置socket屬性,用函數setsockopt();* 可選
- 綁定IP地址、端口等信息到socket上,用函數bind();
- 循環接收數據,用函數recvfrom();
- 關閉網絡連接;
UDP編程(cheng)的客戶(hu)端(duan)一般(ban)步驟是:
- 創建一個socket,用函數socket();
- 設置socket屬性,用函數setsockopt();* 可選
- 綁定IP地址、端口等信息到socket上,用函數bind();* 可選
- 設置對方的IP地址和端口等屬性;
- 發送數據,用函數sendto();
- 關閉網絡連接;
TCP和(he)UDP是OSI模(mo)型中(zhong)的(de)運輸層中(zhong)的(de)協議。TCP提供可靠的(de)通信(xin)(xin)傳輸,而(er)UDP則常被(bei)用于讓(rang)廣播和(he)細(xi)節控制交(jiao)給應用的(de)通信(xin)(xin)傳輸。
UDP補充:
UDP不提供復雜的(de)(de)(de)控(kong)制(zhi)(zhi)(zhi)機(ji)制(zhi)(zhi)(zhi),利(li)用(yong)(yong)IP提供面向無連(lian)接的(de)(de)(de)通信服(fu)務(wu)。并且(qie)它是(shi)將應(ying)用(yong)(yong)程序(xu)發來的(de)(de)(de)數據在收到的(de)(de)(de)那(nei)一刻,立刻按照原樣發送到網絡上(shang)的(de)(de)(de)一種機(ji)制(zhi)(zhi)(zhi)。即(ji)使是(shi)出現網絡擁堵的(de)(de)(de)情況(kuang)下,UDP也(ye)無法進行流量控(kong)制(zhi)(zhi)(zhi)等避免網絡擁塞(sai)的(de)(de)(de)行為。此外,傳(chuan)輸(shu)途中如果(guo)出現了(le)丟包(bao),UDP也(ye)不負責重(zhong)發。甚至當出現包(bao)的(de)(de)(de)到達順序(xu)亂掉(diao)時也(ye)沒有(you)糾正的(de)(de)(de)功(gong)能。如果(guo)需(xu)要這些(xie)細節控(kong)制(zhi)(zhi)(zhi),那(nei)么不得不交給由采用(yong)(yong)UDP應(ying)用(yong)(yong)程序(xu)去處(chu)理。換句話說(shuo),UDP將部分控(kong)制(zhi)(zhi)(zhi)轉移到應(ying)用(yong)(yong)程序(xu)去處(chu)理,自己卻只提供作(zuo)為傳(chuan)輸(shu)層(ceng)協議的(de)(de)(de)最基本(ben)功(gong)能。UDP有(you)點類(lei)似于用(yong)(yong)戶說(shuo)什么聽什么的(de)(de)(de)機(ji)制(zhi)(zhi)(zhi),但是(shi)需(xu)要用(yong)(yong)戶充分考慮好上(shang)層(ceng)協議類(lei)型并制(zhi)(zhi)(zhi)作(zuo)相(xiang)應(ying)的(de)(de)(de)應(ying)用(yong)(yong)程序(xu)。
TCP補充:
TCP充分實現了數(shu)據傳輸時(shi)各種控(kong)(kong)(kong)制(zhi)(zhi)功(gong)能(neng),可(ke)以(yi)進行丟包(bao)的(de)(de)重發控(kong)(kong)(kong)制(zhi)(zhi),還(huan)可(ke)以(yi)對次序(xu)亂(luan)掉的(de)(de)包(bao)進行順(shun)序(xu)控(kong)(kong)(kong)制(zhi)(zhi)。而這(zhe)些在UDP中都沒有(you)。此外,TCP作為(wei)一(yi)種面向有(you)連接的(de)(de)協議,只有(you)在確認通信端存在時(shi)才會(hui)發送(song)數(shu)據,從(cong)而可(ke)以(yi)控(kong)(kong)(kong)制(zhi)(zhi)通信流量的(de)(de)浪(lang)費。TCP通過檢驗、序(xu)列號(hao)、確認應答、重發控(kong)(kong)(kong)制(zhi)(zhi)、連接管理(li)以(yi)及(ji)窗口控(kong)(kong)(kong)制(zhi)(zhi)等機(ji)制(zhi)(zhi)實現可(ke)靠性傳輸。
TCP與UDP區別總結:
- TCP面向連接(如打電話要先撥號建立連接);UDP是無連接的,即發送數據之前不需要建立連接
- TCP提供可靠的服務。也就是說,通過TCP連接傳送的數據,無差錯,不丟失,不重復,且按序到達;UDP盡最大努力交付,即不保 證可靠交付
- TCP面向字節流,實際上是TCP把數據看成一連串無結構的字節流;UDP是面向報文的
UDP沒有擁塞控制,因此網絡出現擁塞不會使源主機的發送速率降低(對實時應用很有用,如IP電話,實時視頻會議等) - 每一條TCP連接只能是點到點的;UDP支持一對一,一對多,多對一和多對多的交互通信
- TCP首部開銷20字節;UDP的首部開銷小,只有8個字節
- TCP的邏輯通信信道是全雙工的可靠信道,UDP則是不可靠信道