計(jì)算機(jī)網(wǎng)絡(luò)-傳輸層TCP協(xié)議骨宠,UDP協(xié)議

一.概述

傳輸層位于七層模型的第四層,用戶功能里面的最底層钧汹,面向通信部分的最高層

傳輸層工作的位置是終端設(shè)備丈探,網(wǎng)絡(luò)中的路由器沒(méi)有傳輸層

傳輸層負(fù)責(zé)管理端到端的通信連接

進(jìn)程與進(jìn)程的通信

使用端口號(hào)(Port)來(lái)標(biāo)記不同的網(wǎng)絡(luò)進(jìn)程

端口(Port)使用16比特位表示(0~65535)


UDP協(xié)議

UDP(User Datagram Protocol)用戶數(shù)據(jù)報(bào)協(xié)議

UDP協(xié)議的位置

UDP協(xié)議的首部

UDP協(xié)議頭部

源端口號(hào):源機(jī)器使用網(wǎng)絡(luò)的進(jìn)程

目的端口號(hào):目的機(jī)器正在使用的網(wǎng)絡(luò)進(jìn)程

UDP長(zhǎng)度:UDP數(shù)據(jù)報(bào)的長(zhǎng)度

校驗(yàn)和:檢測(cè)UDP數(shù)據(jù)報(bào)在傳輸過(guò)程中是否出錯(cuò)

UDP特點(diǎn)

UPD是無(wú)連接協(xié)議

UDP不能保證可靠的交付數(shù)據(jù)(想發(fā)就發(fā),無(wú)法保證數(shù)據(jù)在網(wǎng)絡(luò)中是否丟失)

UDP是面向報(bào)文傳輸?shù)模嫦驁?bào)文:應(yīng)用層傳來(lái)的數(shù)據(jù)報(bào))

UDP沒(méi)有擁塞控制(把網(wǎng)絡(luò)比做一條公路崭孤,UDP不管網(wǎng)絡(luò)是否發(fā)生擁塞类嗤,都會(huì)盡量把數(shù)據(jù)交付出去給網(wǎng)絡(luò))

UDP的首部開(kāi)銷(xiāo)很小(首部開(kāi)銷(xiāo):源端口號(hào)辨宠,目的端口號(hào)遗锣,數(shù)據(jù)長(zhǎng)度,校驗(yàn)和這四部分)

TCP協(xié)議

TCP(Transmission Control Protocol)傳輸控制協(xié)議

TCP協(xié)議的特點(diǎn)

TCP是面向連接的協(xié)議

TCP的一個(gè)連接有兩端(點(diǎn)對(duì)點(diǎn)通信)

TCP提供可靠的傳輸服務(wù)

TCP協(xié)議提供全雙工的通信(全雙工:兩端可以同時(shí)發(fā)出數(shù)據(jù)和接收數(shù)據(jù))

TCP是面向字節(jié)流的協(xié)議(UDP是面向數(shù)據(jù)報(bào)的協(xié)議嗤形,TCP面向字節(jié)流精偿,字節(jié)流是流入進(jìn)程和流出進(jìn)程的字節(jié)序列,TCP不把應(yīng)用層的數(shù)據(jù)看作一整塊赋兵,而是看作一系列的字節(jié)流笔咽,可能會(huì)對(duì)用戶數(shù)據(jù)進(jìn)行拆分和合并進(jìn)行發(fā)送)

可靠傳輸?shù)幕驹?/h3>

停止等待協(xié)議,連續(xù)ARQ協(xié)議

停止等待協(xié)議

發(fā)送方發(fā)送消息到接收方霹期,接收方接收到消息后生成確認(rèn)消息叶组,發(fā)送給發(fā)送方,發(fā)送方收到確認(rèn)消息后再生成消息2發(fā)送給接收方历造。在這幾次消息發(fā)送和接收過(guò)程中甩十,雙方都要等待對(duì)方的消息接收到之后再發(fā)送新的消息。發(fā)送方發(fā)送消息后就停止生成新的消息吭产,等待接收方的確認(rèn)消息到達(dá)發(fā)送方后再生成第二個(gè)消息侣监。

連續(xù)ARQ協(xié)議

//待補(bǔ)充

滑動(dòng)窗口協(xié)議

//待補(bǔ)充

TCP報(bào)文頭部

其他部分待補(bǔ)充...

TCP標(biāo)記

TCP連接的建立

