OSI 開放系統互聯參考模型,它是理論的,參考模型
七層:物理層->數據鏈路層->網絡層->傳輸層->會話層->表示層->應用層html
c/s : 客戶端/服務端 b/s : 瀏覽器/服務端python
詳情linux
ARP (Address Resolution Protocal) 地址解析協議,就是 把 IP->MAC(你聽過ARP欺騙的)git
TCP是確認包的到達,因此不丟失包(數據),順序也是好的。
UDP不會確認包的到達,因此可能會丟失數據包,固然順序也有可能會亂。
除了這些之外:
1. TCP是面向鏈接(三次握手)的,因此穩定、可靠,那相對就慢了
好比平時的:文件傳輸,右鍵,http等用的都是tcp協議
2. UDP是面向無鏈接的,因此不穩定,可是相對快,實時性高
好比平時:作什麼現場直播,視頻通話啥的github
局域網和廣域網是按規模大小而劃分的兩種計算機網絡。範圍在幾公里之內的計算機網絡統稱爲局域網;而鏈接的範圍超過10公里的,則稱爲廣域網,因特網(Intenet)就是目前最大的廣域網。web
TCP的可靠保證,是它的三次握手雙向機制,這一機制保證校驗了數據,保證了他的可靠性。而UDP就沒有了,udp信息發出後,不驗證是否到達對方,因此不可靠。算法
在計算機通訊領域,socket 被翻譯爲「套接字」,它是計算機之間進行通訊的一種約定或一種方式。經過 socket 這種約定,一臺計算機能夠接收其餘計算機的數據,也能夠向其餘計算機發送數據。瀏覽器
①服務端建立一個ServerSocket對象,指定端口號,ServerSocket對象等待客戶端的鏈接請求。
②客戶端建立一個Socket對象,指定主機地址和端口號,向服務端發出鏈接請求。
③服務端接收到客戶端的鏈接請求,創建一條TCP鏈接,再建立一個Socket對象與客戶端的Socket對象進行通訊。
④服務端和客戶端分別建立字節輸入流和字節輸出流,經過字節輸入流得到對方發來的數據,經過字節輸出流向對方發送數據。
⑤當一方決定結束通訊時,向對方發送結束信息;另外一方接收到結束信息後,雙方分別關閉各自的TCP鏈接。
⑥ServerSocket對象中止等待客戶端的鏈接請求。安全
TCP是流式傳送的 也就是鏈接創建後能夠一直不停的發送 並無明確的邊界定義.發送端
-
接收端都存在這一個緩衝區
由接收方形成的粘包
當接收方不能及時接收緩衝區的包,形成多個包接收就產生了粘包
客戶端發送一段數據,服務端只收了一小部分,服務端下次再收的時候仍是從緩衝區拿上次
遺留的數據
由傳輸方形成的粘包
tcp協議中會使用Nagle算法來優化數據。發送時間間隔短,數據量小的包會一塊兒發送,形成粘包
詳情服務器
它是一種位於內部網絡與外部網絡之間的網絡安全系統。一項信息安全的防禦系統,依照特定的規則,容許或是限制傳輸的數據經過。
防火可使企業內部局域網(LAN)網絡與Internet之間或者與其餘外部網絡互相隔離、限制網絡互訪用來保護內部網絡。
selete : 有最大鏈接數 遍歷 支持win
poll : 無最大鏈接數 遍歷 支持win
epoll : 無最大鏈接數 事件通知 不支持win
# 進程
一個任務,進程之間內存隔離,一個進程修改數據不會影響其餘進程(建立變量,修改變量值)
# 線程
線程位於進程內
一個進程內至少有一個線程,線程之間資源共享.一個線程修改數據其餘進程也會受影響因此有了鎖的概念
# 協程
代碼級別的保存狀態
+
切換
多線程,協程用於IO密集型,如socket,爬蟲,web,搶佔cpu資源
多進程用於計算密集型,如金融分析,利用多核優點
# 進程池 from concurrent.futures import ProcessPoolExecutor import time,os def piao(name,n): print("%s is piaoing %s"%(name,os.getpid())) # 打印了進程id time.sleep(1) if __name__ == "__main__": p = ProcessPoolExecutor(4) # 指定進程池最大進程個數 for i in range(10): obj = p.submit(piao,"alex %s"%i,i) 提交任務 # 線程池 rom concurrent.futures import ThreadPoolExecutor import time,os,random def piao(name,n): print("%s is piaoing %s"%(name,os.getpid())) # 打印了進程id time.sleep(random.randint(1,3)) if __name__ == "__main__": p = ThreadPoolExecutor(4) # 指定線程池最大線程個數,不包含控制線程 for i in range(10): obj = p.submit(piao,"alex %s"%i,i) # 提交任務
建立一個對象,每一個線程爲該對象設置值數據都是隔離的
併發 : 看上去是在同時工做,其實是cpu一直在切換着工做
並行 : 利用多核同時工做多個任務
進程鎖 : 防止進程同時操做一套文件系統
線程鎖 : 防止多個線程同時修改進程內數據
# 非阻塞和阻塞的概念相對應,指在不能馬上獲得結果以前也會馬上返回,同時該函數不會阻塞當前線程
# 異步的概念和同步相對。當一個異步功能調用發出後,調用者不能馬上獲得結果。當該異步功能完成後,
# 經過狀態、通知或回調來通知調用者。
路由器 : 鏈接外部網絡,有接入外部的線
交換機 : 鏈接內部網絡,能夠沒有接入外部的線
咱們在瀏覽器上輸入網站域名時,會去請求DNS服務器獲取該域名對應的IP地址,再去訪問改地址
win : C:\Windows\System32\drivers\etc\hosts
linux : /etc/hosts
按格式修改便可
生產者與消費者模式是經過一個容器來解決生產者與消費者的強耦合關係,生產者與消費者之間不直接進行通信,
而是利用阻塞隊列來進行通信,生產者生成數據後直接丟給阻塞隊列,消費者須要數據則從阻塞隊列獲取,實際應
用中,生產者與消費者模式則主要解決生產者與消費者生產與消費的速率不一致的問題,達到平衡生產者與消費者
的處理能力,而阻塞隊列則至關於緩衝區。
# 應用場景
由一個線程生成訂單,並將其放入隊列中.由多個線程去處理
# 優點
平衡生產者與消費者的處理能力
CDN的全稱是Content Delivery Network,即內容分發網絡。
其基本思路是儘量避開互聯網上有可能影響數據傳輸速度和穩定性的瓶頸和環節,使內容傳輸的更快、更穩定。
經過在網絡各處放置節點服務器所構成的在現有的互聯網基礎之上的一層智能虛擬網絡,CDN系統可以實時地根
據網絡流量和各節點的鏈接、負載情況以及到用戶的距離和響應時間等綜合信息將用戶的請求從新導向離用戶最近
的服務節點上。
其目的是使用戶可就近取得所需內容,解決 Internet網絡擁擠的情況,提升用戶訪問網站的響應速度。
LVS的英文全稱是Linux Virtual Server,即Linux虛擬服務器
LVS主要用於多服務器的負載均衡。它工做在網絡層,能夠實現高性能,高可用的服務器集羣技術。它廉價,可把
許多低性能的服務器組合在一塊兒造成一個超級服務器。它易用,配置很是簡單,且有多種負載均衡的方法。它穩定
可靠,即便在集羣的服務器中某臺服務器沒法正常工做,也不影響總體效果。另外可擴展性也很是好。
處理靜態文件
負載均衡
反向代理
Keepalived的做用是檢測服務器的狀態,若是有一臺web服務器宕機,或工做出現故障,Keepalived將檢測到,
並將有故障的服務器從系統中剔除,同時使用其餘服務器代替該服務器的工做,當服務器工做正常後Keepalived
自動將服務器加入到服務器羣中,這些工做所有自動完成,不須要人工干涉,須要人工作的只是修復故障的服務
器。
HAProxy是一個使用C語言編寫的自由及開放源代碼軟件[
1
],其提供高可用性、負載均衡,以及基於TCP和HTTP
的應用程序代理。
HAProxy特別適用於那些負載特大的web站點,這些站點一般又須要會話保持或七層處理。HAProxy運行在當前
的硬件上,徹底能夠支持數以萬計的併發鏈接。而且它的運行模式使得它能夠很簡單安全的整合進您當前的架構
中, 同時能夠保護你的web服務器不被暴露到網絡上。
HAProxy實現了一種事件驅動, 單一進程模型,此模型支持很是大的併發鏈接數。多進程或多線程模型受內存限制
、系統調度器限制以及無處不在的鎖限制,不多能處理數千併發鏈接。事件驅動模型由於在有更好的資源和時間管
理的用戶空間(User
-
Space) 實現全部這些任務,因此沒有這些問題。此模型的弊端是,在多核系統上,這些程
序一般擴展性較差。這就是爲何他們必須進行優化以 使每一個CPU時間片(Cycle)作更多的工做。
包括 GitHub、Bitbucket[
3
]、Stack Overflow[
4
]、Reddit、Tumblr、Twitter[
5
][
6
]和 Tuenti[
7
]在內的知
名網站,及亞馬遜網絡服務系統都使用了HAProxy。
# 做用
負載均衡
負載均衡 創建在現有網絡結構之上,它提供了一種廉價有效透明的方法擴展網絡設備和服務器的帶寬、增長吞吐
量、增強網絡數據處理能力、提升網絡的靈活性和可用性。
負載均衡,英文名稱爲Load Balance,其意思就是分攤到多個操做單元上進行執行,例如Web服務器、FTP服務
器、企業關鍵應用服務器和其它關鍵任務服務器等,從而共同完成工做任務。
# 重點
拓展網絡設備
RPC(Remote Procedure Call)—遠程過程調用,它是一種經過網絡從遠程計算機程序上請求服務,而不須要
瞭解底層網絡技術的協議。RPC協議假定某些傳輸協議的存在,如TCP或UDP,爲通訊程序之間攜帶信息數據。在
OSI網絡通訊模型中,RPC跨越了傳輸層和應用層。RPC使得開發包括網絡分佈式多程序在內的應用程序更加容
易。
RPC採用客戶機
/
服務器模式。請求程序就是一個客戶機,而服務提供程序就是一個服務器。首先,客戶機調用進
程發送一個有進程參數的調用信息到服務進程,而後等待應答信息。在服務器端,進程保持睡眠狀態直到調用信息
到達爲止。當一個調用信息到達,服務器得到進程參數,計算結果,發送答覆信息,而後等待下一個調用信息,最
後,客戶端調用進程接收答覆信息,得到進程結果,而後調用執行繼續進行。
# 簡單來講就是客戶端與服務端並不直接通訊,而是經過兩個管道,多客戶端經過一個管道向服務端發送消息,
每一個客戶端都有一個管道來接收信息