1. 程式人生 > >打開百度要用幾步

打開百度要用幾步

作用 dos攻擊 並發 poe 二層 環境 結果 引入 pppoe撥號

要把大象裝冰箱,只需要三步。但想打開百度確需要n多步,本文討論一下詳細的步驟和其中牽扯的技術。

1、突破內網

PC在開機時就通過DHCP獲取到了IP地址和DNS地址,並通過ARP獲取到網關的MAC地址,以太網的二層網絡中通信需要對端的MAC地址。

通過NAT將內網地址轉換為公網地址。

路由器通過PPPoE撥號認證。

1.1 DHCP詳細流程:

查看/釋放/重獲取ip地址

ipconfig /all

ipconfig /release

ipconfig /renew

技術分享圖片

DHCP是應用層協議,客戶端使用UDP68端口,服務端使用67端口。

1.1.1 DHCP discover

PC發出DHCP Discover廣播報文

向整個廣播域內廣播請求DHCP服務器(這裏就是家庭路由器)的地址回復

技術分享圖片

1.1.2 DHCP Offer單播報文

DHCP服務器收到Discover數據包時,從地址池中獲取一個地址,給客戶端單播回復一個包含此地址的回復

技術分享圖片

1.1.3 DHCP Request廣播報文

客戶端接收到此地址後,向整個內網廣播,告訴所有DHCP服務器自己已經做出選擇,接受了某個DHCP服務器的租約。但目前還無法使用。

技術分享圖片

1.1.4 DHCP ACK單播報文

服務器接收到ACK時,向客戶端回復確認,此時客戶端就可以快樂的上網了。

技術分享圖片

1.2 ARP 的作用

在內網的二層環境下,需要使用MAC地址進行轉發,所以需要PC和路由器都需要使用ARP將對端設備的MAC地址記錄在本地的ARP表

查看/清空arp緩存

arp -a

arp –d

技術分享圖片

技術分享圖片

1.2.1 PC廣播ARP廣播報文查詢網關的MAC

技術分享圖片

1.2.2 網關單播ARP報文回復

技術分享圖片

1.3 NAT地址轉換

訪問公網需要使用公網地址,但由於IPV4地址數量緊張,運營商只會給每戶分配一個地址,想要內網中復數臺終端上網就需要通過NAT技術將私網地址轉換為公網地址。

這裏使用的是端口復用模式。私網地址通過NAT轉換為公網地址加上端口號的模式。

2、公網遨遊

通過路由器後進入接入網的範圍,這裏數據包封裝為PPPoE+QinQ模式。在BAS設備處終結。

進入傳輸網後,通過各種路由協議路由到百度的數據中心。

獲取了百度的IP地址後,數據包就可以路由到百度的數據中心了。

查詢經過訪問路徑

tracert -d www.baidu.com

技術分享圖片

3、找到百度真身

雖然我們有了到達百度數據中心的能力,但是不知道百度的IP地址也沒用,通過DNS獲取到百度的IP地址。

DNS是應用層協議,同時使用TCP和UDP的53端口傳輸數據。

3.1 DNS的詳細過程:

由於我們的DNS服務器地址是網關地址,所以DNS的叠代查詢由路由器和其余DNS服務器交流。

3.1.1 獲取百度的權威服務器地址

查看dns查詢過程,查詢到權威dns

dig www.baidu.com +trace

其實這些都是路由器幫我們完成的工作,但使用此命令也可以看到

這裏按照.,com.,baidu.com.的順序查找DNS服務器,這裏的回復結果全部都是各種NS記錄,最終回復百度的權威DNS服務器的A記錄和NS記錄還有CNAME記錄。

我們可以看到百度有5臺DNS服務器,系統最終會選擇最早的回復。

技術分享圖片

技術分享圖片

3.2 查詢百度的權威服務器

獲取百度的IP地址,也就是A記錄,這個由PC來完成,並記錄到本地的DNS緩存中。

查看/清空dns緩存

ipconfig /displaydns

ipconfig /flushdns

