TCP 與 UDP

TCP和UDP是OSI模型中的運(yùn)輸層中的協(xié)議穆咐。TCP提供可靠的通信傳輸,而UDP則常被用于廣播和細(xì)節(jié)控制交給應(yīng)用的通信傳輸。


1.TCP

TCP(Transmission Control Protocol,傳輸控制協(xié)議)是基于連接的協(xié)議挪挤,也就是說,在正式收發(fā)數(shù)據(jù)前关翎,必須和對(duì)方建立可靠的連接扛门。一個(gè)TCP連接必須要經(jīng)過三次“對(duì)話”才能建立起來,而釋放時(shí)需要四次對(duì)話纵寝。即三次握手论寨、四次揮手:

三次握手,大致流程如下:

  • 第一次握手:起初兩端都處于CLOSED關(guān)閉狀態(tài)店雅,Client將標(biāo)志位SYN置為1政基,隨機(jī)產(chǎn)生一個(gè)值seq=x,并將該數(shù)據(jù)包發(fā)送給Server闹啦,Client進(jìn)入SYN-SENT狀態(tài)沮明,等待Server確認(rèn);
  • 第二次握手:Server收到數(shù)據(jù)包后由標(biāo)志位SYN=1得知Client請(qǐng)求建立連接窍奋,Server將標(biāo)志位SYN和ACK都置為1荐健,ack=x+1酱畅,隨機(jī)產(chǎn)生一個(gè)值seq=y,并將該數(shù)據(jù)包發(fā)送給Client以確認(rèn)連接請(qǐng)求江场,Server進(jìn)入SYN-RCVD狀態(tài)纺酸,此時(shí)操作系統(tǒng)為該TCP連接分配TCP緩存和變量;
  • 第三次握手:Client收到確認(rèn)后址否,檢查ack是否為x+1餐蔬,ACK是否為1,如果正確則將標(biāo)志位ACK置為1佑附,ack=y+1樊诺,并且此時(shí)操作系統(tǒng)為該TCP連接分配TCP緩存和變量,并將該數(shù)據(jù)包發(fā)送給Server音同,Server檢查ack是否為y+1词爬,ACK是否為1,如果正確則連接建立成功权均,Client和Server進(jìn)入ESTABLISHED狀態(tài)顿膨,完成三次握手,隨后Client和Server就可以開始傳輸數(shù)據(jù)叽赊。
三次握手

四次揮手恋沃,大致流程如下:

  • A的應(yīng)用進(jìn)程先向其TCP發(fā)出連接釋放報(bào)文段(FIN=1,序號(hào)seq=u)蛇尚,并停止再發(fā)送數(shù)據(jù)芽唇,主動(dòng)關(guān)閉TCP連接,進(jìn)入FIN-WAIT-1(終止等待1)狀態(tài)取劫,等待B的確認(rèn)。
  • B收到連接釋放報(bào)文段后即發(fā)出確認(rèn)報(bào)文段研侣,(ACK=1谱邪,確認(rèn)號(hào)ack=u+1,序號(hào)seq=v)庶诡,B進(jìn)入CLOSE-WAIT(關(guān)閉等待)狀態(tài)惦银,此時(shí)的TCP處于半關(guān)閉狀態(tài),A到B的連接釋放末誓。
  • A收到B的確認(rèn)后扯俱,進(jìn)入FIN-WAIT-2(終止等待2)狀態(tài),等待B發(fā)出的連接釋放報(bào)文段喇澡。
  • B沒有要向A發(fā)出的數(shù)據(jù)迅栅,B發(fā)出連接釋放報(bào)文段(FIN=1,ACK=1晴玖,序號(hào)seq=w读存,確認(rèn)號(hào)ack=u+1)为流,B進(jìn)入LAST-ACK(最后確認(rèn))狀態(tài),等待A的確認(rèn)让簿。
  • A收到B的連接釋放報(bào)文段后敬察,對(duì)此發(fā)出確認(rèn)報(bào)文段(ACK=1,seq=u+1尔当,ack=w+1)莲祸,A進(jìn)入TIME-WAIT(時(shí)間等待)狀態(tài)。此時(shí)TCP未釋放掉椭迎,需要經(jīng)過時(shí)間等待計(jì)時(shí)器設(shè)置的時(shí)間2MSL后锐帜,A才進(jìn)入CLOSED狀態(tài)。
