從谷歌宕機事件認識互聯網工作原理

摘要:谷歌服務器經歷了短暫的宕機事件,持續大概27分鐘,對部分地區的互聯網用戶造成了影響。此次事件的原因深究起來需要進入互聯網絡那深邃的、黑暗的角落。

譯者注:本文中提到CloudFlare是一家總部位于美國舊金山的內容分發網絡(CDN)服務公司,由Project Honey Pot項目的三位前開發人員成立于2009年。2011年10月被華爾街日報評為最具創新精神的網絡科技公司。

今天,谷歌服務器經歷了短暫的宕機事件,持續大概27分鐘,對部分地區的互聯網用戶造成了影響。此次事件的原因深究起來需要進入互聯網絡那深邃的、黑暗的角落。我是CloudFlare公司的一名網絡工程師,在幫助谷歌從此次宕機中恢復回來提供了一臂之力。下面就是事情發生的過程。

大約在太平洋標準時間2012年11月5號下午6:24分/時間標準時間2012年11月6號凌晨2:24分,CloudFlare的員工發現谷歌的服務中斷了。我們使用谷歌的電子郵件等服務,所以,當它的服務不正常時,辦公室的人會很快發現。我在網絡技術小組工作,因此我立刻接上網絡查看是什么情況——是局部區域問題還是全球問題。

問題排查

我很快就意識到,所有谷歌的服務我們都不能連接上——甚至包括連接 8.8.8.8,谷歌的公共DNS服務器——于是,我從追查DNS開始。

  1. dig?+trace?google.com?

下面是我在探測Google.com的域名服務器時得到的回復:

google.com. 172800 IN NS ns2.google.com.

google.com. 172800 IN NS ns1.google.com.

google.com. 172800 IN NS ns3.google.com.

google.com. 172800 IN NS ns4.google.com.

;; Received 164 bytes from 192.12.94.30#53(e.gtld-servers.net) in 152 ms

;; connection timed out; no servers could be reached

無法探測到任何服務器的結果證明確實有什么地方出了問題。尤其是,這意味著從我們的辦公室將連接不到任何的谷歌DNS服務器。

我開始網絡層查找問題,看看是否是在這個通信層出了問題。

PING 216.239.32.10 (216.239.32.10): 56 data bytes

Request timeout for icmp_seq 0

92 bytes from 1-1-15.edge2-eqx-sin.moratelindo.co.id (202.43.176.217): Time to live exceeded

這里出現了奇怪的信息。通常,我們不應該在谷歌的路由信息中看到一個印度尼西亞的網絡服務提供商(Moratel)的名字。我立即進入一個CloudFlare的路由器中查看發生了什么事。與此同時,Twitter上世界其它地方的報告顯示了我們并不是唯一遇到問題的地方。

互聯網路由

為了理解是出了什么問題,你需要知道一些互聯網是如何工作的基礎知識。整個互聯網是由很多的網絡組成,這些網絡被稱為是“自治系統(AS)”。每個網絡都有一個唯一的數字來標志自己,被稱為AS號。CloudFlare的AS號是13335,谷歌的AS號是15169。各個網絡通過一種叫做邊緣網關協議(BGP)的技術互相連接。邊緣網關協議被稱為是互聯網的粘合劑——由它來聲明哪個IP地址屬于哪個網絡,由它來建立從某個自治網絡到另外一個自治網絡的路由。一個互聯網“路由”跟這個詞的表意完全一樣:由一個自治網絡里的IP地址到另外一個自治網絡里的另一個IP地址的路徑。

邊緣網關協議是基于一個相互信任的體制。各個網絡基于信任的原則告訴其它網絡哪個IP地址屬于哪個網絡。當你發送一個數據包,或發送一個穿越網絡的請求,你的網絡服務提供商會聯系它的上游提供商或對等提供商,詢問它們從你的網絡服務提供商到網絡目的地,哪條路線最近。

不幸的是,如果當一個網絡發出聲明說某個IP地址或某個網絡在它的內部,而事實不是這樣,如果它的上游網絡或對等網絡信任了它,那么,這個數據包最終將會迷路丟失。這里發生的就是這個問題。

我查看了邊緣網關協議傳遞的谷歌IP的路由地址,路由指向了Moratel (23947),一個印度尼西亞的網絡服務提供商。我們的辦公室在加利福尼亞,離谷歌的數據中心并不遠,數據包絕不應該經過印度尼西亞。很有可能是,Moratel聲明了一個錯誤的網絡路由。

當時我看到的邊緣網關協議發來的路由是:

p>tom@edge01.sfo01> show route 216.239.34.10

inet.0: 422168 destinations, 422168 routes (422154 active, 0 holddown, 14 hidden)

+ = Active Route, - = Last Active, * = Both

216.239.34.0/24 *[BGP/170] 00:15:47, MED 18, localpref 100

AS path: 4436 3491 23947 15169 I

> to 69.22.153.1 via ge-1/0/9.0

我查看了其它路由,比如谷歌的公共DNS,它同樣被劫持到了相同的(不正確的)路徑:

