理解TCP/IP協(xié)議
一货裹、協(xié)議
在計(jì)算機(jī)網(wǎng)絡(luò)與信息通訊領(lǐng)域里,人們經(jīng)常提及 “協(xié)議” 一詞精偿』≡玻互聯(lián)網(wǎng)中常用的協(xié)議有HTTP、TCP笔咽、IP等搔预。
協(xié)議的必要性
簡(jiǎn)單來(lái)說(shuō),協(xié)議就是計(jì)算機(jī)與計(jì)算機(jī)之間通過(guò)網(wǎng)絡(luò)通信時(shí)叶组,事先達(dá)成的一種 “約定”拯田。這種“約定”使不同廠商的設(shè)備、不同的CPU以及不同操作系統(tǒng)組成的計(jì)算機(jī)之間扶叉,只要遵循相同的協(xié)議就能夠?qū)崿F(xiàn)通信勿锅。這就好比一個(gè)中國(guó)人說(shuō)漢語(yǔ)一個(gè)外國(guó)人說(shuō)英語(yǔ)使用不同的國(guó)家語(yǔ)言進(jìn)行溝通,怎么也無(wú)法理解枣氧。如果兩個(gè)人約定好 都說(shuō)中文或英文溢十,就可以互相溝通通信。協(xié)議分為很多種达吞,每一種協(xié)議都明確界定了它的行為規(guī)范张弛。兩臺(tái)計(jì)算機(jī)必須能夠支持相同的協(xié)議,并遵循相同協(xié)議進(jìn)行處理酪劫,這樣才能實(shí)現(xiàn)相互通信吞鸭。
二、協(xié)議分層
TCP/IP協(xié)議
TCP/IP 是用于因特網(wǎng) (Internet) 的通信協(xié)議覆糟。 TCP/IP 通信協(xié)議是對(duì)計(jì)算機(jī)必須遵守的規(guī)則的描述刻剥,只有遵守這些規(guī)則,計(jì)算機(jī)之間才能進(jìn)行通信滩字。
TCP (Transmission Control Protocol)和UDP(User Datagram Protocol)協(xié)議屬于傳輸層協(xié)議造虏。其中TCP提供IP環(huán)境下的數(shù)據(jù)可靠傳輸,它提供的服務(wù)包括數(shù)據(jù)流傳送麦箍、可靠性漓藕、有效流控、全雙工操作和多路復(fù) 用挟裂。通過(guò)面向連接享钞、端到端和可靠的數(shù)據(jù)包發(fā)送。通俗說(shuō)诀蓉,它是事先為所發(fā)送的數(shù)據(jù)開(kāi)辟出連接好的通道栗竖,然后再進(jìn)行數(shù)據(jù)發(fā)送;而UDP則不為IP提供可靠性渠啤、 流控或差錯(cuò)恢復(fù)功能划滋。一般來(lái)說(shuō),TCP對(duì)應(yīng)的是可靠性要求高的應(yīng)用埃篓,而UDP對(duì)應(yīng)的則是可靠性要求低处坪、傳輸經(jīng)濟(jì)的應(yīng)用。 TCP支持的應(yīng)用協(xié)議主要有:Telnet架专、FTP同窘、SMTP等; UDP支持的應(yīng)用層協(xié)議主要有:NFS(網(wǎng)絡(luò)文件系統(tǒng))部脚、SNMP(簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議)想邦、DNS(主域名稱(chēng)系統(tǒng))、TFTP(通用文件傳輸協(xié)議)等委刘。 TCP/IP協(xié)議與低層的數(shù)據(jù)鏈路層和物理層無(wú)關(guān)丧没,這也是TCP/IP的重要特點(diǎn)
- TCP(Transimision Control Protocal)
- 傳輸控制協(xié)議
- 可靠的鹰椒、面向連接的協(xié)議
- 傳輸效率低
- UDP(User Datagram Protocal)
- 用戶數(shù)據(jù)報(bào)協(xié)議
- 不可靠的、無(wú)連接的服務(wù)
- 傳輸效率高
TCP/IP協(xié)議族
TCP/IP是基于TCP和IP這兩個(gè)最初的協(xié)議之上的不同的通信協(xié)議的大集合
協(xié)議的分層
網(wǎng)絡(luò)協(xié)議通常分不同層次進(jìn)行開(kāi)發(fā)呕童,每一層分別負(fù)責(zé)不同的通信功能漆际。一個(gè)協(xié)議族,比如TCP/IP夺饲,是一組不同層次上的多個(gè)協(xié)議的組合奸汇。 傳統(tǒng)上來(lái)說(shuō) TCP/IP 被認(rèn)為是一個(gè)四層協(xié)議, 而ISO(國(guó)際標(biāo)準(zhǔn)化組織),制定了一個(gè)國(guó)際標(biāo)準(zhǔn)OSI七層協(xié)議模型往声,OSI協(xié)議以O(shè)SI參考模型為基礎(chǔ)界定了每個(gè)階層的協(xié)議和每個(gè)階層之間接口相關(guān)的標(biāo)準(zhǔn)擂找。
分層的作用
應(yīng)用層
應(yīng)用層為操作系統(tǒng)或網(wǎng)絡(luò)應(yīng)用程序提供訪問(wèn)網(wǎng)絡(luò)服務(wù)的接口。應(yīng)用層協(xié)議的代表包括:Telnet浩销、FTP贯涎、HTTP、SNMP等慢洋。
表示層
將應(yīng)用處理的信息轉(zhuǎn)換為適合網(wǎng)絡(luò)傳輸?shù)母袷郊聿桑驅(qū)?lái)自下一層的數(shù)據(jù)轉(zhuǎn)換為上層能夠處理的格式。數(shù)據(jù)的表示且警、安全粉捻、壓縮。
會(huì)話層
負(fù)責(zé)建立和斷開(kāi)通信連接(數(shù)據(jù)流動(dòng)的邏輯通路)斑芜,以及數(shù)據(jù)的分割等數(shù)據(jù)傳輸相關(guān)的管理肩刃。
傳輸層
管理兩個(gè)節(jié)點(diǎn)之間的數(shù)據(jù)傳輸。負(fù)責(zé)可靠傳輸(確保數(shù)據(jù)被可靠地傳送到目標(biāo)地址)杏头。
網(wǎng)絡(luò)層
地址管理與路由選擇, 在這一層盈包,數(shù)據(jù)的單位稱(chēng)為數(shù)據(jù)包(packet)(路由器)。
數(shù)據(jù)鏈路層
互連設(shè)備之間傳送和識(shí)別數(shù)據(jù)幀(交換機(jī))醇王。
物理層
以"0"呢燥、 "1"代表電壓的高低,燈光的閃滅寓娩,在這一層叛氨,數(shù)據(jù)的單位稱(chēng)為比特(bit),(中繼器、集線器棘伴、還有我們通常說(shuō)的雙絞線也工作在物理層)寞埠。
七層通信
發(fā)送方由第七層到第一層 由上到下按照順序傳送數(shù)據(jù),每個(gè)分層在處理上層傳遞的數(shù)據(jù)時(shí)焊夸,附上當(dāng)前層協(xié)議所必須的 "首部"信息仁连。接收方由第一層到第七層 由下到上按照順序傳遞數(shù)據(jù),每個(gè)分層對(duì)接收到的數(shù)據(jù)進(jìn)行 "首部"與"內(nèi)容"分離阱穗,在轉(zhuǎn)發(fā)給上一層饭冬。最終將發(fā)送的數(shù)據(jù)恢復(fù)為原始數(shù)據(jù)使鹅。
三、傳輸方式的分類(lèi)
網(wǎng)絡(luò)通信科根據(jù)數(shù)據(jù)發(fā)送方法進(jìn)行多種分類(lèi)昌抠,分類(lèi)方法很多患朱,下面列舉幾種常見(jiàn)的:
- 面向有連接型和面向無(wú)連接型 1.1 面向有連接型
發(fā)送數(shù)據(jù)之前,需要在收發(fā)主機(jī)之間建立一條通信線路扰魂,在通信傳輸前后麦乞,專(zhuān)門(mén)進(jìn)行建立和斷開(kāi)連接的處理蕴茴,如果與對(duì)端之間無(wú)法通信劝评,可避免發(fā)送無(wú)謂的數(shù)據(jù)
1.2面向無(wú)連接型
四、報(bào)文倦淀、幀蒋畜、數(shù)據(jù)包等的區(qū)別
報(bào)文(message)是網(wǎng)絡(luò)中交換與傳輸?shù)臄?shù)據(jù)單元,也是網(wǎng)絡(luò)傳輸?shù)膯卧策础?bào)文包含了將要發(fā)送的完整的數(shù)據(jù)信息姻成,其長(zhǎng)短不需一致。報(bào)文在傳輸過(guò)程中會(huì)不斷地封裝成分組愿棋、包科展、幀來(lái)傳輸,封裝的方式就是添加一些控制信息組成的首部糠雨,那些就是報(bào)文頭才睹。
應(yīng)用層:報(bào)文(message),一般指完整的信息甘邀,傳輸層實(shí)現(xiàn)報(bào)文交付琅攘,位于應(yīng)用層的信息分組稱(chēng)為報(bào)文; 傳輸層:報(bào)文段(segment)松邪,組成報(bào)文的每個(gè)分組坞琴; 網(wǎng)絡(luò)層:分組(packet)是網(wǎng)絡(luò)傳輸中的二進(jìn)制格式單元,數(shù)據(jù)包(datapacket)是TCP/IP通信協(xié)議傳輸中的數(shù)據(jù)單位逗抑;通過(guò)網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)基本單元剧辐,包含一個(gè)報(bào)頭和數(shù)據(jù)本身,其中報(bào)頭描述了數(shù)據(jù)的目的地及其與其他數(shù)據(jù)之間的關(guān)系邮府,可以理解為數(shù)據(jù)傳輸?shù)姆纸M浙于,我們將通過(guò)網(wǎng)絡(luò)傳輸?shù)幕緮?shù)據(jù)單元稱(chēng)為數(shù)據(jù)報(bào)(Datagram); 鏈路層:幀(frame)挟纱,數(shù)據(jù)鏈路層的協(xié)議數(shù)據(jù)單元羞酗,為了保證數(shù)據(jù)的可靠傳輸,把用戶數(shù)據(jù)封裝成幀紊服; 物理層:PDU(bit)檀轨,協(xié)議數(shù)據(jù)單元胸竞; 抓包,抓到的是傳輸層的包参萄,packet/frame/Datagram/segment是存在于同條記錄中的卫枝,這些是基于所在協(xié)議層的不同取了不同的名字。
五讹挎、TCP報(bào)文
數(shù)據(jù)包
IP 數(shù)據(jù)包在以太網(wǎng)數(shù)據(jù)包的負(fù)載里面校赤,TCP數(shù)據(jù)包在IP數(shù)據(jù)包的負(fù)載里。
TCP 首部各字段的意義和作用
TCP首部最小為20字節(jié)筒溃,這20字節(jié)分為5行马篮,每行4個(gè)字節(jié)也就是32個(gè)位。
源端口和目的端口 Port
- 源端口號(hào):16位的源端口中包含初始化通信的端口怜奖。源端口和源IP地址的作用是標(biāo)識(shí)報(bào)文的返回地址浑测。
- 目的端口號(hào):16位的目的端口域定義傳輸?shù)哪康摹_@個(gè)端口指明報(bào)文接收計(jì)算機(jī)上的應(yīng)用程序地址接口歪玲。計(jì)算機(jī)通過(guò)端口號(hào)識(shí)別訪問(wèn)哪個(gè)服務(wù),比如http服務(wù)或ftp服務(wù)迁央,發(fā)送方端口號(hào)是進(jìn)行隨機(jī)端口待笑,目標(biāo)端口號(hào)決定了接收方哪個(gè)程序來(lái)接收 分別占用16位攒霹,也就是端口號(hào)最大是2^16,所以端口號(hào)的范圍是0~65536
端口號(hào)的分配:
- 知名端口號(hào)一般位于:1 --- 255 之間
- 256 --- 1023的端口號(hào)搞糕,通常是由Unix系統(tǒng)占用(系統(tǒng)占用)
- 1024 ---5000 是大多數(shù)TCP钙皮、IP實(shí)現(xiàn)的臨時(shí)分配
- 大于5000的一般是給其他服務(wù)預(yù)留的(Internet上并不常用的服務(wù))
序號(hào) Sequence Number
TCP用序列號(hào)對(duì)數(shù)據(jù)包進(jìn)行標(biāo)記蜂科,以便在到達(dá)目的地后重新重裝,假設(shè)當(dāng)前的序列號(hào)為 s株灸,發(fā)送數(shù)據(jù)長(zhǎng)度為 l崇摄,則下次發(fā)送數(shù)據(jù)時(shí)的序列號(hào)為 s + l。在建立連接時(shí)通常由計(jì)算機(jī)生成一個(gè)隨機(jī)數(shù)作為序列號(hào)的初始值慌烧。
確認(rèn)號(hào) Acknowledgemt Number
占 4 個(gè)字節(jié)逐抑,表示期望收到對(duì)方下一個(gè)報(bào)文段的序號(hào)值。 TCP 的可靠性屹蚊,是建立在「每一個(gè)數(shù)據(jù)報(bào)文都需要確認(rèn)收到」的基礎(chǔ)之上的厕氨。
就是說(shuō),通訊的任何一方在收到對(duì)方的一個(gè)報(bào)文之后汹粤,都要發(fā)送一個(gè)相對(duì)應(yīng)的「確認(rèn)報(bào)文」命斧,來(lái)表達(dá)確認(rèn)收到。 那么嘱兼,確認(rèn)報(bào)文国葬,就會(huì)包含確認(rèn)號(hào)。 例如,通訊的一方收到了第一個(gè) 25kb 的報(bào)文汇四,該報(bào)文的 序號(hào)值=0接奈,那么就需要回復(fù)一個(gè)確認(rèn)報(bào)文,其中的確認(rèn)號(hào) = 25600.
數(shù)據(jù)偏移 Offset
占 0.5 個(gè)字節(jié) (4 位)通孽。 這個(gè)字段實(shí)際上是指出了 TCP 報(bào)文段的首部長(zhǎng)度 序宦,它指出了 TCP報(bào)文段的數(shù)據(jù)起始處 距離 TCP報(bào)文的起始處 有多遠(yuǎn)。(注意 數(shù)據(jù)起始處 和 報(bào)文起始處 的意思)
一個(gè)數(shù)據(jù)偏移量 = 4 byte背苦,由于 4 位二進(jìn)制數(shù)能表示的最大十進(jìn)制數(shù)字是 15互捌,因此數(shù)據(jù)偏移的最大值是 60 byte,這也側(cè)面限制了 TCP 首部的最大長(zhǎng)度行剂。
保留 Reserved
占 0.75 個(gè)字節(jié) (6 位)秕噪。 保留為今后使用,但目前應(yīng)置為 0硼讽。
標(biāo)志位 TCP Flags
標(biāo)志位巢价,一共有 6 個(gè)牲阁,分別占 1 位固阁,共 6 位 。 每一位的值只有 0 和 1城菊,分別表達(dá)不同意思备燃。
- ACK:確認(rèn)序號(hào)有效
- RST:重置連接
- SYN:發(fā)起了一個(gè)新連接
- FIN:釋放一個(gè)連接
確認(rèn) ACK (Acknowlegemt)
當(dāng) ACK = 1 的時(shí)候,確認(rèn)號(hào)(Acknowledgemt Number)有效凌唬。 一般稱(chēng)攜帶 ACK 標(biāo)志的 TCP 報(bào)文段為「確認(rèn)報(bào)文段」并齐。為0表示數(shù)據(jù)段不包含確認(rèn)信息,確認(rèn)號(hào)被忽略客税。
TCP 規(guī)定况褪,在連接建立后所有傳送的報(bào)文段都必須把 ACK 設(shè)置為 1。
推送 PSH (Push)
當(dāng) PSH = 1 的時(shí)候更耻,表示該報(bào)文段高優(yōu)先級(jí)测垛,接收方 TCP 應(yīng)該盡快推送給接收應(yīng)用程序,而不用等到整個(gè) TCP 緩存都填滿了后再交付秧均。
復(fù)位 RST (Reset)
當(dāng) RST = 1 的時(shí)候食侮,表示 TCP 連接中出現(xiàn)嚴(yán)重錯(cuò)誤,需要釋放并重新建立連接目胡。 一般稱(chēng)攜帶 RST 標(biāo)志的 TCP 報(bào)文段為「復(fù)位報(bào)文段」锯七。
同步 SYN (SYNchronization)
當(dāng) SYN = 1 的時(shí)候,表明這是一個(gè)請(qǐng)求連接報(bào)文段誉己。 一般稱(chēng)攜帶 SYN 標(biāo)志的 TCP 報(bào)文段為「同步報(bào)文段」眉尸。 在 TCP 三次握手中的第一個(gè)報(bào)文就是同步報(bào)文段,在連接建立時(shí)用來(lái)同步序號(hào)。
對(duì)方若同意建立連接噪猾,則應(yīng)在響應(yīng)的報(bào)文段中使 SYN = 1 和 ACK = 1地消。
終止 FIN (Finis)
當(dāng) FIN = 1 時(shí),表示此報(bào)文段的發(fā)送方的數(shù)據(jù)已經(jīng)發(fā)送完畢畏妖,并要求釋放 TCP 連接脉执。
一般稱(chēng)攜帶 FIN 的報(bào)文段為「結(jié)束報(bào)文段」。
在 TCP 四次揮手釋放連接的時(shí)候戒劫,就會(huì)用到該標(biāo)志半夷。
窗口大小 Window Size
占 2 字節(jié)。
該字段明確指出了現(xiàn)在允許對(duì)方發(fā)送的數(shù)據(jù)量迅细,它告訴對(duì)方本端的 TCP 接收緩沖區(qū)還能容納多少字節(jié)的數(shù)據(jù)巫橄,這樣對(duì)方就可以控制發(fā)送數(shù)據(jù)的速度。 窗口大小的值是指茵典,從本報(bào)文段首部中的確認(rèn)號(hào)算起湘换,接收方目前允許對(duì)方發(fā)送的數(shù)據(jù)量。
例如统阿,假如確認(rèn)號(hào)是 701 彩倚,窗口字段是 1000。這就表明扶平,從 701 號(hào)算起帆离,發(fā)送此報(bào)文段的一方還有接收 1000 (字節(jié)序號(hào)是 701 ~ 1700) 個(gè)字節(jié)的數(shù)據(jù)的接收緩存空間。
校驗(yàn)和 TCP Checksum
占 2 個(gè)字節(jié)结澄。 由發(fā)送端填充哥谷,接收端對(duì) TCP 報(bào)文段執(zhí)行 CRC 算法,以檢驗(yàn) TCP 報(bào)文段在傳輸過(guò)程中是否損壞麻献,如果損壞這丟棄们妥。
檢驗(yàn)范圍包括首部和數(shù)據(jù)兩部分,這也是 TCP 可靠傳輸?shù)囊粋€(gè)重要保障勉吻。
緊急指針 Urgent Pointer
占 2 個(gè)字節(jié)监婶。 僅在 URG = 1 時(shí)才有意義,它指出本報(bào)文段中的緊急數(shù)據(jù)的字節(jié)數(shù)餐曼。 當(dāng) URG = 1 時(shí)压储,發(fā)送方 TCP 就把緊急數(shù)據(jù)插入到本報(bào)文段數(shù)據(jù)的最前面,而在緊急數(shù)據(jù)后面的數(shù)據(jù)仍是普通數(shù)據(jù)源譬。
因此集惋,緊急指針指出了緊急數(shù)據(jù)的末尾在報(bào)文段中的位置。
六踩娘、三次握手刮刑,四次揮手
需要了解的信息:
- ACK : TCP協(xié)議規(guī)定喉祭,只有ACK=1時(shí)有效,也規(guī)定連接建立后所有發(fā)送的報(bào)文的ACK必須為1
- SYN(SYNchronization) : 在連接建立時(shí)用來(lái)同步序號(hào)雷绢。當(dāng)SYN=1而ACK=0時(shí)泛烙,表明這是一個(gè)連接請(qǐng)求報(bào)文。對(duì)方若同意建立連接翘紊,則應(yīng)在響應(yīng)報(bào)文中使SYN=1和ACK=1. 因此, SYN置1就表示這是一個(gè)連接請(qǐng)求或連接接受報(bào)文蔽氨。
- FIN (finis)即完,終結(jié)的意思帆疟, 用來(lái)釋放一個(gè)連接鹉究。當(dāng) FIN = 1 時(shí),表明此報(bào)文段的發(fā)送方的數(shù)據(jù)已經(jīng)發(fā)送完畢踪宠,并要求釋放連接自赔。
三次握手 建立連接
TCP(Transmission Control Protocol,傳輸控制協(xié)議)是 面向連接的協(xié)議柳琢,也就是說(shuō)在收發(fā)數(shù)據(jù)之前绍妨,必須先和對(duì)方建立連接
一個(gè)TCP連接必須要經(jīng)過(guò)三次“對(duì)話”才能建立起來(lái),其中的過(guò)程非常復(fù)雜柬脸,只簡(jiǎn)單的 描述下這三次對(duì)話的簡(jiǎn)單過(guò)程:主機(jī)A向主機(jī)B發(fā)出連接請(qǐng)求數(shù)據(jù)包:“我想給你發(fā)數(shù)據(jù)他去,可以嗎?”肖粮,這是第一次對(duì)話孤页;主機(jī)B向主機(jī)A發(fā)送同意連接和要求同步 (同步就是兩臺(tái)主機(jī)一個(gè)在發(fā)送尔苦,一個(gè)在接收涩馆,協(xié)調(diào)工作)的數(shù)據(jù)包:“可以,你什么時(shí)候發(fā)允坚?”魂那,這是第二次對(duì)話;主機(jī)A再發(fā)出一個(gè)數(shù)據(jù)包確認(rèn)主機(jī)B的要求同 步:“我現(xiàn)在就發(fā)稠项,你接著吧涯雅!”,這是第三次對(duì)話展运。三次“對(duì)話”的目的是使數(shù)據(jù)包的發(fā)送和接收同步活逆,經(jīng)過(guò)三次“對(duì)話”之后,主機(jī)A才向主機(jī)B正式發(fā)送數(shù) 據(jù)拗胜。
首先由Client發(fā)出請(qǐng)求連接即 SYN=1 ACK=0 (請(qǐng)看頭字段的介紹), TCP規(guī)定SYN=1時(shí)不能攜帶數(shù)據(jù)蔗候,但要消耗一個(gè)序號(hào),因此聲明自己的32位序號(hào)是 seq=x,然后 Server 進(jìn)行回復(fù)確認(rèn)埂软,即 SYN=1 ACK=1 seq=y, ack=x+1, 再然后 Client 再進(jìn)行一次確認(rèn)锈遥,但不用SYN 了,這時(shí)即為 ACK=1, seq=x+1, ack=y+1.
四次揮手 釋放連接
當(dāng)客戶A 沒(méi)有東西要發(fā)送時(shí)就要釋放 A 這邊的連接,A會(huì)發(fā)送一個(gè)報(bào)文(沒(méi)有數(shù)據(jù))所灸,其中 FIN 設(shè)置為1, 服務(wù)器B收到后會(huì)給應(yīng)用程序一個(gè)信丽惶,這時(shí)A那邊的連接已經(jīng)關(guān)閉,即A不再發(fā)送信息(但仍可接收信息)爬立。 A收到B的確認(rèn)后進(jìn)入等待狀態(tài)钾唬,等待B請(qǐng)求釋放連接, B數(shù)據(jù)發(fā)送完成后就向A請(qǐng)求連接釋放侠驯,也是用FIN=1 表示知纷, 并且用 ack = u+1(如圖), A收到后回復(fù)一個(gè)確認(rèn)信息陵霉,并進(jìn)入 TIME_WAIT 狀態(tài)琅轧, 等待 2MSL 時(shí)間。
關(guān)于 TIME_WAIT 過(guò)渡到 CLOSED 狀態(tài)說(shuō)明: 從 TIME_WAIT 進(jìn)入 CLOSED 需要經(jīng)過(guò) 2MSL踊挠,其中 MSL 就叫做 最長(zhǎng)報(bào)文段壽命(Maxinum Segment Lifetime)乍桂,根據(jù) RFC 793 建議該值這是為 2 分鐘,也就是說(shuō)需要經(jīng)過(guò) 4 分鐘效床,才進(jìn)入 CLOSED 狀態(tài)睹酌。
為什么要等待呢?
為了這種情況: B向A發(fā)送 FIN = 1 的釋放連接請(qǐng)求剩檀,但這個(gè)報(bào)文丟失了憋沿, A沒(méi)有接到不會(huì)發(fā)送確認(rèn)信息, B 超時(shí)會(huì)重傳沪猴,這時(shí)A在 WAIT_TIME 還能夠接收到這個(gè)請(qǐng)求辐啄,這時(shí)再回復(fù)一個(gè)確認(rèn)就行了。(A收到 FIN = 1 的請(qǐng)求后 WAIT_TIME會(huì)重新記時(shí))
另外服務(wù)器B存在一個(gè)痹耸龋活狀態(tài)壶辜,即如果A突然故障死機(jī)了,那B那邊的連接資源什么時(shí)候能釋放呢担租? 就是痹颐瘢活時(shí)間到了后,B會(huì)發(fā)送探測(cè)信息奋救, 以決定是否釋放連接
為什么連接的時(shí)候是三次握手岭参,關(guān)閉的時(shí)候卻是四次握手?
答:因?yàn)楫?dāng)Server端收到Client端的SYN連接請(qǐng)求報(bào)文后尝艘,可以直接發(fā)送SYN+ACK報(bào)文演侯。其中ACK報(bào)文是用來(lái)應(yīng)答的,SYN報(bào)文是用來(lái)同步的利耍。但是關(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ā)送。故需要四步握手锐峭。