網(wǎng)絡(luò)架構(gòu)系列1--TCP/IP詳解

不詩(shī)意的女程序媛不是好廚師~
轉(zhuǎn)載請(qǐng)注明出處壮韭,F(xiàn)rom李詩(shī)雨---https://blog.csdn.net/cjm2484836553/article/details/103930596

網(wǎng)絡(luò)架構(gòu)量没,可以算得上是面試的寵兒了,我也廢話不多說(shuō),直接上重點(diǎn)页滚。

本節(jié)內(nèi)容思維導(dǎo)圖

1.計(jì)算機(jī)網(wǎng)絡(luò)分層▲(面試點(diǎn))

1.1 OSI七層網(wǎng)絡(luò)模型 和 TCP/IP參考模型

  • 重點(diǎn)1:OSI七層網(wǎng)絡(luò)模型 和 TCP/IP參考模型 崔步,它可是面試的敲門(mén)磚,所以大概的內(nèi)容要記住娱俺。

(PS:作為貼心小棉襖的我稍味,已經(jīng)畫(huà)了個(gè)好看的圖,方便大家背誦~)

image

關(guān)于OSI模型 和 TCP/IP模型荠卷,大家可以這么理解模庐。

OSI七層模型 偏向于一種 理想化的,就好比學(xué)術(shù)界定義的油宜。而TCP/IP四層模型掂碱,則是工業(yè)界中實(shí)際使用的。

  • 重點(diǎn)2: 大家要知道 TCP/IP是一組協(xié)議的代名詞验庙,它還包括許多協(xié)議顶吮,組成了TCP/IP協(xié)議簇。

    從字面上來(lái)看粪薛,有人可能會(huì)認(rèn)為 TCP/IP 是指 TCP 和 IP 兩種協(xié)議悴了。實(shí)際生活當(dāng)中,有時(shí)也確實(shí)就是指這兩種協(xié)議。但是在很多情況下湃交,它只是利用 IP 進(jìn)行通信時(shí)所必須用到的協(xié)議群的統(tǒng)稱(chēng)熟空。具體來(lái)說(shuō),IP 或 ICMP搞莺、TCP 或 UDP息罗、TELNET 或 FTP、以及 HTTP 等都屬于 TCP/IP 協(xié)議才沧。

    此外我們還要知道迈喉,在TCP/IP協(xié)議簇中, IP位于網(wǎng)絡(luò)層温圆,TCP位于傳輸層挨摸,HTTP位于應(yīng)用層

    在這里插入圖片描述

    在這里插入圖片描述

2.IP地址 和 端口號(hào)

這里有2個(gè)概念需要我們來(lái)解釋一下岁歉,因?yàn)樵诿嬖囍灰灿锌赡軙?huì)提到得运。

2.1 IP地址

在這里插入圖片描述

為了實(shí)現(xiàn)網(wǎng)絡(luò)中不同終端之間的通信,每個(gè)終端必須有一個(gè)唯一的表示锅移,它就是IP地址熔掺。

  • 所以,如果問(wèn) 兩臺(tái)終端是如何通過(guò)網(wǎng)絡(luò)進(jìn)行通信的非剃?

    那你要知道答案是 IP地址置逻。

    可不是MAC地址哈,因?yàn)閙ac地址只在局域網(wǎng)有效备绽,不能出局域網(wǎng)诽偷。

2.2 端口號(hào)?(暗涉一道面試題)

在這里插入圖片描述

我們可以把端口號(hào),理解為門(mén)牌號(hào)疯坤。

通過(guò)ip地址,我們可以知道我們要訪問(wèn)的是哪臺(tái)計(jì)算機(jī)深浮。但是一臺(tái)計(jì)算機(jī)可以同時(shí)運(yùn)行多個(gè)程序压怠,我們?nèi)绾沃酪L問(wèn)哪個(gè)應(yīng)用程序呢?這就要通過(guò)端口號(hào)了飞苇。

