linux day23(網絡介紹,互聯網通訊協議osi七層協議,arp協議,tcp協議)

1,網絡介紹python

  爲何要存在互聯網?shell

  爲了數據傳輸更加方便快捷。數組

 主要講互聯網的各類協議。如:瀏覽器

   osi七層協議服務器

2,子網劃分(經過控制子網頁碼來達到劃分不一樣局域網的目的)網絡

  192.168.10.11/24架構

  192.168.10.230/24  併發

  在/24的子網頁碼的時候,是一個網段的,可是若是改了子網頁碼,即便它們鏈接在同一個交換機上,也不是一個網段的,也沒法通訊。運維

3,vlan (virtual lan ,虛擬局域網,一個交換機就一個局域網,可是如今一個交換機能夠當多個局域網,也算是虛擬化技術的一種。)tcp

  交換機的基礎知識

  而後講配置網絡,ip,地址,路由的配置,路由條目等等。  

  路由器,也是硬件,操做系統,只不過專門爲路由轉發的硬件和操做系統。

 

運維,就是維護軟件的穩定,而軟件,基本上都基於網絡通訊的軟件,操做系統,網絡的穩定。因此網絡很重要。

 

一,網絡介紹

  1,基於網絡通訊的軟件有倆種架構:

  cs架構  clienk(客戶端)------------網絡----------------server(服務器)  

  bs架構   browser(瀏覽器,在早期至關於萬能客戶端)------------網絡-------------server(服務器)

 cs架構的軟件,優勢:客服端,服務端都是本身開發,客戶端服務端如何通訊,本身說了算。      

        缺點:客戶端,服務端都要本身開發。用戶必須下載客戶端才能訪問問服務端。

  bs架構的軟件,優勢:只開發服務端,

         缺點:開發的服務端的規則須要受制別人,由於客戶都下載好了瀏覽器客戶端。

   注意:如今開發,既有本身配套的客戶端,也能被瀏覽器訪問,如騰訊視頻。

 

  2,什麼是網絡

  底層的物理鏈接介質要準備好,如同打電話,首先須要一個電話,而後是電話線鏈接在一塊兒,而後打電話爲了互相能聽懂,都學了普通話,就等於你們一塊兒商討出來的統一標準,就是通訊的協議。

  網絡=物理連接介質+通訊的標準(互聯網通訊協議)

  互聯網通訊協議如同互聯網界的英語。等於你們必須都能聽懂才行

  物理連接介質主要是網絡工程師來管,更多的是將各類通訊協議。

雲計算

  原本本身電腦若是看高清視頻的壓力,或者玩大型網絡遊戲,本地資源的壓力都在本身這一端,有了雲計算,只須要保證網速,顯卡,本身其餘電腦的性能不須要特別高,就能輕鬆使用,複雜的操做性能方面的問題,都在服務端解決。我的pc計算機的發展也會愈來愈小。

  3,互聯網通訊協議(osi七層協議)如同計算機界的英語,你們都會才能通訊:

主要學5層和7層

第一層,物理層:發送高低電平,單純的電信號沒有意義,計算機只能發送高低電平,就規定高電平對應1,低電平對應0,發出來的信號101001010110.....

第二層,數據鏈路層:可是即便如此單純的二進制數依然沒有意義,因此想讓它有意義,必須進行分組附加對應的意義。這個劃分的協議就是,ethernet以太網協議,研究以太網協議,就是看它如何規定。

  以太網協議:規定三件事

   1,規定了名字:稱爲數據幀,每一組數據幀,

   2,規定了數據格式,都分爲頭,和數據倆部分,

         頭(至關於快遞單,地址,簡單描述):一共14個字節,前6個是源地址/發送者,緊接着6位是目標地址/接收者,後倆位是數據類型,數據的一些描述信息。

          數據部分(至關於要送的快遞):最短46,最長1500字節

     3,以太網協議規定,一臺計算機但凡進入網絡,必須有一塊以太網卡,而每一塊以太網卡,在出廠的時候都燒製一塊地址,這個地址叫mak地址。

     mak地址

     mak地址,由12位16進制數組成的,前6位是廠商地址,後6位是流水線地址,爲了讓每一塊mak地址都是獨一無二的地址。以太網的工做方式是廣播,廣播包是在局域網裏發的,若是隻是在一個局域網裏通訊,只須要以太網的工做方式,加上mak地址就夠了。是網絡實際上是由一個個局域網組成的,因此若是不在一個局域網,那麼就須要跨局域網,就須要先找到對方在哪一個小局域網,這時候就須要新的協議,地址,專門標識局域網的地址。

