1. C/S與B/S架構
C/S: Client 客戶端--------基於網絡----------Server
B/S: Browser瀏覽器--------基於網絡----------Server
2. 網絡通信服務端需要遵循的原則:
1. 服務端與客戶端都需要有唯一的地址,但是服務端的地址必須固定/綁定
2. 對外一直提供服務,穩定運行
3. 服務端應該支持並發
3. 網路
網絡建立的目的是為數據交互(通信)
如何實現通信:
1. 建立好底層的物理連接介質
2. 有一套統一的通信標准,稱之為互聯網協議
4. 互聯網協議:就是計算機界的英語,一套通用的規范
網絡=底層的物理連接介質+互聯網協議(就是計算機界的英語)
OSI七層協議
應用層(應用層\表示層\會話層):http,ftp
傳輸層:tcp/udp
網絡層:ip
數據鏈路層:ethernet
物理層:發送電信號
ip+mac可以標識全世界范圍內獨一無二的一台計算機的位置
port可以標識一台計算機之上唯一的一個基於網絡通信的應用軟件
ip+mac+port:可以標識全世界范圍內獨一無二的一個應用軟件(基於網絡通信)
今日內容:
1. tcp協議
三次握手建鏈接
四次揮手斷開鏈接
tcp協議的狀態
syn洪水攻擊與半連接池
2. 互聯網協議詳解(了解)
3. socket介紹
4. 基於socket來編寫C/S架構的軟件
服務端程序:
import socket
# 1.買手機
phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # SOCK_STEAM=>TCP流式協議,
print(phone) # 是用來接收鏈接請求,從而建立鏈接的
# 2.插手機卡
phone.bind(('127.0.0.1', 8080)) # 0-65535
# 3.開機
phone.listen(5) # 同一時刻最大請求數為5個
print('正在等待連接....')
# 4.等待電話請求
conn, client_addr = phone.accept() # (雙向鏈接的套接字對象,存放客戶端ip和端口的小元組)
print(conn) # conn代表雙向鏈接,用來收發消息
# print(client_addr)
# 5.收\發消息
data = conn.recv(1024) # 1024接收的最大字節數bytes
print('收到客戶的數據', data)
conn.send(data.upper())
# 6.掛電話鏈接
conn.close()
# 7.關機
phone.close()
客戶端程序:
import socket
# 1.買手機
phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# SOCK_STEAM=>TCP流式協議,默認是TCP流式協議
# 2.撥號
phone.connect(('127.0.0.1', 8080))
# 3.發\收消息
phone.send('hello'.encode('utf-8'))
# 只能發bytes類型
data = phone.recv(1024)
print('收到服務端的消息: ', data)
# 4.掛電話鏈接
phone.close()