成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一文讀懂客戶端請(qǐng)求是如何到達(dá)服務(wù)器的

開發(fā) 前端 服務(wù)器
隨著周三官方發(fā)布的Kubernetes版本1.16進(jìn)入普遍可用狀態(tài),大家都有這樣一個(gè)疑問(wèn):企業(yè)數(shù)據(jù)中心的基礎(chǔ)設(shè)施的容器、虛擬機(jī)、“大數(shù)據(jù)”平臺(tái)以及機(jī)器學(xué)習(xí)框架 ,所有的這些最終都要由Kubernetes來(lái)編排嗎?

互聯(lián)網(wǎng)是人類歷史上最偉大的發(fā)明創(chuàng)造之一,而構(gòu)成互聯(lián)網(wǎng)架構(gòu)的核心在于TCP/IP協(xié)議。那么TCP/IP是如何工作的呢,我們先從數(shù)據(jù)包開始講起。

[[277326]]

1、數(shù)據(jù)包

一、HTTP請(qǐng)求和響應(yīng)步驟

 

一文讀懂客戶端請(qǐng)求是如何到達(dá)服務(wù)器的(干貨)

 

http請(qǐng)求全過(guò)程

 

一文讀懂客戶端請(qǐng)求是如何到達(dá)服務(wù)器的(干貨)

 

請(qǐng)求

 

一文讀懂客戶端請(qǐng)求是如何到達(dá)服務(wù)器的(干貨)

 

響應(yīng)

以上完整表示了HTTP請(qǐng)求和響應(yīng)的7個(gè)步驟,下面從TCP/IP協(xié)議模型的角度來(lái)理解HTTP請(qǐng)求和響應(yīng)如何傳遞的。

2、TCP/IP概述

我們以RFC 1180中的圖作為參考

 

一文讀懂客戶端請(qǐng)求是如何到達(dá)服務(wù)器的(干貨)

 

上圖展示了四層TCP/IP協(xié)議圖,其中network applications是應(yīng)用程序,屬于應(yīng)用層;TCP和UDP主要是傳輸數(shù)據(jù),屬于傳輸層,TCP確保端對(duì)端的可靠傳輸并盡量確保網(wǎng)絡(luò)健康運(yùn)行,而UDP是簡(jiǎn)單不可靠傳輸;IP主要解決路由問(wèn)題,屬于網(wǎng)絡(luò)層;ARP是網(wǎng)絡(luò)地址轉(zhuǎn)換,主要用來(lái)轉(zhuǎn)換IP地址和MAC地址,介于數(shù)據(jù)鏈路層和網(wǎng)絡(luò)層之間,可以看成2.5層;ENET在這里是數(shù)據(jù)鏈路層,網(wǎng)卡驅(qū)動(dòng)屬于這一層,主要做具體的介質(zhì)傳輸,前面示例中的廣告請(qǐng)求抓包就是在數(shù)據(jù)鏈路層抓取。

值得注意的是,ARP在linux系統(tǒng)里屬于網(wǎng)絡(luò)層,而在RFC里是介于數(shù)據(jù)鏈路層和網(wǎng)絡(luò)層之間。在《TCP/IP詳解》一書里,ARP被放到了數(shù)據(jù)鏈路層。當(dāng)解決實(shí)際問(wèn)題的時(shí)候,我們應(yīng)該把ARP放到網(wǎng)絡(luò)層。

 

一文讀懂客戶端請(qǐng)求是如何到達(dá)服務(wù)器的(干貨)

 

上圖給出使用TCPCopy在不同層發(fā)包的使用方法。如果TCPCopy從數(shù)據(jù)鏈路層發(fā)包,由于沒(méi)有享受到ARP服務(wù),用戶需要在使用TCPCopy的時(shí)候額外加上MAC地址;而如果TCPCopy從IP層發(fā)包,則無(wú)需指定MAC地址。

本課程主要講述TCP相關(guān)案例,沒(méi)有特殊說(shuō)明的話,TCP特指?jìng)鬏攲拥腡CP。

3、什么是TCP

