1. 程式人生 > 遊戲資訊 >《戰地2042攻略》大量新改動詳情公佈 玩家一臉冷漠

《戰地2042攻略》大量新改動詳情公佈 玩家一臉冷漠

python網路程式設計

軟體開發架構

軟體開發架構的定義

# 什麼是軟體開發架構
	程式設計師在編寫軟體的時候應該遵循的架構設計
  	類似於我們寫ATM和選課系統所採用的三層架構
    
#我們瞭解的涉及到兩個程式之間通訊的應用大致可以分為兩種:

#應用類:
qq、微信、網盤、優酷這一類是屬於需要安裝的桌面應用

#web類:
百度、知乎、部落格園等使用瀏覽器訪問就可以直接使用的應用

'''這些應用的本質其實都是兩個程式之間的通訊 而這兩個分類又對應了兩個軟體開發的架構
將客戶端看成是去店裡消費客人
將服務端看成是提供服務的店面
eg:收集各種app其實就是各大軟體的客戶端'''

服務端需要具備的三大特徵
1.24小時不間斷提供服務(24小時監聽)
2.固定的地址(IP地址)
3.能夠服務多個使用者(高併發)

C/S架構

#C/S架構
	c:client   	客戶端
    s:server   	服務端
       
C/S即: client與Server
    客戶端與伺服器端架構,這種架構也是從使用者層面(也可以是物理層面)分的
這種的客戶端一般泛指客戶端應用程式EXE,程式需要先安裝後 才能執行在使用者的電腦上,對使用者的電腦操作環境依賴較大

'''這些應用的本質其實都是兩個程式之間的通訊 而這兩個分類又對應了兩個軟體開發的架構
將客戶端看成是去店裡消費客人
將服務端看成是提供服務的店面
eg:收集各種app其實就是各大軟體的客戶端'''

B/S架構

#B/S架構
	b:browser	瀏覽器
    s:server	伺服器
    
Browser與Server 
瀏覽器端與伺服器端架構,這種架構是從使用者層面來劃分的

Browser瀏覽器,其實也是一種Client客戶端,只是這個客戶端不需要大家去安裝什麼應用程式,只需在瀏覽器過HTTP請求伺服器端相關的資源(網頁資源),客戶端Browser瀏覽器就能進行增刪改查

兩種架構之間的優缺點

C/S架構:
    優勢:針對客戶端可以高度定製
    劣勢:需要使用者去下載才能使用
  B/S架構:
    優勢:無需下載 急速體驗
    劣勢:無法做到高度定製 體驗效果較差
 	'''
 	目前的趨勢其實更加偏向於B/S架構
 		微信小程式
 			只需要下載一個微信就可以通過微信去訪問很多服務端
 		支付寶諸多應用
 			只需要下載一個支付寶就可以通過支付寶體驗很多服務
 	統一提供介面服務>>>:獲取大量使用者及資料 中途還可以提供廣告服務
 	'''

網路程式設計

網路程式設計簡介

# 什麼是網路程式設計
	網路程式設計的研究前提就是基於網際網路 網路程式設計就是基於網際網路編寫程式碼
網路程式設計從大的方面就是說對資訊的傳送接收
通過操作相應API排程計算機資源硬體,並且利用管道(網線)進行資料互動的過程

網路程式設計的發展史

#最初
該技術源於美國軍方>>>:很多先進的技術都是由軍事發明後續轉為民用
  實際應用:
    軍方想要實現不同計算機之間資料互動
    沒有網路程式設計技術的時候只能拿U盤拷貝並攜帶
    為了跨區域互動資料所以發明了網路程式設計
    
遠端資料傳輸發展史(民用)
	1.有線電話			電話線互聯
    2.無線電話			 訊號發射器
   	3.大屁股電腦          網線
    4.膝上型電腦          網絡卡(每檯筆記本都必須具備)
    ...
"""
要想實現遠端資料互動的前提是必須要有物理連線介質
"""
# 網際網路協議
除了有物理連線介質之外還應該有一些能夠保證資料彼此無障礙互動的東西(標準)
OSI七層協議

OSI七層協議

#簡介
OSI(Open System Interconnect),即開放式系統互聯。 這個開放式系統互聯,是ISO(國際標準化組織)在1985年研究的網路模型

ISO為了更好的使網路應用更為普及,推出了OSI參考模型。其含義就是推薦所有公司使用這個規範來控制網路。這樣所有公司都有相同的規範,就能互聯

'所有的計算機在生產過程中必須有相同的部分和相同的功能'
  1.應用層
  2.表示層
  3.會話層
  4.傳輸層
  5.網路層
  6.資料鏈路層
  7.物理連結層
    
# 上述的七層也有很多人總結為五層
  1.應用層(三層)
  2.傳輸層
  3.網路層
  4.資料鏈路層
  5.物理連結層
    

OSI七層協議 功能介紹

1.物理連結層

提供一個物理連線介面(網線口 無線網絡卡) 傳遞電訊號

2.資料鏈路層

