本節重點:
1.了解網絡發展背景,對局域網/廣域網的概念有基本認識
2.了解網絡協議的意義,重點理解TCP/IP五層結構模型
3.學習網絡傳輸的基本流程,理解封裝和解包分用
一、計算機網絡發展背景:
人與人之間是需要協同工作的,就注定了計算機需要協同工作,網絡的產生是必然的
- 早期計算機是昂貴的大型設備(如 IBM 大型機),體積龐大、功能單一,且為 “單機運行” 模式,一臺計算機僅供少數人使用,資源(如計算能力、存儲)無法共享。
- 軍事、科研領域首先產生了 “多設備協同” 需求:例如,美國軍方需要讓不同地點的計算機共享數據,以提高指揮效率;科研機構希望連接多臺計算機,協同完成復雜計算(如導彈軌跡計算、氣象模擬)。
早期的計算機是獨立模式(計算機之間相互獨立)
網絡互聯模式:多臺計算機連接在一起,完成數據共享,協同工作?
二、局域網與廣域網:
局域網(LAN)和廣域網(WAN)是計算機網絡按地理覆蓋范圍劃分的兩種核心類型
局域網:在有限地理范圍內(如家庭、辦公室、校園、工廠)將多臺設備(計算機、手機、打印機等)互聯形成的網絡。
交換機;主要用于在同一網絡(如局域網 LAN)內實現多個設備的高效通信
廣域網:覆蓋廣闊地理范圍(如城市、國家、全球)的網絡,用于連接多個局域網或其他廣域網,實現遠距離數據傳輸。
總結:局域網就是局部的,廣域網就是遠距離,所謂局部和廣部是相對的概念,取決于觀察的視角、網絡的規模和應用場景。
三、協議:
協議是指網絡中不同設備之間進行通信時必須共同遵守的一套規則、標準或約定,它規定了通信的格式、時機、順序以及錯誤處理方式等,確保數據能夠準確、有序、高效地在設備間傳輸。
簡單理解:就不如兩個人交流,只有是用同一套語言(中文/英文),并且遵循基本的語法規則才能相互交流溝通,網絡也是如此,只有達成約定,才能互相傳輸解析數據?
計算機之間的傳輸媒介是光信號和電信號,通過“頻率”和”強弱“來表示0和1這樣的信息,要想傳遞各種不同的信息,就需要約定雙方的數據格式,但只要約定好就行了嗎??
顯然不是,就好比一個是中文,一個是英文,我都各自遵循自己的協議,但沒有人制定國際交流語言就不行,兩個還是不能溝通,就好比計算機生產廠商很多,os很多,硬件設備很多,如何讓不同的設備不同的廠商之間的計算機能夠相互順暢的通信,就需要有人約定一個標準,讓大家都來遵循,這個標準就叫網絡協議。?
3.1? 協議分層:
?
例子中:我們簡單的進行通信,在我們語言層看來是面對面的,但實際是我們語言層的數據經過通信設備層,在經過電話機協議,轉到對方的通信設備層在到語言層。
那我們為什么要進行協議分層?本質就是為了解耦,如果我們把所有的協議都揉在一起,都放在一層,那這個協議會很冗雜,如果我們改變語言層的東西,就意味著改變整個協議,不利于實現和維護、發展
3.2? 理解分層:
a.軟件設計方面的優勢————實現低耦合
b.分層的依據是讓功能比較集中,耦合度比較高的模塊為一層?
c.每一層都要解決特定的問題(這就是我們學習網絡的框架)
3.3? 用例子理解每一層次
假設我們有兩臺主機,主機a和主機b,我們該如何傳輸數據?
1.如何把數據交付給和自己相連的下一臺主機(注意:不是主機a到b,而是主機a到b的過程中經過的其他主機)
2.當我們能傳輸后,我們要解決往哪傳輸,也就是路徑的選擇
3.我們要有糾錯/容錯的能力,如果傳輸失敗,數據該怎么辦???
4.數據包從主機a到b后要解決應用方面的問題(比如主機a向b發出申請下載電影,把數據發送給對方是手段,目的是為了下載電影,為了解決應用問題)
總結:綜上是網絡要解決的4個問題,應用低耦合高內聚的分層原理,每一層次都有自己匹配的協議,每一層的協議都要解決自己的問題。
3.4? OSI(Open System Interconnection)七層模型
OSI 七層模型:是國際標準化組織(ISO)提出的一種理論上的分層架構,目的是為網絡協議的設計提供統一的 “功能劃分標準”。它將網絡通信從底層到上層劃分為 7 個層級(物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層、應用層),每個層級明確了需要解決的核心問題(如物理層負責信號傳輸,網絡層負責路由選擇等)。
簡單說,OSI 模型像一張 “建筑圖紙”,規定了 “房子應該有地基、墻體、屋頂”,但不具體規定 “地基用什么水泥,屋頂用什么瓦片”
從上圖可以看出:每一層都有自己的協議和自己要解決的問題
實際問題中,567層是需要我們自己設計的,也就是之前的例子中的第四點(解決應用問題)234層對應問題123,物理層暫時不考慮
3.5? TCP/IP五層(或四層)模型
TCP/IP 是一組協議的代名詞,它還包括許多協議,組成了 TCP/IP協議簇。
TCP/IP 通訊協議采用了 5 層的層級結構,每一層都呼叫它的下一層所提供的網絡來完成自己的需求。?
物理層: 負責光/電信號的傳遞方式. 比如現在以太網通用的網線(雙絞線)、早期以太網采用的的同軸電纜(現在主要用于有線電視)、光纖, 現在的 wifi 無線網使用 電磁波等都屬于物理層的概念。物理層的能力決定了最大傳輸速率、傳輸距離、抗 干擾性等. 集線器(Hub)工作在物理層。
數據鏈路層: 負責設備之間的數據幀的傳送和識別. 例如網卡設備的驅動、幀同步(就是說從網線上檢測到什么信號算作新幀的開始)、沖突檢測(如果檢測到沖突就 自動重發)、數據差錯校驗等工作。有以太網、令牌環網, 無線 LAN 等標準。交換機(Switch)工作在數據鏈路層。
網絡層: 負責地址管理和路由選擇。例如在 IP協議中, 通過IP地址來標識一臺主機, 并通過路由表的方式規劃出兩臺主機之間的數據傳輸的線路(路由). 路由器(Router)工作在網路層。
傳輸層: 負責兩臺主機之間的數據傳輸。如傳輸控制協議 (TCP), 能夠確保數據可靠的從源主機發送到目標主機。
應用層: 負責應用程序間溝通,如簡單電子郵件傳輸(SMTP)、文件傳輸協議(FTP)、網絡遠程訪問協議(Telnet)等,我們的網絡編程主要就是針對應用層。
也就是把567層歸結到應用層,后續如果我們說四層模型就是省略了物理層
結合上面所說的,我們實際編程是應用層,os其實早就在內部規定好了傳輸層和網絡層。?
?一般而言:
對于一臺主機, 它的操作系統內核實現了從傳輸層到數據鏈路層的內容。
對于一臺路由器, 它實現了從網絡層到物理層。
對于一臺交換機, 它實現了從數據鏈路層到物理層。
對于集線器, 它只實現了物理層
但是并不絕對. 很多交換機也實現了網絡層的轉發; 很多路由器也實現了部分傳輸層的內容(比如端口轉發)。
四、局域網中的兩臺主機是如何通信的???
4.1? 協議報頭
例子:比如一個快遞,你想買的東西實際上是箱子里的東西,并不包括快遞盒及快遞單,這多出來的就叫協議,協議上的從哪寄到哪,收件人名字等信息就叫報頭,將來快遞在站點與站點之間傳遞時只需要看報頭
a.報文=報頭+有效載荷(后面會提)
b.協議每一層都有,而每一個協議最終表現就是協議要有報頭
c.協議通常是通過協議報頭來進行表達的
4.2? 局域網
a.兩臺主機同處一個局域網是能夠直接通信的
b.局域網的原理(簡單提,后面詳細講)
? ?每一臺主機都有自己的”名字“,每一臺都有網卡,網卡也有自己的地址,MAC地址(表明自己在? ? ?局域網中的唯一性)(在linux中ifconfig可以查詢,其中有一行ether就是MAC地址,16進制,一? ? ?共48bit位?,window是ipconfig /all)
簡單來說就是A給D發數據,所有的主機都會收到,但由于所有主機在自己最底層的協議判斷時,C和B直接把該報頭丟棄,只有D識別并且判斷出是A發給自己的,所以就會處理
?當一個”你好“從主機1發到主機2時要經歷封裝,解包分用的過程,也就是”你好“每經過一層時要加上對應的報頭,對方在接收到后到達應用層要經過解包分用的過程
在網絡協議中,我們可以認為同層協議在直接通信,也可以理解成向下交付,這是兩種不同的認知
4.3? 報文=報頭+有效載荷
報頭就是每一層的協議,有效載荷就是除掉協議后剩下的
比如在傳輸層(站在傳輸層的視角):報文為傳輸層報頭+應用層包頭+”你好“
報頭=傳輸層報頭,有效載荷=應用層報頭+”你好“
4.4? 數據包封裝和分用?
1.不同的協議層對數據包有不同的稱謂,在傳輸層叫做段(segment),在網絡層叫做數據報 (datagram),在鏈路層叫做幀(frame)。
2.應用層數據通過協議棧發到網絡上時,每層協議都要加上一個數據首部(header),稱為封裝(Encapsulation)。
3.首部信息中包含了一些類似于首部有多長, 載荷(payload)有多長, 上層協議是什么等信息。
4.數據封裝成幀后發到傳輸介質上,到達目的主機后每層協議再剝掉相應的首部,根據首部中的 "上層協議字段" 將數據交給對應的上層協議處理。
數據分用的過程:
?
4.5? 每一層協議都要面臨和解決的問題
1.如何判斷哪里是報頭,哪里是有效載荷
2.如何判斷自己的有效載荷要交給上一層的哪個協議???每一層的協議也有幾個,要清楚交給那個協議
以上就是每一層協議的報頭都要涵蓋的信息,這就是協議的共性
4.6? 局域網的分類
1.以太網
a.當主機a給d發時,b不能給c發(只允許一個主機在任何一個時刻給局域網中發送信息,否則發送碰撞)
b.碰撞(Collision)?指的是多個設備同時在同一物理介質(如網線)上發送數據,導致信號相互干擾、無法被正確接收的現象。(網線站在os的角度就是共享資源/臨界資源)
c.如果發送碰撞就需要重新發送
2.令牌環路
令牌環路就類似與鎖,誰擁有令牌誰就可以發信息,避免了碰撞
特點:可靠性高、實時性較好,但成本高、擴展性差,目前已幾乎被以太網取代。
3.無線LAN
基于無線通信技術(如無線電波、紅外線)的局域網,核心標準是 IEEE 802.11 系列(即 WiFi),也屬于廣義以太網的延伸(無線以太網)。
特點:無需布線,靈活性強,適用于移動設備接入。
4.7? MAC地址和ip地址
在Linux中是用ifconfig命令進行查詢
ehc0和lo都是網絡接口,ehc0相當于入網接口,收數據和發數據都是這個,相當于數據鏈路層
4.7.1? MAC地址
其中echo中 ether是以太意思,這后面跟著就是MAC地址,每個數字都是16進制,一共有12個數字,每兩個:分隔,12x4就是48位,也就是6個字節
在網卡出廠時就確定了, 不能修改. mac 地址通常是唯一的(虛擬機中的 mac 地址不是真實的 mac 地址, 可能會沖突; 也有些網卡支持用戶配置 mac 地址)。
4.7.2? IP地址
inet是ip地址,內網ip/私有ip ip地址中每個取值范圍是0~255,即用一個char類型來表示,四個字節就可以表示一個ip地址,這種表示方案稱為IPv4,以點分隔,叫點分十進制?
IPv6 采用 128 位二進制數表示地址,按每 8 位(1 字節)劃分為 16 個字節,通常用8 組十六進制數表示(每組 4 個十六進制數,對應 16 位二進制,即 2 個字節),組之間用冒號(:
)分隔。
例如:2001:0db8:85a3:0000:0000:8a2e:0370:7334
?就是一個標準的 IPv6 地址。
IPv6是解決IPv4地址不夠用的情況
一般情況是局域網用MAC地址,廣域網用ip,但ip還可以用于局域網(后面會解釋)
4.7.3?ip地址和mac地址的作用
既然ip和mac都可以表示主機的唯一性,那區別是啥???作用是啥???
ip地址是提供方向目標,方便路徑選擇,比如西游記唐僧從大唐到西天取經
目的mac地址是會變的,是提供可行性,比如上一站女兒國下一站黑風嶺,上一站黑風嶺下一站火焰山
也就是ip提供給你一個方向,mac是沿著這個大致方向在兩個相鄰結點間一直跳,直到終點
ip地址工作在網絡層提供宏觀方向,mac地址工作在數據鏈路層提供微觀執行
五、總結梳理數據如何在網絡當中傳輸?
圖中中間部分代表路由器,兩邊部分代表主機
圈圈代表一個一個的局域網
傳輸層和網絡層是os內置好的,鏈路層是驅動
可以明確未來我們用戶是通過編寫代碼,調用系統調用接口來向下傳達我們的網絡發送任務才交給對方主機
一定是左主機自頂向下進行封裝,然后經過網線轉發到路由器,然后在做自底向上的解包
當經過第一個路由器A時,因為mac地址是在數據鏈路層,到路由器A時已經去掉源mac地址和目的mac地址,然后經過網絡層檢查發現需要到另外一個路由器,所以在A中自頂向下封裝,加上源mac地址和去B的nac地址,到B后依次循環這樣的操作,最后到右主機
最后形成的路徑就會變成這樣
問題:為什么路由器A到B時它是清楚去B,而不是別的路由器???
?原因就在于ip地址宏觀的路徑選擇,ip地址早已經決定了從哪個到哪個在到哪個
mac地址實現的是微觀的,是決定從哪個到哪個這種局部的
?
?