inet.0: 422196 destinations, 422196 routes (422182 active, 0 holddown, 14 hidden)

+ = Active Route, - = Last Active, * = Both

8.8.8.0/24 *[BGP/170] 00:27:02, MED 18, localpref 100

AS path: 4436 3491 23947 15169 I

> to 69.22.153.1 via ge-1/0/9.0

tom@edge01.sfo01> show route 8.8.8.8

路由泄漏

像這樣的問題在行業內被認為是起源于“路由泄漏”,不是正常的,而是“泄漏”出來的路由。這種事情并不是沒有先例。谷歌之前曾遭受過類似的宕機事件,當時推測是巴基斯坦為了禁止YouTube上的一個視頻,巴基斯坦國家ISP刪除了YouTube網站的路由信息。不幸的是,他們的這種做法被傳遞到了外部,巴基斯坦電信公司的上游提供商——電訊盈科(PCCW)信任了巴基斯坦電信公司的做法,把這種路由方式傳遞到了整個互聯網。這個事件導致了YouTube網站大約2個小時不能訪問。

胖手指 辛普森

今天發生的事情屬于類似情況。在Moratel公司的某個人很可能是“胖手指”,輸錯了互聯網路由。而電訊盈科,Moratel公司的上游提供商,信任了Moratel公司傳遞給他們的路由。很快,這錯誤的路由就傳到了整個互聯網。在邊緣網關協議這種信任模式中,與其說這是惡意的行為,不如說這是誤操作或失誤。

修復

解決方案就是讓Moratel公司停止聲明錯誤的路由。作為一個網絡工程師,尤其是像CloudFlare這樣的大網絡公司里工作的工程師,很大一部分工作就是和其它世界各地的網絡工程師保持聯絡。當探明問題后,我聯系到了Moratel公司的一位同事,告訴他發生了什么事。他大概在太平洋標準時間下午6:50分/世界標準時間凌晨2:50分修復了這個問題。3分鐘后,路由恢復了正常,谷歌的服務重新可以工作了。

從網絡傳輸圖上觀察,我估計全球整個互聯網用戶的3-5%收到了此次宕機事故的影響。重災區是香港,因為那是電訊盈科的總部。如果你所處的地區在當時無法訪問谷歌的服務,你現在應該知道是什么原因了。

構建更好的互聯網

我說這些就是想讓大家知道我們的互聯網上如何在一個相互信任的機制下建立起來的。今天的事故說明,即使你是一個像谷歌這樣的大公司,外部你無法掌控的因素也會影響到你的用戶,讓他們無法訪問你,所以,一個網絡技術小組是非常必要的,由他們來監控路由,管理你與世界的聯系。CloudFlare公司每天的工作就是確保客戶得到最佳的路由。我們照看互聯網上的所有網站,確保他們的以最快傳輸速度提供服務。今天的事情只是我們工作內容的一個小片段。

譯文出自:外刊IT評論

英文出自:Cloudflare

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/449721.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/449721.shtml
英文地址,請注明出處:http://en.pswp.cn/news/449721.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

聊聊技術寫作的個人體會

有群友問過,是什么原因使我開始寫技術公眾號,又是什么動力讓我堅持寫的。 在我看來,寫作是一件不能敷衍的事,通過寫作來學習,反而要比單純地學習的效果要好。為了寫成一篇“拿得出手”的文章,我要反復查找資…

「2019冬令營提高組」全連

傳送門 顯然的 $dp$ 設 $f[i]$ 表示點擊第 $i$ 個音符時的最大價值,$t[i]$ 表示音符 $i$ 的準備時間 那么可以枚舉 $1$ 到 $i-t[i]$ 的所有音符,如果 $j$ ,如果 $jt[j]$ 小于等于 $i$ ,那么 $f[i]max(f[i],f[j]t[i]*val[i])$ 考慮…

Docker常用命令、超實用、講解清晰明了(rm、stop、start、kill、logs、diff、top、cp、restart ...)

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 1. 查看docker信息(version、info) # 查看docker版本 $docker version # 顯示docker系統的信息 $docker i…

推薦給開發人員的實用命令行工具

摘要:優秀的工具對于定位問題出在何處有著無可估量的價值,而且能在一開始就幫助我們阻止問題的出現,總的來說能使我們的工作更有效率。本文介紹了6個非常強大且靈活的工具,熟練使用這些工具能使你的生活變得更輕松一些。 作為一名…

雷軍:啟動手機+AIoT雙引擎戰略 5G春天到來前打持久戰

雷帝網 樂天 1月11日報道 小米CEO雷軍今日在小米年會上宣布,2019年,小米將正式啟動“手機AIoT”雙引擎戰略,這將是小米未來五年的核心戰略。未來5年,小米將在AIoT領域持續投入超過100億元。從2019年起,AIoT&#xff0c…

Jenkins自定義主題

x下載自定義樣式 http://afonsof.com/jenkins-material-theme/ 打開連接 最后點擊:DOWNLOAD TOUR THEME! 得到樣式文件:jenkins-material-theme.css 上傳樣式文件到jenkins 將jenkins-material-theme.css 上傳到: /var/jenkins_home/userCont…