設(shè)主機(jī)B接收方運(yùn)行一個(gè)服務(wù)器進(jìn)程,它先發(fā)出一個(gè)被動(dòng)打開(kāi)命令臣淤,告訴它的TCP要準(zhǔn)備接收客戶進(jìn)程的連續(xù)請(qǐng)求橄霉,然后服務(wù)進(jìn)程就處于聽(tīng)的狀態(tài)。不斷檢測(cè)是否有客戶進(jìn)程發(fā)起連續(xù)請(qǐng)求邑蒋,如有姓蜂,作出響應(yīng)按厘。設(shè)主機(jī)A作為發(fā)送方,它先向自己的TCP發(fā)出主動(dòng)打開(kāi)的命令覆糟,表明要向某個(gè)IP地址的某個(gè)端口建立運(yùn)輸連接刻剥≌诳В客戶端發(fā)送的第一個(gè)數(shù)據(jù)包是一個(gè)請(qǐng)求報(bào)文段滩字,報(bào)文內(nèi)容包括同步位SYN=1,另一個(gè)是初始序號(hào)seq=x.TCP規(guī)定御吞,SYN=1的報(bào)文不能攜帶數(shù)據(jù)麦箍,但是消耗一個(gè)序列號(hào)√罩椋客戶端發(fā)送了這個(gè)報(bào)文之后挟裂,進(jìn)入SYN-SENT(同步已發(fā)送)狀態(tài)。

服務(wù)端已收到這個(gè)數(shù)據(jù)包之后揍诽,知道客戶端請(qǐng)求連接诀蓉,如果當(dāng)前有資源,可以同意連接暑脆,則給客戶端發(fā)送確認(rèn)報(bào)文渠啤。確認(rèn)報(bào)文的內(nèi)容包括SYN=1(沒(méi)有變化),seq=y(服務(wù)端的序列號(hào))添吗,新增ACK=1沥曹,ack=x+1(客戶端序列號(hào)+1)這里的SYN=1,所以報(bào)文不能攜帶數(shù)據(jù)碟联,同樣消耗了服務(wù)端的一個(gè)序列號(hào)妓美,然后服務(wù)端進(jìn)入了SYN-RCVD(同步收到)狀態(tài)。

客戶端收到服務(wù)端的確認(rèn)報(bào)文后鲤孵,還需要給服務(wù)端發(fā)送一個(gè)確認(rèn)報(bào)文壶栋。這個(gè)報(bào)文的內(nèi)容是ACK=1,seq=x+1,ack=y+1.這里沒(méi)有了SYN字段普监,可以攜帶數(shù)據(jù)贵试。客戶端確認(rèn)報(bào)文發(fā)送出去之后鹰椒,客戶端進(jìn)入ESTABLISKED(已建立連接)

服務(wù)端接收到這個(gè)數(shù)據(jù)包之后锡移,也進(jìn)入了ESTABLISHED(已建立連接)狀態(tài)。

為什么發(fā)送方要發(fā)出第三個(gè)確認(rèn)報(bào)文呢漆际?

首先建立連接淆珊,必須要有兩次握手吧,客戶端主動(dòng)一次奸汇,告知服務(wù)端施符,我想和你建立連接往声,然后看服務(wù)端是否同意。然后如果服務(wù)端同意的話戳吝,得給一個(gè)回復(fù)浩销,然后開(kāi)始等待客戶端的數(shù)據(jù)包,這就是兩次握手听哭。如果這個(gè)時(shí)候就建立連接慢洋,客戶端開(kāi)始給服務(wù)端發(fā)送數(shù)據(jù)包,在正常情況下沒(méi)啥問(wèn)題陆盘。但是由于網(wǎng)絡(luò)并不是100%任何時(shí)候都穩(wěn)定普筹,一旦因?yàn)槟承┰驅(qū)е路?wù)端發(fā)送給客戶端的確認(rèn)報(bào)文丟失,那這個(gè)時(shí)候客戶端收不到確認(rèn)數(shù)據(jù)包隘马,會(huì)誤以為服務(wù)端不同意連接太防,不會(huì)給服務(wù)端發(fā)送數(shù)據(jù)包,但是這時(shí)候服務(wù)端已經(jīng)在等待了酸员。這樣的差錯(cuò)會(huì)導(dǎo)致服務(wù)端一直處于等待狀態(tài)蜒车,浪費(fèi)資源。