端口號(hào)用來(lái)識(shí)別同一臺(tái)計(jì)算機(jī)中進(jìn)行通信的不同應(yīng)用程序菌瘫。因此,它也被稱(chēng)為程序地址布卡。

在這里插入圖片描述

端口號(hào)規(guī)定為16位雨让,即允許一個(gè)IP主機(jī)有2的16次方65535個(gè)不同的端口。其中:

  • 0~1023:分配給系統(tǒng)的端口號(hào)

    我們不可以亂用!!
    常用協(xié)議使用的端口:HTTP:80忿等,F(xiàn)TP:21栖忠,TELNET:23

  • 1024~49151:登記端口號(hào),主要是讓第三方應(yīng)用使用

    但是必須在IANA(互聯(lián)網(wǎng)數(shù)字分配機(jī)構(gòu))按照規(guī)定手續(xù)登記,

  • 49152~65535:短暫端口號(hào)庵寞,是留給客戶(hù)進(jìn)程選擇暫時(shí)使用狸相,一個(gè)進(jìn)程使用完就可以供其他進(jìn)程使用。

在Socket使用時(shí)捐川,可以用1024~65535的端口號(hào)

?那這里就隱藏了一個(gè)面試題:

既然一個(gè)ip主機(jī)的端口只有65535個(gè)脓鹃,那為什么可以做到有幾百萬(wàn)的socket鏈接呢?

哈哈古沥,這是因?yàn)槿秤遥覀兊耐ㄐ挪皇怯?端口號(hào) 一人決定的呀。我們的通信識(shí)別一個(gè)通信 是由 5元組 (源IP地址岩齿、目標(biāo)IP地址太颤、源端口號(hào)、目標(biāo)端口 和 協(xié)議號(hào))來(lái)一起決定的纯衍。

在這里插入圖片描述

如圖:

① 和② 的通信是在兩臺(tái)計(jì)算機(jī)上進(jìn)行的栋齿。它們的目標(biāo)端口號(hào)相同,都是80襟诸。這里可以根據(jù)源端口號(hào)加以區(qū)分瓦堵。

① 和③ 的目標(biāo)端口號(hào)和源端口號(hào)完全相同,但它們各自的源 IP 地址不同歌亲。

此外菇用,當(dāng) IP 地址和端口號(hào)全都一樣時(shí),我們還可以通過(guò)協(xié)議號(hào)來(lái)區(qū)分(TCP 和 UDP)陷揪。

3. TCP和UDP

TCP/IP 中有兩個(gè)具有代表性的傳輸層協(xié)議惋鸥,分別是 TCP 和 UDP。

3.1 TCP的定義和特點(diǎn)

  • 定義:Transmission Control Protocol悍缠,即傳輸控制協(xié)議卦绣,是一種傳輸層通信協(xié)議

    基于TCP的應(yīng)用層協(xié)議有FTP、Telnet飞蚓、SMTP滤港、HTTP、POP3與DNS趴拧。

  • 特點(diǎn):面向連接溅漾、面向字節(jié)流、全雙工通信著榴、可靠

    • 面向連接:指的是要使用TCP傳輸數(shù)據(jù)添履,必須先建立TCP連接,傳輸完成后釋放連接脑又,就像打電話一樣必須先撥號(hào)建立一條連接暮胧,打完后掛機(jī)釋放連接锐借。
    • 全雙工通信:即一旦建立了TCP連接,通信雙方可以在任何時(shí)候都能發(fā)送數(shù)據(jù)叔壤。
    • 可靠的:指的是通過(guò)TCP連接傳送的數(shù)據(jù)瞎饲,無(wú)差錯(cuò),不丟失炼绘,不重復(fù)嗅战,并且按序到達(dá)。
    • 面向字節(jié)流:流俺亮,指的是流入到進(jìn)程或從進(jìn)程流出的字符序列驮捍。簡(jiǎn)單來(lái)說(shuō),雖然有時(shí)候要傳輸?shù)臄?shù)據(jù)流太大脚曾,TCP報(bào)文長(zhǎng)度有限制东且,不能一次傳輸完,要把它分為好幾個(gè)數(shù)據(jù)塊本讥,但是由于可靠性保證珊泳,接收方可以按順序接收數(shù)據(jù)塊然后重新組成分塊之前的數(shù)據(jù)流,所以TCP看起來(lái)就像直接互相傳輸字節(jié)流一樣拷沸,面向字節(jié)流色查。

