1. 程式人生 > >PYTHON-網絡通信 TCP

PYTHON-網絡通信 TCP

支付寶 直接 tps 不能 揮手 ip協議 公司 傳輸協議 open

網絡編程

應用軟件的架構
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協議傳輸數據,封包後交給傳輸層,給對方,再按這條線返回
(物流層 實際上在傳輸層後還有網絡層,數據鏈路層,物流層)

PYTHON-網絡通信 TCP