? ? ? ? 而三次握手的話幔嗦,客戶端在確認(rèn)服務(wù)端同意之后再發(fā)一次數(shù)據(jù)包給服務(wù)端酿愧,告知服務(wù)端,不管怎么樣我都會(huì)給你發(fā)送數(shù)據(jù)包的崭添。因?yàn)門(mén)CP協(xié)議中寓娩,建立連接之后,每一次發(fā)送數(shù)據(jù)包客戶端都會(huì)等待服務(wù)端的確認(rèn)信息呼渣,如果收不到某一個(gè)數(shù)據(jù)包的確認(rèn)信息棘伴,客戶端就會(huì)重發(fā)這個(gè)數(shù)據(jù)包。這樣就不會(huì)發(fā)生差錯(cuò)了屁置。

已經(jīng)失效的鏈接請(qǐng)求報(bào)文傳送到對(duì)方引起錯(cuò)誤

TCP連接的釋放

?當(dāng)TCP連接需要釋放時(shí)焊夸,客戶端和服務(wù)端都是處于ESTABLISHED(已建立連接)狀態(tài)。此時(shí)蓝角,客戶端數(shù)據(jù)發(fā)送完畢阱穗,想要結(jié)束連接,主動(dòng)發(fā)出連接釋放請(qǐng)求數(shù)據(jù)包使鹅。這個(gè)數(shù)據(jù)包內(nèi)容:Fin=1揪阶,seq=u(這個(gè)u是這個(gè)數(shù)據(jù)包之前一個(gè)數(shù)據(jù)包的序列號(hào)+1),客戶端進(jìn)入FIN-WAIT-1(終止等待1)狀態(tài)患朱,不再發(fā)送數(shù)據(jù)包鲁僚,等待服務(wù)端的確認(rèn)。

服務(wù)端接收到釋放數(shù)據(jù)包之后發(fā)出確認(rèn),確認(rèn)包中內(nèi)容:確認(rèn)號(hào)ack=u+1冰沙,序列號(hào)seq=v(這個(gè)v是服務(wù)端上一個(gè)發(fā)送的數(shù)據(jù)包的序列號(hào)+1)侨艾,另一個(gè)是ACK=1。然后服務(wù)端進(jìn)入CLOSE-WAIT(關(guān)閉等待)拓挥。這個(gè)時(shí)候客戶端到服務(wù)端的連接已經(jīng)結(jié)束了唠梨。但是TCP是全雙工通信,因?yàn)檫@個(gè)時(shí)候是客戶端主動(dòng)發(fā)起的結(jié)束侥啤,在服務(wù)端這邊可能還存在著數(shù)據(jù)沒(méi)有完全發(fā)送給客戶端当叭,所以服務(wù)端到客戶端仍然沒(méi)有結(jié)束≡钙澹客戶端已經(jīng)不能在發(fā)送數(shù)據(jù)了科展,如果服務(wù)端還有數(shù)據(jù)發(fā)送過(guò)來(lái),客戶端仍然要接收糠雨。

? ? ? ? 客戶端收到服務(wù)端的確認(rèn)之后,進(jìn)入FIN-2(終止等待2)狀態(tài)徘跪,等待服務(wù)端發(fā)送服務(wù)端發(fā)器的連接釋放數(shù)據(jù)包甘邀。這時(shí)候服務(wù)端可能還有一些數(shù)據(jù)包要發(fā)送給客戶端,客戶端一一接收垮庐。最后松邪,沒(méi)有數(shù)據(jù)要發(fā)送了之后,服務(wù)端發(fā)送連接釋放數(shù)據(jù)包哨查,這個(gè)數(shù)據(jù)包內(nèi)容:FIN=1逗抑,ACK=1,seq=w(因?yàn)樵诜?wù)端回復(fù)客戶端的連接請(qǐng)求(數(shù)據(jù)包的序列號(hào)是v)之后寒亥,可能仍然有其他數(shù)據(jù)包要發(fā)送邮府,所以這里的w不一定是v+1),ack=u+1(確認(rèn)號(hào)和上次回復(fù)客戶端的請(qǐng)求釋放連接的確認(rèn)號(hào)一樣)溉奕。接著服務(wù)端進(jìn)入LAST-ACK(最后確認(rèn)狀態(tài))褂傀,等待客戶端的確認(rèn)。

