成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Python 網(wǎng)絡(luò)編程之 UDP 協(xié)議

waterc / 3346人閱讀

摘要:創(chuàng)建創(chuàng)建通信接受套接字的數(shù)據(jù),與類似,但返回值是。發(fā)送數(shù)據(jù),將數(shù)據(jù)發(fā)送到,形式為,指定遠程地址發(fā)送,返回值是發(fā)送的字節(jié)數(shù)發(fā)送的報文是類型,發(fā)送的報文是類型,在發(fā)送前要記得編碼。

UDP 和 TCP 的區(qū)別
? TCP UDP
連接性 面向連接 面向無連接
傳輸可靠性 可靠 不可靠
傳輸模式 數(shù)據(jù)報
應(yīng)用場景 傳輸大量的數(shù)據(jù) 少量數(shù)據(jù)
速度

TCP:

TCP 的可靠體現(xiàn)在傳輸數(shù)據(jù)之前,會有三次握手來建立連接。在數(shù)據(jù)傳完后,還會斷開連接用來節(jié)約系統(tǒng)資源。在數(shù)據(jù)傳遞時,有確認機制、重傳機制、擁塞控制機制以保證傳輸?shù)目煽啃裕@些機制都會消耗大量的時間和系統(tǒng)資源,每個連接都會占用系統(tǒng)的 CPU、內(nèi)存等硬件資源,所以也導(dǎo)致 TCP 容易被人利用,比如 DDOS、CC 等攻擊。

一般用于文件傳輸、收發(fā)郵件或遠程登錄等對數(shù)據(jù)準確性要求高的場景。

UDP:

UDP 沒有 TCP 那些可靠的機制,所以在數(shù)據(jù)傳遞時,如果網(wǎng)絡(luò)質(zhì)量不好,就會很容易丟包。但 UDP 也是無法避免攻擊的,比如:UDP Flood 攻擊。

一般用于即時通訊、在線視頻、網(wǎng)絡(luò)電話等對傳輸效率要求高,但對準確性要求相對低的場景。

面向有連接型

發(fā)送數(shù)據(jù)之前,需要在收發(fā)主機之間建立一條通信線路,在通信傳輸前后,專門進行建立和斷開連接的處理,如果與對端之間無法通信,可避免發(fā)送無謂的數(shù)據(jù)。

面向無連接型

這種類型不要求建立和斷開連接,發(fā)送端可任何時候發(fā)送數(shù)據(jù),接收端也不知道自己何時從哪里接受數(shù)據(jù),這種情況下,接收端需要時常確認是否收到數(shù)據(jù),彼此也不需要確認對方是否存在。

關(guān)于 TCP 網(wǎng)絡(luò)編程的實現(xiàn)請參考我的另一篇博文 Socket 通信原理

UDP 網(wǎng)絡(luò)編程實現(xiàn)

面向無連接的 UDP 時序圖

創(chuàng)建 Socket

sock = socket.socket(family=AF_INET, type=SOCK_STREAM, proto=0, fileno=None)

family -> 地址族

socket.AF_UNIX: 用于同一臺機器上的進程通信(既本機通信)

socket.AF_INET: 用于服務(wù)器與服務(wù)器之間的網(wǎng)絡(luò)通信

socket.AF_INET6: 基于 IPV6 方式的服務(wù)器與服務(wù)器之間的網(wǎng)絡(luò)通信

type -> Socket 對象的類型

socket.SOCK_STREAM: 基于 TCP 的流式 Socket 通信

socket.SOCK_DGRAM: 基于 UDP 的數(shù)據(jù)報式 Socket 通信

socket.SOCK_RAW: 原始套接字,普通的套接字無法處理 ICMP、IGMP 等網(wǎng)絡(luò)報文,而 SOCK_RAW 可以;其次 SOCK_RAW 也可以處理特殊的 IPV4 報文;此外,利用原始套接字,可以通過 IP_HDRINCL 套接字選項由用戶構(gòu)造 IP 頭

socket.SOCK_SEQPACKET: 可靠的連續(xù)數(shù)據(jù)包服務(wù)

proto -> 協(xié)議編號,默認是 0,一般可以忽略該參數(shù)

fileno -> Socket 的文件描述符,如果指定了 fileno,則其他參數(shù)將被忽略,返回指定文件描述符的 Socket。

創(chuàng)建 TCP Socket:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

創(chuàng)建 UDP Socket:
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

UDP 通信

sock.recvfrom(bufsize[, flags])

