首頁>Club>
Q1:但是現在一個大型網站,比如sina或者baidu,他們的伺服器主機肯定超級多,如果一個主機一個公網ip的話,那麼一個http://www.baidu.com域名就對應很多ip,究竟訪問哪一個呢,這些主機上的資料是否是冗餘儲存的?Q2:還有就是做虛擬主機服務的這些公司,他們應該是一臺主機伺服器上面設定有很多網站,那麼應該是一個ip對應了很多域名,請求者可以透過域名找到主機,但是如何找到網站呢?Q3:一個ip能否對應多個主機(一個公網ip,而不是私有ip)?。
5
回覆列表
  • 1 # 王海軍老師

    首先,你需要了解三個基礎網路知識。

    1 DNS

    1.1 DNS簡單說就是你給它一個域名,它解析一個IP給你。但是實際上情況不是這麼簡單的。

    客戶端發起一個DNS查詢請求,提交一個完整主機名(例如www.abc.com)到設定的DNS伺服器上,DNS伺服器如果查詢到相關記錄,則返回這個記錄。對於IPv4,記錄分為A記錄或者CNAME。A記錄表示是一個IPv4的地址,CNAME表示為另外一個主機名(例如server1.realserver.com)。A記錄允許同名存在,多個不同的IP被對應到同一個主機名上,也允許使用根記錄,本例中即為abc.com,不帶任何字首;CNAME不允許同名存在,不允許根記錄,也不允許與A記錄同名。如果客戶端得到的返回是一個CNAME,則會重新再來一次DNS查詢去解析這個CNAME的IP。對於這個CNAME的查詢,可能返回另外的CNAME,則這個過程會很長,直至解析出A記錄。

    1.2如果DNS伺服器上沒有查詢到相關記錄,則會詢問上一層的DNS伺服器。如果上一層伺服器解析出結果,則它在返回給使用者結果時,順便自己快取一份。快取的時間由域名的TTL決定。

    1.3每個域名首先要註冊在跟DNS上NS伺服器名稱。當一個區域中最頂層的DNS也沒有使用者查詢的主機名記錄時,則會首先向INTERNET跟DNS獲取這個NS伺服器名稱,並嘗試向這個NS伺服器發起查詢請求。NS伺服器必須響應並響應這個查詢。如果DNS跟伺服器無法被連線到、NS無法被找到、無法被連線到或者NS伺服器無法解析,則本主機名最終解析失敗。

    1.4 DNS如果返回多條A記錄時,會生成一個有序集合。這個排序根據歷史查詢雜湊,並根據訪問者的IP所在區域最佳化。客戶端拿到的集合中的第一條IP通常為一個最佳化後的地址,但其他地址依舊可作為備選使用。

    1.5 DNS伺服器通常不歸主機管理商所有,並且由於需要快速響應,在查詢的時候是無法判斷主機狀態和負載的。但一些較大的機構,會自己擁有一個重新設計的DNS伺服器,考慮到這些資訊。而對於這種情況,外部公網的DNS只能解析出一個CNAME,並交由這個DNS來進行後續解析(這個DNS被註冊為這個CNAME對應的NS)。這種設計下的DNS通常被認為是NLB(網路負載均衡)設計的一部份。

    1.6由於1.2提及的代理查詢以及TTL的機制,DNS其實並不能良好的實現伺服器的輪詢負載均衡,但是可以實現區域最佳化查詢,即對某個特定區域儘量返回其區域內的IP結果。

    2 HTTP頭

    在發起HTTP請求時,客戶端會同時提交要訪問的檔案(一般在GET命令後)以及主機名(HOST欄位),對方伺服器會根據這個HOST來確定它要訪問的域名。所以一個主機在一個IP上並行存在多個不同的主機地址。

    3 NLB

    通常的NLB有三種解決辦法。

    3.1本地DNS加速,如1.5所述的方法。

    3.2 CDN(內容分發網路)。CDN可以被看做是一個獨立的HTTP代理網路。使用CDN的時候,DNS應把域名解析到某個CDN的全球IP群上。CDN伺服器得到HTTP請求後,會在轉發原真實伺服器的資料時,本地快取一份。甚至可以實現資料的預推送。因此CDN非常適合於靜態資料的全球化快取。例如微軟釋出補丁、蘋果釋出新產品、Wordpress、Amazon網站的圖片快取都是使用了CDN技術。

    3.3虛擬IP地址。通常情況下,一個IP不應該被設定到超過一個裝置上,因為超過這個設定後,上層的路由器就不知道如何轉發這個包了。但是,如果路由器經過了設定(例如BGP協議或者專門設計的路由軟體等),是可以在多個裝置下共享同一個IP的。這種共享既可以是物理的(多個裝置同時使用一個IP,由上層路由進行分支選擇或者廣播、組播資料包),或者是輪詢的(多個裝置輪流使用一個IP,同時只有一個裝置使用這個IP,而這個IP可以在多個裝置間高速切換)。如果某個應用必須基於IP地址(例如DNS服務本身),只能使用這種方式來處理。

    那麼回頭看你三個問題。

    Q1返回多個A紀錄後,客戶端會按照集合的順序依次嘗試訪問。這些資料在NS伺服器上是單一存在的,但是會被多層DNS快取。

    Q2 HTTP頭段已經講述。

    Q3希望你看過NLB段後能理解。

  • 2 # 網路圈

    關於域名、伺服器、IP、網絡卡與網站之間的關係,如果要梳理清楚,那就要先向你介紹一下WEB工作流程。

    WEB工作流程,使用者訪問網站過程中經歷了哪些流程?使用者開啟瀏覽器 -> 輸入域名 -> 回車 -> 網頁內容在使用者瀏覽器上顯示出來。

    上面的流程是使用者在表象層上的感知,但在技術層上,遠遠不止這些流程,具體流程如下(以下流程也僅僅是精簡流程,技術要做的工作遠不止這些):使用者開啟瀏覽器 -> 輸入域名 -> 回車後,使用者系統本地會對此域名進行解析 -> 找到此域名對應的IP -> 然後定位到要訪問網站的遠端伺服器 -> 瀏覽器傳送請求(要獲取哪個頁面) -> 遠端伺服器接收到請求後,將頁面傳送給使用者瀏覽器 -> 使用者瀏覽器解析頁面HTML進行渲染 -> 頁面最終展現在使用者眼前。

    關係梳理

    伺服器(硬體)伺服器做為硬體裝置,網站是要部署在伺服器之上的,所以少了硬體的支援,就談不上網站。

    網絡卡(硬體)網絡卡做為電腦上的硬體裝置,要上網就離不開網絡卡,不管是客戶端(使用者的電腦)還是網站伺服器,如果少了網絡卡,聯網這輩子都是不可能的了。

    IP有了電腦/伺服器、網絡卡,接入運營商網路後,網路運營商就會給你分配一個全世界獨一無二的公網IP,以此來定位客戶端電腦和伺服器端。IP可以理解為人的身份證,在網際網路上代表某臺機器的唯一編碼。

    域名問題來了,IP是一串較長的數字,如:61.190.38.59,如果我們要訪問對方電腦,直接輸入IP是可以進行訪問的,但是記起來太費事,所以出現了域名,將域名和IP繫結起來,就能透過很好記憶的域名來反解析出IP,然後找到網際網路上的目標機器。

    網站(軟體)網站其實是一套系統,它接收使用者請求然後做出處理,這樣使用者就能得到處理後的結果。

    大型網站1個域名對應多個IP如何理解?

    網站域名是1個,像百度這類公司伺服器成千上萬,總不能用1個域名繫結成千上萬個IP吧,這是怎麼做到的呢?

    其實是這樣的:

    1個域名可以解析到1個特定的IP上,然後這個特定IP的伺服器可以將使用者的請求按一定規則分發到N臺伺服器上,專業名詞叫“反向代理”。

    舉個栗子:

    一個集團董事長要幹一件事,他會找相關的部門,如技術部,董事長找到技術部總領導,說我要做什麼什麼,技術部領導接到任務後會進行任務折解,分到技術部不同人員身上,最終將完成結果反饋給董事長即可。此時技術部總領導就充當了“反向代理”的功能,將任務分發出去,他的下屬將此事辦妥後再由他反饋至董事長。

    關於你講的資料冗餘問題,分散式系統中,資料是存在冗餘的。

    虛擬主機上多個域名是如何定位到多個網站中的特定一個的?

    假設1臺高配伺服器,我們利用它搭建200個虛擬主機,那這200個虛擬主機可以繫結200+個域名,每個域名對應1個網站。

    具體怎麼定位的?

    WEB伺服器系統(如:Nginx、IIS)上每個網站會繫結對應的域名,這樣雖然200個域名都解析到這同1臺伺服器的IP上,但Nginx和IIS上能獲取使用者請求的域名,這樣就能定位到具體的網站上去。

    一個公網IP能否對應多個後端主機?

    可以的,這就是“反向代理”的作用,1個公網IP解析到某1臺伺服器上,然後這臺伺服器上配置規則可以將請求分發至後端多臺伺服器上。

  • 3 # 三A說養花

    域名簡單的說就一個網站地址,這個地址是唯一的。

    主機伺服器就是用來執行網站程式和儲存資料的。

    IP是伺服器地址。

    網絡卡是伺服器與外界連結一個出口。

    網站是執行在伺服器上的程式。

    它們之間的關係是:IP和域名是繫結在伺服器上,域名透過DNS伺服器指向IP地址上,這樣輸入域名就可以訪問到伺服器。

    Q1:這些大型網站有一個主伺服器和很多加速伺服器。我們一般訪問到是加速伺服器上的快取資料。

    Q2:透過網站執行環境,如IIS。每個域名在繫結在IIS,然後透過IIS指向對應的虛擬目錄。

    Q3:1個IP只能對應一臺主機。

  • 4 # 影蹤share

    首先幫題主梳理一下幾個名詞之間的關係,再回答題主的問題。

    伺服器

    現在我們說起伺服器,可能是指一臺物理機,也可能是一臺虛擬機器,也可能是雲服務商的一個容器(docker)。如果是物理機,由於物理機效能都非常好,一般都會在伺服器上部署多個網站。而虛擬機器和容器本身就是一種資源劃分的手段,一般只會在一個虛擬機器或容器裡部署一個網站。所以伺服器和網站的關係是1比1-N。

    IP、網絡卡、伺服器

    伺服器上部署了網站,想要網站能被外界訪問需要一個公網IP。而網絡卡就是繫結IP,提供資料傳輸能力的硬體。網絡卡與IP的關係是1比1,一個伺服器可以插多個網絡卡。

    域名、IP

    有了IP,實際上使用者就可以訪問到網站了,但IP地址不容易記,所以就有了域名。透過DNS可以實現域名到IP的解析。一個域名可以繫結多個IP,假設悟空問答的域名綁定了100個IP,透過DNS的負載均衡策略,每次解析返回的IP地址都可能不一致。

    題主的問題:Q1

    第一問題其實是,假設我只有一個公網IP,但我有100臺伺服器部署了網站,要如何部署才能讓使用者的請求平均分配到這100臺機器上。給一種比較簡單的方式:

    公網IP繫結的機器是一臺反向代理(Nginx),反向代理跟後端的100臺機器保持長連線檢查機器狀態,有請求進來時,根據負載均衡策略從100臺機器中選擇一臺處理請求。使用者能感知到的機器就是反向代理一臺(一個IP),但實際提供服務的是後端的100臺機器。

    題主的問題:Q2

    虛擬機器商在分配機器時,如果你選擇了獨立IP,每臺機器都有獨立的虛擬網絡卡,每個網絡卡都有自己的IP。

    題主的問題:Q3

    正常情況下一個公網IP只會繫結一臺機器。

  • 中秋節和大豐收的關聯?
  • 如果金兀朮是民族英雄,那麼建立偽楚的張邦昌,偽齊的劉豫為什麼不是民族英雄?