微吼云上線多路互動直播服務 加速多場景互動直播落地
602
2025-04-01
本篇文章將從 What(是什么)、Why(為什么)、How(怎么做)?三個部分簡單入門網絡通信。
計算機網絡是什么?
計算機網絡是指將地理位置不同的具有獨立功能的多臺計算機及其外部設備,通過通信線路連接起來,在網絡操作系統,網絡管理軟件及網絡通信協議的管理和協調下,實現資源共享和信息傳遞的計算機系統。
簡單來說,網絡就是一種輔助雙方甚至更多方能連接在一起的工具(也就是系統)。
為什么需要網絡通信?
為了傳遞數據,當然數據的格式也是多種多樣。網絡通信就是為了聯通多方然后進行通信用的,即把數據從一方傳遞給另一方。
如果現代社會沒有網絡,我們操作任何電腦或者手機都是單機模式,只能自己跟自己玩。
網絡通信的本質:也即進程之間的通信
表現形式:不同的電腦間的數據傳遞。
如何連接網絡——套接字
套接字是計算機網絡數據結構,它體現了上節中所描述的“通信端點”的概念。在任何類型的通信開始之前,網絡應用程序必須創建套接字。可以將它們比作電話插孔,沒有它將無法進行通信。
兩種類型的套接字:基于文件的和面向網絡的。
1. AF_UNIX(又名AF_LOCAL)
UNIX 套接字是我們所講的套接字的第一個家族,并且擁有一個“家族名字”AF_UNIX (又名AF_LOCAL,在POSIX1.g標準中指定),它代表地址家族(address family):UNIX。因為兩個進程運行在同一臺計算機上,所以這些套接字都是基于文件的,這意味著文件 系統支持它們的底層基礎結構。這是能夠說得通的,因為文件系統是一個運行在同一主機上 的多個進程之間的共享常量。
2. AF_INET(或者地址家族:因特網)
基于網絡的,它也有自己的家族名字 AF_INET,或者地址家族: 因特網。另一個地址家族 AF_INET6 用于第 6 版因特網協議(IPv6)尋址。此外,還有其他的地址家族,這些要么是專業的、過時的、很少使用的,要么是仍未實現的。在所有的地址 家族之中,目前 AF_INET 是使用得最廣泛的。
Python 只支持 AF_UNIX、AF_NETLINK、AF_TIPC 和 AF_INET 家族。
如果套接字像一個電話插孔——允許通信的一些基礎設施,那么主機名和端口號就像區號和電話號碼??的組合。
面向連接的套接字——TCP
面向連接的,字面解釋——在進行通信之前必須先建立一個連接,例如,使用電話系統給一個朋友打電話。這種類型的通信也稱為虛擬電路或流套接字。
實現這種連接類型的主要協議是傳輸控制協議(更為人熟知的是它的縮寫 TCP)。
為了創建 TCP 套接字,必須使用 SOCK_STREAM 作為套接字類型。TCP 套接字的名字 SOCK_STREAM 基于流套接字的其中一種表示。
因為這些套接字(AF_INET)的網絡版本使用因特網協議(IP)來搜尋網絡中的主機,所以整個系統通常結合這兩種協議(TCP 和 IP) 來進行(當然,也可以使用 TCP 和本地[非網絡的 AF_LOCAL/AF_UNIX]套接字,但是很明顯此時并沒有使用 IP)。
無連接的套接字——UDP
與虛擬電路形成鮮明對比的是數據報類型的套接字,它是一種無連接的套接字。這意味著,在通信開始之前并不需要建立連接。此時,在數據傳輸過程中并無法保證它的順序性、 可靠性或重復性。然而,數據報確實保存了記錄邊界,這就意味著消息是以整體發送的。
實現這種連接類型的主要協議是用戶數據報協議(更為人熟知的是其縮寫 UDP)。為了創建 UDP 套接字,必須使用 SOCK_DGRAM 作為套接字類型。你可能知道,UDP 套接字的 SOCK_DGRAM 名字來自于單詞“datagram”(數據報)。因為這些套接字也使用因特網協議 來尋找網絡中的主機,所以這個系統也有一個更加普通的名字,即這兩種協議(UDP 和 IP) 的組合名字,或 UDP/IP。
IP地址——“標記”
就像現實生活中,收件地址就是標記一封信是給誰的;收貨地址標記快遞寄到哪。地址就是用來標記地點的。
IP地址(Internet Protocol Address)是指互聯網協議地址,又譯為網際協議地址。
IP地址的作用,就是用來標記網絡上的一個電腦的。(不允許重復)比如類似192.268.1.1這種格式。
通過命令可以查看本機的網卡信息:
Linux輸入:ifconfig
Windows:ipconfig
每一個IP地址包含兩個部分:網絡地址和主機地址
A類:7位網絡號+主機24位
B類:14位+16位
C類:21位+主機號8位。192.168.1.1 ~255
D類:用于多點廣播。1110開始
E類:用來保留
端口
有效的端口號范圍為 0~65535(盡管小于 1024 的端口號預留給了系統)。
知名端口:從0到1023
例如:88端口分配給http、21分配給FTP
動態端口:1024~65535
在Linux/Mac系統下,可以在/etc/services文件中找到系統預留端口號,包括服務器/協議和套接字類型。
還可以通過這個網站查看一些眾所周知的端口列表。
通俗來說,IP地址讓我們找到了要互相通信的這臺電腦,端口的作用就是告訴我該跟這臺電腦的哪一個程序進行連接(通信)?
下一篇
當我們知道了有關套接字和網絡方面的基礎知識,接下來就讓我們試著將這些概念應用到 Python 中,學習Python的socket模塊。
站在巨人的肩膀上:Python核心編程(第3版)
Python TCP/IP 網絡
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。