1. 程式人生 > >瀏覽器地址輸入一個域名發生了什麼(用類比的方法來理解)

瀏覽器地址輸入一個域名發生了什麼(用類比的方法來理解)

URL包含什麼: 協議(如:http) + 域名(如:baudu.com) + 檔案路徑(如:/htm_data/20/1510.html) + 埠(如:80)
開始—— os:我要輸入啦 1.輸入baidu.com
os:怎麼完整的一個URL都不給,算了先找找用了什麼協議 2.查詢該域名是不是在瀏覽器的 預載入HSTS中,如果在就自動使用HTTPS協議(http的加密版=http+ssl)不在就自動使用http
os:現在我得趕緊通過域名找到ip 3.利用DNS(域名系統)找對應的ip 3.1.瀏覽器有沒有 這個網址對映關係 3.2. 本地的hosts檔案是否有這個網址對映關係 3.3.我設定的本地DNS伺服器有沒有(360,google等等提供的)
3.3.1.如果我裡面沒有,但有人用本地伺服器訪問過,快取了,那麼我也返回ip,但      是這個不具有權威性
3.4.未設定轉發模式的話,直接傳送到根DNS(黃帝呀)詢問.com誰管,找到管理.com 的頂級DNS ip後,在頂級DNS伺服器查詢,頂級域名找下面的xxx.com伺服器,直到   找到xxx.baidu.com 3.4.1.如果沒有xxx那是域名管理者可以設定自己的域名指向,比如百    度,設定
www.baidu.com
指向自己的ip,同時也可以設定baidu.com指向自己的i    p,這樣訪問者不輸入www也可以訪問了 3.4.2.伺服器給瀏覽器響應一個301永久重定向響應,這樣瀏覽器就會訪    問“http://www.facebook.com/” 而非“http://facebook.com/”
os:重要找到了ip,該看看這個ip到底對應這我們計算機界得誰了 4.通過ARP( 地址解析協議) 查詢實體地址 4.1首先,每臺主機都會在自己的ARP緩衝區中建立一個 ARP列表,以表示IP地址和
MAC地址的對應關係。當源主機需要將一個數據包要傳送到目的主機時,會首先 檢查自己 ARP列表中是否存在該 IP地址對應的MAC地址,如果有,就直接將數 據包傳送到這個MAC地址; 4.2如果沒有,就向本地網段發起一個ARP請求的廣播包,查詢此目的主機對應的 MAC地址。此ARP請求資料包裡包括源主機的IP地址、硬體地址、以及目的主機 的IP地址。網路中所有的主機收到這個ARP請求後,會檢查資料包中的目的IP是 否和自己的IP地址一致。如果不相同就忽略此資料包;如果相同,該主機首先將 傳送端的MAC地址和IP地址新增到自己的ARP列表中,如果ARP表中已經存在該 IP的資訊,則將其覆蓋,然後給源主機發送一個 ARP響應資料包,告訴對方自己 是它需要查詢的MAC地址;源主機收到這個ARP響應資料包後,將得到的目的主 機的IP地址和MAC地址新增到自己的ARP列表中,並利用此資訊開始資料的傳 輸。如果源主機一直沒有收到ARP響應資料包,表示ARP查詢失敗。
os:終於找到它了可是它能說話不,能聽到我說話不,喂喂喂 5.三次握手建立連線 os:喂(syn),我愛你(seq), 5.1 客戶端 A傳送位碼為SYN=1,隨機產生ack=x的資料包到伺服器,主機B由SYN=1知道,A要    求建立聯機;
os:嗯(ACK=1),我也愛你(ack=x+1),喂(SYN),我們可以在一起嗎(ack=y)! 5.2伺服器收到SYN請求和資料x,然後傳送ACK=1( 確認編號(Acknowledgement Number)),主機A得隨機數x+1,傳送連線請求SYN=1,和隨機數y。
os:恩恩恩(ACK=1), 在一起在一起 (ack=y+1) 5.3:客戶端收到SYN和ack, 然後傳送ACK=1 ,主機A的隨機數y+1。
os:我們真的在一起了耶 5.4:伺服器收到確認訊息建立起TCP連線
6.頁面開始顯示 6.1. 但是顯示那個資料夾呢?其實,web伺服器會檢視當前的跟目錄,尋找預設的網頁,一般是index.html,當然,可以通過配置網頁去修改。再返回給web瀏覽器。所以,當我們訪問www.baidu.com的時候,瀏覽器會自動幫我們加上http://,變成http://www.baidu.com. 而百度的伺服器,收到該請求後,會自動加上/,變成: http://www.baidu.com/. 並且每一次請求完成後會釋放一次(也就是四次揮手) 7.四次揮手 os:送過去戒指(FNI)和一句我們分手吧(sqe1),然後開始等待( FIN_WAIT_1 7.1.客戶端傳送FIN(finish)和sqe1給伺服器,告訴伺服器結束連線,然後進入 FIN_WAIT_1狀態
os:我知道了(ack),我知道你要和我分手了(sqe+1),讓我想想( FIN_WAIT_1) 7.2.伺服器傳送確認訊息,和隨機sqe+1,然後進入( FIN_WAIT_1)狀態
os:我想明白了我們結束吧(FIN),就這樣了嗎(sqe2) 7.3.伺服器傳送FIN和sqe2給客戶端,伺服器進入(Last_ack)
os:嗯(ACK),就這樣吧(sqe2+1),說完之後久久沒有離開(2秒鐘) 7.4:客戶端收到確認訊息(ACK),向伺服器傳送確認訊息(sqe2+1)