一.ip
1.ip的定義
????????IP是“Internet Protocol”的縮寫,即“互聯網協議”。它是用于計算機網絡通信的基礎協議之一,屬于TCP/IP協議族中的網絡層協議。IP協議的主要功能是負責將數據包從源主機傳輸到目標主機,并確保數據能夠在復雜的網絡環境中正確地路由和轉發。
2.ip地址
????????IP地址是IP協議的核心組成部分,它是一個用于唯一標識網絡設備(如計算機、服務器、路由器等)的地址。IP地址分為兩種主要版本:
(1)IPv4(Internet Protocol version 4)
-
格式:IPv4地址是一個32位的二進制數,通常以點分十進制格式表示,例如:
192.168.1.1
。 -
地址范圍:IPv4地址的范圍是從
0.0.0.0
到255.255.255.255
。 -
分類:
-
A類地址:范圍是
1.0.0.0
到126.0.0.0
,默認子網掩碼為255.0.0.0
。 -
B類地址:范圍是
128.0.0.0
到191.255.0.0
,默認子網掩碼為255.255.0.0
。 -
C類地址:范圍是
192.0.0.0
到223.255.255.0
,默認子網掩碼為255.255.255.0
。 -
D類地址:范圍是
224.0.0.0
到239.255.255.255
,用于多播(組播)。 -
E類地址:范圍是
240.0.0.0
到255.255.255.255
,目前保留未使用。
-
-
特點:IPv4地址數量有限(約43億個),隨著互聯網的快速發展,IPv4地址逐漸耗盡。
ip4里面的子網掩碼是什么?
子網掩碼將ip地址劃分為網絡部分和本地部分,幫網絡設備確定ip地址所屬的子網。子網通過其二進制形式中的“1”和“0”來區分這兩個部分。
-
網絡部分:子網掩碼中為“1”的部分表示IP地址的網絡部分,用于標識網絡。
-
主機部分:子網掩碼中為“0”的部分表示IP地址的主機部分,用于標識網絡中的設備。
子網掩碼的分類
根據IPv4地址的分類(A、B、C類),默認子網掩碼如下:
A類地址:默認子網掩碼為
255.0.0.0
,表示前8位為網絡部分,后24位為主機部分。B類地址:默認子網掩碼為
255.255.0.0
,表示前16位為網絡部分,后16位為主機部分。C類地址:默認子網掩碼為
255.255.255.0
,表示前24位為網絡部分,后8位為主機部分。
(2)IPv6(Internet Protocol version 6)
-
格式:IPv6地址是一個128位的二進制數,通常以冒號分隔的十六進制格式表示,例如:
2001:0db8:85a3:0000:0000:8a2e:0370:7334
。 -
特點:
-
提供了幾乎無限的地址空間(約3.4×103?個地址),解決了IPv4地址不足的問題。
-
支持更高效的路由和自動配置功能。
-
內置了更好的安全性(如IPsec)。
-
-
推廣現狀:盡管IPv6已經存在多年,但由于兼容性和成本問題,目前全球范圍內的IPv6普及率仍在逐步提高。
(3)特殊的地址 127.0.0.01
??127.0.0.1
是IPv4協議中保留的本地回環地址(Loopback Address)。它被用于標識本機上的網絡服務,主要用于測試和調試網絡程序。
那么為什么我一定要用這個ip地址呢?用別的地址不行嗎?
????????使用127.0.0.1
有其特定的優勢和必要性。127.0.0.1
是一個特殊的回環地址,用于本地通信,可以避免網絡沖突和配置問題,確保測試環境的一致性和隔離性。因此,推薦使用127.0.0.1
進行本地調試和測試。
二.?端口
1.端口的定義
????????端口是一個16位的數字,范圍從0到65535。它用于標識應用程序或服務在某個IP地址上的具體位置。每個IP地址可以有多個端口,每個端口可以運行不同的應用程序或服務。
2.端口的分類
端口可以分為以下幾類:
(1)系統端口(0-1023)
這些端口通常由系統或操作系統保留,用于運行系統服務和關鍵應用程序。例如:
-
端口80:用于HTTP協議,提供網頁訪問服務。
-
端口443:用于HTTPS協議,提供安全的網頁訪問服務。
-
端口21:用于FTP協議,提供文件傳輸服務。
-
端口25:用于SMTP協議,提供電子郵件服務。
(2)?用戶端口(1024-49151)
這些端口可以由用戶自定義或由應用程序使用。許多應用程序會使用這些端口進行網絡通信。例如:
-
端口3306:用于MySQL數據庫服務。
-
端口5432:用于PostgreSQL數據庫服務。
(3)動態端口(49152-65535)
這些端口通常由操作系統動態分配,用于臨時通信。例如,當你使用瀏覽器訪問一個網頁時,瀏覽器會從這些端口中選擇一個臨時端口作為通信的源端口。
三.通訊接口
1.通訊接口的定義
-
通訊接口是一個實現通訊協議的接口,使得不同設備或應用程序能夠按照協議的規定進行通信。
-
通訊接口可以是軟件接口(如API、庫)或硬件接口(如USB、RS-232)。
軟件接口和硬件接口之間有什么關系呢?
為什么會有軟件接口和硬件接口?-CSDN博客
?2.通訊接口分類
-
軟件接口:如Socket、Snap7、Modbus-TCP等。
-
硬件接口:如USB、RS-232、RS-485等。
3.接口Snap7和Socket
(1)Snap7
-
定義:
-
Snap7 是一個用于與西門子 S7 系列 PLC(可編程邏輯控制器)進行通信的開源庫。它提供了與 PLC 設備進行數據交換的接口。
-
-
接口類型:
-
PLC 接口:Snap7 主要用于與 PLC 設備進行通信,因此可以被視為一種 PLC 接口。
-
軟件接口:Snap7 提供了軟件接口,允許開發者通過編程與 PLC 設備進行通信。
-
-
作用:
-
提供了與西門子 PLC 設備進行高效、可靠通信的接口,適用于工業自動化領域。
-
(2)Socket
-
定義:
-
Socket 是計算機網絡中的一種通用通信接口,可以用于實現網絡通信。它提供了與網絡中其他設備或應用程序進行數據交換的接口。
-
-
接口類型:
-
計算機軟件接口:Socket 是計算機網絡中的一種通用接口,適用于各種網絡應用。
-
-
作用:
-
提供了網絡通信的接口,使得不同設備或應用程序之間可以進行數據傳輸,適用于多種網絡通信場景。
-
四.通訊協議
1.通訊協議的定義
-
通訊協議是一組規則和標準,用于定義兩個或多個通信實體(如設備、應用程序)之間如何進行信息交換。
-
協議規定了通信的內容、格式、順序以及錯誤處理等細節。
2.通訊協議分類
-
網絡協議:如TCP/IP、UDP、HTTP、FTP等。
-
工業協議:如Modbus、Profibus、Profinet、S7等。
-
應用層協議:如HTTP、HTTPS、SMTP、POP3等。
可是為什么會有這么多通訊協議的分類呢?
因為通訊協議的多樣性是由于不同的應用場景、歷史背景和技術發展導致的。
通訊協議的分類及原因-CSDN博客
五.UDP和TCP
-
UDP
-
定義:UDP是一種無連接的傳輸層協議,它不提供可靠的數據傳輸服務,也不保證數據能夠成功到達接收方。它在發送數據前不需要與接收方建立連接,發送數據后也不會等待接收方的確認。
-
特點:UDP協議簡單高效,適用于實時性要求較高的應用場景,如視頻會議、在線游戲等。
-
-
TCP
-
定義:TCP是一種面向連接的傳輸層協議,它在發送數據前需要與接收方建立可靠的連接。TCP通過三次握手(SYN、ACK、SYN-ACK)來建立連接,通過四次揮手(FIN、ACK、FIN-ACK)來斷開連接。
-
特點:TCP提供可靠的數據傳輸服務,能夠保證數據的按序到達和完整性。它適用于對數據可靠性要求較高的場景,如文件傳輸、電子郵件等。
-
協議的比較與區別
協議 | UDP | TCP |
---|---|---|
連接類型 | 無連接 | 面向連接 |
可靠性 | 不可靠,不保證數據到達 | 可靠,保證數據按序到達 |
速度 | 較快,無連接開銷 | 較慢,有連接和確認開銷 |
頭部開銷 | 較小,8字節 | 較大,通常20-60字節 |
應用場景 | 實時性要求高的場景(如視頻會議、在線游戲) | 數據可靠性要求高的場景(如文件傳輸、電子郵件) |
傳輸方式 | 以數據報為單位,無連接 | 以字節流為單位,面向連接 |
擁塞控制 | 無擁塞控制 | 有擁塞控制 |
協議的報文格式和字段含義
-
UDP 報文格式
-
首部:8字節,包含以下字段:
-
源端口:2字節,發送方的端口號。
-
目的端口:2字節,接收方的端口號。
-
長度:2字節,UDP用戶數據報的總長度(包括首部和數據)。
-
校驗和:2字節,用于檢測UDP用戶數據報在傳輸過程中是否有錯誤。
-
-
數據區:存放實際要傳輸的數據。
-
-
TCP 報文格式
-
首部:通常20-60字節,包含以下字段:
-
源端口:2字節,發送方的端口號。
-
目的端口:2字節,接收方的端口號。
-
序號:4字節,用于標識TCP報文段的順序。
-
確認號:4字節,用于確認接收到的報文段。
-
首部長度:1字節,標識TCP首部的長度。
-
標志位:6位,用于控制TCP連接的狀態(如SYN、ACK、FIN等)。
-
窗口大小:2字節,用于流量控制。
-
校驗和:2字節,用于檢測TCP報文段在傳輸過程中是否有錯誤。
-
緊急指針:2字節,用于緊急數據的傳輸。
-
-
數據區:存放實際要傳輸的數據。
-
協議的使用方式和編程示例
-
UDP 編程示例
Python復制
import socket# 創建UDP套接字 udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 綁定端口 udp_socket.bind(('localhost', 12345))# 發送數據 udp_socket.sendto(b'Hello, UDP!', ('localhost', 12346))# 接收數據 data, addr = udp_socket.recvfrom(1024) print(f"Received from {addr}: {data.decode()}")# 關閉套接字 udp_socket.close()
-
TCP 編程示例
Python復制
import socket# 創建TCP套接字 tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 綁定端口 tcp_socket.bind(('localhost', 12345))# 監聽連接 tcp_socket.listen(5)# 接受連接 conn, addr = tcp_socket.accept() print(f"Connected by {addr}")# 發送數據 conn.sendall(b'Hello, TCP!')# 接收數據 data = conn.recv(1024) print(f"Received from {addr}: {data.decode()}")# 關閉連接 conn.close() tcp_socket.close()