python-tcp/ip網路程式設計認識(四)
本文作者:黎智煊,叩丁狼高階講師。原創文章,轉載請註明出處。
udp的介紹
前面我們說了很多的知識都是關於tcp的知識點,但是,其實與tcp相對來說不同的還有就是也是非常重要的udp了.
-
UDP --- 使用者資料報協議
是一個無連線的簡單的面向資料報的運輸層協議。UDP不提供可靠性,它只是把應用程式傳給IP層的資料報傳送出去,但是並不能保證它們能到達目的地。由於UDP在傳輸資料報前不用在客戶和伺服器之間建立一個連線,且沒有超時重發等機制,故而傳輸速度很快。
-
UDP是一種面向無連線的協議
每個資料報都是一個獨立的資訊,包括完整的源地址或目的地址,它在網路上以任何可能的路徑傳往目的地,因此能否到達目的地,到達目的地的時間以及內容的正確性都是不能被保證的。
-
UDP特點:
UDP是面向無連線的通訊協議,UDP資料包括目的埠號和源埠號資訊,由於通訊不需要連線
,所以可以實現廣播發送
。 UDP傳輸資料時有大小限制,每個被傳輸的資料報必須限定在64KB之內。 UDP是一個不可靠的協議
,傳送方所傳送的資料報並不一定以相同的次序到達接收方。
【適用情況】
UDP是面向訊息的協議,通訊時不需要建立連線,資料的傳輸自然是不可靠的,UDP一般用於多點通訊和實時的資料業務,比如
- 語音廣播
- 視訊
- TFTP(簡單檔案傳送)
- SNMP(簡單網路管理協議)
- RIP(路由資訊協議,如報告股票市場,航空資訊)
- DNS(域名解釋)
注重速度流暢
UDP操作簡單
,而且僅需要較少的監護,因此通常用於區域網高可靠性的分散系統中client/server應用程式。例如視訊會議系統
,並不要求音訊視訊資料絕對的正確,只要保證連貫性就可以了,這種情況下顯然使用UDP會更合理一些。
平時我們可以利用unix/linux/window系統裡面自帶的netstat工具可以捕獲到tcp通訊的一些資訊
那麼,我們在linux裡面,可以通過tcpdump udp
這個命令去檢視本機的udp通訊情況.
叩丁狼教育.png
還有就是,我們的DNS解析,會用大量的udp去通訊.
叩丁狼教育.png
現在,介紹之前介紹的socket程式設計,裡面講到的type裡面有兩種型別,
Type:套接字型別
- 可以是
SOCK_STREAM
(流式套接字,主要用於TCP 協議
) SOCK_DGRAM
(資料報套接字,主要用於UDP 協議
)
udp網路程式-傳送資料
建立一個udp客戶端程式的流程是簡單,具體步驟如下:
- 建立客戶端套接字
- 傳送/接收資料
-
關閉套接字
叩丁狼教育.png
下面再用一些程式碼進行一些說明.
程式碼如下:
from socket import *
#1. 建立套接字
udpSocket = socket(AF_INET, SOCK_DGRAM)
#2. 準備接收方的地址
sendAddr = ('localhost', 8080)
#3. 從鍵盤獲取資料
sendData = input("請輸入要傳送的資料:")
#4. 傳送資料到指定的電腦上
udpSocket.sendto(sendData, sendAddr)
#5. 關閉套接字
udpSocket.close()
然後利用linux/unix系統自帶的tcpdump可以捕獲一些資訊
叩丁狼教育.png
裡面這個命令可以檢視接收到的內容sudo tcpdump -s 0 -X "udp port 8080"
叩丁狼教育.png
想獲取更多技術乾貨,請前往叩丁狼官網:http://www.wolfcode.cn/all_article.html