這裏可以看到百度的CNAME,也就是別名。還有a記錄,也就IP地址了

技術分享圖片

4、打開網站

通過各種設備,anti-DDOS,鏈路負載,防火墻,服務器負載,WAF,服務器

Web服務器:Nginx,Apache,IIS

後端:各種中間件,後端程序

和web服務器進行TCP連接TCP三次握手

http get請求

http response (HTML,CSS,JS)

和web服務器TCP四次揮手

瀏覽器渲染

4.1 HTTP交互數據的詳細流程

這裏是POST方法獲取目標站點資源的流程(由於百度現在都是HTTPS鏈接了,就用個別的吧,原理是一樣的)。

143-145號包是TCP三次握手的包,三次握手用來建立TCP連接

146是瀏覽器發送HTTP POST請求的包

147是Web服務器收到146號包回復的確認包,在TCP數據傳輸中,收到數據包就會回復對方一個ACK包表示確認收到

148是Web服務器回復POST請求的回復包,HTTP狀態碼為200,表示正常回復

149-153號包是TCP四次揮手的包,四次揮手用來結束TCP連接,其中149包含了對148的ACK

至此完成了一次完成的請求過程

技術分享圖片

4.2 數據中心裏的亂七八糟的設備

數據包在進入百度的數據中心後還要經過N多設備的洗禮,經過各種拆包封包後才會給到Web服務器

簡單的拓撲是這樣,實際中比這個還要復雜些

技術分享圖片

一般第一個設備就是anti-DDos設備,專門用來防禦DDos攻擊,當發現數據流的攻擊特征後采用路由註入的方式將DDos的數據引入黑洞路由中

鏈路負載,負責依據客戶端的源地址從相應的運營商鏈路中送回去

防火墻,五元組,會話的方式保護內部,主要監測下四層,限制不受歡迎的IP進入,同時做目的NAT,將內部的真實地址隱藏起來

SSL卸載,將HTTPS包解密為普通的HTTP數據包

服務器負載,引據各種算法,將數據包引流到最健壯的服務器上

IDS,即入侵檢測,旁路在交換機上,檢查數據包的特征指紋,判斷其是否是攻擊包,主要監測上三層

交換機,純轉發

WAF,在應用層面上保護web應用,防禦針對web應用的攻擊,防止SQL註入,框架攻擊等等

4.3 服務器裏面發生了什麽

總算進到了服務器裏面,外面硬件設備的工作暫告一段落,各種軟件的工作才剛剛開始

4.3.1 Web服務器

Web服務器為每一個到來的HTTP請求開一個新的線程,來進行並發的處理

Web服務器只負責處理HTTP協議,只能發送靜態頁面的內容。而JSP,ASP,

PHP等動態內容需要通過CGI、FastCGI、ISAPI等接口交給各種後端程序去處理。

4.3.2 後端程序

後端程序負責處理各種邏輯,然後生成HTML文件,然後交還給Web服務器,最後再由Web服務器帶上靜態內容(如圖片,css,js等)返回給客戶端,有些數據還需要去數據庫中進行操作

4.3.3 數據庫

需要長期保存的數據都要保存在數據庫中,在需要時由後端程序向數據庫進行各種增刪改查的操作,數據庫將結果返回給後端程序

4.4.4 緩存

對於某些經常被訪問的資源,每次都查詢數據庫,後端處理就很麻煩了,可以將其存入緩存中,下次再請求相同的資源就可以由Web服務器直接調用緩存中的靜態資源返回給客戶端

4.5 瀏覽器渲染

其實Web服務器返回給我們的是一堆代碼和地址

是由HTML,JS,CSS和文字圖片之類的構成的

右鍵查看源代碼,這個才是我們實際收到的東西,最後由瀏覽器渲染成了我們看到的樣子

5、總結

可以看出來簡單的訪問一個百度,中間經歷了這麽多的步驟,算上中間的每一跳轉發設備,幾百步總是有了,然而這麽多的步驟(由於本人的水平有限,中間應該還省略了很多步驟),最終經歷不過1秒鐘

打開百度要用幾步