3.2 UDP的定義和特點(diǎn)

  • 定義:User Datagram Protocol,即用戶(hù)數(shù)據(jù)報(bào)協(xié)議撞芍,是一種傳輸層通信協(xié)議秧了。

    基于UDP的應(yīng)用層協(xié)議有TFTP、SNMP與DNS序无。

  • 特點(diǎn):無(wú)連接的验毡、不可靠的、面向報(bào)文帝嗡、沒(méi)有擁塞控制

    • 無(wú)連接的:和TCP要建立連接不同晶通,UDP傳輸數(shù)據(jù)不需要建立連接,就像寫(xiě)信哟玷,在信封寫(xiě)上收信人名稱(chēng)录择、地址就可以交給郵局發(fā)送了,至于能不能送到碗降,就要看郵局的送信能力和送信過(guò)程的困難程度了。
    • 不可靠的:因?yàn)閁DP發(fā)出去的數(shù)據(jù)包發(fā)出去就不管了塘秦,不管它會(huì)不會(huì)到達(dá)讼渊,所以很可能會(huì)出現(xiàn)丟包現(xiàn)象,使傳輸?shù)臄?shù)據(jù)出錯(cuò)尊剔。
    • 面向報(bào)文:數(shù)據(jù)報(bào)文爪幻,就相當(dāng)于一個(gè)數(shù)據(jù)包,應(yīng)用層交給UDP多大的數(shù)據(jù)包,UDP就照樣發(fā)送挨稿,不會(huì)像TCP那樣拆分仇轻。
    • 沒(méi)有擁塞控制:擁塞顽悼,是指到達(dá)通信子網(wǎng)中某一部分的分組數(shù)量過(guò)多别凹,使得該部分網(wǎng)絡(luò)來(lái)不及處理,以致引起這部分乃至整個(gè)網(wǎng)絡(luò)性能下降的現(xiàn)象花椭,嚴(yán)重時(shí)甚至?xí)?dǎo)致網(wǎng)絡(luò)通信業(yè)務(wù)陷入停頓臭家,即出現(xiàn)死鎖現(xiàn)象疲陕,就像交通堵塞一樣。TCP建立連接后如果發(fā)送的數(shù)據(jù)因?yàn)樾诺蕾|(zhì)量的原因不能到達(dá)目的地钉赁,它會(huì)不斷重發(fā)蹄殃,有可能導(dǎo)致越來(lái)越塞,所以需要一個(gè)復(fù)雜的原理來(lái)控制擁塞你踩。而UDP就沒(méi)有這個(gè)煩惱诅岩,發(fā)出去就不管了。

應(yīng)用場(chǎng)景
很多的實(shí)時(shí)應(yīng)用(如IP電話带膜、實(shí)時(shí)視頻會(huì)議吩谦、某些多人同時(shí)在線游戲等)要求源主機(jī)以很定的速率發(fā)送數(shù)據(jù),并且允許在網(wǎng)絡(luò)發(fā)生擁塞時(shí)候丟失一些數(shù)據(jù)钱慢,但是要求不能有太大的延時(shí)逮京,UDP就剛好適合這種要求。

? TCP 和 UDP 的優(yōu)缺點(diǎn)無(wú)法簡(jiǎn)單地束莫、絕對(duì)地去做比較:TCP 用于在傳輸層有必要實(shí)現(xiàn)可靠傳輸?shù)那闆r懒棉;而在一方面,UDP 主要用于那些對(duì)高速傳輸和實(shí)時(shí)性有較高要求的通信或廣播通信览绿。TCP 和 UDP 應(yīng)該根據(jù)應(yīng)用的目的按需使用策严。

