计算机网络基础(一)
文章目錄
- 1. 計(jì)算機(jī)網(wǎng)絡(luò)發(fā)展的背景
- 2. 網(wǎng)絡(luò)協(xié)議初識(shí)
- 2.1 協(xié)議的感性認(rèn)識(shí)
- 2.2 為什么要有協(xié)議
- 2.3 網(wǎng)絡(luò)協(xié)議棧
- 3. 協(xié)議分層
- 3.1 TCP/IP 五層協(xié)議模型
- 3.2 協(xié)議分層具體體現(xiàn)
- 4. 網(wǎng)絡(luò)傳輸基本流程
- 4.1 網(wǎng)絡(luò)傳輸初識(shí)
- 4.2 報(bào)頭的理解
- 4.2.1 為什么要有報(bào)頭
- 4.2.2 加報(bào)頭和解包的過(guò)程
- 5. 加上路由器的網(wǎng)絡(luò)傳輸
- 5.1 網(wǎng)絡(luò)傳輸中的互斥和同步
- 5.2 廣域網(wǎng)網(wǎng)絡(luò)通信的示意圖
- 6. 網(wǎng)絡(luò)中的地址管理
- 6.1 認(rèn)識(shí)IP地址
- 6.2 認(rèn)識(shí)MAC地址
- 6.3 總結(jié)
- 7. 結(jié)尾語(yǔ)
前言: 本文主要帶大家認(rèn)識(shí)計(jì)算機(jī)網(wǎng)絡(luò),對(duì)其有一個(gè)初步的認(rèn)識(shí),有個(gè)大體的了解,所以基本是概念,沒有實(shí)踐的操作,不過(guò)后續(xù)的文章會(huì)有實(shí)踐內(nèi)容的。
1. 計(jì)算機(jī)網(wǎng)絡(luò)發(fā)展的背景
最開始計(jì)算機(jī)是如何進(jìn)行數(shù)據(jù)通信的?就是人為的操作,就是用磁盤等存儲(chǔ)介質(zhì)(類似于現(xiàn)在的U盤),進(jìn)行拷貝,從一個(gè)電腦拷貝到另一個(gè)電腦上,這樣效率很低,這種模式被稱為獨(dú)立模式。
然后,當(dāng)時(shí)主要需要用計(jì)算機(jī)的還是實(shí)驗(yàn)室里用的較多,所以就搞了一個(gè)小規(guī)模的計(jì)算機(jī)通信,多臺(tái)計(jì)算機(jī)連在一起,完成數(shù)據(jù)共享,這個(gè)可以想象一下 我們初中時(shí)上的微機(jī)課。
但是隨著鏈接的主機(jī)越來(lái)越多,單純的鏈接不足以滿足需求,所以加入了交換機(jī)和路由器,從而擴(kuò)大了可鏈接的范圍,這被稱為局域網(wǎng)。也就是說(shuō)完成了 小片范圍的網(wǎng)絡(luò)通信。
最后呢?需要鏈入的人越來(lái)越多。就是加入了多個(gè)路由器,滿足更多的人鏈接入網(wǎng)絡(luò)。這形成了廣域網(wǎng)。
這就是網(wǎng)絡(luò)的發(fā)展,非常的delicious,但是還有一點(diǎn)要說(shuō)明,局域網(wǎng)和廣域網(wǎng)只是一個(gè)相對(duì)的概念,它并沒有明確指出:有多少臺(tái) 機(jī)子 聯(lián)網(wǎng)是局域網(wǎng),或者是廣域網(wǎng)。這只是一個(gè)相對(duì)的概念。
2. 網(wǎng)絡(luò)協(xié)議初識(shí)
2.1 協(xié)議的感性認(rèn)識(shí)
計(jì)算機(jī)之間通信用的是光電信號(hào),用頻率和強(qiáng)弱來(lái)表示 0 1 這樣的信息,這就需要 約定好通信雙方的數(shù)據(jù)格式。通俗一點(diǎn)來(lái)說(shuō):對(duì)傳來(lái)的光電信號(hào)有一個(gè) 統(tǒng)一 的規(guī)范,假如傳來(lái)一個(gè)光電信號(hào),不能你看成一個(gè)int 我看成一個(gè)char ,必須都 看成一種類型的數(shù)據(jù),才行。
2.2 為什么要有協(xié)議
協(xié)議本質(zhì)就是一種約定,它的存在使得通信更加的高效。這有點(diǎn) 秦始皇統(tǒng)一語(yǔ)言 一樣,統(tǒng)一語(yǔ)言之后,人們之間的通信更快了,高效,從而帶動(dòng)了發(fā)展。協(xié)議也是一樣,不過(guò)是計(jì)算機(jī)之間通信做一些規(guī)范。
這里可以舉一個(gè)例子:
假如我要給家長(zhǎng)打長(zhǎng)途電話,但是通話話費(fèi)太貴,所以雙方搞了點(diǎn)協(xié)議:
- 響一下:我沒錢了,給打點(diǎn)生活費(fèi)
- 響倆下:我想和母親通話
- 響三下:我想和父親通話
就類似這種,所以協(xié)議的本質(zhì)就是約定。計(jì)算機(jī)協(xié)議是大佬程序員們定制的協(xié)議,它提高了通信的效率。
2.3 網(wǎng)絡(luò)協(xié)議棧
上面呢 我們對(duì)協(xié)議有了一定的認(rèn)識(shí),那么操作系統(tǒng)中 網(wǎng)絡(luò)協(xié)議是 怎樣體現(xiàn)的呢?
我先畫一下操作系統(tǒng)的圖:
首先 我們知道軟件 是分層的,網(wǎng)絡(luò)也是軟件,所以網(wǎng)絡(luò)協(xié)議棧是層狀的結(jié)構(gòu)。
網(wǎng)絡(luò)就是以上圖的方式 分布的,網(wǎng)絡(luò)協(xié)議棧是TCP\ IP 貫穿 體系結(jié)構(gòu),屬于操作系統(tǒng)的一部分:
3. 協(xié)議分層
協(xié)議分層最大的好處在于封裝,其次協(xié)議分層也完成了解耦。
比如:人之間通信 這件事,以下 是兩層協(xié)議
假如是老外 要用英語(yǔ)通信,那么只需要改一下 人之間的協(xié)議:
假如 之間通信要用 微信通信,那么 就改一下 底下的協(xié)議:
通過(guò)上面的例子,也許大家就能體會(huì)到 協(xié)議分層的好處。
3.1 TCP/IP 五層協(xié)議模型
TCP/IP是一組協(xié)議的代名詞,它還包括許多協(xié)議,組成了TCP/IP協(xié)議簇.
TCP/IP通訊協(xié)議采用了5層的層級(jí)結(jié)構(gòu),每一層都呼叫它的下一層所提供的網(wǎng)絡(luò)來(lái)完成自己的需求.
- 物理層: 負(fù)責(zé)光/電信號(hào)的傳遞方式. 比如現(xiàn)在以太網(wǎng)通用的網(wǎng)線(雙絞 線)、早期以太網(wǎng)采用的的同軸電纜
(現(xiàn)在主要用于有線電視)、光纖, 現(xiàn)在的wifi無(wú)線網(wǎng)使用電磁波等都屬于物理層的概念。物理層的能力決定了最大傳輸速率、傳輸距離、抗干擾性等. 集線器(Hub)工作在物理層. - 數(shù)據(jù)鏈路層: 負(fù)責(zé)設(shè)備之間的數(shù)據(jù)幀的傳送和識(shí)別. 例如網(wǎng)卡設(shè)備的驅(qū)動(dòng)、幀同步(就是說(shuō)從網(wǎng)線上檢測(cè)到什么信號(hào)算作新幀的開始)、沖突檢測(cè)(如果檢測(cè)到?jīng)_突就自動(dòng)重發(fā))、數(shù)據(jù)差錯(cuò)校驗(yàn)等工作. 有以太網(wǎng)、令牌環(huán)網(wǎng), 無(wú)線LAN等標(biāo)準(zhǔn). 交換機(jī)(Switch)工作在數(shù)據(jù)鏈路層.
- 網(wǎng)絡(luò)層: 負(fù)責(zé)地址管理和路由選擇. 例如在IP協(xié)議中, 通過(guò)IP地址來(lái)標(biāo)識(shí)一臺(tái)主機(jī), 并通過(guò)路由表的方式規(guī)劃出兩臺(tái)主機(jī)之間的數(shù)據(jù)傳輸?shù)木€路(路由). 路由器(Router)工作在網(wǎng)路層.
- 傳輸層: 負(fù)責(zé)兩臺(tái)主機(jī)之間的數(shù)據(jù)傳輸. 如傳輸控制協(xié)議 (TCP), 能夠確保數(shù)據(jù)可靠的從源主機(jī)發(fā)送到目標(biāo)主機(jī).
- 應(yīng)用層: 負(fù)責(zé)應(yīng)用程序間溝通,如簡(jiǎn)單電子郵件傳輸(SMTP)、文件傳輸協(xié)議(FTP)、網(wǎng)絡(luò)遠(yuǎn)程訪問(wèn)協(xié)議(Telnet)等. 我們的網(wǎng)絡(luò)編程主要就是針對(duì)應(yīng)用層.
也就是下圖,對(duì)照著看:
3.2 協(xié)議分層具體體現(xiàn)
- 對(duì)于一臺(tái)主機(jī), 它的操作系統(tǒng)內(nèi)核實(shí)現(xiàn)了從傳輸層到物理層的內(nèi)容;
- 對(duì)于一臺(tái)路由器, 它實(shí)現(xiàn)了從網(wǎng)絡(luò)層到物理層;
- 對(duì)于一臺(tái)交換機(jī), 它實(shí)現(xiàn)了從數(shù)據(jù)鏈路層到物理層;
- 對(duì)于集線器, 它只實(shí)現(xiàn)了物理層
4. 網(wǎng)絡(luò)傳輸基本流程
主機(jī)之間通信靠的是網(wǎng)絡(luò),其本質(zhì)是一個(gè)軟件,網(wǎng)絡(luò)是如何完成數(shù)據(jù)傳輸呢?根據(jù)網(wǎng)絡(luò)協(xié)議,完成網(wǎng)絡(luò)傳輸。
4.1 網(wǎng)絡(luò)傳輸初識(shí)
就比如 上圖,客戶端要給服務(wù)端傳數(shù)據(jù),是如何傳輸?shù)哪?#xff1f;
數(shù)據(jù)可不能直接就從客戶端傳輸?shù)椒?wù)端,它需要被封裝,怎么封裝?是一層一層的往下封裝,一個(gè)協(xié)議加一個(gè)報(bào)頭,最后傳到物理層也就是以太網(wǎng)上的是攜帶著多個(gè)報(bào)頭的數(shù)據(jù)。
這個(gè)過(guò)程就是封裝,然后還得解封,也就是 解包:
客戶端自頂向下封裝數(shù)據(jù),服務(wù)端從下到上解包數(shù)據(jù),然后就有一個(gè)奇怪現(xiàn)象,貌似每一層都是直接進(jìn)行通信的,注意看 上圖 每一層的數(shù)據(jù)格式都相同,這很巧妙。
4.2 報(bào)頭的理解
4.2.1 為什么要有報(bào)頭
這個(gè)可以從郵寄快遞這件事上去理解:假如我要從北京郵寄一個(gè)快遞到張家口,一般情況下,不可能 商家用手直接給你扔過(guò)來(lái),需要通過(guò)各個(gè)站點(diǎn)的郵寄:
假如是下面這樣的一個(gè)過(guò)程:
快遞在郵寄中,是不是會(huì)有一個(gè)郵寄單子,這個(gè)快遞單子就可以理解為報(bào)頭。
商家和用戶之間雖然都知道自己的目的地,但是之間是如何流通快遞,是不是得一步一步的來(lái)。
上面的過(guò)程就是封裝的過(guò)程,也就是加報(bào)頭的過(guò)程,加報(bào)頭是為能夠準(zhǔn)確的傳輸?shù)较乱粚?#xff0c;但是還有一個(gè)解包的過(guò)程,這個(gè)就不能聯(lián)想上面的例子了。解包就是 將快遞單子 一個(gè)一個(gè)撕掉。
4.2.2 加報(bào)頭和解包的過(guò)程
報(bào)頭是數(shù)據(jù)嗎?是的,它是一種結(jié)構(gòu)化數(shù)據(jù)。也就是一個(gè)結(jié)構(gòu)體,而且用到了位段的知識(shí),這里關(guān)于位段,就考驗(yàn)大家的C語(yǔ)言基礎(chǔ)了。
我自定義一個(gè)報(bào)頭數(shù)據(jù)結(jié)構(gòu):
struct my_hdr {int str:16;int des:16;int type:16;int len:16; }(1)我們來(lái)模擬一下 加報(bào)頭的過(guò)程:
- 先得填入報(bào)頭的數(shù)據(jù):
- 然后利用 memcpy或是memmove ,將報(bào)頭加到數(shù)據(jù)的前面
(2)再來(lái)模擬解包的過(guò)程:
- 先用 void* ptr指針指向這個(gè)數(shù)據(jù)段
- 然后對(duì) ptr進(jìn)行強(qiáng)轉(zhuǎn),就可以訪問(wèn)報(bào)頭中的數(shù)據(jù)
- 現(xiàn)在要解包,怎么操作?指針+1,是不是就跳過(guò)這個(gè)報(bào)頭了?
對(duì)某個(gè)類型的指針+1,跳過(guò)的是這個(gè)類型的大小,也就是跳過(guò)了上面的那個(gè)報(bào)頭。
5. 加上路由器的網(wǎng)絡(luò)傳輸
上面的網(wǎng)絡(luò)傳輸只是服務(wù)端與客戶端兩臺(tái)主機(jī)的網(wǎng)絡(luò)交流,只是幫助大家理解,但是網(wǎng)絡(luò)傳輸并不是那么的簡(jiǎn)單。
先拿局域網(wǎng)來(lái)說(shuō)說(shuō):
這種情況下,我提一個(gè)問(wèn)題:主機(jī)2和主機(jī)3可以接收到 帶報(bào)頭的數(shù)據(jù)嗎?
答案是當(dāng)然可以,因?yàn)閿?shù)據(jù)傳輸?shù)轿锢韺邮且怨怆姷男问?#xff0c;無(wú)法控制它具體傳送到何處。就比如:一個(gè)教師里 老師說(shuō) 李四你去一趟辦公室。其它同學(xué)聽到了嗎?當(dāng)然聽到了,但是他們會(huì)有所行為嗎?不會(huì)動(dòng)的,因?yàn)檫@個(gè)信息不屬于他們,李四也聽到了,昂,就是叫我呢。所以李四出了教師。
關(guān)鍵在于:這些主機(jī)怎么判斷傳出的數(shù)據(jù) 是給誰(shuí)的?靠的是什么?給出兩個(gè)概念 IP和MAC地址。后面講這倆概念,現(xiàn)在就可以理解成 主機(jī)的名字。這倆貨存在哪?存在報(bào)頭種,也就是說(shuō):傳來(lái)的帶報(bào)頭的數(shù)據(jù),在每個(gè)主機(jī)中進(jìn)行解包,發(fā)現(xiàn) 這個(gè)數(shù)據(jù)不是給我的,那我就不處理。是通過(guò)報(bào)頭來(lái)判斷的。
5.1 網(wǎng)絡(luò)傳輸中的互斥和同步
還是上面的例子,如果有多個(gè)主機(jī)往物理層傳數(shù)據(jù),會(huì)發(fā)生什么?數(shù)據(jù)碰撞。它會(huì)導(dǎo)致 數(shù)據(jù)出現(xiàn)問(wèn)題,那么就應(yīng)該避免這個(gè)情況。
多個(gè)主機(jī)共享網(wǎng)絡(luò)資源(以太網(wǎng)),那么這個(gè)網(wǎng)絡(luò)資源就是臨界資源,它需要被保護(hù),也就是說(shuō):任何時(shí)刻只允許一臺(tái)主機(jī)在局域網(wǎng)中發(fā)送數(shù)據(jù)。這像不像 進(jìn)程中的 互斥。進(jìn)程互斥靠的是鎖,局域網(wǎng)靠的是令牌環(huán),也就是說(shuō) 持有令牌的才能發(fā)送數(shù)據(jù)。
但是 如果只有一個(gè)主機(jī)手持令牌,這就導(dǎo)致了其它主機(jī)的饑餓問(wèn)題,所以還得怎么辦?那就是需要同步唄。同步也是靠的令牌環(huán),它不允許一臺(tái)主機(jī)長(zhǎng)期霸占令牌。
我畫個(gè)通信的路線圖:
有點(diǎn)潦草,但是我想表達(dá)的意思就是,數(shù)據(jù)經(jīng)過(guò)路由器也是一個(gè) 加報(bào)頭,解包的過(guò)程。
其實(shí)聊點(diǎn)題外話:如果想要攻擊局域網(wǎng)怎么辦?那就是破環(huán)臨界資源,怎么破環(huán),不停的往局域網(wǎng)中發(fā)送數(shù)據(jù),導(dǎo)致數(shù)據(jù)碰撞,是不是就完成了 攻擊?
5.2 廣域網(wǎng)網(wǎng)絡(luò)通信的示意圖
6. 網(wǎng)絡(luò)中的地址管理
6.1 認(rèn)識(shí)IP地址
- IP協(xié)議有兩個(gè)版本, IPv4和IPv6.
- IP地址是在IP協(xié)議中, 用來(lái)標(biāo)識(shí)網(wǎng)絡(luò)中不同主機(jī)的地址;
- 對(duì)于IPv4來(lái)說(shuō), IP地址是一個(gè)4字節(jié), 32位的整數(shù);
- 我們通常也使用 “點(diǎn)分十進(jìn)制” 的字符串表示IP地址, 例如 192.168.0.1 ; 用點(diǎn)分割的每一個(gè)數(shù)字表示一個(gè)字節(jié), 范圍是 0 - 255
6.2 認(rèn)識(shí)MAC地址
- MAC地址用來(lái)識(shí)別數(shù)據(jù)鏈路層中相連的節(jié)點(diǎn);
- 長(zhǎng)度為48位, 及6個(gè)字節(jié). 一般用16進(jìn)制數(shù)字加上冒號(hào)的形式來(lái)表示(例如: 08:00:27:03:fb:19)
- 在網(wǎng)卡出廠時(shí)就確定了, 不能修改. mac地址通常是唯一的(虛擬機(jī)中的mac地址不是真實(shí)的mac地址, 可能會(huì)沖突; 也有些網(wǎng)卡支持用戶配置mac地址
6.3 總結(jié)
對(duì)于以上地址,后續(xù)文章還會(huì)講到,畢竟這是網(wǎng)絡(luò)基礎(chǔ)(一),沒必要大徹大悟,咱們對(duì)網(wǎng)絡(luò)個(gè)大概的認(rèn)識(shí),就達(dá)標(biāo)了。
IP地址:在通信中是不變的,在網(wǎng)絡(luò)中標(biāo)識(shí)唯一個(gè)一臺(tái)主機(jī)。
MAC地址:在通信中是變化的,而且是一直在變化。
舉個(gè)例子:
唐僧取經(jīng),唐僧每到一個(gè)地方就對(duì)人說(shuō):我從東土大唐而來(lái),前往西天取經(jīng)。那么唐僧的IP地址就是 東土大唐,他的目的地IP地址就是 西天 。這是不變,走哪都這樣說(shuō)。
然后,他到了具體的一個(gè)地方,他還得問(wèn) 我該去向何處?也就是下一個(gè)站點(diǎn)是哪?人家可能說(shuō):你下一個(gè)地點(diǎn)就是女兒國(guó)。這個(gè)就是MAC地址,唐僧每到一個(gè)地方,它的MAC地址就會(huì)變化。
7. 結(jié)尾語(yǔ)
以上就是本期內(nèi)容,有問(wèn)題私信或者評(píng)論,感覺有幫助可以點(diǎn)個(gè)小贊。
總結(jié)
以上是生活随笔為你收集整理的计算机网络基础(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。