物理層--數據鏈路層--網絡層--傳輸層--應用層linux
咱們將應用層,表示層,會話層並做應用層,從tcp/ip五層協議的角度來闡述每層的由來與功能,搞清楚了每層的主要協議服務器
就理解了整個互聯網通訊的原理。網絡
首先,用戶感知到的只是最上面一層應用層,自上而下每層都依賴於下一層,因此咱們從最下一層開始切入,比較好理解tcp
每層都運行特定的協議,越往上越靠近用戶,越往下越靠近硬件工具
物理層由來:上面提到,孤立的計算機之間要想一塊兒玩,就必須接入internet,言外之意就是計算機之間必須完成組網spa
物理層功能:主要是基於電器特性發送高低電壓(電信號),高電壓對應數字1,低電壓對應數字03d
數據鏈路層由來:單純的電信號0和1沒有任何意義,必須規定電信號多少位一組,每組什麼意思blog
數據鏈路層的功能:定義了電信號的分組方式ip
以太網協議:路由
早期的時候各個公司都有本身的分組方式,後來造成了統一的標準,即以太網協議ethernet
ethernet規定
mac地址:(網卡的地址)
head中包含的源和目標地址由來:ethernet規定接入internet的設備都必須具有網卡,發送端和接收端的地址即是指網卡的地址,即mac地址
mac地址:每塊網卡出廠時都被燒製上一個世界惟一的mac地址,長度爲48位2進制,一般由12位16進制數表示(前六位是廠商編號,後六位是流水線號)
廣播:
有了mac地址,同一網絡內的兩臺主機就能夠通訊了(一臺主機經過arp協議獲取另一臺主機的mac地址)
ethernet採用最原始的方式,廣播的方式進行通訊,即計算機通訊基本靠吼
網絡層由來:有了ethernet、mac地址、廣播的發送方式,世界上的計算機就能夠彼此通訊了,問題是世界範圍的互聯網是由
一個個彼此隔離的小的局域網組成的,那麼若是全部的通訊都採用以太網的廣播方式,那麼一臺機器發送的包全世界都會收到,
這就不只僅是效率低的問題了,這會是一種災難
必須找出一種方法來區分哪些計算機屬於同一廣播域,哪些不是,若是是就採用廣播的方式發送,若是不是,
就採用路由的方式(向不一樣廣播域/子網分發數據包),mac地址是沒法區分的,它只跟廠商有關
網絡層功能:引入一套新的地址用來區分不一樣的廣播域/子網,這套地址即網絡地址
子網掩碼:將ip地址分爲網絡地址和主機地址
所謂」子網掩碼」,就是表示子網絡特徵的一個參數。它在形式上等同於IP地址,也是一個32位二進制數字,它的網絡部分所有爲1,主機部分所有爲0。好比,IP地址172.16.10.1,若是已知網絡部分是前24位,主機部分是後8位,那麼子網絡掩碼就是11111111.11111111.11111111.00000000,寫成十進制就是255.255.255.0。
子網掩碼是用來標識一個IP地址的哪些位是表明網絡位,以及哪些位是表明主機位。子網掩碼不能單獨存在,它必須結合IP地址一塊兒使用。子網掩碼只有一個做用,就是將某個IP地址劃分紅網絡地址和主機地址兩部分。
區分網絡位和主機位是爲了劃分子網,把一個大網絡分紅多個小網絡
優勢:避免廣播風暴和地址浪費
arp協議由來:計算機通訊基本靠吼,即廣播的方式,全部上層的包到最後都要封裝上以太網頭,而後經過以太網協議發送,在談及以太網協議時候,我門瞭解到
通訊是基於mac的廣播方式實現,計算機在發包時,獲取自身的mac是容易的,如何獲取目標主機的mac,就須要經過arp協議
arp協議功能:廣播的方式發送數據包,獲取目標主機的mac地址
協議工做方式:每臺主機ip都是已知的
例如:主機172.16.10.10/24訪問172.16.10.11/24
三:這個包會以廣播的方式在發送端所處的子網內傳輸,全部主機接收後拆開包,發現目標ip爲本身的,就響應,返回本身的mac
前面講到了,IP協議並非一個可靠的協議,它不保證數據被送達,那麼,天然的,保證數據送達的工做應該由其餘的模塊來完成。其中一個重要的模塊就是ICMP(網絡控制報文)協議。
當傳送IP數據包發生錯誤--好比主機不可達,路由不可達等等,ICMP協議將會把錯誤信息封包,而後傳送回給主機。給主機一個處理錯誤的機會.
咱們通常主要用ICMP協議檢測網絡是否通暢,基於ICMP協議的工具主要有ping 和traceroute
ping:
ping這個單詞源自聲納定位,而這個程序的做用也確實如此,它利用ICMP協議包來偵測另外一個主機是否可達。
原理是用類型碼爲0的ICMP發請 求,受到請求的主機則用類型碼爲8的ICMP迴應。
ping程序來計算間隔時間,並計算有多少個包被送達。用戶就能夠判斷網絡大體的狀況。咱們能夠看到, ping給出來了傳送的時間和TTL的數據。
用來查看從當前主機到某地址一共通過多少跳路由 ------window 用命令:tracert----------linux命令:tracerout
傳輸層的由來:網絡層的ip幫咱們區分子網,以太網層的mac幫咱們找到主機,而後你們使用的都是應用程序,你的電腦上可能同時開啓qq,暴風影音,迅雷等多個應用程序,
那麼咱們經過ip和mac找到了一臺特定的主機,如何標識這臺主機上的應用程序呢?答案就是端口,端口即應用程序與網卡關聯的編號。
傳輸層功能:創建端口到端口的通訊
補充:端口範圍0-65535,0-1023爲系統佔用端口
傳輸層有兩種協議,TCP和UDP,見下圖
可靠傳輸,TCP數據包沒有長度限制,理論上能夠無限長,可是爲了保證網絡的效率,一般TCP數據包的長度不會超過IP數據包的長度,以確保單個TCP數據包沒必要再分割。
TCP的3次握手
每當創建一個TCP/IP鏈接的時候都要經歷3次握手,這是爲了保證創建一個可靠的鏈接。
客戶端向服務器發請求,服務器接收請求,服務器接收請求以後發送一個鏈接標誌,客戶端接收鏈接標誌以後也向服務器發送一個鏈接標誌,至此鏈接完成。用打電話類比的話就是:
小明撥打小紅的電話
小紅按下通話鍵並說了聲,喂 (一次握手)
小明聽到小紅的迴應,也說了聲,喂 (二次握手)
小紅接收到小明的迴應 (三次握手)
爲何有4次揮手呢,4次揮手的做用就是斷開鏈接,之因此要斷開鏈接是由於TCP/IP協議是要佔用端口的,而計算機的端口是有限的,因此一次傳輸完成以後是要斷開鏈接的,斷開鏈接的方式就是4次揮手。
鏈接是由客戶端發起的,因此斷開鏈接也要有客戶端發起,由於服務器是被動的。上圖的最後一部分就是4次揮手,仍是用小明和小紅打電話來類比,
小明:我這沒事兒了,你還有事兒嗎? (1次揮手)
小紅:我也沒事兒了,你肯定沒事兒了嗎? (2次揮手)
小紅:我要掛電話了。 (3次揮手)
小明:好吧,你掛吧。 (4次揮手)
不可靠傳輸,」報頭」部分一共只有8個字節,總長度不超過65,535字節,正好放進一個IP數據包。
不要創建連接,不須要對方確認,不可靠,但效率高