接受 UDP 套接字的數(shù)據(jù),與 recv() 類似,但返回值是 tuple(data, address)。其中 data 是包含接受數(shù)據(jù)的字符串,address 是發(fā)送數(shù)據(jù)的 Socket 地址

注意協(xié)議接收到的數(shù)據(jù)可能大于 buf 的長度,所以在這種情況下要調(diào)用幾次 recv 函數(shù)才能把 Socket 接收緩沖區(qū)中的數(shù)據(jù) copy 完。recv 函數(shù)僅僅是 copy 數(shù)據(jù),真正接收數(shù)據(jù)是由協(xié)議來完成的。
sock.sendto(bytes, address)

發(fā)送 UDP 數(shù)據(jù),將數(shù)據(jù)發(fā)送到 Socket,address 形式為 tuple(ipaddr, port),指定遠程地址發(fā)送,返回值是發(fā)送的字節(jié)數(shù)

Python 2.x 發(fā)送的報文是 str 類型,Python 3.x 發(fā)送的報文是 bytes 類型,在發(fā)送前要記得編碼。
客戶端代碼
import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
address = ("127.0.0.1", 8020)

while True:
    msg = input("Wanna send: ")
    if not msg:
        break
    sock.sendto(bytes(msg, "utf-8"), address)  # Return the number of bytes sent
    data, addr = sock.recvfrom(1024)
    data = data.decode("utf-8")
    print("Response:", data)

sock.close()
服務(wù)端代碼
import socket
import time

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(("127.0.0.1", 8020))

print("waiting for message...")
while True:
    data, addr = sock.recvfrom(1024)
    data = data.decode("utf-8")
    print("Got message from", addr)
    print("Received message:", data)
    sock.sendto(bytes("[%s] %s" % (time.ctime(), data), "utf-8"), addr)

sock.close()

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/41780.html

相關(guān)文章

  • python網(wǎng)絡(luò)編程

    摘要:在任何類型的通信開始之前,網(wǎng)絡(luò)應(yīng)用程序必須創(chuàng)建套接字?;谖募奶捉幼?,家族名又名基于網(wǎng)絡(luò)的套接字,家族名在和后續(xù)的版本中,支持的套接字有,,,。中的網(wǎng)絡(luò)編程在中主要是用模塊來實現(xiàn)基于套接字的網(wǎng)絡(luò)通信。 python學(xué)習(xí)記錄--網(wǎng)絡(luò)編程 1、套接字介紹 一臺機器上的不同進程之間進行通信可以利用隊列,管道等,但是不同機器之間的進程進行通信用隊列是不行的,解決這個問題就是網(wǎng)絡(luò)套接字。 套接...

    xuhong 評論0 收藏0
  • python---網(wǎng)絡(luò)基礎(chǔ)(socket)

    摘要:套接字有兩種或者稱為有兩個種族分別是基于文件型的和基于網(wǎng)絡(luò)型的。大部分網(wǎng)絡(luò)設(shè)備的都是。不會發(fā)生黏包,用戶數(shù)據(jù)報協(xié)議是無連接的,面向消息的,提供高效率服務(wù)。即面向消息的通信是有消息保護邊界的。 軟件開發(fā)的架構(gòu) 我們了解的涉及到兩個程序之間通訊的應(yīng)用大致可以分為兩種: 第一種是應(yīng)用類:qq、微信、網(wǎng)盤、優(yōu)酷這一類是屬于需要安裝的桌面應(yīng)用 第二種是web類:比如百度、知乎、博客園等使用瀏覽器...

    Dr_Noooo 評論0 收藏0
  • 網(wǎng)絡(luò)安全 - 旁路監(jiān)聽攻擊技術(shù)

    摘要:部分來自網(wǎng)絡(luò),適用于學(xué)習(xí),維護網(wǎng)絡(luò)安全,做合法公民一和不同,沒有面向連接的機制,其是一種不可靠的協(xié)議,沒有確認機制。 部分來自網(wǎng)絡(luò),適用于學(xué)習(xí),維護網(wǎng)絡(luò)安全,做合法公民 一、UDP 和TCP不同,UDP沒有面向連接的機制,其是一種不可靠的協(xié)議,沒有確認機制。也就是說只要其端口開放,有數(shù)據(jù)需要交互時直接進行數(shù)據(jù)交互,也不需要TCP的三次握手。這樣的話,基于UDP的攻擊比基于TCP的攻擊需...

    CoderBear 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<