那時,全地只有一種語言,都說一樣的話。他們向東遷移的時候,在示拿地找到一片平原,就住在那里。他們彼此商量說:"來,讓我們來做磚,把磚燒透了。"他們就拿磚當石頭,又拿柏油當泥漿。他們說:"來,讓我們建造一座城和一座塔,塔頂通天。我們要為自己立名,免得我們分散在全地面上。"耶和華降臨,要看世人所建造的城和塔。耶和華說:"看哪,他們成了同一個民族,都有一樣的語言。這只是他們開始做的事,現(xiàn)在他們想要做的任何事,就沒有什么可攔阻他們了。來,我們下去,在那里變亂他們的語言,使他們彼此語言不通。"于是耶和華使他們從那里分散在全地面上;他們就停止建造那城了。因為耶和華在那里變亂了全地的語言,把人從那里分散在全地面上,所以那城名叫巴別塔。
-----------《圣經(jīng)·舊約·創(chuàng)世記》
互聯(lián)網(wǎng)的出現(xiàn)讓人與人之間的關系變得前所未有的緊密,讓科技的發(fā)展和文化的融合達到前所未有的高度,可以說,互聯(lián)網(wǎng)就是現(xiàn)代的巴別塔。
最初的夢想
最初,每一臺計算機都是一座信息孤島,如何把他們聯(lián)系起來呢?一群聰明人創(chuàng)造出了OSI模型,:將互聯(lián)網(wǎng)這座巴別塔分為7層:
- 應用層(Application Layer)
- 表示層(Presentation Layer)
- 會話層(Session Layer)
- 傳輸層(Transport Layer)
- 網(wǎng)絡層(Network Layer)
- 數(shù)據(jù)鏈路層(Data Link Layer)
- 物理層(Physical Layer)
妥協(xié)后的藍圖
上面的OSI模型很好的完成了層與層之間的解耦,每一層都遵循約定的規(guī)則(協(xié)議protocol)來完成互聯(lián)網(wǎng)的部分環(huán)節(jié),層與層之間通過接口通信。
然而,理想很豐滿,現(xiàn)實很骨感。人們發(fā)現(xiàn)現(xiàn)有的技術很難實現(xiàn)OSI模型。最終,人們簡化了這個模型:應用層、表示層、會話層合并為應用層;數(shù)據(jù)鏈路層、物理層合并為網(wǎng)絡接口層。這就是TCP/IP模型:
層次 | 功能 | 協(xié)議 |
---|---|---|
應用層 | 傳輸最終形態(tài)的數(shù)據(jù) | HTTP,HTTPS,FTP,SSH,POP3,SMTP |
傳輸層 | 傳送文本數(shù)據(jù) | TCP,UDP協(xié)議 |
網(wǎng)絡層 | 分配地址和傳送二進制數(shù)據(jù) | IP協(xié)議 |
網(wǎng)絡接口層 | 建立電路連接 | 以太網(wǎng)協(xié)議 |
具體的實現(xiàn)
1. 網(wǎng)絡接口層
底層的數(shù)字信號都是由0和1組成的,我們需要根據(jù)某種通用的規(guī)則對這些電信號進行分組,這種通用規(guī)則就是以太網(wǎng)(Ethernet)協(xié)議。
以太網(wǎng)協(xié)議
以太網(wǎng)協(xié)議規(guī)定一組電信號構成一個數(shù)據(jù)包,叫做“幀”(Frame),每一幀由Head和Data兩部分構成:
名稱 | 首部 | 數(shù)據(jù) | 尾部 |
---|---|---|---|
內(nèi)容 | 發(fā)送者和接受者的網(wǎng)卡的Mac地址,數(shù)據(jù)類型 | 數(shù)據(jù)包實際內(nèi)容 | 數(shù)據(jù)幀校驗序列 |
以太網(wǎng)會以廣播的形式將數(shù)據(jù)包發(fā)送給子網(wǎng)內(nèi)所有主機。每臺主機會比對頭部的mac地址和自己的mac地址,如果一致就進行進一步處理,如果不一致就丟棄這個包。
2. 網(wǎng)絡層
上面提到以太網(wǎng)會把數(shù)據(jù)包發(fā)給子網(wǎng)內(nèi)所有主機,因此當接受者跟發(fā)送者不在同一個以太網(wǎng)中時怎么辦呢?
以太網(wǎng)是一種局域網(wǎng),而互聯(lián)網(wǎng)是由無數(shù)的局域網(wǎng)組成的。可以說以太網(wǎng)是互聯(lián)網(wǎng)的子集。
2.1 IP協(xié)議
IP協(xié)議制定了一套新地址,用來區(qū)分兩臺主機是否屬于同一子網(wǎng)
2.2 ARP協(xié)議
如果在同一子網(wǎng),直接根據(jù)IP地址獲取Mac地址,然后由網(wǎng)絡接口層進行后續(xù)操作即可。
2.3 路由協(xié)議
如果不在同一子網(wǎng),,那我們就無法知道接收方的mac地址,以太網(wǎng)會將數(shù)據(jù)包發(fā)送到子網(wǎng)與子網(wǎng)之間的網(wǎng)關(Gateway)進行路由,最終將數(shù)據(jù)包發(fā)送到目標IP所在的子網(wǎng)中,然后通過ARP協(xié)議獲取到接收方的mac地址。
一般來講,這里的網(wǎng)關就是路由器,用來連接局域網(wǎng)和互聯(lián)網(wǎng)。
3.傳輸層
通過網(wǎng)絡層,目標主機接收到數(shù)據(jù)包。可是,實際上數(shù)據(jù)包是從一個主機的應用程序發(fā)送給另外一個主機的應用程序,我們怎么知道這個數(shù)據(jù)包是發(fā)給哪個應用程序的?
3.1 UDP協(xié)議
協(xié)議規(guī)定;每個應用程序聯(lián)網(wǎng)時,都需要向操作系統(tǒng)申請一個端口,并且網(wǎng)絡傳輸?shù)臄?shù)據(jù)包必須加入端口信息,即UDP數(shù)據(jù)包。這一點類似于網(wǎng)絡接口層的“幀”。
可是,UDP寫一下我們無法知道對方是否收到我們的數(shù)據(jù)包,所以TCP協(xié)議應運而生。
3.2 TCP協(xié)議
簡單的說,TCP協(xié)議=UDP協(xié)議+確認機制。
確認機制由三次握手,四次分手組成。
3.2.1 三次握手
正式發(fā)送數(shù)據(jù)前,先建立TCP連接。
3.2.2 四次分手
數(shù)據(jù)發(fā)送完成后,斷開TCP鏈接。
4.應用層
本層主要用來規(guī)范數(shù)據(jù)格式,以便于更好的被程序識別。常見有http,ftp等。因為經(jīng)過前面三層的處理,應用層接收到的數(shù)據(jù)包就變成了這個樣子:
以太網(wǎng)標頭+IP標頭+TCP標頭+數(shù)據(jù)包
因為TCP協(xié)議,http協(xié)議過于復雜,此處不展開,過段時間詳細總結一下。
END