客戶端收到服務(wù)端的連接釋放數(shù)據(jù)包之后加勤,發(fā)出一個(gè)確認(rèn)數(shù)據(jù)包仙辟,內(nèi)容:ACK=1,seq=u+1鳄梅,ack = w+1叠国。然后客戶端進(jìn)入TIME-WAIT(時(shí)間等待)狀態(tài)。這個(gè)時(shí)候TCP還沒(méi)有釋放戴尸。仍需要經(jīng)過(guò)時(shí)間等待計(jì)時(shí)器設(shè)置的時(shí)間2MSL后粟焊,客戶端才會(huì)進(jìn)入CLOSED狀態(tài)。MSL稱(chēng)為最長(zhǎng)報(bào)文段壽命。RFC793建議把這個(gè)值設(shè)為2分鐘吆玖,那這樣的話筒溃,在客戶端收到服務(wù)端的連接釋放數(shù)據(jù)包之后,需要等待4分鐘才能進(jìn)入CLOSED狀態(tài)沾乘。這顯然時(shí)間太長(zhǎng)了怜奖,不過(guò)這個(gè)值設(shè)為2分鐘也只是建議,還是可以設(shè)置適合的時(shí)間的翅阵。最后服務(wù)端收到這個(gè)客戶端的確認(rèn)包之后就進(jìn)入了CLOSED狀態(tài)歪玲。顯然,服務(wù)端一般先于客戶端進(jìn)入關(guān)閉狀態(tài)掷匠。

之所以客戶端需要等待2MSL時(shí)間才完全結(jié)束TCP連接滥崩,原因有兩個(gè):

一、為了保證客戶端發(fā)送的最后一個(gè)確認(rèn)包能正確到達(dá)服務(wù)端讹语。因?yàn)槿绻捎诰W(wǎng)絡(luò)原因丟失的話钙皮,服務(wù)端會(huì)重新發(fā)送連接釋放數(shù)據(jù)包,在等待過(guò)程中顽决,如果真的發(fā)生這種情況就可以得到處理短条。客戶端每接收到一次服務(wù)端發(fā)送來(lái)的接釋放數(shù)據(jù)包都會(huì)重新設(shè)置時(shí)間等待計(jì)時(shí)器才菠,然后等待2MSL時(shí)間才完全結(jié)束TCP連接茸时。

二、等待才2MSL時(shí)間完全結(jié)束TCP連接赋访,可以避免再次開(kāi)啟TCP連接的時(shí)候收到上一次TCP連接存在網(wǎng)絡(luò)中的數(shù)據(jù)包可都,顯然這樣的數(shù)據(jù)包不是屬于本次連接的,是無(wú)效的數(shù)據(jù)包蚓耽。

? ? ? ?之所以需要四次握手來(lái)釋放連接渠牲,TCP是全雙工通信,支持兩個(gè)方向通信田晚,所以結(jié)束的時(shí)候嘱兼,每個(gè)方向?yàn)榱舜_保數(shù)據(jù)都能完全從一端到達(dá)另一端,所以結(jié)束的時(shí)候贤徒,一端發(fā)起結(jié)束申請(qǐng)數(shù)據(jù)包芹壕,另一端都要發(fā)送確認(rèn)數(shù)據(jù)包。兩個(gè)方向要分開(kāi)結(jié)束接奈,每次結(jié)束需要兩次握手踢涌,所以最終TCP的結(jié)束需要4次握手。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末序宦,一起剝皮案震驚了整個(gè)濱河市睁壁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖潘明,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件行剂,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡钳降,警方通過(guò)查閱死者的電腦和手機(jī)厚宰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)遂填,“玉大人铲觉,你說(shuō)我怎么就攤上這事∠偶幔” “怎么了撵幽?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)礁击。 經(jīng)常有香客問(wèn)我盐杂,道長(zhǎng),這世上最難降的妖魔是什么客税? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任况褪,我火速辦了婚禮,結(jié)果婚禮上更耻,老公的妹妹穿的比我還像新娘。我一直安慰自己捏膨,他們只是感情好秧均,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著号涯,像睡著了一般目胡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上链快,一...
    開(kāi)封第一講書(shū)人閱讀 49,741評(píng)論 1 289
  • 那天誉己,我揣著相機(jī)與錄音,去河邊找鬼域蜗。 笑死巨双,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的霉祸。 我是一名探鬼主播筑累,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼丝蹭!你這毒婦竟也來(lái)了慢宗?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎镜沽,沒(méi)想到半個(gè)月后敏晤,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡缅茉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年嘴脾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宾舅。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡统阿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出筹我,到底是詐尸還是另有隱情扶平,我是刑警寧澤,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布蔬蕊,位于F島的核電站结澄,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏岸夯。R本人自食惡果不足惜麻献,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望猜扮。 院中可真熱鬧勉吻,春花似錦、人聲如沸旅赢。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)煮盼。三九已至短纵,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間僵控,已是汗流浹背香到。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留报破,地道東北人悠就。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像泛烙,于是被迫代替她去往敵國(guó)和親理卑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

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