四次揮手

其中侠碧,SYN表示建立連接抹估,F(xiàn)IN表示關(guān)閉連接,ACK表示響應(yīng)弄兜,PSH表示有 DATA數(shù)據(jù)傳輸药蜻,RST表示連接重置

握手只要三步,但揮手需要四步的原因:

  • 當(dāng)Server端收到Client端的SYN連接請(qǐng)求報(bào)文后替饿,可以直接發(fā)送SYN+ACK報(bào)文语泽。其中ACK報(bào)文是用來應(yīng)答的,SYN報(bào)文是用來同步的视卢。但是關(guān)閉連接時(shí)踱卵,當(dāng)Server端收到FIN報(bào)文時(shí),很可能并不會(huì)立即關(guān)閉SOCKET据过,所以只能先回復(fù)一個(gè)ACK報(bào)文惋砂,告訴Client端,"你發(fā)的FIN報(bào)文我收到了"绳锅。只有等到我Server端所有的報(bào)文都發(fā)送完了西饵,我才能發(fā)送FIN報(bào)文,因此不能一起發(fā)送鳞芙。故需要四步揮手眷柔。

2.UDP

UDP(User Data Protocol,用戶數(shù)據(jù)報(bào)協(xié)議)是與TCP相對(duì)應(yīng)的協(xié)議原朝。它是面向非連接的協(xié)議驯嘱,它不與對(duì)方建立連接,而是直接就把數(shù)據(jù)包發(fā)送過去喳坠!

3.編程步驟

TCP服務(wù)器端一般步驟是:
  1鞠评、創(chuàng)建一個(gè)socket,用函數(shù)socket()丙笋;
  2谢澈、設(shè)置socket屬性煌贴,用函數(shù)setsockopt(); * 可選
  3、綁定IP地址锥忿、端口等信息到socket上牛郑,用函數(shù)bind();
  4、開啟監(jiān)聽敬鬓,用函數(shù)listen()淹朋;
  5、接收客戶端上來的連接钉答,用函數(shù)accept()础芍;
  6、收發(fā)數(shù)據(jù)数尿,用函數(shù)send()和recv()仑性,或者read()和write();
  7、關(guān)閉網(wǎng)絡(luò)連接右蹦;
  8诊杆、關(guān)閉監(jiān)聽;

TCP客戶端一般步驟是:
  1何陆、創(chuàng)建一個(gè)socket晨汹,用函數(shù)socket();
  2贷盲、設(shè)置socket屬性淘这,用函數(shù)setsockopt();* 可選
  3、綁定IP地址巩剖、端口等信息到socket上铝穷,用函數(shù)bind();* 可選
  4、設(shè)置要連接的對(duì)方的IP地址和端口等屬性佳魔;
  5氧骤、連接服務(wù)器,用函數(shù)connect()吃引;
  6、收發(fā)數(shù)據(jù)刽锤,用函數(shù)send()和recv()镊尺,或者read()和write();
  7、關(guān)閉網(wǎng)絡(luò)連接并思;


TCP

與之對(duì)應(yīng)的UDP編程步驟要簡單許多庐氮,分別如下:
  UDP編程的服務(wù)器端一般步驟是:
  1、創(chuàng)建一個(gè)socket宋彼,用函數(shù)socket()弄砍;
  2仙畦、設(shè)置socket屬性,用函數(shù)setsockopt();* 可選
  3音婶、綁定IP地址慨畸、端口等信息到socket上,用函數(shù)bind();
  4衣式、循環(huán)接收數(shù)據(jù)寸士,用函數(shù)recvfrom();
  5、關(guān)閉網(wǎng)絡(luò)連接碴卧;

