1. 程式人生 > >python-tcp/ip網路程式設計認識(四)

python-tcp/ip網路程式設計認識(四)

本文作者:黎智煊,叩丁狼高階講師。原創文章,轉載請註明出處。

udp的介紹

前面我們說了很多的知識都是關於tcp的知識點,但是,其實與tcp相對來說不同的還有就是也是非常重要的udp了.

  1. UDP --- 使用者資料報協議

是一個無連線的簡單的面向資料報的運輸層協議。UDP不提供可靠性,它只是把應用程式傳給IP層的資料報傳送出去,但是並不能保證它們能到達目的地。由於UDP在傳輸資料報前不用在客戶和伺服器之間建立一個連線,且沒有超時重發等機制,故而傳輸速度很快。

  1. UDP是一種面向無連線的協議

每個資料報都是一個獨立的資訊,包括完整的源地址或目的地址,它在網路上以任何可能的路徑傳往目的地,因此能否到達目的地,到達目的地的時間以及內容的正確性都是不能被保證的。

  1. UDP特點:

UDP是面向無連線的通訊協議,UDP資料包括目的埠號和源埠號資訊,由於通訊不需要連線,所以可以實現廣播發送。 UDP傳輸資料時有大小限制,每個被傳輸的資料報必須限定在64KB之內。 UDP是一個不可靠的協議,傳送方所傳送的資料報並不一定以相同的次序到達接收方。

【適用情況】

UDP是面向訊息的協議,通訊時不需要建立連線,資料的傳輸自然是不可靠的,UDP一般用於多點通訊和實時的資料業務,比如

  • 語音廣播
  • 視訊
  • QQ
  • TFTP(簡單檔案傳送)
  • SNMP(簡單網路管理協議)
  • RIP(路由資訊協議,如報告股票市場,航空資訊)
  • DNS(域名解釋)

注重速度流暢

UDP操作簡單,而且僅需要較少的監護,因此通常用於區域網高可靠性的分散系統中client/server應用程式。例如視訊會議系統,並不要求音訊視訊資料絕對的正確,只要保證連貫性就可以了,這種情況下顯然使用UDP會更合理一些。

平時我們可以利用unix/linux/window系統裡面自帶的netstat工具可以捕獲到tcp通訊的一些資訊
那麼,我們在linux裡面,可以通過tcpdump udp這個命令去檢視本機的udp通訊情況.

叩丁狼教育.png

 

 

 

還有就是,我們的DNS解析,會用大量的udp去通訊.

叩丁狼教育.png


現在,介紹之前介紹的socket程式設計,裡面講到的type裡面有兩種型別,

Type:套接字型別

  1. 可以是 SOCK_STREAM(流式套接字,主要用於 TCP 協議
  2. SOCK_DGRAM(資料報套接字,主要用於 UDP 協議

udp網路程式-傳送資料

建立一個udp客戶端程式的流程是簡單,具體步驟如下:

  1. 建立客戶端套接字
  2. 傳送/接收資料
  3. 關閉套接字

     

    叩丁狼教育.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