一、發起請求
1、應用層
瀏覽器輸入:https://www.kaola.com
DNS、HTTP、HTTPS 所在的層我們稱為應用層
2、傳輸層
經過應用層封裝后,瀏覽器會將應用層的包交給下一層去完成,通過 socket 編程來實現。下一層是傳輸層
傳輸層有兩種協議,一種是無連接的協議UDP,一種是面向連接的協議TCP。對於支付來講,往往使用 TCP 協議。
所謂的面向連接就是,TCP 會保證這個包能夠到達目的地。如果不能到達,就會重新發送,直至到達。
3、網絡層
4、MAC 層
城關往往是知道這些“知識”的,因為城關和臨近的城關也會經常溝通。到哪里應該怎么走,這種溝通的協議稱為路由協議,常用的有OSPF和BGP。
5、網關
於是操作系統將 IP 包交給了下一層,也就是MAC 層。網卡再將包發出去。由於這個包里面是有 MAC 地址的,因而它能夠到達網關。
網關收到包之后,會根據自己的知識,判斷下一步應該怎么走。網關往往是一個路由器,到某個 IP 地址應該怎么走,這個叫作路由表。
6、路由器路由表
路由器有點像玄奘西行路過的一個個國家的一個個城關。每個城關都連着兩個國家,每個國家相當於一個局域網,在每個國家內部,都可以使用本地的地址 MAC 進行通信。
一旦跨越城關,就需要拿出 IP 頭來,里面寫着貧僧來自東土大唐(就是源 IP 地址),欲往西天拜佛求經(指的是目標 IP 地址)。路過寶地,借宿一晚,明日啟行,請問接下來該怎么走啊?
7、路由協議
城關往往是知道這些“知識”的,因為城關和臨近的城關也會經常溝通。到哪里應該怎么走,這種溝通的協議稱為路由協議,常用的有OSPF和BGP。
二、目標服務器
1、目標服務如何處理
目標服務器發現 MAC 地址對上了,取下 MAC 頭來,發送給操作系統的網絡層。發現 IP 也對上了,就取下 IP 頭。IP 頭里會寫上一層封裝的是 TCP 協議,然后將其交給傳輸層,即TCP 層。
在這一層里,對於收到的每個包,都會有一個回復的包說明收到了。這個回復的包絕非這次下單請求的結果,例如購物是否成功,扣了多少錢等,而僅僅是 TCP 層的一個說明,
即收到之后的回復。當然這個回復,會沿着剛才來的方向走回去,報個平安。
因為一旦出了國門,西行路上千難萬險,如果在這個過程中,網絡包走丟了,例如進了大沙漠,或者被強盜搶劫殺害怎么辦呢?因而到了要報個平安。
2、什么是瀏覽器重試
如果過一段時間還是沒到,發送端的 TCP 層會重新發送這個包,還是上面的過程,直到有一天收到平安到達的回復。這個重試絕非你的瀏覽器重新將下單這個動作重新請求一次。對於瀏覽器來講,
就發送了一次下單請求,TCP 層不斷自己悶頭重試。除非 TCP 這一層出了問題,例如連接斷了,才輪到瀏覽器的應用層重新發送下單請求。
當網絡包平安到達 TCP 層之后,TCP 頭中有目標端口號,通過這個端口號,可以找到電商網站的進程正在監聽這個端口號,假設一個 Tomcat,將這個包發給電商網站。
3、接待員
電商網站的進程得到 HTTP 請求的內容,知道了要買東西,買多少。往往一個電商網站最初接待請求的這個 Tomcat 只是個接待員,負責統籌處理這個請求,而不是所有的事情都自己做。
例如,這個接待員要告訴專門管理訂單的進程,登記要買某個商品,買多少,要告訴管理庫存的進程,庫存要減少多少,要告訴支付的進程,應該付多少錢,等等。
4、如何告訴相關的進程呢?
如何告訴相關的進程呢?往往通過 RPC 調用,即遠程過程調用的方式來實現。遠程過程調用就是當告訴管理訂單進程的時候,接待員不用關心中間的網絡互連問題,
會由 RPC 框架統一處理。RPC 框架有很多種,有基於 HTTP 協議放在 HTTP 的報文里面的,有直接封裝在 TCP 報文里面的。
當接待員發現相應的部門都處理完畢,就回復一個 HTTPS 的包,告知下單成功。這個 HTTPS 的包,會像來的時候一樣,經過千難萬險到達你的個人電腦,最終進入瀏覽器,顯示支付成功。