一、網絡目的
讓你設備上的數據和其他設備上進行共享,使用網絡能夠把多方鏈接在一起,然后可以進行數據傳遞。
網絡編程就是,讓在不同的電腦上的軟件能夠進行數據傳遞,即進程之間的通信。
二、IP地址的作用
用來標記唯一一臺電腦
1. Linux查看IP地址
輸入命令ifconfig
2. Window查看IP地址
快捷鍵win+R打開運行,輸入cmd,然后輸入命令ipconfig
3. Linux下關閉網卡
Ctrl+A:快速回到行首
Ctrl+E:快速回到行尾
(1)關閉網卡
(2)開啟網卡
三、IP地址分類
IPV4個數:256*256*256*256(瓜分完了,不夠用)
IPV6:
每一個IP地址包括兩部分:網絡地址和主機地址
1. A類IP地址
一個A類IP地址由1字節的網絡地址(網絡號)和3字節主機地址(主機號)組成,網絡地址的最高位必須是“0”。
- 地址范圍:1.0.0.1 - 126.255.255.254
- 二進制表示為:00000001 00000000 00000000 00000001 - 01111110 11111111 11111111 11111110
- 可用的A類網絡有126個,每個網絡能容納16777214個主機。
2. B類IP地址
一個B類IP地址由2個字節的網絡地址(網絡號)和2個字節的主機地址(主機號)組成,網絡地址的最高位必須是“10”。
- 地址范圍:128.1.0.1 - 191.255.255.254
- 二進制表示為:10000000 00000001 00000000 00000001 - 10111111 11111111 11111111 11111110
- 可用的B類網絡有16384個,每個網絡能容納65534個主機。
3. C類地址
一個C類IP地址由3個字節的網絡地址和1個字節的主機地址組成,網絡地址的最高位必須是“110”。
- 范圍:192.0.1.1 - 223.255.255.254
- 二進制表示為:11000000 00000000 00000001 00000001 - 11011111 11111111 11111110 11111110
- C類網絡可達2097152個,每個網絡能容納254個主機。
4. D類地址用于多點廣播
D類IP地址第一個字節以“1110”開始,它是一個專門保留的地址。
它并不指向特定的網絡,目前這一類地址被用在多點廣播(Multicast)中。
多點廣播地址用來一次尋址一組計算機,地址范圍224.0.0.1 - 239.255.255.254。
?5. E類IP地址
以“1111”開始,為將來使用保留。E類地址保留,僅作實驗和開發用。
6. 私有ip
在這么多網絡IP中,國際規定有一部分IP地址是用于我們的局域網使用,也就是屬于私網IP,不在公網中使用的,它們的范圍是:
- 10.0.0.0 ~ 10.255.255.255
- 172.16.0.0 ~ 172.31.255.255
- 192.168.0.0 ~ 192.168.255.255
四、端口
1. 什么是端口?
提出問題:當兩臺電腦上同時運行多個程序時,通過IP地址數據可以到達,但該給電腦中哪個程序呢?
計算機通過IP地址找到目標設備后,還需要用端口號區分設備上不同的軟件服務。例如:
- 瀏覽網頁:默認用80端口(HTTP)或443端口(HTTPS)
- 發郵件:用25端口(SMTP)
- 下載文件:用21端口(FTP)
網絡端口的作用可以理解為計算機的“門牌號”。就像一棟大樓有很多房間(服務),每個房間有唯一的門牌號(端口號),方便快遞員(數據)準確找到對應的房間。
如果一個程序需要收發網絡數據,那么就需要有這樣的端口在Linux系統中,端口可以有65536(2的16次方)個之多!既然有這么多,操作系統為了統一管理,所以進行了編號,這就是端口號。
2. 端口號
端口是通過端口號來標記的,端口號只有整數,范圍是從0到65535。
注意:端口號不一樣的*nix系統不一樣,還可以手動修改。
3. 端口是怎樣分配的
端口號不是隨意使用的,而是按照一定的規定進行分配
(1)知名端口(0-1023)
眾所周知的端口,范圍-到1023。由國際組織IANA統一管理,專門分配給最常用的網絡服務:
- 80端口:網頁服務(HTTP)→ 相當于"官方網站入口"
- 443端口:加密網頁(HTTPS)→ 類似"銀行VIP通道"
- 22端口:安全遠程登錄(SSH)→ 類似"機房管理專用門"
(2)注冊端口(1024-49151)
企業可向IANA申請注冊專用端口,比如:
- 3306端口:MySQL數據庫
- 3389端口:Windows遠程桌面
- 5432端口:PostgreSQL數據
?? (3) 動態端口
動態端口的范圍是從1024到65535
之所以稱為動態端口,是因為它一般不固定分配某種服務,而是動態分配。
動態分配是指當一個系統程序或應用程序程序需要網絡通信時,它向主機申請一個端口,主機從可用的端口號中分配一個供它使用。
當這個程序關閉時,同時也釋放了所占用的端口號。
(4)怎樣查看端口號
Linux 系統:
- 使用
netstat
命令:如netstat -tulnp
可以查看所有監聽中的 TCP 和 UDP 端口,并顯示對應的進程 ID 和程序名稱。若只想查看特定端口,如 22 端口的使用情況,可使用netstat -tnlp | grep ":22"
4。 - 使用
ss
命令:ss
是netstat
的現代替代品,性能更優,常用ss -tuln
查看端口,若查看特定端口,如查看端口號 22 的使用情況,可使用ss -tnlp | grep ":22"
4。 - 使用
lsof
命令:lsof -i:<端口號>
可以列出使用該端口的進程信息,如lsof -i:80
可查看使用 80 端口的進程。
Windows 系統:
使用命令提示符(CMD)
netstat
命令:打開命令提示符,輸入netstat -ano
,可列出所有網絡連接和監聽端口,顯示本地地址、外部地址、狀態以及對應的進程 ID。若只想查看正在監聽的端口,可使用netstat -anl
。要以數字格式顯示地址和端口信息,可使用netstat -n
5。tasklist
命令配合netstat
:先使用netstat -ano
找到占用特定端口的進程 ID,再使用tasklist /fi "pid eq <進程ID>"
查看對應的進程名稱和詳細信息。
使用任務管理器:
- 打開任務管理器,切換到 “性能” 選項卡,點擊 “資源監視器”,在 “網絡” 選項卡中可以查看正在使用的端口以及對應的進程。
五、Socket介紹
1. 不同電腦上的進程如何通信
首要解決的問題是如何唯一標識一個進程,否則通信無從談起!
在1臺電腦上可以通過進程號(PID)來唯一標識一個進程,但是在網絡中是行不通的。
起始TCP/IP協議協議族幫我們解決了這個問題,網絡層的IP地址可以唯一標識網絡中的主機,而傳輸層的“協議+端口”可以唯一標識主機中應用進程。
這樣利用ip地址 + 協議 + 端口就可以標識網絡的進程了,網絡中的進程通信就可以利用這個標志與其它進程進行交互。
2. 什么是Socket?
socket(簡稱套接字)是進程間通信的一種方式,其他進程間通信的~主要不同是:它能實現不同主機間的進程間通信,我們網絡上各種各樣的服務大多都是基于 Socket 來完成通信的例如我們每天瀏覽網頁、QQ 聊天、收發emai 等等。
3. 創建Socket
在python中,使用socket模塊的函數socket就可以完成:
import socket
socket.socket(AdressFamily,Type)
總結:所以說會了socket直白來講,你接下來編寫的程序,你就可以完成網絡功能
創建一個TCP Socket
import socket # 導入 Python 內置的 socket 模塊,用于網絡編程 # 創建 TCP 套接字
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# - socket.AF_INET:指定使用 IPv4 地址族(常見的網絡地址類型)。
# - socket.SOCK_STREAM:指定使用 TCP 協議,特點是面向連接、可靠傳輸,數據無丟失、按序到達。 # ...這里是使用套接字的功能(省略)...
# 實際使用中,會在此處添加綁定地址端口(bind)、監聽(listen)、接受連接(accept)、收發數據(send/recv)等邏輯。
創建一個UDP Socket
import socket # 導入 socket 模塊 # 創建 UDP 套接字
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# - socket.AF_INET:同樣指定 IPv4 地址族。
# - socket.SOCK_DGRAM:指定使用 UDP 協議,特點是無連接、不可靠傳輸,適合對實時性要求高但允許少量丟包的場景(如視頻直播、游戲通信)。 # ...這里是使用套接字的功能(省略)...
# 實際使用中,會在此處添加綁定地址端口(bind)、收發數據(sendto/recvfrom)等邏輯。 s.close() # 關閉 UDP 套接字,釋放資源。