TCP即傳輸控制協(xié)議,是一種面向連接的、可靠的、基于字節(jié)流的通信協(xié)議。TCP的主要工作是定義端口標(biāo)識(shí)應(yīng)用程序的身份,實(shí)現(xiàn)端對(duì)端的可靠通信,并進(jìn)行擁塞控制,防止互聯(lián)網(wǎng)崩塌。

TCP有如下關(guān)鍵特性:

 

一文讀懂客戶端請(qǐng)求是如何到達(dá)服務(wù)器的(干貨)

 

由于TCP是面向連接的協(xié)議,所以是一種有狀態(tài)的協(xié)議,而有狀態(tài)的協(xié)議往往比較復(fù)雜,因此TCP學(xué)習(xí)起來(lái)也比較困難。

通過(guò)狀態(tài)圖來(lái)查看一下TCP狀態(tài)的復(fù)雜性:

 

一文讀懂客戶端請(qǐng)求是如何到達(dá)服務(wù)器的(干貨)

 

上圖展示了錯(cuò)綜復(fù)雜的TCP狀態(tài)圖,然而現(xiàn)實(shí)更加復(fù)雜。

現(xiàn)實(shí)中的TCP狀態(tài)圖其實(shí)是這樣的:

 

一文讀懂客戶端請(qǐng)求是如何到達(dá)服務(wù)器的(干貨)

 

圖中,不僅SYN_RCVD狀態(tài)能夠收到reset數(shù)據(jù)包(圖中RST,reset數(shù)據(jù)包是重置連接的數(shù)據(jù)包,可以使TCP狀態(tài)瞬間變?yōu)镃LOSED狀態(tài),而CLOSED狀態(tài)是無(wú)法追蹤的),而且FIN_WAIT1、FIN_WAIT2、ESTABLISHED、SYN_SENT和CLOSE_WAIT都能被reset數(shù)據(jù)包打回到CLOSED狀態(tài)。不僅如此,TCP狀態(tài)還受到超時(shí)的影響。例如Linux系統(tǒng),一旦連接處于FIN_WAIT_2,在60秒內(nèi)(默認(rèn))如果沒(méi)有接收到對(duì)端的FIN數(shù)據(jù)包,系統(tǒng)會(huì)把此連接狀態(tài)FIN_WAIT_2直接變到CLOSED狀態(tài)。雖然Linux這樣做是為了防止攻擊,但這種超時(shí)就干掉連接狀態(tài)的做法,很可能誤殺了很多正常連接,從而使問(wèn)題更加捉摸不定。

在互聯(lián)網(wǎng)領(lǐng)域,很多詭異的問(wèn)題跟TCP狀態(tài)有關(guān)系,課程后續(xù)會(huì)有較多案例來(lái)講述這些靈異問(wèn)題。

4、端口

當(dāng)我們?nèi)ミB接服務(wù)器程序時(shí),需要指明服務(wù)器端口。為什么需要端口呢?因?yàn)橄到y(tǒng)是通過(guò)端口來(lái)區(qū)分不同應(yīng)用程序,TCP通過(guò)端口找到上層應(yīng)用。

需要注意的是,端口號(hào)是有限的,端口號(hào)最大為65535,能夠利用的端口數(shù)量隨配置而定。例如在壓力測(cè)試過(guò)程中,一臺(tái)機(jī)器可以利用的TCP端口是有限的,能夠利用的連接(客戶端端口,客戶端IP,服務(wù)器應(yīng)用端口,服務(wù)器IP地址)是有限的。為了解決這個(gè)問(wèn)題,可以配置多IP地址來(lái)擴(kuò)大可用連接數(shù)量。系統(tǒng)支持同一個(gè)端口,不同的IP地址來(lái)綁定不同的應(yīng)用。Linux高版本系統(tǒng)下,在綁定同一個(gè)IP地址的情況下,我們還可以利用REUSEPORT機(jī)制使不同應(yīng)用程序共享同一個(gè)監(jiān)聽端口,這對(duì)高性能服務(wù)器開發(fā)是非常有用的。我們開發(fā)的數(shù)據(jù)庫(kù)中間件cetus就利用這個(gè)機(jī)制來(lái)解決短鏈接風(fēng)暴的問(wèn)題。

5、IP