第三層,網絡層:

    ip協議,如今一般使用ip的第四個版本,因此又叫ipv4協議。

    iPv4協議,規定每臺計算機必需要有一個ip地址。

    點分十進制,0.0.0.0 這是最小值,分4個位,每一位都是8個二進制數,8個二進制數的最小值就是00000000,最大值是11111111,8個1轉換成10進制,255.255.255.255,不夠用,後來誕生ipv6,目前主流仍是ipv4,子網頁碼和ip地址結構同樣。

    可是,單純的ip地址是沒有意義的,須要搭配子網頁碼,一般都是搭配出現的。

    例子:

      172.16.10.2/24 (24,表明連續寫24個1)

      10101100.00010000.00001010.000000001 -》172.16.10.2 ip地址    

       11111111.11111111.11111111.00000000     -》 255.255.255.0    子網頁碼

      ip地址和子網頁碼,會進行按位與運算,倆個二進制數,上下同時爲1,就爲1,不然就爲0

        10101100.00010000.00001010.000000000  -》172.16.10.0    子網地址,或者叫網絡地址,用來標識別人在哪一個局域網裏。

      可是隻是拿到子網地址,還不夠,須要找到局域網裏究竟是那臺機器,就須要加上mak地址。

    ip(ip+子網頁碼)+mak地址 -》標識全世界範圍內獨一無二的一臺計算機。

    arp協議:就如同不知道對方地址,想給對方寄快遞,arp協議如同打電話問對方的地址在哪。經過ip問對面mak地址是什麼。

    須要拿到對方的ip地址

    計算機怎麼知道對面的計算機跟本身在不在一個局域網

    例:

      源:172.16.10.10/24   經過和子網頁碼按位與運算,得172.16.10.0

      目標:172.16.10.11/24                                               得172.16.10.0

      1,計算機基於arp協議,會把本身和目標的ip地址和對應的子網頁碼進行按位與運算,算出一個網絡地址,兩個若是同樣,就能夠肯定對方和本身在一個局域網內。(xshell,使用python,bin()括號內輸入數字,就能夠轉爲10進制數,而後再和子網頁碼進行按位與運算,得出一個網絡地址)

      2,判斷本身的子網地址與對方的子網地址是否同樣

        子網地址若是同樣,證實本身與對方是在一個局域網,須要拿到對方的mak地址就能夠通訊了。

(1)本機,封一個arp協議的包

網絡層,數據包              源ip                      目標ip                     數據部分                     

                                    172.16.10.10/24    172.16.10.11/24          要你的mak地址

數據鏈路層,數據幀                      源mak                     目標mak                

                                          本身mak地址          FF-FF-FF-FF-FF-FF     (誰看到都會明白這是在要本身的mak地址,給不給就看目標ip地址是否是本身。)     

 (2)交換機    

物理層,把上面的打成2進制數,傳給交換機(2層設備),收到一堆二進制數,而後彙總成一個包,交換機會解析到數據鏈路層,看到以太網協議的數據的包,目標mak地址是FF,直接廣播的方式發在局域網內,

(3)局域網內機器

從物理層-》數據鏈路層-》網絡層。每一個人都拆開看看,發現FF,知道要本身的mak地址,而後看ip頭,看看目標ip是否是本身,不是就丟掉,是本身就發回信息,對方知道本身的mak地址,之後用mak地址通訊。 返回的流程略。       

至此,本身的計算機就拿到了,172.16.10.11/24的mak地址,爲發數據最好了準備工做。並非完成通訊。

 

