TCP與UDP

轉(zhuǎn)載自陶程(知乎Android開發(fā)工程師)
https://github.com/GeniusVJR/LearningNotes/blob/master/Part4/Network/TCP%E4%B8%8EUDP.md


面向報文的傳輸方式是應(yīng)用層交給UDP多長的報文,UDP就照樣發(fā)送擂找,即一次發(fā)送一個報文。因此蛙紫,應(yīng)用程序必須選擇合適大小的報文毡证。若報文太長,則IP層需要分片,降低效率气嫁。若太短,會是IP太小够坐。UDP對應(yīng)用層交下來的報文寸宵,既不合并,也不拆分元咙,而是保留這些報文的邊界梯影。這也就是說,應(yīng)用層交給UDP多長的報文庶香,UDP就照樣發(fā)送甲棍,即一次發(fā)送一個報文。
面向字節(jié)流的話赶掖,雖然應(yīng)用程序和TCP的交互是一次一個數(shù)據(jù)塊(大小不等)感猛,但TCP把應(yīng)用程序看成是一連串的無結(jié)構(gòu)的字節(jié)流。TCP有一個緩沖奢赂,當(dāng)應(yīng)用程序傳送的數(shù)據(jù)塊太長陪白,TCP就可以把它劃分短一些再傳送。如果應(yīng)用程序一次只發(fā)送一個字節(jié)膳灶,TCP也可以等待積累有足夠多的字節(jié)后再構(gòu)成報文段發(fā)送出去咱士。

TCP協(xié)議


  • Transmission Control Protocol,傳輸控制協(xié)議
  • 面向連接的協(xié)議
  • 需要三次握手建立連接
  • 需要四次揮手斷開連接
  • TCP報頭最小長度:20字節(jié)

三次握手的過程:


  1. 客戶端發(fā)送:SYN = 1, SEQ = X, 端口號
  2. 服務(wù)器回復(fù):SYN = 1, ACK = X + 1, SEQ = Y
  3. 客戶端發(fā)送:ACK = Y + 1, SEQ = X + 1

確認應(yīng)答信號ACK = 收到的SEQ + 1轧钓。
連接建立中序厉,同步信號SYN始終為1。連接建立后聋迎,同步信號SYN=0脂矫。

四次揮手過程


  1. A向B提出停止連接請求,F(xiàn)IN = 1
  2. B收到霉晕,ACK = 1
  3. B向A提出停止連接請求庭再,F(xiàn)IN = 1
  4. A收到捞奕,ACK = 1

優(yōu)點:


  • 可靠,穩(wěn)定
    1拄轻、傳遞數(shù)據(jù)前颅围,會有三次握手建立連接
    2、傳遞數(shù)據(jù)時恨搓,有確認院促、窗口、重傳斧抱、擁塞控制
    3常拓、傳遞數(shù)據(jù)后,會斷開連接節(jié)省系統(tǒng)資源

缺點:


  • 傳輸慢辉浦,效率低弄抬,占用系統(tǒng)資源高
    1、傳遞數(shù)據(jù)前宪郊,建立連接需要耗時
    2掂恕、傳遞數(shù)據(jù)時,確認弛槐、重傳懊亡、擁塞等會消耗大量時間以及CPU和內(nèi)存等硬件資源

  • 易被攻擊
    1、因為有確認機制乎串,三次握手等機制店枣,容易被人利用,實現(xiàn)DOS 灌闺、DDOS攻擊

如何保證接收的順序性:


TCP協(xié)議使用SEQ和ACK機制保證了順序性
TCP的每個報文都是有序號的艰争。確認應(yīng)答信號ACK=收到的SEQ+1

UDP協(xié)議


  • User Data Protocol,用戶數(shù)據(jù)包協(xié)議
  • 面向無連接的協(xié)議
  • UDP報頭只有8字節(jié)