'物理層接收到一長串010101如何切分取值,這個事資料鏈路層的裡面的乙太網協議'
1.規定了二進位制資料的分組方式
  2.規定了'乙太網協議'
  	但凡能夠接入網際網路的計算機都必須有一塊網絡卡
    	每塊網絡卡在出廠的時候都會被燒製一個全世界獨一無二的編號
      該編號是由12位16進位制陣列成
      	前六位是產商編號
        後六位是流水線號
    獨一無二的編號:'mac地址'(類似於身份證號)
基於mac地址就可以實現計算機之間的資料通訊了

弊端:廣播風暴,無法跨區域網通訊

3.網路層

# IP協議
 規定了每臺接入網際網路的計算機都必須有一個IP地址(取決於網線)
    	IP地址目前有兩個版本
      	IPV4:點分十進位制
          	最小:0.0.0.0
            最大:255.255.255.255
            # 隨著社會的進步 計算機的使用越來越普遍 IPV4地址不夠用
        IPV6:十六進位制
          IPV6可以表示出地球上每一粒沙子
        
 IP地址可以唯一標識地球上獨一無二的一臺接入網際網路的計算機

#IP地址分為公網IP和私網IP
#公網IP
是可以直接被瀏覽器訪問到的 
公網IP需要花錢購買並且需要實名認證並備案

#私網IP
    自帶的但是無法直接基於網際網路訪問	
	我們所有人的電腦預設使用的都是私網IP
    
'很多非法網站都是在國外註冊備案 '

4.傳輸層

PORT協議(埠協議)
  	"""
  	一臺計算機上面可以執行很多資料互動軟體 比如微信、qq、釘釘
  	它們都是從記憶體中獲取資料 為什麼不會錯亂
  	
  	就是因為埠協議的存在!!!
  	"""
    用於標識一臺計算機上面正在執行的應用程式(埠號類似於手牌號)
    埠號的範圍是:0~65535
      0~1024:系統經常使用的埠號
      1024~8000:常用軟體埠號
      我們以後在寫專案的時候推薦使用8000之後的埠
   1.同一時間同一臺計算機上面埠號不能衝突
   2.埠號是動態分配的
    	eg:開啟微信隨機分配一個沒有被使用的埠號8888
         關閉微信重新開啟那麼會隨機分配可能還是8888也可能是其他
"""
IP地址:用於標識全世界獨一無二的一臺接入網際網路的計算機
PORT號:用於標識一臺計算機上面的某一個應用程式

IP+PORT:能夠標識全世界獨一無二的一臺計算機上面的某一個應用程式

我們日常生活使用瀏覽器訪問的各個網址其實就是IP+PORT
	www.baidu.com		 好記
	14.215.177.29:80      難記
	ip:port
	很多常見的服務端都不需要指定埠 只要訪問了ip地址內部去會自動對映
"""	

域名解析
	將好記的地址解析成真正的地址
		www.baidu.com	  解析		202.108.22.5:80

5.應用層

為使用者程式提供網路服務
使用的協議:HTTP、TFTP, FTP, NFS, WAIS、SMTP
'這裡完全可以取決於程式設計師自己'  

6.表示層和會話層

#表示層:
對資訊進行語法處理,可確保一個系統的應用層所傳送的資訊可以被另一個系統的應用層讀取,使用的協議有Telnet, Rlogin, SNMP, Gopher

#會話層:
通過傳輸層(埠號:傳輸埠與接收埠)建立不同的會話請求,主要是在系統之間裡建立對話以及接收對話。使用的協議為SMTP, DNS

七層模型傳輸過程

資料包傳輸過程

TCP協議

流式協議、可靠協議
  基於TCP協議進行資料互動之前需要做一系列複雜的操作>>>:三次握手四次揮手
  """
  	三次握手>>>建立連結
  		eg:彼此挖通道
  		
  	四次揮手>>>斷開連線
  		eg:彼此切斷通道
  		
	   listen監聽態:等待對方發請求
        syn_rcvd態:忙於恢復確認建立請求	
        
  	控制很多臺計算機同一時刻去訪問服務端 造成服務端瞬間過載癱瘓
  """
#洪水攻擊
服務端接收到了大量的syn請求 處於rcvd狀態

TCP 三次握手

# 建立雙向通道的過程稱之為三次握手 建立通道的發起者可以是客戶端也可以是服務端 下面我們就以客戶端先主動發起為例

 大白話:
'''客戶端會朝服務端傳送一個請求詢問服務端:"我能不能挖一條通往你家的地道"

服務端收到請求,回覆說:"好吧 你挖吧",由於TCP是雙向通道,客戶端挖向服務端的通道只能給客戶端朝服務端發訊息使用,服務端要向給客戶端發訊息是沒辦法走這一條通道的,需要自己挖一條通往客戶端的通道

所以服務端在回覆同意客戶端挖通道的同時還會問一句:"那我能不能也挖一條通往你家的通道"

客戶端收到服務端請求後客戶端到服務端的通道就挖成功了,然後也會同意服務端的請求,服務端挖向客戶端的通道也會成功'''

