Python高階 網路程式設計 04 TCP

2021-08-27 09:01:29 字數 1382 閱讀 8343

概述:傳輸控制協議

特點:面向連線-->通訊前建立連線,一對一傳輸資料,完成後斷開連線釋放資源

可靠傳輸

a.應答機制

b.超時重傳(ack/確認)

c.錯誤校驗

d.流量控制和阻塞管理

基於位元組流-->沒有訊息邊界 接收的資料可能是傳送方多次傳送的結果

優點:可靠穩定,適合大量資料

缺點:速度慢,占用資源高

與udp的區別:

1.tcp面向連線,udp不是面對連線

2.tcp資料傳輸 :無差錯、不丟失、不重複、且按序到達

udp資料傳輸:不可靠,容易出現丟包

3.tcp需連線傳輸速度慢,udp不需要連線傳輸速度快

4.tcp 不支援發廣播;udp支援發廣播

5.tcp對於資源要求較多;udp對系統資源要求較少

6.tcp適合大量資料;udp適合少量資料

7.tcp有流量控制,udp沒有流量控制

應用場景:

郵件傳輸,瀏覽器,qq檔案傳輸

客戶端:

connect連線伺服器

send傳送資料

recv傳送tcp套接字

伺服器端:

listen 將伺服器套接字設定為監聽模式/ 被連線模式

accept 方法用於等待接收客戶端的連線請求,

返回值為 客戶端套接字,(ip和埠)

注:伺服器端需要繫結埠

客戶端的套接字close後關閉連線時,客戶端會recv解堵塞,

並且返回長度為0的位元組b"",可以使用該返回值is none或者長度來區別,伺服器端是否關閉

釋放埠:

setsockopt(socket.sol_socket, socket.so_reuseaddr, true)

因為程式繫結埠後,關閉時不會立刻釋放埠,有乙個時間段,可以使用上述引數進行忽視釋放時間,讓埠 立即釋放,稱為埠復用

三次握手:

1.listen(引數128)

在linux上表示已就緒佇列的大小,其他平台一般表示兩個佇列的總大小

2.accept方法意義

從已就緒佇列中取出 客戶端關聯的套接字物件

3.connect()方法

建立和伺服器的連線 發起並完成 和伺服器之間的三次握手

四次揮手:close的關閉流程和釋放順序

tcp標準規定:主動斷開連線的一方需要等待2msl時間才能釋放埠

-->伺服器重啟,立馬bind埠失敗

sesockopt(socket.sol_socket, socket.so_reuseaddr, true)

python高階程式設計 網路程式設計(二)

udp 使用者資料報協議,是乙個無連線的簡單的面向資料報的運輸層協議。udp不提供可靠性,它只是把應用程式傳給ip層的資料報傳送出去,但是並 不能保證它們能到達目的地。udp是一種面向無連線的協議,每個資料報都是乙個獨立的資訊,包括完整 的源位址或目的位址,它在網路上以任何可能的路徑傳往目的地,因此...

Python 高階(十) 網路程式設計

網路程式設計主要的工作就是在傳送端將資訊通過指定的協議進行組裝包,在接收端按照規定好的協議對包進行解析並提取出對應的資訊,最終達到通訊的目的。傳輸協議主要有 tcp 和 udp,tcp 需要建立連線,是可靠的 基於位元組流的協議,通常與 ip 協議共同使用 udp 不需要建立連線,可靠性差,但速度更...

網路程式設計 Python高階語法 裝飾器

理論 裝飾器就是執行乙個函式之前首先執行裝飾器函式,python裝飾器就是用於拓展原來函式功能的一種函式,這個函式的特殊之處在於它的返回值也是乙個函式,使用python裝飾器的好處就是在不用更改原函式的 前提下給函式增加新的功能。1 單個裝飾器裝飾乙個函式 通用裝飾器看下面 def verify f...