本文作者:黎智煊炬藤,叩丁狼高級講師捺信。原創(chuàng)文章,轉(zhuǎn)載請注明出處细卧。
udp的介紹
前面我們說了很多的知識都是關(guān)于tcp的知識點,但是,其實與tcp相對來說不同的還有就是也是非常重要的udp了.
-
UDP --- 用戶數(shù)據(jù)報協(xié)議
是一個無連接的簡單的面向數(shù)據(jù)報的運輸層協(xié)議鹃彻。UDP不提供可靠性郊闯,它只是把應(yīng)用程序傳給IP層的數(shù)據(jù)報發(fā)送出去,但是并不能保證它們能到達目的地。由于UDP在傳輸數(shù)據(jù)報前不用在客戶和服務(wù)器之間建立一個連接团赁,且沒有超時重發(fā)等機制育拨,故而傳輸速度很快。
-
UDP是一種面向無連接的協(xié)議
每個數(shù)據(jù)報都是一個獨立的信息欢摄,包括完整的源地址或目的地址熬丧,它在網(wǎng)絡(luò)上以任何可能的路徑傳往目的地,因此能否到達目的地剧浸,到達目的地的時間以及內(nèi)容的正確性都是不能被保證的锹引。
-
UDP特點:
UDP是面向無連接的通訊協(xié)議,UDP數(shù)據(jù)包括目的端口號和源端口號信息唆香,由于通訊不需要連接
,所以可以實現(xiàn)廣播發(fā)送
吨艇。 UDP傳輸數(shù)據(jù)時有大小限制躬它,每個被傳輸?shù)臄?shù)據(jù)報必須限定在64KB之內(nèi)。 UDP是一個不可靠的協(xié)議
东涡,發(fā)送方所發(fā)送的數(shù)據(jù)報并不一定以相同的次序到達接收方冯吓。
【適用情況】
UDP是面向消息的協(xié)議,通信時不需要建立連接疮跑,數(shù)據(jù)的傳輸自然是不可靠的组贺,UDP一般用于多點通信和實時的數(shù)據(jù)業(yè)務(wù),比如
- 語音廣播
- 視頻
- TFTP(簡單文件傳送)
- SNMP(簡單網(wǎng)絡(luò)管理協(xié)議)
- RIP(路由信息協(xié)議祖娘,如報告股票市場失尖,航空信息)
- DNS(域名解釋)
注重速度流暢
UDP操作簡單
,而且僅需要較少的監(jiān)護渐苏,因此通常用于局域網(wǎng)高可靠性的分散系統(tǒng)中client/server應(yīng)用程序掀潮。例如視頻會議系統(tǒng)
,并不要求音頻視頻數(shù)據(jù)絕對的正確琼富,只要保證連貫性就可以了仪吧,這種情況下顯然使用UDP會更合理一些。
平時我們可以利用unix/linux/window系統(tǒng)里面自帶的netstat工具可以捕獲到tcp通信的一些信息
那么,我們在linux里面,可以通過tcpdump udp
這個命令去查看本機的udp通信情況.
現(xiàn)在,介紹之前介紹的socket編程,里面講到的type里面有兩種類型,
Type:套接字類型
- 可以是
SOCK_STREAM
(流式套接字鞠眉,主要用于TCP 協(xié)議
) -
SOCK_DGRAM
(數(shù)據(jù)報套接字薯鼠,主要用于UDP 協(xié)議
)
udp網(wǎng)絡(luò)程序-發(fā)送數(shù)據(jù)
創(chuàng)建一個udp客戶端程序的流程是簡單,具體步驟如下:
- 創(chuàng)建客戶端套接字
- 發(fā)送/接收數(shù)據(jù)
-
關(guān)閉套接字
下面再用一些代碼進行一些說明.
代碼如下:
from socket import *
#1. 創(chuàng)建套接字
udpSocket = socket(AF_INET, SOCK_DGRAM)
#2. 準備接收方的地址
sendAddr = ('localhost', 8080)
#3. 從鍵盤獲取數(shù)據(jù)
sendData = input("請輸入要發(fā)送的數(shù)據(jù):")
#4. 發(fā)送數(shù)據(jù)到指定的電腦上
udpSocket.sendto(sendData, sendAddr)
#5. 關(guān)閉套接字
udpSocket.close()
然后利用linux/unix系統(tǒng)自帶的tcpdump可以捕獲一些信息
里面這個命令可以查看接收到的內(nèi)容sudo tcpdump -s 0 -X "udp port 8080"
想獲取更多技術(shù)干貨械蹋,請前往叩丁狼官網(wǎng):http://www.wolfcode.cn/all_article.html