物理、鏈路、網絡及總覽
不同層常用協議
問:為什么要分層?
復雜的系統需要分層,比如常用的項目也是需要分層的,比如數據庫操作、業務操作、前后端交互等,比如計算機網絡里的分層,這樣每一層就只需要專注於一類事情。具體的,在計算機網絡里
- 1.各層之間相互獨立,不需要關心其他層是怎么實現的,只需要知道自己如何調用下層的功能就可以了。
- 2.提高了整體的靈活性,每一層都可以使用最適合的技術去實現,只需要保證自己的功能然后暴露接口就可以了。
- 3.大問題化小,可以將復雜的問題分解為許多比較小的問題來進行處理和解決。這樣整個系統就變的更簡單容易實現了。
在TCP/IP協議中,TCP協議是基於IP協議的。IP協議是對應於網絡層的協議,它是
一個不可靠的協議。TCP協議的可靠性保證給IP協議提供了可靠環境,從而使得IP協議可以不必考慮傳輸的可靠性,專注於網絡層的功能。這也是協議分層的初衷。
應用層
應用層進程也就是應用程序間的通信交互,傳輸的數據單元稱為報文,對於不同的網絡應用需要用到不同的應用層協議
- HTTP協議(HyperText Transfer Protocol)超文本傳輸控制協議 主要是為web瀏覽器和web服務器之間的通信設計的。TCP的80端口。
- SMTP協議(Simple Mail Transfer Protocol)簡單郵件傳輸協議,基於TCP協議,主要用來發送電子郵件。TCP的25端口。
IP協議解決了數據包的路由和傳輸,上層的TCP就可以不再關注路由和尋址;TCP協議解決了傳輸的可靠性和順序問題,上層的應用層就可以直接使用TCP協議進行數據傳輸,不再需要關心數據段的丟失和重復
http是要基於TCP連接基礎上的,簡單的說,TCP就是單純的簡歷連接,不涉及任何我們需要請求的數據;http協議使用來收發數據,就是為實際應用而來的;
物理層
- 1.想一下,if兩台計算機要進行通信,那該怎么做呢,是不是可以直接拿根線把兩者拉到一起,這樣就可以了;
問題:那if多台計算機想要通信呢?每兩台計算機之間都拉一條線嗎?那線會不會有點多了? - 2.所以可以有一個集線器(hub),這是啥呢?就是把線都拉到一個設備上面,不用兩兩之間都去相連了,比如1if想和3進行通信,那就可以1先到hub上,然后hub就把數據轉發到連在自己這的其他計算機上,比如2.3.4.5,然后3收到后看到后是給自己的,那就把信息收下,其他的就都丟掉了;
問題:那if1.2同時發送呢,那這電信號肯定混在一起了,那目的機器解析不出來自己想要的數據了? - 3.CSMA/CA:載波監聽,也就是在發送之前先監聽一下子,看這些鏈路上有沒有人在發數據,if沒有,那再發;
問題:那這樣每次鏈路上只能有一個機器發數據,其他都得等着,這利用率也太低了;
數據鏈路層(MAC層)
- 4.所以可以采用一個新的設備:交換機(SW):交換機從某個端口收到數據包的時候,通過讀取數據包中的目的MAC地址,也就是物理地址,對照自己內存里的地址表查看這個MAC地址和哪個端口是對應的,然后把這個數據包直接發給這個端口,不再整個線路上去廣播了;if沒有找到,這時候再去廣播,發給所有的端口,對應的計算機就會收到這個幀並接收,然后交換機把這個計算機的mac地址和端口號記錄到地址表里,做一個更新;
問題:那每台交換機的端口號其實是有有限的,大規模的設備該怎么辦呢? - 5.橋接:交換機是可以橋接的,也就是把兩個交換機接到一起,然后在地址表里更新為兩個橋接的交換機的端口即可;但是這種利用率其實還是比較低;所以更適合在局域網里采用;
三個基本問題
封裝成幀
在數據鏈路層傳輸是采用的幀這種格式,也就是對於上層網絡層交付下來的ip數據報,數據鏈路層會將其封裝成幀。在首尾添加幀首部(SOH)和幀尾部(EOH);
透明傳輸
在原始數據里可能存在SOH和EOH這樣的幀開始符合幀結束符,所以需要進行字節填充,也就是在這些符號前添加轉義字符ESC;
差錯控制
在傳輸過程中,可能會出錯,所以在數據鏈路層提供了簡單的差錯控制機制;最常用的比如就是循環冗余檢驗CRC
網絡層
在整個世界上,不能幾十億台設備都靠廣播,靠這種吼的方式,所以實際上采用一種方式來區分廣播域,只有在一個廣播域里面了,再去廣播;
ip數據報
ip地址
網絡層功能
網絡層主要負責路由轉發和分組
在路由表中,存了目的主機所在的網絡地址和下一跳的地址
主要的過程就是拿目的ip地址和子網掩碼去按位與,查看是否是在同一個網絡ip里,if是了,那就可以直接交付,if不是,就發到路由器上,然后查找路由表;
ARP協議
ARP是地址解析協議,也就是將ip地址轉換為mac地址;
單純的一個ip地址並不能確定處於哪個子網,需要依靠子網掩碼,也就是子網掩碼與ip地址按位與判斷是否處於同一個子網絡;
通信時,要知道目的ip地址:
- 判斷源ip和目的ip在不在一個局域網內,也就是兩者的子網地址是否一樣;
- if一樣的,那就可以拿到2的mac地址,依靠ARP協議;
在一個局域網里
主要就是判斷兩個計算機的子網地址一樣,if一樣的話,那就證明在一個局域網里,然后獲得計算機2的mac地址;然后拿到mac地址之后再進行數據發送;
不在一個局域網里
不在一個局域網的時候就需要去獲取網關的mac地址;
mac地址只在局域網里,要么轉成局域網中計算機的,要么是網關的;