域名、主机服务器、ip、网卡、网站之间的关系是啥

Q1:大型网站你看到的它的IP地址所对应的东西不是一个网站服务器,而是一个负载均衡器,它负责分发外部请求到具体的网站服务器上,具体的服务器有很多台,数据是冗余的,但也可能是从另外一台存储服务器上获得的数据。总之,对于大型网站,外网IP对应的不是一个真实的网站服务器。Q2:一个IP可以对应多个域名,当你请求一个网页的时候,你的HTTP请求里包含了你要请求的主机的名字,比如你打开google的时候请求的内容是这样的:GET http://download.google.com/somedata.exeHost: http://download.google.comAccept:*/* Pragma: no-cache Cache-Control: no-cache Referer: http://download.google.com/ User-Agent:Mozilla/4.04(Win95;I;Nav) Range:bytes=554554- 看到加粗的部分了吗?你要访问的域名也包含其中。所以虚拟主机收到它以后,根据host字段就可以确定你到底访问的是哪个网站。在IIS或者Apache中,这都可以设置。你自己部署的IIS服务器也可以绑多个网站。Q3:同上,Q2已经说的很明白了,一个IP可以对应多个域名,IIS或者Apache都有能力解析。
■网友
你這裡每個問題都可以回答成一篇文章了呀。
首先,你需要了解三個基礎網絡知識。
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服務器無法解析,則本主機名最終解析失敗。
【域名、主机服务器、ip、网卡、网站之间的关系是啥】 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上並行存在多個不同的主機地址。


推荐阅读