在說(shuō)TCP的三次握手和四次揮手之前,我們還有必要來(lái)了解一下TCP的報(bào)文結(jié)構(gòu)饿敲,因?yàn)槠渲械膸讉€(gè)字段有助于我們更好的理解三次握手和四次揮手的過(guò)程妻导。

4. TCP報(bào)文結(jié)構(gòu)

在這里插入圖片描述

我屬于那種用到什么才學(xué)點(diǎn)什么的懶加載式學(xué)習(xí),因?yàn)閷W(xué)多了我也記不住

所以這里我就挑幾個(gè)重要字段來(lái)記錄一下:

  • (1)序號(hào):即seq序號(hào)(Sequence number)怀各,占32位倔韭,用來(lái)標(biāo)識(shí)從TCP源端向目的端發(fā)送的字節(jié)流,發(fā)起方發(fā)送數(shù)據(jù)時(shí)對(duì)此進(jìn)行標(biāo)記瓢对。序號(hào)字段的值則指的是本報(bào)文段所發(fā)送的數(shù)據(jù)的第一個(gè)字節(jié)的序號(hào)寿酌。

  • (2)確認(rèn)號(hào):即ack序號(hào)(Acknowledgment number),占32位硕蛹,只有 ACK標(biāo)志位 為1時(shí)醇疼,確認(rèn)序號(hào)字段才有效硕并,ack=seq+1。是指期望收到對(duì)方的下一個(gè)報(bào)文段的數(shù)據(jù)的第一個(gè)字節(jié)的序號(hào)秧荆。

  • (3)標(biāo)志位:共有6個(gè)標(biāo)志位倔毙,即URG、ACK乙濒、PSH陕赃、RST、SYN琉兜、FIN等凯正,具體含 義如下:

    確認(rèn)ACK: 當(dāng)ACK = 1時(shí),確認(rèn)字段有效豌蟋,當(dāng)ACK = 0時(shí)廊散,確認(rèn)字段無(wú)效。TCP規(guī)定梧疲,在連接創(chuàng)建后所有傳送的報(bào)文段須將ACK置為1

    同步SYN: 若SYN = 1允睹,則表示這是請(qǐng)求建立連接。

    終止FIN: 釋放連接幌氮。當(dāng)FIN = 1時(shí)缭受,表示此報(bào)文段的發(fā)送方需要發(fā)送的數(shù)據(jù)已經(jīng)全部發(fā)送完畢,請(qǐng)求斷開(kāi)連接该互。

    緊急URG: 當(dāng)URG = 1米者,表示緊急指針字段有效。此時(shí)發(fā)送方TCP就將緊急數(shù)據(jù)插入到本報(bào)文的數(shù)據(jù)的最前面宇智,后面順序不變蔓搞,保證將緊急需要發(fā)送的最先發(fā)送。與最后的緊急指針配合使用随橘。

    推送PSH: 接受方TCP接收到PSH = 1喂分,表示該報(bào)文段高于優(yōu)先級(jí),需要盡快地交付給接受應(yīng)用程序机蔗,不需要等到整個(gè)TCP緩存都填滿(mǎn)了后在交付蒲祈。
    復(fù)位 RST: 當(dāng)RST = 1時(shí),表示TCP連接發(fā)生嚴(yán)重錯(cuò)誤萝嘁,必須馬上釋放連接梆掸,重新建立新連接。

    ?

? 需要注意的是:
? (A)不要將確認(rèn)序號(hào)ack與標(biāo)志位中的ACK搞混了牙言。
? (B)確認(rèn)方ack=發(fā)起方seq+1沥潭,兩端配對(duì)。

那這個(gè)序列號(hào)(seq)和確認(rèn)號(hào) (ack) 有什么作用呢嬉挡?

