1. 程式人生 > >PYTHON-網路通訊 TCP

PYTHON-網路通訊 TCP

網路程式設計

應用軟體的架構
1. 目標:編寫一個C/S架構的軟體
C/S: Client--------基於網路----------Server
B/S: Browser-------基於網路----------Server

什麼是網路通訊?
在不同的計算機上 一個安裝客戶端 另一安裝服務端 通過網路來通訊

目的: 網路建立的目的是為資料互動(通訊)

如何實現通訊:
1.建立好底層的物理連線介質 (網線,WIFI,光纖)
2.必須遵循相同的標準,稱之為網際網路協議

在計算機網路中同樣需要具備這兩個條件
作為應用軟體開發者 不需要關心第一步 重點是通訊的標準(通訊的協議)

通訊的時候,一定要獲取對方的IP地址,拿到ip後,ARP協議自動將IP解析成MAC

MAC (瞭解)乙太網地址 用廣播的方式,浪費資源 去分包發包

2. 服務端需要遵循的原則:
1. 服務端與客戶端都需要有唯一的地址,但是服務端的地址必須固定/繫結
2. 對外一直提供服務,穩定執行
3. 服務端應該支援併發

4. 網際網路協議:就是計算機界的英語
(open system interconnection)
OSI七層協議 tcp/ip四層 (或者五層)
應用 應用層
表示
會話
傳輸 傳輸層
網路 網路層
資料鏈路層 網路介面層
物理

ip+mac可以標識全世界範圍內獨一無二的一臺計算機的位置
port可以標識一臺計算機之上唯一的一個基於網路通訊的應用軟體

ip+mac+port:可以標識全世界範圍內獨一無二的一個應用軟體(基於網路通訊)

TCP和UDP是傳輸層最常見的協議
主要控制傳輸資料的方式
TCP的傳輸方式
優點:通過三次握手來與伺服器建立連線
可以保證資料的完整性
a機器給b機器傳送資料包 要求b機器必須立即返回一個確認包
a機器會等待一段時間,如果超時還沒有收到確認,則重發資料
缺點:傳輸效率低
使用場景: 文字聊天,支付寶轉賬等,
UDP
傳輸方式:不需要建立連線,直接傳送
缺點: 不能保證資料的完整性
優點:傳輸效率比TCP高
使用場景:視訊通話,語音通話,UDP

1、TCP 目的是建立雙向通路 傳輸資料可靠
((好人協議)客戶端發包(發請求)後,服務端一定會響應 發出確認資訊)

洪水攻擊 黑客模擬大量的客戶端發請求,讓服務端響應,虛擬的客戶端 服務端無法識別 造成大量資源佔用
syn_send大量湧現(公司有預謀的發起) 解決方案:增加頻寬

TCP三次握手建連線,四次揮手斷連線
三次握手:
c(客戶端)----syn=1(請求連結) seq=x(序列號)--->s(服務端)
s----ack=1+x syn=1(請求連結) seq=y(序列號)--->c
(確認請求,並在原來序列號基礎上+1)
c----ack=1+y------->s

tcp建立的是一個雙向連線
c------------------>s
c<-----------------s

四次揮手:
s------fin=1(斷連結請求)---------->c
c------>ack=1(確認請求)--------->s
c------>fin=1--------->s
s------>ack=1--------->c


2、socket: 學習網路程式設計 其實就是在學socket
是一個封裝好的模組!要完成網路通訊,只需要使用系統提供的socket模組就行

socket套接字是位於應用層與傳輸層之間的一個抽象層
專門把傳輸層以下的協議封裝成介面提供給應用層使用(是對底層的 TCP IP UDP 等網路協議進行封裝)
應用只需要呼叫socket的介面或者說按照socket的標準編寫
程式,寫出的程式自%然是遵循tcp/ip協議

python中的socket

在使用socket的時候使用者需要關心的是 ip地址,port埠, 傳輸協議TCP/UDP,你要傳送的資料data
在寫網路程式設計的時候,必然是有兩臺程式碼,對應著客戶端和伺服器
使用socket來完成TCP通訊 應該先完成伺服器的程式碼編寫



網頁地址就是域名 (對應有ip 和埠port)

https:// www.cnblogs.com:80 /linhaifeng/p/7278389.html
應用層協議 域名+埠 (先把域名交給dns解析成IP地址) 路徑
邏輯層面建好雙向通路 ==>給應用層按http協議傳輸資料,封包後交給傳輸層,給對方,再按這條線返回
(物流層 實際上在傳輸層後還有網路層,資料鏈路層,物流層)