簡介:


  • 傳輸數(shù)據(jù)之前源端和終端不建立連接桂对,當(dāng)它想傳送時就簡單地去抓取來自應(yīng)用程序的數(shù)據(jù)甩卓,并盡可能快的把它扔到網(wǎng)絡(luò)上
  • 在發(fā)送端,UDP傳送數(shù)據(jù)的速度僅僅是受應(yīng)用程序生成數(shù)據(jù)的速度蕉斜、計算機的能力和傳輸帶寬的限制
  • 在接收端逾柿,UDP把每個消息段放在隊列中,應(yīng)用程序每次從隊列中讀一個消息段
  • 由于傳輸數(shù)據(jù)不建立連接宅此,因此也就不需要維護連接狀態(tài)机错,包括收發(fā)狀態(tài)等,因此一臺服務(wù)機可同時向多個客戶機傳輸相同的消息
  • UDP信息包的標(biāo)題很短父腕,只有8個字節(jié)弱匪,相對于TCP的20個字節(jié)信息包的額外開銷很小
  • 吞吐量不受擁擠控制算法的調(diào)節(jié),只受應(yīng)用軟件生成數(shù)據(jù)的速率璧亮、傳輸帶寬萧诫、源端和終端主機性能的限制
  • UDP使用盡最大努力交付斥难,即不保證可靠交付,因此主機不需要維持復(fù)雜的鏈接狀態(tài)表帘饶。
  • UDP是面向報文的哑诊。發(fā)送方的UDP對應(yīng)用程序交下來的報文,在添加首部后就向下交付給IP層及刻。既不拆分镀裤,也不合并,而是保留這些報文的邊界缴饭,因此暑劝,應(yīng)用程序需要選擇合適的報文大小。

使用“ping”命令來測試兩臺主機之間TCP/IP通信是否正常茴扁,其實“ping”命令的原理就是向?qū)Ψ街鳈C發(fā)送UDP數(shù)據(jù)包铃岔,然后對方主機確認收到數(shù)據(jù)包,如果數(shù)據(jù)包是否到達的消息及時反饋回來峭火,那么網(wǎng)絡(luò)就是通的。

優(yōu)點:


  • 傳輸速率快
    1智嚷、傳輸數(shù)據(jù)前卖丸,不需要像TCP一樣建立連接
    2、傳輸數(shù)據(jù)時盏道,沒有確認稍浆、窗口、重傳猜嘱、擁塞控制等機制

  • 較安全
    1衅枫、由于沒有了TCP的一些機制,被攻擊者利用的漏洞就少了

缺點:


  • 不可靠朗伶,不穩(wěn)定
    1弦撩、由于沒有了TCP的機制,在數(shù)據(jù)傳輸時如果網(wǎng)絡(luò)不好论皆,很可能丟包

用UDP協(xié)議通訊時怎樣得知目標(biāo)機是否獲得了數(shù)據(jù)包


仿造TCP的做法益楼,每發(fā)一個UDP包,都在里面加一個SEQ序號点晴,接收方收到包后感凤,將SEQ序號回復(fù)給發(fā)送方。如果發(fā)送方在指定時間以內(nèi)沒有收到回應(yīng)粒督,說明丟包了陪竿。

TCP與UDP的區(qū)別


TCP UDP
TCP面向有鏈接 UDP面向無連接的通信服務(wù)
TCP提供可靠的通信傳輸 UDP不可靠,會丟包
TCP保證數(shù)據(jù)順序 UDP不保證
TCP數(shù)據(jù)無邊界 UDP有邊界
TCP速度快 UDP速度慢
TCP面向字節(jié)流 UDP面向報文
TCP一對一 UDP可以一對一,一對多
TCP報頭至少20字節(jié) UDP報頭8字節(jié)
TCP有流量控制屠橄,擁塞控制 UDP沒有

為什么UDP比TCP快


  1. TCP需要三次握手
  2. TCP有擁塞控制族跛,控制流量等機制

為什么TCP比UDP可靠


  1. TCP是面向有連接的捐康,建立連接之后才發(fā)送數(shù)據(jù);而UDP則不管對方存不存在都會發(fā)送數(shù)據(jù)庸蔼。
  2. TCP有確認機制解总,接收端每收到一個正確包都會回應(yīng)給發(fā)送端。超時或者數(shù)據(jù)包不完整的話發(fā)送端會重傳姐仅。UDP沒有花枫。因此可能丟包。

什么時候使用TCP