答:TCP中可以通過(guò)序列號(hào)與確認(rèn)應(yīng)答提高可靠性钝鸽。

image

好,有了這些基礎(chǔ)庞钢,下面我們就來(lái)講TCP的三次握手了~

5. TCP中的三次握手▲▲▲(面試點(diǎn))

5.1 描述一下TCP中三次握手的流程

在這里插入圖片描述

所謂三次握手是指建立一個(gè) TCP 連接時(shí)需要客戶(hù)端和服務(wù)器端總共發(fā)送三個(gè)包以確認(rèn)連接的建立拔恰。

【詳細(xì)的描述】是這樣的:

  • 第一次握手:建立連接』ǎ客戶(hù)端發(fā)送連接請(qǐng)求報(bào)文段颜懊,將SYN位置為1,seq(Sequence Number)為 J 风皿;然后河爹,客戶(hù)端進(jìn)入SYN_SEND狀態(tài),等待服務(wù)器的確認(rèn)桐款。

  • 第二次握手:服務(wù)器端收到數(shù)據(jù)包后由標(biāo)志位SYN=1知道客戶(hù)端請(qǐng)求建立連接咸这,服務(wù)器端將標(biāo)志位SYN和ACK都置為1,ack=J+1魔眨,隨機(jī)產(chǎn)生一個(gè)值seq=K媳维,并將該數(shù)據(jù)包發(fā)送給客戶(hù)端以確認(rèn)連接請(qǐng)求,服務(wù)器端進(jìn)入SYN_RCVD狀態(tài)遏暴。

  • 第三次握手:客戶(hù)端收到確認(rèn)后侄刽,檢查ack是否為J+1,ACK是否為1朋凉,如果正確則將標(biāo)志位ACK置為1州丹,ack=K+1,并將該數(shù)據(jù)包發(fā)送給服務(wù)器端杂彭,服務(wù)器端檢查ack是否為K+1墓毒,ACK是否為1,如果正確則連接建立成功盖灸,客戶(hù)端和服務(wù)器端進(jìn)入ESTABLISHED狀態(tài)蚁鳖,完成三次握手,隨后客戶(hù)端與服務(wù)器端之間可以開(kāi)始傳輸數(shù)據(jù)了赁炎。

【簡(jiǎn)單點(diǎn)描述】也就是:

  • 第一次握手 → 客戶(hù)端請(qǐng)求建立連接醉箕。

  • 第二次握手 → 服務(wù)端應(yīng)答客戶(hù)端,并請(qǐng)求建立連接徙垫。

  • 第三次握手 → 客戶(hù)端針對(duì)服務(wù)端請(qǐng)求確認(rèn)應(yīng)答讥裤。

這樣就完成TCP三次握手 = 一條TCP連接建立完成 = 可以開(kāi)始發(fā)送數(shù)據(jù)

注意 1.三次握手期間任何一次未收到對(duì)面回復(fù)都要重發(fā)。

? 2.最后一個(gè)確認(rèn)報(bào)文段發(fā)送完畢以后姻报,客戶(hù)端和服務(wù)器端都進(jìn)入ESTABLISHED狀態(tài)己英。

5.2 為什么TCP建立連接需要三次握手?

為了防止服務(wù)器端因?yàn)榻邮樟?strong>早已失效的連接請(qǐng)求報(bào)文從而一直等待客戶(hù)端請(qǐng)求吴旋,從而浪費(fèi)資源损肛。

