文 /趙琬清 張 沛 馬 嚴
本文主要研究發現網站服務所使用的內容分發網絡服務CDN的方法,并進行相關測量驗證操作。首先,提出一種發現網站服務使用的具體內容分發網絡服務CDN的簡單方法,通過對Alexa排名前100的中文網站服務的綜合測量聚類尋找出主流的域名后綴,并進一步分析這些域名后綴,判斷網站使用的具體CDN服務。其次,對上述網站服務中的關鍵域名進行為期一個月的觀察測量,分析了網站域名在不同地理位置解析IP地址的規律情況,結果表明,半數以上的網站在不同地理位置的測量點解析為不同的IP地址,IP地址的地理位置分布與測量點有很強的相關關系。
由于互聯網的快速發展,信息量和網民數量的快速增長給網站內容服務器和傳輸骨干網絡帶來了極大的壓力,越來越多的網站使用了內容分發網絡CDN服務,Web的網絡服務壓力逐漸從內容服務器和骨干網絡轉移到貼近用戶的“最后一公里”。Web已經從簡單單一的服務器提供內容的方式發展為多個不同地理位置的服務器提供內容的方式,本文主要考慮如何測量分析復雜的Web應用服務的CDN業務。
現有的相關論文主要是CDN的相關測量研究與網站服務本身的相關測量研究。文獻[1]總結了CDN的兩種重定向方式,URL重寫與DNS重定向,多數CDN如Akamai等使用的是DNS重定向的方式。文獻[2]對三大CDN服務提供商Google、Netflix、Hulu的研究表明,CDN會為用戶首選同時固定一個CDN,在后續的過程中就算有更優的CDN服務器也不會做智能的轉換。而另一些文獻針對網站服務本身做出了測量研究,文獻[3]設計了主動測量系統來測量Ajax的特征。文獻[4]提出從網頁本身的復雜性來考慮對頁面加載時間的影響,結果表明,很多網站使用不同的第三方CDN服務來托管自己的內容服務,主要包括圖片、CSS、JS等比較大的文件。
然而,上述研究都沒有結合CDN服務與網站服務進行測量研究。本文提出了一種發現主流網站使用CDN的簡單判別方法并對網站關鍵域名進行了網絡層traceroute測量。后續的測量結果表明,大部分目標網站在不同的地理位置的測量點根據DNS解析為不同地理位置的IP地址,可以認為其確實使用了CDN服務。
本文主要測量分析了不同網站使用的CDN服務,模擬用戶訪問瀏覽器過程,提取訪問網站過程中的關鍵域名,分析討論其所屬的CDN服務提供商。通過在不同測量地點為期一個月的traceroute跟蹤測量分析了網站域名DNS解析的IP地址分布情況。
1.網站服務的CDN服務測量方法
網站服務的CDN服務測量追蹤了瀏覽器訪問網站的過程。首先進行目標選取,然后對選取的目標網站進行域名提取,接著對提取到的域名的分析操作、確定其使用的CDN服務。
(1)選取目標節點
由于設備限制,無法測量過多的目標節點,我們選取Alexa.cn 網站[5]排名前100的網站作為測量目標。
使用python語言的unittest單元測試框[6]以及selenium自動框架[7]中的Webdriver模塊自動打開瀏覽器訪問Alexa排名網站,運用python語言的beautiful框架[8]爬取網頁內容進行正則分析,提取排名前100的網站。
(2)網站域名提取
由于Web已經從簡單單一的服務器提供內容的方式發展為由跨多個管理域的服務器提供不同內容的方式,除了百度主頁這種比較簡潔的網站,現在很多網站需要200個以上HTTP請求進行數據請求。
為了模擬瀏覽器行為,我們選擇了輕量級的無界面瀏覽器phantomjs[9]。phantomjs提取的域名雖然與Chrome、Firefox等主流瀏覽器有所差別,但是由于其開源的特性,可以輕易地獲取整個瀏覽器訪問過程,因此通過phantomjs對上述網站進行訪問,保存其請求的所有域名。
(3)域名后綴聚類分析
現在大多網站使用了第三方的CDN服務,如藍汛、網宿、阿里云、騰訊云等。不同的網站可能使用了相同的CDN服務。對上述網站域名進行重定向操作,需要注意的是,網站的域名其實是跟CNAME映射的,而每個CNAME域名可能還與第二個CNAME域名映射,最底層的CNAME域名(圖1中的B域名),也就是直接與IP進行映射關系的,通常是CDN服務提供商給網站管理者提供的域名,這樣做的好處是CDN服務提供商在更換服務器時,不需要告知CDN用戶真實IP地址,只需要將其提供給用戶的域名重新映射至新服務器的IP即可,類似一種封裝操作,也正是文獻[1]中提到的廣泛使用的DNS重定向方式,如圖1所示。

