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的狀態下,說明服務端正處於高併發的狀態下。
拓展:上網爲何要花錢,若是是局域網,本身和本身玩,不用花錢。由於屬於後來者,其餘各個組織,機構,開始嘗試把個個網絡設備鏈接在一塊兒,若是本身想去外網,去哪一個網站,必須鏈接到別人鏈接好的網絡。