再分析具體一點(diǎn)就是:

  • “已失效的連接請(qǐng)求報(bào)文段”的產(chǎn)生在這樣一種情況下:Client發(fā)出的第一個(gè)連接請(qǐng)求報(bào)文段并沒(méi)有丟失厢破,而是在某個(gè)網(wǎng)絡(luò)結(jié)點(diǎn)長(zhǎng)時(shí)間的滯留了,以致延誤到連接釋放以后的某個(gè)時(shí)間才到達(dá)server治拿。
  • 這是一個(gè)早已失效的報(bào)文段摩泪。但Server收到此失效的連接請(qǐng)求報(bào)文段后,就誤認(rèn)為是Client再次發(fā)出的一個(gè)新的連接請(qǐng)求劫谅。
  • 于是就向Client發(fā)出確認(rèn)報(bào)文段见坑,同意建立連接。
  • 假設(shè)不采用“三次握手”:只要Server發(fā)出確認(rèn)捏检,新的連接就建立了荞驴。
  • 由于現(xiàn)在Client并沒(méi)有發(fā)出建立連接的請(qǐng)求,因此不會(huì)向Server發(fā)送數(shù)據(jù)贯城。
  • 但Server卻以為新的運(yùn)輸連接已經(jīng)建立熊楼,并一直等待Client發(fā)來(lái)數(shù)據(jù)。>- 這樣冤狡,Server的資源就白白浪費(fèi)掉了孙蒙。

而采用了三次握手之后,上述問(wèn)題就不會(huì)發(fā)生悲雳。一切都會(huì)按照下面的正確腳步進(jìn)行:

  • Client不會(huì)向Server的確認(rèn)發(fā)出確認(rèn)
  • Server由于收不到確認(rèn)挎峦,就知道Client并沒(méi)有要求建立連接
  • 所以Server不會(huì)等待Client發(fā)送數(shù)據(jù),資源就沒(méi)有被浪費(fèi)

5.3 TCP三次握手有什么漏洞嗎(知道即可)

漏洞:? SYN洪泛攻擊

? 定義:

通過(guò)網(wǎng)絡(luò)服務(wù)所在的端口發(fā)送大量偽造原地址的攻擊報(bào)文合瓢,發(fā)送到服務(wù)端坦胶,造成服務(wù)端上的半開(kāi)連接隊(duì)列被占滿(mǎn),從而阻止其他用戶(hù)進(jìn)行訪問(wèn)晴楔。

? 原理:

攻擊者客戶(hù)端利用偽造的IP地址向服務(wù)端發(fā)出請(qǐng)求(第一次握手)顿苇,而服務(wù)端的響應(yīng)(第二次握手)的報(bào)文將永遠(yuǎn)發(fā)送不到真實(shí)的客戶(hù)端,服務(wù)端在等待客戶(hù)端的第三次握手(永遠(yuǎn)都不會(huì)有的)税弃,服務(wù)端在等待這種半開(kāi)的連接過(guò)程中消耗了資源纪岁,如果有成千上萬(wàn)的這種連接,主機(jī)資源將被耗盡则果,從而達(dá)到攻擊的目的幔翰。

? 解決方案:

無(wú)效連接監(jiān)控釋放

延緩TCB分配方法

防火墻

6.TCP中的四次揮手(面試點(diǎn)▲)

6.1 描述一下TCP中四次揮手的流程

在這里插入圖片描述

四次揮手即終止TCP連接,就是指斷開(kāi)一個(gè)TCP連接時(shí)西壮,需要客戶(hù)端和服務(wù)端總共發(fā)送4個(gè)包以確認(rèn)連接的斷開(kāi)遗增。

注意:可以是客戶(hù)端先發(fā)出中斷,也可以是服務(wù)器端先發(fā)出中斷款青。甚至是兩方同時(shí)發(fā)出中斷的情況也是有的做修!