# 總結:
    之所以稱之為三次握手就是因為中間的服務端的同意,和請求合併成了一次請求

TCP 四次揮手

'''建立一個連線需要三次握手,而終止一個連線要經過四次握手

當服務端或者客戶端不想再與對方進行通訊之後,雙方任意一方都可以主動發起斷開連結的請求'''

#大白話:
客戶端由於已經沒有任何需要傳送給服務端的訊息了,所以發起斷開客戶端到服務端的通道請求

服務端收到該請求後同意了 至此客戶端到服務端的單項通道斷開

服務端這個時候不會立刻朝客戶端發器請求說那我也斷開到你家的通道吧,服務端需要想想我手上還有沒有需要傳送給客戶端的訊息,如果還有的話,那我不能立馬斷開,先把資料發完才能斷

等服務端檢查完畢之後傳送也沒有資料要給客戶端了,這個時候就會朝客戶端發起斷開服務端到客戶端的通道請求

客戶端同意該請求,至此四次揮手完成

#總結:
    揮手必須是四次,中間的兩次不能合併成一次,原因就在於需要檢查是否還有資料需要給對方傳送

TCP的優缺點:

#TCP 的優點:
可靠,穩定

TCP 的可靠體現在 TCP 在傳遞資料之前,會有三次握手來建立連線,而且在資料傳遞時,有確認、視窗、重傳、擁塞控制機制,在資料傳完後,還會斷開連線用來節約系統資源。
#TCP 的缺點:
慢,效率低,佔用系統資源高,易被攻擊

TCP 在傳遞資料之前,要先建連線,這會消耗時間,而且在資料傳遞時,確認機制、重傳機制、擁塞控制機制等都會消耗大量的時間,而且要在每臺裝置上維護所有的傳輸連線,事實上,每個連線都會佔用系統的 CPU、記憶體等硬體資源。
因為 TCP 有確認機制、三次握手機制,這些也導致 TCP 容易被人利用,實現 DOS、DDOS、CC 等攻擊

UDP協議

UDP協議簡介

	丟包協議、不可靠協議
  不需要建立雙下通道 資料的傳輸速度快 但是可能會丟失資料

  	但是我們可以在UDP協議的基礎之上做很多額外的擴充套件來保證資料的安全
  
"""
TCP協議類似於打電話:你一句我一句 你儂我儂
UDP協議類似於發簡訊:發了之後不管你看不看 只要發了就行
"""

UDP的優缺點:

#TCP 的優點:
快,比 TCP 稍安全。

UDP 沒有 TCP 的握手、確認、視窗、重傳、擁塞控制等機制,UDP 是一個無狀態的傳輸協議,所以它在傳遞資料時非常快。沒有 TCP 的這些機制,UDP 較 TCP 被攻擊者利用的漏洞就要少一些。但 UDP 也是無法避免攻擊的,比如:UDP Flood 攻擊。

#TCP 的缺點:
不可靠,不穩定

因為 UDP 沒有 TCP 那些可靠的機制,在資料傳遞時,如果網路質量不好,就會很容易丟包。

TCP和UDP的對比

# 總結:
1、TCP 面向連線(如打電話要先撥號建立連線); UDP 是無連線的,即傳送資料之前不需要建立連線

2、TCP 提供可靠的服務。也就是說,通過 TCP 連線傳送的資料,無差錯,不丟失,不重複,且按序到達;UDP 盡最大努力交付,即不保證可靠交付

3、TCP 面向位元組流,實際上是 TCP 把資料看成一連串無結構的位元組流;UDP 是面向報文的。UDP 沒有擁塞控制,因此網路出現擁塞不會使源主機的傳送速率降低(對實時應用很有用,如IP電話,實時視訊會議等)

4、每一條 TCP 連線只能是點到點的;UDP支援一對一,一對多,多對一和多對多的互動通訊。

5、TCP 首部開銷 20 位元組;UDP 的首部開銷小,只有 8 個位元組

6、TCP 的邏輯通訊通道是全雙工的可靠通道,UDP 則是不可靠通道


補充知識點:

網際網路:

# 1.什麼是網際網路?
	將計算機彼此連結到一起的介質
# 2.網際網路建立的目的?
	基於網際網路做資料互動
# 3.上網的本質
	基於網線去訪問其他計算機上面的資源
"""其實我們的計算機也可以稱之為是伺服器/服務端(專門對外提供服務)"""

常用硬體:

1.交換機
	讓接入互動機的多臺計算機之間彼此互聯
2.區域網
	由交換機組成的網路稱之為區域網(一個區域)
3.廣播與單播
  廣播:在交換機中群發
  單播:定向回覆訊息(記錄mac地址)
4.路由器
	將區域網彼此連結起來並支援資料互動
  	網際網路其實可以看成是由多個區域網連結在一起
"""
在區域網中可以直接基於mac地址實現資料互動
	但是可能會產生廣播風暴:交換機中同一時間出現太多廣播操作
mac地址只能用於區域網互動資料 不能跨區域網傳輸
"""