SSH (Secure Shell)詳解

Secure Shell(SSH)是一種加密 網絡協議,用于在不安全的網絡上安全地運行網絡服務。 SSH通過客戶端 - 服務器體系結構中的不安全網絡提供安全通道,將SSH客戶端應用程序與SSH服務器相連接。 常見的應用程序包括遠程命令行登錄和遠程…

股票配對收益

import pandas as pd import numpy as npimport matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] # 字體設置 import matplotlib matplotlib.rcParams[axes.unicode_minus]False # 負號顯示問題from arch.unitroot import ADF …

YUV420、YUV422、RGB24轉換

//平面YUV422轉平面RGB24 static void YUV422p_to_RGB24(unsigned char *yuv422[3], unsigned char *rgb24, int width, int height) { int R,G,B,Y,U,V; int x,y; int nWidth width>>1; //色度信號寬度 for (y0;y<height;y) { for (x0;x<width;x) { …

最長非下降子序列(O(nlogn))(offer收割)

題目 如題 思路 核心思想是&#xff0c;維護一個數組ends&#xff0c;它記錄了長度為k的子序列的末尾元素的最小值。聽起來很抽象&#xff0c;我們不妨手動演示一遍整個過程。 假設數組a{2,9,4,27,29,15,7}&#xff0c;令length表示當前找到的最長非下降子序列的長度。初始時le…

[Python]小甲魚Python視頻第026課(字典:當索引不好用時2)課后題及參考解答

# -*- coding: utf-8 -*- """ Created on Fri Mar 8 10:32:20 2019author: Administrator """"""測試題&#xff1a;0. Python的字典是否支持一鍵&#xff08;Key&#xff09;多值&#xff08;Value&#xff09;&#xff1f;不支…

2021-08-12 畫蠟燭線

畫蠟燭線 pip install https://github.com/matplotlib/mpl_finance/archive/master.zip from mpl_finance import candlestick_ochl import matplotlib.pyplot as plt from matplotlib.pylab import date2num# 先畫日K線 fig, axes plt.subplots(nrows1, ncols1, figsize(20, …

替換字符串列表中字符串

//替換字符串列表中字符串 procedure StringsReplace(var S : TStrings; OldPattern, NewPattern: string; Flags: TReplaceFlags);var i : integer; tmpstr : string;begin for i : 0 to S.Count -1 do begin tmpstr : S[i]; s[i] : StringReplace(tmpstr, Ol…

TCP/IP協議族 詳解(TCP/IP四層模型、OSI七層模型)

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 TCP/IP協議族&#xff08;TCP/IP Protocol Suite&#xff0c;或TCP/IP Protocols&#xff09;&#xff0c;簡稱TCP/IP。由于在網絡通訊協…

RGB 24和YUY2相互轉換

YUY2經常用于電視制式以及許多攝像頭的輸出格式.而我們在處理時經常需要將其轉化為RGB進行處理,這里簡單介紹下YUY2(YUV)與RGB之間相互轉化的關系: http://msdn2.microsoft.com/en-us/library/ms893078.aspx YUY2(YUV) To RGB: C Y - 16 D U - 128 E V - 128 R clip((…

通達信獲取數據

#python第三方庫pytdx獲取 from pytdx.hq import TdxHq_API api TdxHq_API() # 數據獲取接口一般返回list結構&#xff0c;如果需要轉化為pandas Dataframe接口&#xff0c;可以使用 api.to_df 進行轉化 with api.connect(119.147.212.81, 7709): # 返回普通list data …

ICMP (互聯網控制消息協議 )是什么

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 互聯網控制消息協議&#xff08;英語&#xff1a;Internet Control Message Protocol&#xff0c;縮寫&#xff1a;ICMP&#xff09;是互…

股票數據相關性分析

導入相關包 import pandas as pd import numpy as np import matplotlib.pyplot as plt from matplotlib.collections import LineCollection import akshare as ak from sklearn import cluster, covariance, manifold %matplotlib inline #Jupyter Notebook顯示圖形專用 plt…

分享一個輔助分析內存泄漏的腳本

最近給系統做了一點優化&#xff0c;前幾天去查看系統監控&#xff0c;想看看上線前后cpu使用率曲線變化情況。查看的時候意外發現上線前后內存占用相差不少&#xff0c;20%以上。 本來我沒怎么在意這個問題&#xff0c;因為我們系統會在運行過程中緩存部分數據內容。但客戶覺得…

windows Virtualbox下配置Ubuntu,且用ssh連接

1、軟件介紹 1&#xff09;virtualbox 5.2.22 2&#xff09;Ubuntu 18.04 3&#xff09;git bash 2、virtualbox設置 安裝完Ubuntu后點擊該鏡像的設置&#xff0c;依次點擊“網絡”——“端口轉發” 將主機端口設置為一個閑置端口&#xff0c;子系統端口也就是Ubuntu端口設置…