UDP編程的客戶端一般步驟是:
  1弱卡、創(chuàng)建一個(gè)socket,用函數(shù)socket()住册;
  2婶博、設(shè)置socket屬性,用函數(shù)setsockopt();* 可選
  3荧飞、綁定IP地址凡人、端口等信息到socket上,用函數(shù)bind();* 可選
  4垢箕、設(shè)置對(duì)方的IP地址和端口等屬性;
  5划栓、發(fā)送數(shù)據(jù),用函數(shù)sendto();
  6条获、關(guān)閉網(wǎng)絡(luò)連接忠荞;


UDP

3.TCP與UDP區(qū)別

  • TCP面向連接;UDP是無連接的,即發(fā)送數(shù)據(jù)之前不需要建立連接
  • TCP提供可靠的服務(wù)帅掘。也就是說委煤,通過TCP連接傳送的數(shù)據(jù),無差錯(cuò)修档,不丟失碧绞,不重復(fù),且按序到達(dá);UDP盡最大努力交付吱窝,即不保證可靠交付
  • TCP通過校驗(yàn)和讥邻,重傳控制,序號(hào)標(biāo)識(shí)院峡,滑動(dòng)窗口兴使、確認(rèn)應(yīng)答實(shí)現(xiàn)可靠傳輸。如丟包時(shí)的重發(fā)控制照激,還可以對(duì)次序亂掉的分包進(jìn)行順序控制发魄。
  • UDP具有較好的實(shí)時(shí)性,工作效率比TCP高,適用于對(duì)高速傳輸和實(shí)時(shí)性有較高的通信或廣播通信励幼。
  • 每一條TCP連接只能是點(diǎn)到點(diǎn)的;UDP支持一對(duì)一汰寓,一對(duì)多,多對(duì)一和多對(duì)多的交互通信
  • TCP對(duì)系統(tǒng)資源要求較多苹粟,UDP對(duì)系統(tǒng)資源要求較少有滑。

參考:
https://blog.csdn.net/xiaobangkuaipao/article/details/76793702
https://www.cnblogs.com/HPAHPA/p/7737641.html
https://www.cnblogs.com/Andya/p/7272462.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市六水,隨后出現(xiàn)的幾起案子俺孙,更是在濱河造成了極大的恐慌,老刑警劉巖掷贾,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件睛榄,死亡現(xiàn)場離奇詭異,居然都是意外死亡想帅,警方通過查閱死者的電腦和手機(jī)场靴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來港准,“玉大人旨剥,你說我怎么就攤上這事∏掣祝” “怎么了轨帜?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長衩椒。 經(jīng)常有香客問我蚌父,道長,這世上最難降的妖魔是什么毛萌? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任苟弛,我火速辦了婚禮,結(jié)果婚禮上阁将,老公的妹妹穿的比我還像新娘膏秫。我一直安慰自己,他們只是感情好做盅,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布缤削。 她就那樣靜靜地躺著,像睡著了一般吹榴。 火紅的嫁衣襯著肌膚如雪僻他。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天腊尚,我揣著相機(jī)與錄音,去河邊找鬼满哪。 笑死婿斥,一個(gè)胖子當(dāng)著我的面吹牛劝篷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播民宿,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼娇妓,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了活鹰?” 一聲冷哼從身側(cè)響起哈恰,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎志群,沒想到半個(gè)月后着绷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡锌云,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年荠医,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片桑涎。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡彬向,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出攻冷,到底是詐尸還是另有隱情娃胆,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布等曼,位于F島的核電站里烦,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏涉兽。R本人自食惡果不足惜招驴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望枷畏。 院中可真熱鬧别厘,春花似錦、人聲如沸拥诡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽渴肉。三九已至冗懦,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間仇祭,已是汗流浹背披蕉。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人没讲。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓猾漫,卻偏偏與公主長得像蹋绽,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

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