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