網(wǎng)絡(luò)層的主要工作是定義網(wǎng)絡(luò)地址,區(qū)分網(wǎng)段,子網(wǎng)內(nèi)MAC尋址,對(duì)不同子網(wǎng)的數(shù)據(jù)包進(jìn)行路由。IP的主要作用就是在復(fù)雜的網(wǎng)絡(luò)環(huán)境中將數(shù)據(jù)包發(fā)給最終的目標(biāo)地址。

IP是面向無(wú)連接的,是無(wú)狀態(tài)的協(xié)議。IP為什么被設(shè)計(jì)成無(wú)狀態(tài)呢?

1. 無(wú)狀態(tài)協(xié)議處理簡(jiǎn)單

2. 通信之前無(wú)需建立連接

3. TCP已經(jīng)面向連接服務(wù)了,IP層可以委托TCP來(lái)解決面向連接的問(wèn)題

4. 由于不帶有狀態(tài),互聯(lián)網(wǎng)路由起來(lái)更加自由,容錯(cuò)性也更強(qiáng)

值得注意的是,現(xiàn)實(shí)中的IP層往往都帶有安全過(guò)濾,甚至有些路由器,防火墻等中途設(shè)備還會(huì)干涉應(yīng)用(例如通過(guò)reset數(shù)據(jù)包來(lái)干涉TCP會(huì)話),為了更好的做安全檢測(cè),IP層還增加了connection tracking,在無(wú)狀態(tài)協(xié)議上面來(lái)追蹤上層連接。這種方式提高了安全性,但有時(shí)也會(huì)帶來(lái)新的問(wèn)題,我們后面有案例具體講述connnection tracking帶來(lái)的坑的故事。

6、TCP Socket

應(yīng)用程序通過(guò)TCP socket接口來(lái)調(diào)用TCP服務(wù),從而達(dá)到傳遞數(shù)據(jù)的目的。每一個(gè)TCP socket會(huì)被綁定到一個(gè)端口,TCP socket雙向都可以通信,在發(fā)送數(shù)據(jù)的同時(shí),還可以接收數(shù)據(jù)。

值得注意的是,應(yīng)用程序發(fā)送完數(shù)據(jù),只代表通過(guò)TCP socket委托給TCP的工作已經(jīng)完成,不代表發(fā)送給對(duì)端完畢,應(yīng)用發(fā)送數(shù)據(jù)和TCP傳輸數(shù)據(jù)不是同步的。

7、How TCP/IP Works

當(dāng)用戶通過(guò)TCP socket接口發(fā)送請(qǐng)求后,TCP協(xié)議模塊接管了請(qǐng)求傳遞,TCP先把請(qǐng)求拆分成一個(gè)個(gè)更小的數(shù)據(jù)分段(假設(shè)TCP offload沒(méi)有開啟的情況下),通過(guò)IP層發(fā)送出去。在IP層,這些數(shù)據(jù)分段會(huì)被封裝成IP數(shù)據(jù)包,通過(guò)數(shù)據(jù)鏈路層發(fā)送給互聯(lián)網(wǎng)(見下圖)。這些數(shù)據(jù)包經(jīng)過(guò)互聯(lián)網(wǎng)的多個(gè)路由器到達(dá)目的地。由于IP網(wǎng)絡(luò)是無(wú)狀態(tài)的協(xié)議,每一個(gè)數(shù)據(jù)包走的路徑可能不一樣,而且到達(dá)的順序也有可能不一樣,這就要求對(duì)端的TCP需要重新組裝數(shù)據(jù)包,以確保向應(yīng)用層傳遞的數(shù)據(jù)是用戶能夠識(shí)別的用戶請(qǐng)求,這樣服務(wù)器應(yīng)用程序就可以處理用戶發(fā)起的請(qǐng)求了。

 

一文讀懂客戶端請(qǐng)求是如何到達(dá)服務(wù)器的(干貨)

 

下圖中,假設(shè)用戶請(qǐng)求拆分成兩個(gè)IP數(shù)據(jù)包

 

一文讀懂客戶端請(qǐng)求是如何到達(dá)服務(wù)器的(干貨)

 

第一個(gè)IP數(shù)據(jù)包可能經(jīng)過(guò)A,B,C,G,如下圖。

 