交換機:

  自帶mak地址學習功能,交換機都有一個mak地址表,最開始是空的,1號端口什麼也沒對應,其餘號端口也是,可是當有人把機器經過網線鏈接在交換機上,總有機器向交換機發包,交換機就會把二進制彙總到數據鏈路層,它能夠基於以太網協議拆數據鏈路層的包,前6個字節是源mak地址,它立刻就知道例如,10號端口對應的mak地址是誰,而後再拆6位,知道目標機器的mak地址是多少,而後廣播,而後總有一臺機器相應,那麼又知道一個端口對應的mak地址,最後這張mak地址表就會被填滿。之後就會直接發給目標mak地址。若是沒記的,仍是廣播。

    在什麼狀況下交換機才廣播:

      1,目標mak是FF-FF-FF-FF-FF-FF

      2,目標mak地址不存在與mak地址中去

 

    總結:若是兩臺計算機在同一個局域網內,ip地址做用只是用來獲取對方的mak地址。而mak地址纔是真正用來通訊的

 

      若是經過ip和子網頁碼算出來的網絡地址發現不同,那麼就須要跨局域網通訊。首先須要獲得網關的mak地址,那就和上面同樣經過arp協議,由於路由器和交互機是連在一塊兒的,就至關於和咱們在同一個局域網內。

     (1)本機,封一個arp的包 

網絡層,數據包              源ip                      目標ip                     數據部分                     

                                    172.16.10.10/24    172.16.10.11/24          要你的mak地址

數據鏈路層,數據幀                      源mak                     目標mak                

                                          本身mak地址          FF-FF-FF-FF-FF-FF (這裏要的mak就是網關路由器的mak地址,交互機就會廣播,網關拆到ip,發現是本身,就會給我mak地址)

      (2)交換機廣播

      (3)目標機器,也就是網關,發現ip是本身,返回我mak地址,我拿到了網關的mak地址。

         網關是有倆個地址,一個是對內,一個是對外網,

      (4)如今要發數據,源mak是本身的mak地址,而目標mak地址,不是想發給目標的mak地址,由於根本不在一個局域網,沒法拿到mak地址,因此目標mak地址是網關的mak地址。源ip是本身的,目標ip是目標ip,不是網關的ip地址

1)本機,封一個arp的包 

網絡層,數據包              源ip                      目標ip                     數據部分                     

                                    172.16.10.10/24     不在同一個局域網的目標ip    數據

數據鏈路層,數據幀                      源mak                     目標mak                

                                          本身mak地址             網關的mak

        拓展:路由器是三層設備。路由器拆到第三層,發現源地址是一個內網的ip地址,而目標ip是外網的ip地址,就知道這個包要往外網發,不過路由器自己就是一邊鏈接內網,一邊鏈接之外的設備。路由器會作一個源地址轉換,換成本身的地址,目標地址不變,再往外發,之後就是做爲運營商的地址,再往外發。。。。一旦路由器往外發了,就是網絡工程師的事了,走的事路由協議。

 

以上講的是經過ip地址和mak地址來找到計算機在哪,應該是找到某臺計算機,上面運行的多個軟件的其中一個。

第四層,傳輸層 tcp,udp(端口號0-65535,其中1024之前的都被系統佔用了)

  凡是基於tcp協議和udp協議通訊的軟件都會被操做系統分配一個端口號,表示一臺計算機上經過網絡通訊的軟件,每個端口號對應一個。

 

ip+mak+port(端口號)-》表示全世界範圍內獨一無二的一個基於網絡通訊的應用軟件。

 

端口:端口號,是操做系統管理的,客服端的端口號,每次都是隨機的,服務端的客戶端是固定的。

第五層,應用層(若是是cs架構的軟件,想怎麼定義協議,想用哪些協議隨便,可是若是是bs架構的軟件,就必須屬於如http,fto等協議,由於客戶端不是本身開發的。)

