|
目錄
這其實很好理解,隋朝開始就有吏部、戶部、禮部、兵部、刑部、工部了,一個龐大的組織要管理好必須要拆分出來,各有各的職責出了事情直接定位,每一層可以制定自己的標準來解決好自己層面上的事情。 再比如一個項目分dao數(shù)據(jù)庫層,緩存層,service層,controller接入層一樣,每一層專注自己的部分,關于優(yōu)勢,把高內聚,低耦合,可維護性強這些詞甩在網(wǎng)絡分層上面也是用得的,出了事情直接找負責那部分的那一層。 從專業(yè)角度來說,程序設計要求,復雜的程序都需要分層。 OSI模型 比對 TCP/IP模型OSI模型(Open System Interconnection Reference Model開放系統(tǒng)互連參考模型),他只是一種參考概念模型,并沒有提供一個可以實現(xiàn)的方法,現(xiàn)在的因特網(wǎng)采用的是 TCP/IP 模型(五層),TCP/IP 網(wǎng)絡通信協(xié)議(四層)。 了解網(wǎng)絡發(fā)展史會發(fā)現(xiàn)OSI模型出現(xiàn)的時間比 TCP/IP 晚,是在 TCP/IP 模型基礎上面提出的,那時候 TCP/IP 協(xié)議應用已經(jīng)成型了,各大運營商們不想再換,再加上OSI模型有些設計冗余,因此因特網(wǎng)最終選擇了草根選手 TCP/IP。但是OSI在理論研究上面具有很大參考價值,所以各大教材都會提到OSI模型. TCP/IP 模型有這五層模型進行分工合作,就可以用tcp/ip協(xié)議將計算機連起來通信啦。 物理層聲音傳信靠聲波,鴿子傳信靠電磁波,電流傳信靠電波。物理層需要解決利用傳輸介質傳輸比特流的問題。 以打魂斗羅為例(這個游戲有點暴露年齡),首先可以使用一個鍵盤,兩個人一起打,這樣沒問題但是也太影響體驗了。 兩個人兩臺電腦聯(lián)機打,兩臺電腦最簡單的通信方式是一根雙絞線,兩個水晶頭,交叉接法,連接兩個電腦的網(wǎng)卡,分別配置‘ip地址’,‘子網(wǎng)掩碼’,‘默認網(wǎng)關’使之成為一個網(wǎng)絡,這兩臺電腦就組成了一個最簡單的局域網(wǎng),可以聯(lián)機打魂斗羅啦! 如果第三個人想加進來,就可以買一個有多個口的集線器(hub)設備,將三個人的電腦都連起來。集線器是純物理工作,將自己收到的字節(jié)全部復制到其他的端口,其他機器看著收進來,這樣就實現(xiàn)了三個人一起 happy 了。 一個網(wǎng)吧人都想加入進來,可以加上交換機,交換機互聯(lián),形成網(wǎng)絡拓撲。一個網(wǎng)吧人辣么多,必須要暢快啊,因此交換機是具有 MAC 地址學習功能的,有利于更快找到目標機器。不過交換機是工作在數(shù)據(jù)鏈路層的。 一個城市的人都想加進來,就需要移動聯(lián)通電信這樣的運營商到處鋪電纜光纖,建立基站了,才能像我們如今這樣無論身處何處,都能”每晚八點,王者峽谷見“了。 數(shù)據(jù)鏈路層數(shù)據(jù)鏈路層也叫做MAC層,Medium Access Control即媒體訪問控制,專業(yè)詞叫做“多路訪問控制”。
物理層里面,已經(jīng)幫你把電信號轉化成數(shù)字信號 010101001 形式,但是兩臺機器要交流總不可能一個 bit 一個 bit 的 0101 交流,如果別人和你說話總是故意一個字一個字的蹦估計你早就火了。 數(shù)據(jù)鏈路層就是要負責把這些無窮盡的 010011001 封裝成一個個幀來進行傳輸,這時以太網(wǎng)協(xié)議就誕生了,幀也叫做以太網(wǎng)幀,以太網(wǎng)協(xié)議規(guī)定成幀的各項規(guī)則,例如多少位成一個幀等。以太網(wǎng)協(xié)議如下: 以太網(wǎng)幀 三個人一起互聯(lián)打格斗游戲,游戲是有嚴格的角色和順序的,隨便一個人發(fā)出信號,這一層主要就是解決這三個問題:
為什么叫”媒體訪問控制“,控制的就是這些。
數(shù)據(jù)發(fā)給誰接收,最早是只有集線器沒有交換機的,三臺電腦每臺電腦發(fā)送信號都是通過廣播的方式,廣播出去哪一臺電腦需要處理呢,每臺電腦都需要一個標識能夠在數(shù)據(jù)鏈路層表示自己,MAC地址由此誕生,對應的物理設備是網(wǎng)卡接口,每塊網(wǎng)卡的mac地址都是全球唯一的,生產(chǎn)時就固定了。但是網(wǎng)絡通信中,卻不用mac地址進行通信,而是ip地址,讀者可以思考一下原因留言答出。 有了身份了,以太網(wǎng)幀里面源MAC 和目標 MAC都有了,就能找到相應目標機器,數(shù)據(jù)包在鏈路上廣播,目標MAC的網(wǎng)卡就能判定這個是給自己的,將其收進來打開。IP數(shù)據(jù)包收進來之后,拿掉MAC頭,打開IP包發(fā)現(xiàn)IP包的地址也是自己的,再拿掉 ip 頭,根據(jù) tcp 頭里面對應端口xxx了,這個端口正好是我的打開的 QQ 監(jiān)聽的端口,就找到了微信這個進程扔給 QQ 處理了。返回也是一樣的,源MAC就變成了目標MAC。
有個問題就是,一個數(shù)據(jù)包過來,怎么找到對應的主機呢?網(wǎng)路里面最開始肯定是誰也不認識誰,當機器不多的時候,可以把目標機器的 MAC 地址直接放進數(shù)據(jù)包里,但是如果有 n 臺機器呢?一個網(wǎng)吧的人一起玩格斗,總不可能一個個去問哎,兄弟你的 MAC 地址是啥?,這種操作太騷了,于是就有了 ARP 協(xié)議。 在局域網(wǎng)里面,如果知道了 IP 地址不清楚MAC地址,那么就廣播吧,發(fā)送一個廣播包,誰是這個 IP 誰來回答,回答的包里面會帶上自己的 MAC 信息。為了防止每次都 ARP 廣播,機器本地會進行 ARP 廣播結果緩存,交換機就是具有 MAC 地址學習能力的設備,學習完之后就能精準找到主機,不需要廣播,這里再次提到了交換機為什么工作在數(shù)據(jù)鏈路層了。 網(wǎng)絡層上面其實已經(jīng)提到過一些 IP 地址,計算機網(wǎng)絡世界里面,都是通過 IP 地址來進行定位的,怎么配置自己的ip地址呢?
現(xiàn)實中我們的網(wǎng)絡是由一個個局域網(wǎng)組成的復雜網(wǎng)絡拓撲,每個局域網(wǎng)處于同一個網(wǎng)段,MAC地址相當于這個人的 DNA,能精準到一個人,但是卻是沒有定位尋址功能的,MAC 地址沒有為尋址功能設計編號,出廠后網(wǎng)卡在哪里被使用不知道,中國可以用進口的美國產(chǎn)的網(wǎng)卡,但是 ip地址是有設計尋址功能的,每個地區(qū)的 ip,就像物流地址一樣能一層層定位到一個人的具體位置,黑客找人很多就是根據(jù)ip地址的。 DHCP(Dynamic Host Configuration Protocol)動態(tài)主機配置協(xié)議如果局域網(wǎng)內只有幾臺主機,自己配置一下 ip 地址玩玩也是可以的,但是如果一個學校的電腦都需要網(wǎng)管來一個一個配置的話,那就不好玩了,所以我們需要一個可以自動配置ip的協(xié)議,即 DHCP。 每臺主機要加入一個網(wǎng)絡的時候,肯定是初來乍到什么情況也懂,只知道自己的 MAC地址,因此這個時候還是靠廣播,使用 ip 地址 0.0.0.0 發(fā)送一個廣播包,發(fā)給目的地址 255.255.255.255 ,封裝在 UDP 協(xié)議里面,UDP 封裝在 BOOTP 里面(DHCP的前身),DHCP SERVER收到帶有 MAC 地址的包,在沒有 ip 地址的情況下就知道是誰在索要 ip 了,因此就給他子網(wǎng)掩碼,網(wǎng)關和 ip 信息,然后這臺新來的機器就可以歡快的加入局域網(wǎng)大家庭了。 網(wǎng)關(gateway)說了這么多還都是在局域網(wǎng)內小打小鬧,外面的網(wǎng)絡那么精彩,如果想要出國玩玩第一件事就是解決護照,才能通過海關,前面不止一次說到網(wǎng)卡配置的時候需要配置網(wǎng)關。假如你配置的ip是192.168.1.100,旁邊兄弟的是192.168.10.100,然后我要訪問他,來看看電腦是怎么理解的,以下是linux的處理方式: 太晚了就這個圖吧! 網(wǎng)關大家可以理解成工作在網(wǎng)絡層的路由器,它有多個網(wǎng)卡分別連著不同的局域網(wǎng),每個網(wǎng)卡的 ip 地址都和對應局域網(wǎng)在同一個網(wǎng)段,工作時就像機場,你拿著哪一國護照就往哪一國送,會將 MAC 頭和 IP 頭都取下來,然后判斷內容看將包往哪里轉發(fā)。路由里面又分為靜態(tài)路由動態(tài)路由,路由算法等復雜的邏輯。 DNS(DOMAIN NAME SYSTEM)域名系統(tǒng)如果你有超強的記憶力的話,當然可以 12.34.45.56 這樣的方式去訪問百度,就跟純敲電話號碼去給一個人打電話一樣,但是大多數(shù)人都是直接翻看通訊錄找名稱來打電話吧,網(wǎng)絡世界也是一樣,需要域名來標示一個ip,于是你就可以通過 www.baidu.com 來訪問百度了。域名就是網(wǎng)絡世界里面的通訊錄。 想象一下,全世界都靠一個通訊錄找人,它一旦掛了那么地球村就 gg 了,因此 dns 服務器一定得高可用,高并發(fā),分布式,這么復雜第一反應肯定是分層設計的嘛,思想都是相通的,于是就有了根DNS服務器,頂級域DNS服務器,權威DNS服務器,如下: 圖畫的有點丑丑的 樹狀結構,訪問就需要遞歸了,為了提高ip解析性能,就需要緩存了,很多運營商(移動電信聯(lián)通)會就近部署DNS緩存服務器,DNS解析流程如下: image 訪問一個地址都要這么復雜,找這么多層,現(xiàn)實中多等一秒都難受,那么就要想辦法盡量走緩存拿數(shù)據(jù),全球有那么多數(shù)據(jù)中心,我們不遠的地方都有數(shù)據(jù)中心,何不在這些數(shù)據(jù)中心里面部署一些機器來做緩存集群緩存部分數(shù)據(jù)呢?于是cdn的角色就出來了,這里不細講其具體形態(tài),無外乎又是分層,高可用設計。 傳輸層### TCP,UDP 像物流系統(tǒng)一樣,接單之后選好了路徑,就要運貨了,交通情況那么復雜,運貨過程中肯定會遇到擁堵,丟貨,超時等一系列問題,傳輸層就是為了解決這些問題而設計的。主要有 UDP 協(xié)議和 TCP 協(xié)議,他們之間最主要的區(qū)別就是UDP不可靠,TCP可靠。 UDP 協(xié)議適用于對丟包不敏感的應用,不需要建立連接,速度快,以上說到的 ARP, DHCP 都是基于UDP協(xié)議的,還有直播的流媒體協(xié)議,早期對實時性要求高的游戲,物聯(lián)網(wǎng)和移動通信領域等等。 TCP要保證可靠傳輸,就要考慮到保證順序,丟包處理,維護連接,流量控制,和擁塞控制等問題,因此就出現(xiàn)了復雜的三次握手,四次揮手,還要維護 TCP 狀態(tài)機等。擁塞控制是通過擁塞窗口來解決的,順序,丟包處理,流量控制對應滑動窗口。 端口(port)試想一下數(shù)據(jù)跋山涉水的到達了你的電腦,然后呢咋辦,你同時開了微信,QQ,釘釘,別人給你發(fā)條消息你總要運送到對應的程序吧,這樣才算最終到達,這里不妨把每個應用都理解成一個程序,端口的需要就體現(xiàn)出來了,這個端口在你電腦是不會重復的,要不然數(shù)據(jù)過來就沒法判斷了,很多人在玩 tomcat 的時候,開兩個8080端口都會遇到報錯吧。 應用層到了應用層,就會比較具體了,畢竟我們看得見,每個人都有不同的需求,比如 A 需要發(fā)郵件,B 需要下訂單,C 需要下載文件,這層需要解決告訴對方,我要干什么的問題,根據(jù)干的事情不一樣,又會催化出各種不同的協(xié)議來最好解決你的需求。 http,https協(xié)議http是最早的協(xié)議,其中分為了POST,DELETE,PUT,GET等請求,對應向服務器增刪改查數(shù)據(jù),然后發(fā)展到http2.0通過壓縮,分幀,二進制編碼,多路復用等技術提升性能,最后發(fā)展到https,通過改進加密技術來提高安全性。 傳輸層協(xié)議和應用層協(xié)議之間的關系應用層協(xié)議 = TCP/UDP + PORT端口號
|
|
|