當(dāng)對網(wǎng)絡(luò)通訊質(zhì)量有要求的時候掏膏,比如:整個數(shù)據(jù)要準(zhǔn)確無誤的傳遞給對方劳翰,這往往用于一些要求可靠的應(yīng)用,比如HTTP馒疹、HTTPS佳簸、FTP等傳輸文件的協(xié)議,POP颖变、SMTP等郵件傳輸?shù)膮f(xié)議生均。
在日常生活中,常見使用TCP協(xié)議的應(yīng)用如下:
瀏覽器腥刹,用的HTTP
FlashFXP马胧,用的FTP
Outlook,用的POP衔峰、SMTP
Putty佩脊,用的Telnet、SSH
QQ文件傳輸

什么時候應(yīng)該使用UDP:


當(dāng)對網(wǎng)絡(luò)通訊質(zhì)量要求不高的時候垫卤,要求網(wǎng)絡(luò)通訊速度能盡量的快威彰,這時就可以使用UDP。
比如穴肘,日常生活中歇盼,常見使用UDP協(xié)議的應(yīng)用如下:
QQ語音
QQ視頻
TFTP

TCP無邊界,UDP有邊界


TCP無邊界

客戶端分多次發(fā)送數(shù)據(jù)給服務(wù)器梢褐,若服務(wù)器的緩沖區(qū)夠大旺遮,那么服務(wù)器端會在客戶端發(fā)送完之后一次性接收過來,所以是無邊界的盈咳;

UDP有邊界

客戶端每發(fā)送一次耿眉,服務(wù)器端就會接收一次,也就是說發(fā)送多少次就會接收多少次鱼响,因此是有邊界的鸣剪。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子筐骇,更是在濱河造成了極大的恐慌债鸡,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件铛纬,死亡現(xiàn)場離奇詭異厌均,居然都是意外死亡,警方通過查閱死者的電腦和手機告唆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進店門棺弊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人擒悬,你說我怎么就攤上這事模她。” “怎么了懂牧?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵侈净,是天一觀的道長。 經(jīng)常有香客問我僧凤,道長畜侦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任拼弃,我火速辦了婚禮夏伊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘吻氧。我一直安慰自己,他們只是感情好咏连,可當(dāng)我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布盯孙。 她就那樣靜靜地躺著,像睡著了一般祟滴。 火紅的嫁衣襯著肌膚如雪振惰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天垄懂,我揣著相機與錄音骑晶,去河邊找鬼。 笑死草慧,一個胖子當(dāng)著我的面吹牛桶蛔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播漫谷,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼仔雷,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起碟婆,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤电抚,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后竖共,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蝙叛,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年公给,在試婚紗的時候發(fā)現(xiàn)自己被綠了借帘。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡妓布,死狀恐怖姻蚓,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情匣沼,我是刑警寧澤狰挡,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站释涛,受9級特大地震影響加叁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜唇撬,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一它匕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧窖认,春花似錦豫柬、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至喝噪,卻和暖如春础嫡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背酝惧。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工榴鼎, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人晚唇。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓巫财,卻偏偏與公主長得像,于是被迫代替她去往敵國和親缺亮。 傳聞我的和親對象是個殘疾皇子翁涤,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,691評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 1桥言、TCP與UDP概述 TCP (Transmission Control Protocol)和UDP(User ...
    風(fēng)從虎云從龍118閱讀 885評論 0 8
  • TCP協(xié)議 Transmission Control Protocol,傳輸控制協(xié)議 面向連接的協(xié)議 需要三次握手...
    龍在阿里閱讀 473評論 0 4
  • TCP葵礼、UDP/IP是個協(xié)議組号阿,可分為三個層次:網(wǎng)絡(luò)層、傳輸層和應(yīng)用層鸳粉。 在網(wǎng)絡(luò)層有IP協(xié)議扔涧、ICMP協(xié)議、ARP...
    小貓仔閱讀 3,407評論 1 4
  • 從本節(jié)開始届谈,我們開始學(xué)習(xí)最重要的傳輸層枯夜。傳輸層位于OSI七層模型的第四層(從下往上)。顧名思義艰山,傳輸層的作用是實現(xiàn)...
    doudo閱讀 942評論 0 1
  • 1.尋找jar包 配置環(huán)境變量:mvn -v查看Maven的狀態(tài) 1湖雹、要配置jdk,maven3.3.9這個版本所...
    Explorer_Mi閱讀 491評論 0 0