整個流程:

  應用層數據包處理好以後,交給傳輸層

  傳輸層加了一個頭,是源端口和目標端口,交給網絡層

  網絡層,加個頭,源ip,目標ip,交給下一層

  數據鏈路層,加上頭,源mak地址,和目標mak地址,給下一層

  物理層,所有打散成二進制

  先到交換機,而後分析,給對方計算機了。

  而後物理層,彙總

  數據鏈路層,基於以太網協議,看源mak,目標mak,發現是本身再往上交

  網絡層,根據ip協議,這裏意義不大

  傳輸層,根據tcp/udp協議分析,源端口意義不大,關鍵是目標端口,把包交給對應的端口的軟件。

   應用層,這個數據包被處理過,可是,客戶端服務端都是本身開發的,隨便,確定能夠反解出來。

 

  目的就是把客戶端把數據送給了服務端,爲何這麼複雜,緣由就是由於,網絡是通過一個個不一樣種類的物理介質鏈接起來的,因此每次日後發,必須讓不一樣的設備之間清楚這個包下一步要往哪裏發。

 

tcp協議(好人協議,有弊端,不會拒絕):傳輸層的

  tcp傳數據可靠:是由於它每發一個數據包過去,內存裏的數據包是不刪除的,等到對面回一個ack=1確認信息,它才刪除內存裏的數據。若是沒回,會再發一次

  udp傳數據不可靠:每發一個數據,udp立刻就會把數據刪掉。

  tcp協議是基於連接

  udp協議沒有連接

  udp傳數據的效率更高

  

  但凡一個應用程序是基於tcp工做的,在通訊以前必須先創建一個雙向通路。

  如同打電話問一下對面是否贊成挖一個到他家的通道,挖通以後,他也打電話問我,也挖通道。一共4次。可是中間他贊成和請求能夠合併,變成3次完成。

 tcp三次握手,

  好人協議           

 客戶端,倆種狀態,syn_sent(寄出) established(創建成功,可是客戶端看到的建議成功,有可能這個鏈接尚未真正的創建成功)

  syn_sent

  established

 服務端,三種狀態,listen(傾聽,監聽,netstat -按 | grep 80 ,會發現服務器在listen狀態),syn_rcvd (收到) established (創建成功)

  listen

  syn_rcvd (已經收到的狀態)基本看不到這個狀態,由於傳輸速度很是快,若是長期屬於這樣的狀態,多是本身的服務器,正在遭受syn洪水攻擊,dos拒絕服務攻擊,ddos分佈式攻擊。

        dos拒絕服務攻擊,如同拍一羣人堵住對方飯店的門,讓正經常使用戶進不去。(通常都是有預謀有組織的攻擊)

  established

 

    若是服務器長時間停留在syn_rcvd狀態,一直沒有進入創建狀態,極可能正遭受洪水攻擊。

   syn洪水攻擊,服務端收鏈接,是一個個收的,在半鏈接池裏,爲何叫半鏈接池,由於收到syn鏈接時,並非一個完整的鏈接創建成了,因此叫半鏈接池。每發一個syn請求

,服務端都會把半鏈接放這個半鏈接池裏,請求都是按照先進先出法則,客戶端不停的往裏放請求,操做系統不停的從裏面往外拿,正常狀況下,協做很好,速度很是快,這時候有人模擬大量的syn無效請求,讓正經常使用戶請求沒法進入,直接報錯,池子默認128個。因此遇到洪水攻擊,須要把半鏈接池調大,可是會佔用內存空間,同時還頗有可能無濟於事,屬於內核的優化,不如硬件方面的優化,直接加內存條。

 

  tcp斷開鏈接,4次揮手,中間倆步不能合併,由於極可能有數據在傳輸

  若是是客服端先發完數據,上面的隧道就沒有存在的意義。可是服務端的數據不必定就發完了,因此中間不能合併。

 

 客戶端                                                                                                       服務端

fin_wait_1證實你是斷鏈接的發起方,                                               close_wait 等待關閉 

fin_wait_2表明被動斷開鏈接,表明客戶端到服務端的通道斷開了    last_ack服務端斷開請求

 time_wait表明鏈接立刻就要斷了

 一般狀況下,服務端都是第一個發起斷鏈接的,若是服務端一直處於time_wait的狀態下,說明服務端正處於高併發的狀態下。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

拓展:上網爲何要花錢,若是是局域網,本身和本身玩,不用花錢。由於屬於後來者,其餘各個組織,機構,開始嘗試把個個網絡設備鏈接在一塊兒,若是本身想去外網,去哪一個網站,必須鏈接到別人鏈接好的網絡。        

相關文章
相關標籤/搜索