一文讀懂客戶端請(qǐng)求是如何到達(dá)服務(wù)器的(干貨)

 

第二個(gè)數(shù)據(jù)包可能經(jīng)過(guò)A,B,E,G(在B點(diǎn)選擇了E節(jié)點(diǎn),導(dǎo)致路徑不同),如下圖。

 

一文讀懂客戶端請(qǐng)求是如何到達(dá)服務(wù)器的(干貨)

 

導(dǎo)致數(shù)據(jù)包在B節(jié)點(diǎn)走向不同路徑的原因可能有很多種,例如C節(jié)點(diǎn)暫時(shí)不如E節(jié)點(diǎn)通暢或者臨時(shí)發(fā)生了網(wǎng)絡(luò)擁塞,這與在高速道路駕駛的原理差不多。

由于網(wǎng)絡(luò)環(huán)境多變,還可能第二個(gè)數(shù)據(jù)包先到達(dá)服務(wù)器,這時(shí)TCP會(huì)負(fù)責(zé)處理out of order的情況;如果網(wǎng)絡(luò)傳遞過(guò)程中,某一個(gè)路由器由于過(guò)于繁忙,把第一個(gè)數(shù)據(jù)包丟了,那么客戶端的TCP會(huì)負(fù)責(zé)重傳第一個(gè)數(shù)據(jù)包,確保服務(wù)器端的TCP能夠不會(huì)因?yàn)閬G包而收不到第一個(gè)數(shù)據(jù)包。

如果用戶請(qǐng)求內(nèi)容很大,如上傳一個(gè)大文件,就會(huì)被拆分成大量數(shù)據(jù)分段,而TCP傳輸這些數(shù)據(jù)分段的時(shí)候,往往還會(huì)考慮整個(gè)互聯(lián)網(wǎng)能夠接收的程度和對(duì)方能夠接收的程度,發(fā)送數(shù)據(jù)過(guò)于貪婪不僅會(huì)連累整個(gè)互聯(lián)網(wǎng),對(duì)方也未必能夠接收得了,而且還可能使自己速度更慢,這有點(diǎn)像道路駕駛一樣,不能過(guò)于自私,遵守一定的交通規(guī)則才能使道路通暢。在互聯(lián)網(wǎng)傳輸數(shù)據(jù)方面,這些交通規(guī)則算法就是赫赫有名的網(wǎng)絡(luò)擁塞控制算法,而對(duì)方能否接收得了,則通過(guò)發(fā)送窗口的方式進(jìn)行控制。總體來(lái)說(shuō),一次發(fā)送數(shù)據(jù)的大小是根據(jù)對(duì)方的接收窗口大小和擁塞控制算法來(lái)綜合決定的。

從上面可以看出,IP負(fù)責(zé)在互聯(lián)網(wǎng)傳輸數(shù)據(jù),而TCP負(fù)責(zé)數(shù)據(jù)傳輸可靠并且盡量使網(wǎng)絡(luò)健康運(yùn)行,兩者合作完成了請(qǐng)求的傳遞,這也是互聯(lián)網(wǎng)應(yīng)用工作的普遍方式。

需要注意的是,TCP負(fù)責(zé)跟TCP進(jìn)行交互,應(yīng)用層無(wú)需去實(shí)現(xiàn)TCP的功能,只需要委托給TCP來(lái)完成數(shù)據(jù)傳輸,這種隔離的方式給應(yīng)用層的開發(fā)/運(yùn)維/測(cè)試帶來(lái)了方便,另外,當(dāng)出現(xiàn)TCP相關(guān)問(wèn)題時(shí),解決問(wèn)題的難度也大大增加。

8、TCP經(jīng)驗(yàn)知識(shí)

在多年實(shí)戰(zhàn)過(guò)程中,我們發(fā)現(xiàn)以下TCP經(jīng)驗(yàn)對(duì)工作很有幫助。總結(jié)如下:

1. 距離越遠(yuǎn),延遲越大,重傳概率越大

2. 網(wǎng)絡(luò)狀況好壞,直接影響應(yīng)用程序性能

3. 不同環(huán)境,采用不同的擁塞算法

