簡單理解socket(AF_INET&SOCK_STREAM,SOCK_DGRAM)


套接字

在任何類型的通信開始之前,網絡應用程序都必須創建套接字。

套接字最初是為同一主機上的應用程序所創建,使得主機上運行的一個程序(又名一個進程)與另一個運行的程序進行通信。這就是所謂的進程間通信(Inter Process Communication,IPC)

有兩種類型的套接字:基於文件的和面向網絡的。

基於文件的

家族名:AF_UNIX
(又名AF_LOCAL,在POSIX1.g標准中指定),它代表地址家族(addressfamily):UNIX。其他比較舊的系統可能會將地址家族表示成域(domain)或協議家族(protocolfamily),並使用其縮寫PF而非AF。類似地,AF_LOCAL(在2000~2001年標准化)將代替AF_UNIX

面向網絡的

家族名:AF_INET
或者地址家族:因特網。另一個地址家族AF_INET6用於第6版因特網協議(IPv6)尋址。此外,還有其他的地址家族,這些要么是專業的、過時的、很少使用的,要么是仍未實現的。在所有的地址家族之中,目前AF_INET是使用得最廣泛的

總的來說,Python只支持AF_INET、AF_UNIX、AF_NETLINK和AF_TIPC家族

套接字地址:主機-端口對

做個比喻,套接字就像一個電話插孔,主機名和端口號就像區號和號碼。
當程序之間需要通信時,需要知道對端的主機名(IP)和端口號。
有效的端口號范圍為0~65535(小於1024的端口號預留給了系統)

面向連接的套接字與無連接的套接字

面向連接的套接字

  • TCP套接字的名字SOCK_STREAM。
  • 特點:可靠,開銷大。
    在進行通信之前必須先建立一個連接,該連接的通信提供序列化的、可靠的和不重復的數據交付,而沒有記錄邊界。這種類型的通信也稱為虛擬電路或流套接字。
    實現這種連接類型的主要協議是傳輸控制協議(縮寫 TCP)
    為了創建 TCP套接字,必須使用 SOCK_STREAM 作為套接字類型。

無連接的套接字

  • UDP套接字的名字SOCK_DGRAM
  • 特點:不可靠(局網內還是比較可靠的),開銷小。
    與虛擬電路形成鮮明對比的是數據報類型的套接字,它是一種無連接的套接字。
    在通信開始之前並不需要建立連接。此時,在數據傳輸過程中並無法保證它的順序性、可靠性或重復性。數據報確實保存了記錄邊界,這就意味着消息是以整體發送的,而並非首先分成多個片段。
    實現這種連接類型的主要協議是用戶數據報協議(縮寫 UDP)。為
    了創建UDP套接字,必須使用SOCK_DGRAM作為套接字類型。
    UDP套接字的SOCK_DGRAM名字來自於單詞“datagram”(數據報)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM