寫這篇文章是因為這學期學習了《計算機網路自頂向下》,另外課下也在看《http權威指南》、《**http協議》,osi模型中各種layer又有多種protocol,它們的作用很容易混淆,希望寫下來整理這方面學習。另乙個原因是,在沒有學習計算機網路之前,看到fex團隊出了乙個經典的面試題目:輸入乙個url位址到頁面載入完成發生了什麼事情?我知道這裡面的邏輯很複雜,有些實現細節可能現在都不理解,希望盡力梳理一下。
1.傳輸單位
先講一講各層的傳輸單位,應用層是報文(message),報文在傳送之前一般會劃分成為等長的資料段,在每段前面加上一些必要的控制資訊組成的首部後,就構成了乙個分組(packet),也叫做包,首部也可叫包頭。無論在哪一層傳送的資料單元,習慣上都可以籠統地用分組來表示。
傳輸層主要使用tcp和udp,如果使用tcp的話,單位是報文段(segment),udp的單位是使用者資料報。在傳送資料時,網路層把傳輸層產生的報文段或者使用者資料報封裝成分組或包進行傳送,由於網路層使用ip協議,分組也叫做ip資料報,簡稱資料報。 資料鏈路層將網路層交下來的ip資料報組裝成幀(framing),物理層單位是位元,就是0和1
2.中間裝置從一般的概念講,講網路互聯起來要使用一些中間裝置,物理層使用的中間裝置叫做**器(repeater),資料鏈路層使用的中間裝置叫做網橋或橋接器(bridge),網路層使用的中間裝置叫做路由器(router),網路層以上使用的中間裝置叫做閘道器(gateway)。
不論是接收端還是傳送端,每一層次只認識對方的同一層次的資料。而整個傳送的過程就好像人們在玩整人遊戲一般,我們通過應用程式將資料放入第七層的包裹,再將第七層的包裹放到第六層的包裹內,依序一直放到第一層的最大的包裹內,然後傳送出去給接收端。接收端的主機就得由第乙個包裹開始,依序將每個包裹拆開,然後乙個乙個交給對應負責的層次來檢視。這就是osi 七層協議在層次定義方面需要注意的特色。
既然說是包裹,那我們都知道,包裹表面都會有個重要的資訊,這些資訊包括有來自**、要去**、接收者是誰等,而包裹裡面才是真正的資料。同樣的,在七層協議中,每層都會有自己獨特的頭部資料(header),告知對方這裡面的資訊是什麼,而真正的資料就附在後頭。
各層的作用如下圖所示:
1.應用層
負責對軟體提供介面以使程式能使用網路服務。「應用層」並不是指執行在網路上的某個特別應用程式 ,應用層提供的服務包括檔案傳輸、檔案管理以及電子郵件的資訊處理。
2.傳輸層
這乙個分層定義了傳送端與接收端的連線技術(如 tcp、udp 技術),同時包括該技術的資料報格式、資料報的傳送、流程的控制、傳輸過程的偵測檢查與重新傳送等,以確保各個資料資料報可以正確無誤的到達目的端
3.網路層
這一層定義出計算機之間的連線建立、終止與維持等,資料資料報的傳輸路徑選擇等,因此這個層次當中最重要的除了 ip 之外,就是資料報能否到達目的地的路由 (route) 概念了
4.資料鏈路層(mac、llc)
這一層分兩個子層進行資料的轉換操作。在偏硬體介質部分,主要負責的是 mac (madia access control),我們稱這個資料報裹為 mac 資料幀 (frame),mac 是網路介面裝置所能處理的主要資料報裹,這也是最終被物理層編碼成位元流的資料。
至於偏向軟體的部分則是由邏輯鏈結層 (logical link control, llc) 所控制,主要在多工處理來自上層的資料報資料 (packet) 並轉成 mac 的格式,負責的工作包括資訊交換、流量控制、失誤問題的處理等
5.物理層 physical layer
由於網路傳輸介質只能傳送 0 與 1 這種位元位,因此物理層必須定義所使用的傳輸裝置的電壓與訊號等,同時還必須了解資料幀轉成位元流的編碼方式,最後連線實際傳輸介質並傳送/接收位元訊號
先來乙個複雜版的:
再看乙個簡易版的:
涉及到的協議大概分布如下:
2)下文**子柳《**技術十年》:
你發現快要過年了,於是想給你的女朋友買一件毛衣,你開啟了www.taobao.com。這時你的瀏覽器首先查詢dns伺服器,將www.taobao.com轉換成ip位址。不過首先你會發現,你在不同的地區或者不同的網路(電信、聯通、移動)的情況下,轉換後的ip位址很可能是不一樣的,這首先涉及到負載均衡的第一步,通過dns解析網域名稱時將你的訪問分配到 不同的入口,同時盡可能保證你所訪問的入口是所有入口中可能較快的乙個(這和後文的cdn不一樣)。你通過這個入口成功的訪問了www.taobao.com的實際的入口ip位址。這時你產生了乙個pv,即page view,頁面訪問。每日每個**的總pv量是形容乙個**規模的重要指標。 **網全網在平日(非**期間)的pv大概是16-25億之間。同時作為乙個獨立的使用者,你這次訪問**網的所有頁面,均算作乙個uv(unique visitor使用者訪問)。最近臭名昭著的12306.cn的日pv量最高峰在10億左右,而uv量卻遠小於**網十餘倍,這其中的原因我相信大家都會知道。
因為同一時刻訪問www.taobao.com的人數過於巨大,所以即便是生成**首頁頁面的伺服器,也不可能僅有一台。僅用生成www.taobao.com首頁的伺服器就可能有成百上千臺,那麼你的一次訪問時生成頁面給你看的任務便會被分配給其中一台伺服器完成。這個過程要保證公正、公平、平均(暨這成百上千臺伺服器每台負擔的使用者數要差不多),這一很複雜的過程是由幾個系統配合完成,其中最關鍵的是lvs,linux virtual server,世界上最流行的負載均衡系統之一,正是由目前在**網供職的章文嵩博士開發的。
經過一系列複雜的邏輯運算和資料處理,用於這次給你看的**網首頁的html內容便生成成功了。對web前端稍微有點常識的童鞋都應該知道,下一步瀏覽器會去載入頁面中用 到的css、js、等樣式、指令碼和資源檔案。但是可能相對較少的同學才會知道,你的瀏覽器在同乙個網域名稱下併發載入的資源數量是有限制的,例如ie6-7是兩個,ie8是6個,chrome各版本不大一樣,一般是4-6個。我剛剛看了一下,我訪問**網首頁需要載入126個資源,那麼如此小的併發連線數自然會載入很久。所以前端開發人員往往會將上述這些資源檔案分布在好多個網域名稱下,變相的繞過瀏覽器的這個限制,同時也為下文的cdn工作做準備。
據不可靠訊息,在雙十一當天高峰,**的訪問流量最巔峰達到871gb/s。這個數字意味著需要178萬個4mb頻寬的家庭寬頻才能負擔的起,也完全有能力拖垮乙個中小城市的全 部網際網路頻寬。那麼顯然,這些訪問流量不可能集中在一起。並且大家都知道,不同地區不同網路(電信、聯通等)之間互訪會非常緩慢,但你卻很少發現**網訪問緩慢。這便是cdn,content delivery network,即內容分發網路的作用。**在全國各地建立了數十上百個cdn節點,利用一些手段保證你訪問的(這裡主要指js、css、等)地方是離你最近的cdn節點,這樣便保證了大流量分散已經在各地訪問的加速。這便出現了乙個問題,那就是假若乙個賣家發布了乙個新的寶貝,上傳了幾張新的寶貝,那麼**網如何保證全國各地的cdn節點中都會同步的存在這幾張供使用者使用》 呢?這裡邊就涉及到了大量的內容分發與同步的相關技術。**開發了分布式檔案系統tfs(taobao file system)來處理這類問題。
好了,這時你終於載入完了**首頁,那麼你習慣性的在首頁搜尋框中輸入了'毛衣'二字並敲回車,這時你又產生了乙個pv,然後,**網的主搜尋系統便開始為你服務了。 它首先對你輸入的內容基於乙個分詞庫進行的分詞操作。眾所周知,英文是以詞為單位的,詞和詞之間是靠空格隔開,而中文是以字為單位,句子中所有的字連起來才能描述乙個意思。例如,英文句子i am a student,用中文則為:「我是乙個學生」。計算機可以很簡單通過空格知道student是乙個單詞,但是不能很容易明白「學」、「生」兩個字合起來才表示乙個詞。把中文的漢字序列切分成有意義的詞,就是中文分詞,有些人也稱為切詞。我是乙個學生,分詞的結果是:我是乙個學生。
然後無論你是否真正進行了交易,你的這些訪問行為便忠實的被系統記錄下來,用於後續的業務邏輯和資料分析。這些記錄中訪問日誌記錄便是最重要的記錄之一,但是前邊我們得知,這些訪問是分布在各個地區很多不同的伺服器上的,並且由於使用者眾多,這些日誌記錄都非常龐大,達到tb級別非常正常。那麼為了快速及時傳輸同步這些日誌資料,**研發了timetunnel,用於進行實時的資料傳輸,交給後端系統進行計算報表等操作。你的瀏覽資料、交易資料以及其它很多很多的資料記錄均會被保留下來。使得**儲存的歷史資料輕而易舉的便達到了十數甚至更多個pb(1pb=1024tb=1048576gb)。如此巨大的資料量經過**系統1:120的極限壓縮儲存在**的資料倉儲中。並且通過乙個叫做雲梯的,由2000多台伺服器組成的超大規模資料系統不斷的進行分析和挖掘。從這些資料中**能夠知道小到你是誰,你喜歡什麼,你的孩子幾歲了,你是否在談戀愛,喜歡玩魔獸世界的人喜歡什麼樣的飲料等,大到各行各業的零售情況、各類商品的興衰消亡等等海量的資訊。
計算機網路知識總結
tcp三次握手 tcp四次揮手 為什麼收到server端的確認之後,client還需要進行第三次 握手 呢 為什麼要四次揮手 建立連線的第二個syn作用是啥 time wait狀態產生的原因 如果網路連線中出現大量time wait狀態會帶來哪些危害 當關閉連線時最後乙個ack丟失怎麼辦?tcp如何...
計算機網路知識總結
第一次握手 客戶端傳送網路包,服務端收到了。服務端就能得出結論 客戶端的傳送能力 服務端的接收能力是正常的。第二次握手 服務端發包,客戶端收到了。客戶端就能得出結論 服務端的接收 傳送能力,客戶端的接收 傳送能力是正常的。第三次握手 客戶端發包,服務端收到了。這樣服務端就能得出結論 客戶端的接收 傳...
計算機網路知識總結
開發工具與關鍵技術 計算機網路知識總結 一 最主要的三種網路 1 電信網路 網 負責話音通訊,也就是打 接聽 3 計算機網路,主要是資料傳輸服務,也就是說是資源共享,其主要的服務就是網際網路。二 網際網路組成 網際網路主要是由核心部分和邊緣部分組成,網路核心部分是網際網路中最複雜的部分。網路中的核心...