文章目錄
- 前言
- 1. 協議
- 1.1 為什么要有協議?
- 1.2 什么是協議?
- 2. 網絡
- 2.1 網絡通信的問題
- 2.2 網絡的解決方案——網絡的層狀結構
- 2.3 網絡和系統的關系
- 2.4 網絡傳輸基本流程
- 2.5 簡單理解IP地址
- 2.6 跨網絡傳輸
- 總結
前言
??在早期的計算機發展中,一開始其實是一個個獨立的設備,通俗來說就是電腦和電腦之間不是像現在這樣可以互相傳輸數據的,只能通過,比如將這個電腦上的數據通過軟盤拷貝下來,再到另一臺電腦下載。而有人的參數,效率定然是低下的,因此就有了網絡,通過網絡來實現不同設備之間的數據傳輸。
1. 協議
1.1 為什么要有協議?
??我們上面說了,網絡可以使不同的設備之間互相傳輸數據,那么此時就有問題了。比如丟包了怎么辦,我們知道一臺設備可能會給另一個距離十分遠的設備傳輸數據,距離變長的,那么如何能確定這個數據一定能送到呢?再比如網絡中一定是有很多個設備在傳輸數據,那么如何定位你的目標機器呢?
1.2 什么是協議?
??協議本質就是一種約定。舉個淺顯的例子,時間線撥回20世紀初,電話剛剛興起的時候,每次打電話都是要收費的,對普通人來說是一筆不小的費用,所以一個大學生就與家里人作了一個約定,如果我打電話,電話響了一聲我就掛了,那么就意味著沒有生活費了,如果電話響了兩聲我就掛了,意味著我在大學里的生活狀況一切良好,不用擔心我,而兩聲以上的話就說明我需要和你們進行通話了,此時你們再接電話。而這就是一種約定,也就是一種協議。
2. 網絡
??我們知道電腦是有很多廠商的,如果每個廠商所定下的協議不一樣的話,那么設備和設備之間是無法進行通信的,因此就需要有一套完整的網絡協議來進行規范,所以的廠商都需要遵守這個協議。
??網絡一定要能保證各個不同的機器都能無障礙的連入互聯網,所以要定制全年的協議,不僅僅要定義010信號是什么意思,還需要規定其底層是以光電信號的頻率還是強弱來識別010。
2.1 網絡通信的問題
??一臺主機轉發數據可能要經過多個路由器轉發才能最終到達另一臺主機,那么就會有問題:
- 怎么保證把數據交給了下一跳。
- 在轉發中,如何進行路徑選擇,目標主機定位的問題。
- 如果報文中間出現錯誤,或者丟失該怎么辦。
- 對于送達的數據,如何進行處理。
??這些問題都需要由協議來解決。
2.2 網絡的解決方案——網絡的層狀結構
??左邊的是一開始約定的協議模型,右邊的是后來工程實現(編碼實現)的時候完成的協議模型。
??OSI:
- OSI(Open System Interconnection,開放系統互連)七層網絡模型稱為開放式系統互聯參考模型,是一個邏輯上的定義和規范;
- 把網絡從邏輯上分為了7層, 每一層都有相關、相對應的物理設備,比如路由器,交換機;
- OSI 七層模型是一種框架性的設計方法,其最主要的功能使就是幫助不同類型的主機實現數據傳輸;
- 它的最大優點是將服務、接口和協議這三個概念明確地區分開來,概念清楚,理論也比較完整。通過七個層次化的結構模型使不同的系統不同的網絡之間實現可靠的通訊;
- 但是,它既復雜又不實用,所以我們按照TCP/IP四層模型來講解。
??TCP/IP:
??TCP/IP是一組協議的代名詞,它還包括許多協議,組成了TCP/IP協議簇。
??TCP/IP通訊協議采用了5層的層級結構,每一層都呼叫它的下一層所提供的網絡來完成自己的需求。
- 物理層: 負責光/電信號的傳遞方式,比如現在以太網通用的網線(雙絞 線)、早期以太網采用的的同軸電纜(現在主要用于有線電視)、光纖, 現在的wifi無線網使用電磁波等都屬于物理層的概念。物理層的能力決定了最大傳輸速率、傳輸距離、抗干擾性等. 集線器(Hub)工作在物理層。
- 數據鏈路層: 負責設備之間的數據幀的傳送和識別。例如網卡設備的驅動、幀同步(就是說從網線上檢測到什么信號算作新幀的開始)、沖突檢測(如果檢測到沖突就自動重發)、數據差錯校驗等工作。有以太網、令牌環網,無線LAN等標準。交換機(Switch)工作在數據鏈路層。
- 網絡層: 負責地址管理和路由選擇。例如在IP協議中,通過IP地址來標識一臺主機,并通過路由表的方式規劃出兩臺主機之間的數據傳輸的線路(路由)。路由器(Router)工作在網路層。
- 傳輸層: 負責兩臺主機之間的數據傳輸。如傳輸控制協議 (TCP),能夠確保數據可靠的從源主機發送到目標主機。
- 應用層: 負責應用程序間溝通,如簡單電子郵件傳輸(SMTP)、文件傳輸協議(FTP)、網絡遠程訪問協議(Telnet)等。我們的網絡編程主要就是針對應用層。
??這是每一層所處理的問題:
??一般而言: - 對于一臺主機,它的操作系統內核實現了從傳輸層到物理層的內容;
- 對于一臺路由器,它實現了從網絡層到物理層;
- 對于一臺交換機,它實現了從數據鏈路層到物理層;
- 對于集線器,它只實現了物理層;
2.3 網絡和系統的關系
??因此對于網絡的編程,實際上與我們之前的編程并沒有什么太大的區別,都是通過調用系統調用接口來進行的。也就是說在操作系統中它還會實現TCP/IP協議!!!
2.4 網絡傳輸基本流程
??那么我們再來理解一下數據是如何轉發的呢?也就是主機之間是如何進行通信的呢?
??我們先以我們熟悉的事物來類比,比如快遞,到達我們手上的快遞實際上并不僅僅只要快遞,還有快遞單,上面寫了收件人、地址、電話等待內容,我們知道這些東西我們其實是不需要的,那么帶上它干什么呢?這并不難理解,這是為了給快遞員指明要將這個快遞送到什么地方,為其指明一個方向。也即是說,快遞 = 快遞單 + 我們所買的物品。
??在計算機傳輸數據時也是一樣的,它并不僅僅只是傳輸了數據,還需要將目的主機的的信息等等一系列內容都發過去,在這里,這些數據就是對應上面所說的快遞單,而我們需要的數據,比如說你發送了個你好,這個你好就對應我們所買的物品。
??那么在計算機中用C語言要如何表示呢?那么肯定就先描述了,使用struct xxx{} 結構體來表示。在計算機種,協議通常用結構體字段來表征的,而結構體字段定義出來的對象,我們稱為協議報頭。
- 不同的協議層對數據包有不同的稱謂,在傳輸層叫做段(segment),在網絡層叫做數據報 (datagram),在鏈路層叫做幀(frame)。
- 應用層數據通過協議棧發到網絡上時,每層協議都要加上一個數據首部(header),稱為封裝(Encapsulation)。
- 首部信息中包含了一些類似于首部有多長,載荷(payload)有多長,上層協議是什么等信息。
- 數據封裝成幀后發到傳輸介質上,到達目的主機后每層協議再剝掉相應的首部,根據首部中的 “上層協議字段” 將數據交給對應的上層協議處理。
??上面是主機一向主機二發送你好的大概流程,最后從主機一發出的數據實際上是報頭 + 有效載荷,也就是你發的真實數據。那么就有問題了:
- 如何將報文中的報頭和有效載荷進行分離呢?
- 任何協議中,如何將自己的有效載荷,交付給上層的那一個協議呢?
??上面的兩個問題是每一個協議都要解決的問題,是任何的共性!!!所以要好好理解!!
2.5 簡單理解IP地址
??上面圈起來的就是ip地址,它是一個點分十進制的形式,以[0~255]. [0~255]. [0~255]. [0~255] 的形式展示的。
??如果在發送的報文中以這樣的形式進行發送,那么占據的內存是相當大的,因為這些就是一個個的字符,一個字符是一字節,這么多是非常浪費內存的,而它的沒有數字的范圍都是0~255,所以我們可以用一個字節(8個比特位)來表示。
??ip大概分為兩類,一類是公網ip,一種是內網ip,它們加起來就是所有的ip地址。IP地址是用來表示互聯網中唯一的一臺主機。
??IP地址的意義:進行路徑選擇,為了到達目的主機,幫助我們該如何選擇路徑,從而將數據送到目的主機。
??IP協議有兩個版本,IPv4和IPv6。我們整個的課程,凡是提到IP協議,沒有特殊說明的,默認都是指IPv4。
- IP地址是在IP協議中, 用來標識網絡中不同主機的地址;
- 對于IPv4來說,IP地址是一個4字節,32位的整數;
- 我們通常也使用 “點分十進制” 的字符串表示IP地址,例如 192.168.0.1;用點分割的每一個數字表示一個字節,范圍是 0 - 255;
??MAC地址:
- MAC地址用來識別數據鏈路層中相連的節點;
- 長度為48位,及6個字節。一般用16進制數字加上冒號的形式來表示(例如: 08:00:27:03:fb:19)。
- 在網卡出廠時就確定了,不能修改。mac地址通常是唯一的(虛擬機中的mac地址不是真實的mac地址,可能會沖突,也有些網卡支持用戶配置mac地址)。
2.6 跨網絡傳輸
??上述就是一個簡單的跨網絡傳輸,在其中,保存的IP地址是不會發生變化的,但是保存的mac地址是會被不斷改變的,它保存的是上一個經過的主機/路由器的mac地址,和下一個要去的主機/路由器的mac地址。
??其中令牌環可以看作一個共享資源,在同一時間只允許一個軟件使用,它的作用可以理解成就是用來傳遞數據的,并且會進行封裝報頭。
??在跨多個網絡中,就是以這樣的方式來不斷傳輸數據的。
總結
??經過對網絡的簡單講解,相信大家已經對于網絡如何傳輸數據有了大概的理解,那么接下來我將會深入講解關于每一層都在干什么等內容,也希望能與大家公共進步。
??如果大家發現有什么錯誤的地方,可以私信或者評論區指出喔。我會繼續深入學習Linux,希望能與大家共同進步,那么本期就到此結束,讓我們下期再見!!覺得不錯可以點個贊以示鼓勵!!