注册
登录
提问时间:2016/7/23 11:35:53
我知道域名是通过DNS解析出ip然后返回给请求者,然后请求者通过这个ip找到相应主机。
Q1:但是现在一个大型网站,比如sina或者baidu,他们的服务器主机肯定超级多,如果一个主机一个公网ip的话,那么一个baidu.com域名就对应很多ip,究竟访问哪一个呢,这些主机上的数据是否是冗余存储的?
Q2:还有就是做虚拟主机服务的这些公司,他们应该是一台主机服务器上面设置有很多网站,那么应该是一个ip对应了很多域名,请求者可以通过域名找到主机,但是如何找到网站呢?
Q3:一个ip能否对应多个主机(一个公网ip,而不是私有ip)?这个我看书上说可以,但是不理解,感觉太矛盾了。
我知道域名是通过DNS解析出ip然后返回给请求者,然后请求者通过这个ip找到相应主机。
Q1:但是现在一个大型网站,比如sina或者baidu,他们的服务器主机肯定超级多,如果一个主机一个公网ip的话,那么一个http://www.baidu.com域名就对应很多ip,究竟访问哪一个呢,这些主机上的数据是否是冗余存储的?
Q2:还有就是做虚拟主机服务的这些公司,他们应该是一台主机服务器上面设置有很多网站,那么应该是一个ip对应了很多域名,请求者可以通过域名找到主机,但是如何找到网站呢?
Q3:一个ip能否对应多个主机(一个公网ip,而不是私有ip)?这个我看书上说可以,但是不理解,感觉太矛盾了。… 显示全部
1楼(站大爷用户)

Q1:大型网站的服务器都有均衡负载策略,虽然是一个IP,但对应的可能是多台内部服务器,由负载均衡策略决定每次访问落实到哪台服务器。
Q2:具体不太清楚,我只知道WindowsAzure国内云服务是给每个虚拟机都分配虚拟外部IP并向内网做映射的。
Q3:在Q1那种情况下,一个公网IP是可以对应一个服务器集群的。外部看起来只有一台服务器,其实是多台服务器进行负载均衡。
2楼(未知网友)

前两个问题都回答过了,我只说第三个问题,书中说的任播是ipv6的概念。在ipv6里面是可以的。
3楼(未知网友)

可以根据你网络所处位置、各服务器负载情况,返回一个最优的地址,或者返回一个页面,重定向一下
4楼(未知网友)

看到知乎竟然吧这个问题推荐到我的个人首页了,我就进来简要的回答一下
Q1:一台主机可以对应一个公网ip也可以对应多个,也可以没有,前者的ip相当于你私有的,而后者则是常用的共享ip技术。
你的第一个问题,我猜想你应该想问的是一个域名对应多个ip的情况,这个分配主要是由dns来完成。也就是智能解析。

域名智能解析是指dns服务器根据来访者的IP类型,对同一域名作出相应不同解析。对IP来自电信的访问者,将域名解析到该域名对应IP地址为电信的服务器上。对IP来自网通的访问者,将域名解析到该域名对应IP地址为网通的服务器上。以保证访问者不因网通电信线路瓶颈而造成网速慢。
出处:http://baike.baidu.com/view/3088909.htm
也就是说,dns服务器会使用Bind Views和edns的技术来对你的as段进行分配,并且返回最适合你的服务器节点。
至于这些主机上的数据是否是冗余存储的?,我可以说,绝对不是,虽然现在硬盘可以相当于是白菜价,但也是要钱的。并且多地冗余储存对节点间如何进行实时高效的同步的技术难度简直无法想象。
目前最常见的技术就是设置一两个核心运算节点,然后面对用户的则采用了CDN(內容傳遞網路)分发,来保证各地用户访问的流畅性。
Q2:
这是我在本地抓的一个封包,看到host木有,http://baidu.com,只要知道这个之后,剩下的活就丢给nginx干了
然后我可以在nginx写下这样的规则
server
{
listen 80;
server_name http://baidu.com/; #域名
index index.htm index.html index.php;
root /home/www/; #根目录
include location.conf;
error_page 404 /404.html;
}
保存,重启,只要tcp包的 host==server_name 域名就对应上了。

Q3:这货叫任播(BGP Global AnyCast)。114和4个8就这这样子干的,这个请移步wiki,我就不转过来了
http://zh.wikipedia.org/wiki/%E4%BB%BB%E6%92%AD

扩展阅读:
浅析智能DNS,CDN加速,双线加速的原理与区别
DNS多点部署IP Anycast+BGP实战分析
5楼(未知网友)

你這裡每個問題都可以回答成一篇文章了呀。


首先,你需要了解三個基礎網絡知識。
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段后能理解。
6楼(未知网友)

Q1:
大型网站你看到的它的IP地址所对应的东西不是一个网站服务器,而是一个负载均衡器,它负责分发外部请求到具体的网站服务器上,具体的服务器有很多台,数据是冗余的,但也可能是从另外一台存储服务器上获得的数据。

总之,对于大型网站,外网IP对应的不是一个真实的网站服务器。

Q2:
一个IP可以对应多个域名,当你请求一个网页的时候,你的HTTP请求里包含了你要请求的主机的名字,比如你打开google的时候请求的内容是这样的:

GET http://download.google.com/somedata.exe
Host: http://download.google.com
Accept:*/*
Pragma: no-cache
Cache-Control: no-cache
Referer: http://download.google.com/
User-Agent:Mozilla/4.04[en](Win95;I;Nav)
Range:bytes=554554-

看到加粗的部分了吗?你要访问的域名也包含其中。
所以虚拟主机收到它以后,根据host字段就可以确定你到底访问的是哪个网站。在IIS或者Apache中,这都可以设置。你自己部署的IIS服务器也可以绑多个网站。

Q3:
同上,Q2已经说的很明白了,一个IP可以对应多个域名,IIS或者Apache都有能力解析。
立即注册站大爷用户,免费试用全部产品
立即注册站大爷用户,免费试用全部产品