圖1 域名與IP映射關系
本文使用phantomjs跟蹤網頁解析過程,用python腳本跟蹤DNS重定向后最后一層的CNAME,同時對域名后綴做計數聚類,對于出現次數大于一次的域名后綴,查找其所有者,最后需要人工判斷其所屬者、確定其是否為CDN服務。表1所示為通過人工判斷后確定為CDN域名后綴的計數情況。
表1中出現次數比較多的域名后綴,已經將其所屬CDN服務提供商列舉如圖2所示。
2.域名解析的IP地址與地理位置的關系
上文給出了判斷CDN服務的簡單方法,為了確定這些網站是否使用了CDN服務,利用gperf[10]平臺中的五個云服務器(云服務器提供商和地理位置分別是阿里云杭州、騰訊云上海、騰訊云廣州、西部數碼廣東中山、西部數碼河南鄭州),對上述域名的前兩位關鍵域名進行長達一個月(2017年4月18日至5月18日)、間隔5分鐘的traceroute測量。
我們以五個云服務器作為測量源點,測量100個目的網站的1~2個關鍵域名(有些網站僅僅有一個域名 )。然而,traceroute 返回的目的IP地址非常多樣,并不如同一開始設想的只有一個或者幾個固定IP地址,不過大部分的IP地址的變動都是最后一位的變動,24位IP地址前綴的個數并不是特別多,說明24位IP地址前綴相對來說比較固定。也有一些例外情況,有些域名的24位IP地址前綴變動也非常大,我們選取的5分鐘traceroute間隔,返回的目的IP地址的24位前綴也在不停的變動,觀察發現這些域名多使用了騰訊云或者阿里云的服務,可能由于我們的測量節點有三臺服務器為阿里云和騰訊云,另外兩臺也是云服務器,導致上述結果出現。

圖2 主要CDN域名數量分布

表1 CDN域名計數
我們提取了在一個月內每個探針(云服務器)到每個目標域名DNS解析出的IP地址,由于有些節點至某些目的域名解析出的IP地址數量過多,我們將出現100次以上的IP地址進行記錄,提取24位IP地址前綴,并查詢歸屬地。結果發現,半數以上的域名解析出的IP地址與云服務器所在的地址比較接近。
測量結果表明,位于沿海的杭州、上海、廣州、中山附近的CDN節點豐富,而位于鄭州附近的CDN節點較少。Alexa排名前100的網站,其關鍵域名解析的IP地址與測量點的位置關系十分密切,在大多數情況下都非常靠近測量點。
由此可以推測,距離遠的地址同時訪問上述網站就近解析出IP地址,因而可能會有不同的訪問結果,比如一個可達一個不可達。地理位置相近的測量點解析出的IP地址相同或者相近,更具有分析價值。
本文參考分析了前人對CDN重定向方式的說明,給出了一種快速發現網站所使用的CDN服務的簡便可行方法,通過phantomjs瀏覽器模擬訪問網頁的過程,對多個網站的域名進行聚類分析,可以很快地得知某個網站使用的CDN服務。持續一個月的測量結果表明,選取的排名前100的網站中半數以上都使用了CDN服務。本文提供的快速發現CDN服務的方法可以很方便地提取出網站所使用的CDN服務,方便后續排查CDN造成的網站服務異常。
(責編:楊潔)
[1] Krishnamurthy B, Wills C, Zhang Y. On the use and performance of content distribution networks[C]//2001:169-182.
[2] Adhikari V K, Guo Y, Hao F, et al. A tale of three CDNs: An active measurement study of Hulu and its CDNs[C]// Computer Communications Workshops. IEEE, 2012:7-12.
[3] Lee M, Kompella R R, Singh S. AjaxTracker: active measurement system for high-fidelity characterization of AJAX Applications[C]// Usenix Conference on Web Application Development. USENIX Association, 2010:2-2.
[4] Butkiewicz M, Madhyastha H V, Sekar V. Characterizing Web page complexity and its impact[J]. IEEE/ACM Transactions on Networking, 2014, 22(3):943-956.
[5] Alexa http://www.alexa.cn/
[6] unittest http://docs.python.org/2.7/library/unittest.html
[7] selenium http://www.seleniumhq.org/
[8] beautifulsoup https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html
[9] phantomjs http://phantomjs.org/
[10] http://gperf.edu.cn/