讀《網路是怎樣連線的》第六章 總結
這章可以說是非常簡單了,基本都是之前的東西.那麼,我們開始吧.
第五章我們知道了資料包最終都是要到達web伺服器的,不管是用了負載均衡技術還是快取的技術, 其 讓使用者接收的的響應資料都是通過 web伺服器產生的, 那麼,我們這一章就聊聊 資料包到達了 web伺服器發生了什麼吧.
- 伺服器與客戶端的區別
- 複習以下如何接收包
- web伺服器如何形成響應資料
- 瀏覽器得到了相應資料,如何生成顯示內容
一. 伺服器端與 客戶端有什麼區別呢?
嗯哈,很明顯,效能就是巨大的區別 啊,,,但是,,我們先不關注這個,我們看看tcp連線 與 收發資料包 的層面,兩者有什麼區別.
tcp 連線層面:
在這個層面, 我們知道, 兩端通訊, 首先各自都要生成表示 自身的 socket識別符號. (客戶端的埠號按應用不同而設定,伺服器端的埠號根據規則設定,如web伺服器就設定80)
然後,客戶端向伺服器端傳送SYN=1的tcp控制訊號(還有像序號、視窗大小等東西)。
在客戶端進行一系列騷操作之前, 伺服器端 需要先監聽連線, 發現有人在試圖連線後,就把我們原先在伺服器端建立的socket 識別符號複製產生一個 新的套接字,然後把客戶端傳送過來的配置資訊放進去(如,客戶端的ip、埠、需要、視窗大小等),
之後, 這個socket需要 給 客戶端返回一個tcp控制資訊 的響應,(ack=1 、 序號、視窗大小等高速客戶端),然後客戶端再返回一個確認響應就好了.
收發資料包:
這個與客戶端是完全一樣的, 因為不管 伺服器的硬體和作業系統如何變化 ,其網路服務的元件都是一樣的,不然網路就太複雜了.
所以,伺服器收發資料包 也是用的網絡卡.
二. 接收資料包
複習一下:
網卡里的MAC模組在 PHY把 網路中傳輸的訊號轉換成一般的 電訊號後, 就進行了如下操作:
1.接收電訊號, 並把電訊號轉換成數字訊號( 利用報頭中的時鐘訊號)
2.利用 FCS進行校驗. (正確,則進行下一步,否則就丟棄該包)
3.檢測MAC首部。的MAC接收地址是不是MAC 模組中的MAC地址,不是就丟掉, 是的話就放入 網絡卡的緩衝區中.
ok,接下去就看看誰在接力了:
在資料在緩衝區後, 中斷程式告知cpu ,資料到了,你來取一下, cpu知道後,就中斷當前的工作, 呼叫網絡卡驅動程式衝網絡卡的快取中讀資料, 並根據 MAC中的乙太網型別判斷協議種類, 把資料送給處理該協議的軟體(如IP協議 就——》TCP/IP協議棧)
再之後呢?
ip 模組在接力:
1.看看 ip是不是發給自己的(不是就轉發出去)
2.網路包是否經過分片(等所有分片全部到達後組裝回原來的 原始包)
3.檢測ip頭部的協議欄位(tcp就是06),那麼就把包給TCP模組處理
不慌,TCP模組在操作:
1.根據收到的包的放鬆方IP和埠, 接收方的ip和埠, 在 套接字表中找到對應要通訊 的是 哪個套接字
2.將資料塊拼合起來放在接收緩衝區中(檢查傳送的序號, 序號正確就把包放入緩衝區拼接起來)
3.返回ACK
這時,資料都存到了緩衝裡面,接下來,應用程式會呼叫Socket.read() 把資料取走,然後分析資料,作出響應.
三. 如何形成響應
先不急著做響應, 我們起碼得先看看請求的是什麼, 如果是文字(html、、、),那麼我們直接從檔案中讀取文件,然後將其作為響應訊息返回就好了, 如果是CGI程式( 不太明白 ), 那麼 我們就要執行這個程式,把必要的引數傳給它,然後把程式執行結束產生的資料嵌入HTML文件 作為響應返回.
補: web伺服器的訪問控制
就是 我們訪問的目錄其實是假的,是虛擬目錄, 在我們所看到的根目錄之外其實還有其他目錄存在,不過我們被限制了訪問罷了.
三種 訪問控制的規則:
1.客戶端ip
2.客戶端域名
3.使用者名稱和密碼
只有滿足條件的客戶端可以訪問伺服器的資料.
四. 瀏覽器如何顯示內容
要顯示內容,首先要看看響應訊息中的資料屬於哪種型別,web可以處理的型別包括 文字、影象、聲音和視訊等.每種型別的顯示方式都不同,所以先確定資料的型別才行.
瀏覽器檢視響應頭, 響應頭中有個存在 名為 Content-Type : text/html。 (左邊為 主型別, 右邊為 子型別)
ok,接下來我們看看具體如何顯示內容:
對於圖片文字這類的資料,瀏覽器可以自行顯示: 瀏覽器解釋標籤的含義,按照指定的樣式顯示文件內容,實際的顯示操作由作業系統完成, 瀏覽器負載對作業系統發出指令.
對於其他內容的資料(eg: ppt),瀏覽器會呼叫相應的程式來幫忙. 將資料傳給幫忙的程式,然後改程式負責顯示相應的內容.
嗯哈,這本書結束啦,雖然寫部落格挺花時間,但感覺還不錯
✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️✌️