【詳細(xì)的描述】是這樣的:

  • 第一次揮手:客戶(hù)端發(fā)送一個(gè)FIN=M,用來(lái)關(guān)閉客戶(hù)端到服務(wù)器端的數(shù)據(jù)傳送,客戶(hù)端進(jìn)入FIN_WAIT_1狀態(tài)饰及。意思是說(shuō)"我客戶(hù)端沒(méi)有數(shù)據(jù)要發(fā)給你了"蔗坯,但是如果你服務(wù)器端還有數(shù)據(jù)沒(méi)有發(fā)送完成,則不必急著關(guān)閉連接燎含,可以繼續(xù)發(fā)送數(shù)據(jù)步悠。

  • 第二次揮手:服務(wù)器端收到FIN后,先發(fā)送ack=M+1瘫镇,告訴客戶(hù)端,你的請(qǐng)求我收到了答姥,但是我還沒(méi)準(zhǔn)備好铣除,請(qǐng)繼續(xù)你等我的消息。這個(gè)時(shí)候客戶(hù)端就進(jìn)入FIN_WAIT_2 狀態(tài)鹦付,繼續(xù)等待服務(wù)器端的FIN報(bào)文尚粘。

  • 第三次揮手:當(dāng)服務(wù)器端確定數(shù)據(jù)已發(fā)送完成,則向客戶(hù)端發(fā)送FIN=N報(bào)文敲长,告訴客戶(hù)端郎嫁,好了,我這邊數(shù)據(jù)發(fā)完了祈噪,準(zhǔn)備好關(guān)閉連接了泽铛。服務(wù)器端進(jìn)入LAST_ACK狀態(tài)。

  • 第四次揮手:客戶(hù)端收到FIN=N報(bào)文后辑鲤,就知道可以關(guān)閉連接了盔腔,但是他還是不相信網(wǎng)絡(luò),怕服務(wù)器端不知道要關(guān)閉月褥,所以發(fā)送ack=N+1后進(jìn)入TIME_WAIT狀態(tài)弛随,如果Server端沒(méi)有收到ACK則可以重傳。服務(wù)器端收到ACK后宁赤,就知道可以斷開(kāi)連接了舀透。客戶(hù)端等待了2MSL后依然沒(méi)有收到回復(fù)决左,則證明服務(wù)器端已正常關(guān)閉愕够,那好,我客戶(hù)端也可以關(guān)閉連接了哆窿。最終完成了四次握手链烈。

【簡(jiǎn)單點(diǎn)描述】也就是:

  • 第一次揮手:客戶(hù)端發(fā)送關(guān)閉請(qǐng)求

  • 第二次揮手:服務(wù)端響應(yīng)客戶(hù)端關(guān)閉請(qǐng)求

  • 第三次揮手:服務(wù)端發(fā)送關(guān)閉請(qǐng)求

  • 第四次揮手:客戶(hù)端發(fā)送關(guān)閉確認(rèn)請(qǐng)求

6.2 為什么TCP釋放連接需要四次揮手?

為了保證雙方都能通知對(duì)方“需要釋放連接”挚躯,即在釋放連接后都無(wú)法接收或發(fā)送消息給對(duì)方

  • 需要明確的是:TCP是全雙工模式强衡,這意味著是雙向都可以發(fā)送、接收的

  • 釋放連接的定義是:雙方都無(wú)法接收或發(fā)送消息給對(duì)方码荔,是雙向的

  • 當(dāng)主機(jī)1發(fā)出“釋放連接請(qǐng)求”(FIN報(bào)文段)時(shí)漩勤,只是表示主機(jī)1已經(jīng)沒(méi)有數(shù)據(jù)要發(fā)送 / 數(shù)據(jù)已經(jīng)全部發(fā)送完畢感挥;

    但是,這個(gè)時(shí)候主機(jī)1還是可以接受來(lái)自主機(jī)2的數(shù)據(jù)越败。

  • 當(dāng)主機(jī)2返回“確認(rèn)釋放連接”信息(ACK報(bào)文段)時(shí)触幼,表示它已經(jīng)知道主機(jī)1沒(méi)有數(shù)據(jù)發(fā)送了
    但此時(shí)主機(jī)2還是可以發(fā)送數(shù)據(jù)給主機(jī)1

  • 當(dāng)主機(jī)2也發(fā)送了FIN報(bào)文段時(shí),即告訴主機(jī)1我也沒(méi)有數(shù)據(jù)要發(fā)送了
    此時(shí)究飞,主機(jī)1和2已經(jīng)無(wú)法進(jìn)行通信:主機(jī)1無(wú)法發(fā)送數(shù)據(jù)給主機(jī)2置谦,主機(jī)2也無(wú)法發(fā)送數(shù)據(jù)給主機(jī)1,此時(shí)亿傅,TCP的連接才算釋放

