網路程式設計
網路目的 : 資料的傳輸
網路資料傳輸是乙個複雜的過程
iso :國際標準化組織
osi 七層模型 --》 網路通訊標準化流程
應用層 : 提供使用者服務,具體內容由特定程式規定
表示層 : 資料的壓縮優化
會話層 : 建立應用連線,選擇傳輸層服務
傳輸層 : 提供不同的傳輸服務,流量控制
網路層 : 路由選擇,網路互連
鏈路層 : 提供鏈路交換,具體訊息以幀傳送
物理層 : 物理硬體,介面,網絡卡,線路
osi七層模型優點 : 將功能分開,降低了網路傳輸中的耦合性,每一部分完成自己的功能。可以在開發和實施的過程中各司其職。
cookie
高內聚 : 單個模組功能盡量單一
低耦合 : 模組之間儘量減少關聯和影響
四層
應用層 : 應用層 表示層 會話層
傳輸層 : 傳輸層
網路層 : 網路層
物理鏈路層: 鏈路層和物理層
五層(tcp/ip模型)
應用層 : 應用層 表示層 會話層
傳輸層 : 傳輸層
網路層 : 網路層
鏈路層 : 鏈路層
物理層 : 物理層
協議(網路協議):在網路通訊中,各方必須遵守的規定。包括建立 什麼樣的連線,訊息結構等
應用層 : tftp http dns smtp
傳輸層 : tcp udp
網路層 : ip
物理層 : ieee
網路基本概念
主機: "localhost" 表示本台計算機
網路上 : 只在本地測試使用
'localhost' '127.0.0.1'
如果想在網路上進行測試
'0.0.0.0' '' '172.60.50.93'
cookie
檢視 ip網路資訊
linux ifconfig
win ipconfig
獲取計算機名稱
in [2]: socket.gethostname()
out[2]: 'tedu'
獲取主機ip
in [5]: socket.gethostbyname('localhost')
out[5]: '127.0.0.1'
ip位址
在網路上用於區分一台計算機
ipv4 : 點分十進位制 e.g. 192.168.1.72 0-255
32位二進位制表示
ipv6 : 128
網路連線測試命令: ping 172.60.50.92
特殊ip
127.0.0.1 本地測試ip
0.0.0.0 本地網**用ip
192.168.1.0 表示當前網段
192.168.1.1 表示閘道器
192.168.1.255 廣播位址
獲取服務主機資訊
主機 別名 ip位址
將ip十進位制轉化為二進位制
in [12]: socket.inet_aton("192.168.1.2")
out[12]: b'\xc0\xa8\x01\x02'
將ip二進位制轉化為十進位制
in [11]: socket.inet_ntoa(b"\xc0\xa8\x01\x02")
out[11]: '192.168.1.2'
url : 在網路上定位某個資源位置的字串
數字範圍 : 1--65535
1--255 : 一些眾所周知的埠
256--1023 : 系統應用
1024---65535 : 自用
推薦 >10000 8888 9999 7777 6666
測試乙個軟體埠號
in [13]: socket.getservbyname('mysql')
out[13]: 3306
傳輸層服務
面向連線的傳輸服務 ---》 tcp協議
傳輸特徵:
* 提供可靠的傳輸服務
可靠性表現: 資料在傳輸過程中,無失序,無差錯,無重複, 無丟失
* 傳輸過程中有建立和斷開連線的過程
三次握手:建立資料傳輸兩端的持續連線
1. 客戶端向伺服器發起連線請求
2. 伺服器收到連線請求進行確認,返回報文
3. 客戶端收到伺服器確認進行連線建立
四次揮手:斷開連線的兩端,保證資料的傳輸完整
1.主動方傳送報文,告知被動方要斷開連線
2.被動方返回報文,告知收到請求,準備斷開
3.被動方再次傳送報文,告知準備完畢可以斷開
4.主動方傳送報文完成斷開
面向無連線的傳輸服務 ---》 udp協議
傳輸特徵 :
* 不保證傳輸的可靠性
* 無需建立三次握手和四次揮手的連線斷開過程
* 訊息的收發比較自由,不受其他約束
適用情況 : 網路情況較差,對可靠性要求不高,收發訊息的兩端 不適合建立固定連線
問題總結 :
1. osi模型
2. 三次握手和四次揮手
3. tcp和udp的區別
socket套接字程式設計
目的 : 通過程式語言提供的函式介面進行組合,更簡單的完成基於tcp和udp通訊的網路程式設計
套接字:完成上述目標的程式設計方法方案
套接字的分類
流式套接字(sock_stream): 傳輸層基於tcp的協議進行通訊
資料報套接字(sock_dgram): 傳輸層基於udp的協議進行通訊
底層套接字(sock_ram):訪問底層協議的套接字
tcp套接字
import socket
1. 建立套接字
socket.socket(socket_family = af_inet,
socket_type = sock_stream,
proto = 0)
功能:建立乙個套接字
socket_type 選擇套接字型別 sock_stream 流式
sock_dgram 資料報
proto 通常為0 (表示選擇子協議)
返回值: 返回乙個套接字物件
2. 繫結ip埠
sockfd.bind()
功能 : 繫結ip和埠
引數: 二元元組,第一項為ip 第二項為埠號
e.g. ("192.168.1.2",8888)
3. 將套接字設定為可監聽
sockfd.listen(n)
功能:將套接字設定為監聽套接字,並設定監聽佇列
引數: 監聽物件的大小 n為大於0 的正整數
4. 等待客戶端的連線
connfd,addr = sockfd.accept()
功能: 阻塞等待客戶端連線
返回值 :connfd 乙個新的套接字,用於和指定客戶端通訊
addr 連線的客戶端的位址
* 阻塞函式: 程式執行到阻塞函式位置,如果某種預期條件沒有達成則暫停繼續執行,直到條件達成後再繼續執行
5.訊息收發
data = connfd.recv(buffersize)
功能 : 接收訊息
引數 : 每次最多接收的訊息大小 bytes
返回值 : 返回接收到的內容 decode()
n = connfd.send(data)
功能 : 傳送訊息
引數 : 要傳送的內容 必須是bytes格式 encode()
返回值 : 實際傳送的位元組數
6.關閉套接字
close()
功能 : 關閉套接字,tcp連線斷開
* telnet ip port 表示連線tcp服務端
tcp客戶端
1.建立套接字
socket()
* 通訊的兩端套接字型別相同
2. 發起連線
connect()
功能 : 發起連線請求
3.發收訊息
send recv
* 兩端收發需要配合
4.關閉套接字
close()
網路程式設計 01
一 tcp ip 1 tcp ip協議的理解 網路傳輸協議 tcp 基於位元組流的傳輸層 通訊協議,主要用於發現傳輸中的錯誤,要去重新發 ip 網路層協議。2 名詞的理解 ip 網路層的唯一識別id。tcp 面向連線層的協議,需要三次握手才能建立通訊。分別是 客戶端 向伺服器傳送 同步訊號,即告訴伺...
網路程式設計01
軟體架構的兩種方式 c s架構 client 客戶端 基於網路 server 服務端 b s架構 browser 客戶端 基於網路 server 服務端 ps 1.服務端和客戶端都必須有唯一的位址,但是服務端的位址必須是繫結的 2.服務端必須要24小時對外提供服務 3.服務端要能支援併發 網路程式設...
ios網路程式設計01
在ios下進行網路程式設計主要分為以下三步 1.客戶端向伺服器傳送請求 客戶端和伺服器請求的方式主要有兩種 get和post get請求 將資訊直接拼接在url的後面。在真正開發中用到的比較多 post請求 將一些比較重要的資訊轉化成二進位製流。在真正開發中,post請求常常用於驗證使用者名稱,密碼...