4. 擁塞控制算法是互聯(lián)網(wǎng)的精華,是互聯(lián)網(wǎng)大獲成功的關(guān)鍵因素之一

5. TCP是有狀態(tài)協(xié)議,采用異步處理

6. 抓包分析是找到TCP相關(guān)問(wèn)題根本原因的利器

7. TCP客戶端和TCP服務(wù)器端之間的交互,是應(yīng)用層所有應(yīng)用公共的交互部分,理解了這部分原理,可以解決大量TCP相關(guān)問(wèn)題。

9、IP經(jīng)驗(yàn)知識(shí)

在IP經(jīng)驗(yàn)知識(shí)方面,我們大致總結(jié)如下:

1. 數(shù)據(jù)包選擇路徑不是固定的,到達(dá)的順序也可能是亂序的

2. 安全過(guò)濾,坑多的地方

3. 無(wú)狀態(tài)協(xié)議,簡(jiǎn)化互聯(lián)網(wǎng)架構(gòu),是互聯(lián)網(wǎng)大獲成功的關(guān)鍵因素之一

4. IP層對(duì)TCP傳遞過(guò)來(lái)的數(shù)據(jù)包很少分片處理

5. 中途設(shè)備不僅僅具備路由功能,而且還會(huì)干涉TCP會(huì)話(靈異問(wèn)題的溫床)

10、結(jié)束語(yǔ)

TCP/IP網(wǎng)絡(luò)是互聯(lián)網(wǎng)的基石,了解TCP/IP是如何工作的,對(duì)于我們解決問(wèn)題是非常有幫助的。

 

 

責(zé)任編輯:武曉燕 來(lái)源: 今日頭條
相關(guān)推薦

2019-08-20 08:56:18

Linux設(shè)計(jì)數(shù)據(jù)庫(kù)

2009-08-18 12:51:19

服務(wù)器+客戶端

2018-12-19 10:31:32

客戶端IP服務(wù)器

2023-07-26 10:21:26

服務(wù)端組件客戶端

2022-09-21 09:04:07

Python裝飾器

2014-06-01 11:03:13

VDI零客戶端

2011-06-09 10:51:26

Qt 服務(wù)器 客戶端

2019-11-05 10:47:16

Python框架服務(wù)器

2022-09-21 16:56:16

設(shè)計(jì)模式微服務(wù)架構(gòu)

2023-12-22 19:59:15

2021-08-04 16:06:45

DataOps智領(lǐng)云

2014-01-17 15:23:55

Nagios

2010-06-09 14:39:58

2020-12-29 09:56:29

瀏覽器緩存HTTP

2009-12-25 10:47:17

DNS服務(wù)器

2009-09-16 16:09:41

NIS服務(wù)器客戶端NIS

2019-08-28 15:19:15

PythonTCP服務(wù)器

2018-07-17 09:59:10

PythonUDP服務(wù)器

2018-12-18 10:47:37

2020-06-29 14:35:24

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 日韩av一区二区在线 | 91在线观看 | 一区二区视频在线 | 久久久久久久久久久久久久久久久久久久 | 欧美在线色 | 97起碰| 久久91精品国产 | 久久久久国产 | 成年人视频在线免费观看 | 国产精品一区一区三区 | 久久综合久久久 | 麻豆91精品91久久久 | 日韩精品一区二区三区视频播放 | h小视频 | 成人免费一区二区三区视频网站 | 久久在线| 亚洲国产第一页 | 国产日韩av一区二区 | 国产综合久久 | 日一日操一操 | 一区二区免费看 | 国产精品国产成人国产三级 | 狠狠躁天天躁夜夜躁婷婷老牛影视 | av网站在线看 | 午夜网 | 91精品国产色综合久久 | 97精品国产97久久久久久免费 | 日本在线精品视频 | 一区二区电影网 | 日日摸天天添天天添破 | 成在线人视频免费视频 | 成人在线精品视频 | 精品亚洲一区二区 | 国产在线一区二区三区 | 久久亚洲一区二区三区四区 | 综合久久亚洲 | 国产一级一级毛片 | 久热精品在线播放 | 男女激情网站免费 | 久久国产高清视频 | 亚洲精品永久免费 |