6.3 為什么建立連接是三次握手媒峡,而關(guān)閉連接卻是四次揮手呢,為什么2葵擎、3兩次不能合并呢谅阿?

這是因?yàn)榉?wù)端在LISTEN狀態(tài)下,收到建立連接請(qǐng)求的SYN報(bào)文后酬滤,把ACK和SYN放在一個(gè)報(bào)文里發(fā)送給客戶(hù)端签餐。而關(guān)閉連接時(shí),當(dāng)收到對(duì)方的FIN報(bào)文時(shí)盯串,僅僅表示對(duì)方不再發(fā)送數(shù)據(jù)了但是還能接收數(shù)據(jù)氯檐,己方也未必全部數(shù)據(jù)都發(fā)送給對(duì)方了,所以己方可以立即close嘴脾,也可以發(fā)送一些數(shù)據(jù)給對(duì)方后男摧,再發(fā)送FIN報(bào)文給對(duì)方來(lái)表示同意現(xiàn)在關(guān)閉連接,因此译打,己方ACK和FIN一般都會(huì)分開(kāi)發(fā)送耗拓。

7.TCP協(xié)議中的窗口機(jī)制(拓展,了解一下即可)

在這里插入圖片描述

滑動(dòng)窗口

發(fā)送方和接收方都會(huì)維護(hù)一個(gè)數(shù)據(jù)幀的序列奏司,這個(gè)序列被稱(chēng)作窗口乔询。

發(fā)送方的窗口大小由接收方確認(rèn)。

目的

1.確保數(shù)據(jù)不丟失

? 如果發(fā)送的數(shù)據(jù)丟失了可以重新發(fā)韵洋。

2.控制發(fā)送速度

? 控制發(fā)送速度竿刁,以免接收方的緩存不夠大導(dǎo)致溢出,同時(shí)控制流量也可以避免網(wǎng)絡(luò)擁塞搪缨。

嗯吶食拜,學(xué)習(xí)中,如有不正確的地方副编,希望可以一起討論呀~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末负甸,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌呻待,老刑警劉巖打月,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異蚕捉,居然都是意外死亡奏篙,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)迫淹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)秘通,“玉大人,你說(shuō)我怎么就攤上這事敛熬〕湟祝” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵荸型,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我炸茧,道長(zhǎng)瑞妇,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任梭冠,我火速辦了婚禮辕狰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘控漠。我一直安慰自己蔓倍,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布盐捷。 她就那樣靜靜地躺著偶翅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪碉渡。 梳的紋絲不亂的頭發(fā)上聚谁,一...
    開(kāi)封第一講書(shū)人閱讀 51,190評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音滞诺,去河邊找鬼形导。 笑死,一個(gè)胖子當(dāng)著我的面吹牛习霹,可吹牛的內(nèi)容都是我干的朵耕。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼淋叶,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼阎曹!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤芬膝,失蹤者是張志新(化名)和其女友劉穎望门,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體锰霜,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡筹误,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了癣缅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片厨剪。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖友存,靈堂內(nèi)的尸體忽然破棺而出祷膳,到底是詐尸還是另有隱情,我是刑警寧澤屡立,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布直晨,位于F島的核電站,受9級(jí)特大地震影響膨俐,放射性物質(zhì)發(fā)生泄漏勇皇。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一焚刺、第九天 我趴在偏房一處隱蔽的房頂上張望敛摘。 院中可真熱鬧,春花似錦乳愉、人聲如沸兄淫。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)捕虽。三九已至,卻和暖如春坡脐,著一層夾襖步出監(jiān)牢的瞬間薯鳍,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工挨措, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留挖滤,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓浅役,卻偏偏與公主長(zhǎng)得像斩松,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子觉既,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

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