網路程式設計 01

2021-08-21 07:55:47 字數 4275 閱讀 8067

網路程式設計

網路目的 : 資料的傳輸

網路資料傳輸是乙個複雜的過程

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請求常常用於驗證使用者名稱,密碼...