一、網路基礎
計算機網路是將多台計算機互相連接起來,實現資源共享和通信的技術。網路通訊的基礎是數據傳輸,網路通訊中的數據傳輸是通過將數據拆分成若干個數據包進行傳輸實現的。數據包的傳輸需要遵循一定的協議,例如TCP/IP協議,UDP協議等協議。
TCP/IP協議是計算機網路中最基本的協議之一,其開發是基於美國國防部的研究項目ARPANET。TCP/IP協議分為四層,分別是應用層、傳輸層、網路層和數據鏈路層。常見的應用層協議有HTTP、FTP和SMTP等,傳輸層協議有TCP和UDP協議。
TCP協議是一種可靠的協議,其主要目的是保證數據的可靠傳輸,通過使用序號、確認應答和重傳等機制實現可靠傳輸。而UDP協議是一種不可靠的協議,其主要目的是提高傳輸速度,通常在音視頻傳輸等場景中使用。
二、物理層
物理層是計算機網路協議棧中的最底層,主要負責數據的物理傳輸。計算機使用網卡將數據從計算機中發送到計算機網路中。當數據到達網路時,數據經過一系列硬體設備,例如交換機等傳輸到目標計算機。
在物理層中,主要涉及到電子信號、光信號以及電纜等硬體設備。常見的傳輸介質有雙絞線、光纖等,不同的傳輸介質有不同的傳輸速率和傳輸距離。例如,雙絞線的傳輸距離一般在100米以內,而光纖則可以傳輸數十公里甚至更遠的距離。
三、網路層
網路層是計算機網路協議棧中的第三層,主要負責數據包的傳輸和路由。當數據包離開源計算機時,在網路層中會根據路由表選擇最合適的路徑進行傳輸。路由器是網路層中的重要設備,其主要功能是實現網路之間的相互連接和數據路由。
IP地址是網路層的重要概念,其可以唯一標識一台計算機在網路中的位置。IP地址分為IPv4和IPv6兩個版本,IPv4由32位二進位數組成,IPv6由128位二進位數組成。由於IPv4地址資源的緊張,目前逐漸推廣使用IPv6地址。
// C++ 代碼示例:獲取本機IP地址 #include #include #include #include #include #include #include int main() { struct ifaddrs *ifAddrStruct = NULL; struct ifaddrs *ifa = NULL; void *tmpAddrPtr = NULL; char addressBuffer[INET_ADDRSTRLEN]; getifaddrs(&ifAddrStruct); for (ifa = ifAddrStruct; ifa != NULL; ifa = ifa->ifa_next) { if (!ifa->ifa_addr) continue; if (ifa->ifa_addr->sa_family == AF_INET) { struct sockaddr_in *in = (struct sockaddr_in *)ifa->ifa_addr; tmpAddrPtr = &in->sin_addr; inet_ntop(AF_INET, tmpAddrPtr, addressBuffer, INET_ADDRSTRLEN); printf("IP address: %s\n", addressBuffer); } } if (ifAddrStruct != NULL) freeifaddrs(ifAddrStruct); return 0; }
四、傳輸層
傳輸層是計算機網路協議棧中的第二層,主要提供端到端的通信服務和傳輸協議。傳輸層的協議有TCP協議和UDP協議等。TCP協議是一種可靠的協議,其主要功能是保證端到端的可靠傳輸,實現流量控制和擁塞控制等功能。而UDP協議是一種不可靠的協議,其主要功能是提高傳輸速率。
在TCP協議中,每個TCP報文段都包含了源埠和目標埠、序列號和確認號、窗口大小等信息。序列號和確認號是TCP協議實現可靠傳輸的關鍵,通過序列號和確認號可以保證數據的有序傳輸和數據的正確性。而窗口大小則是TCP協議實現流量控制和擁塞控制的重要機制。
// Python 代碼示例:使用socket實現TCP通信 import socket HOST = '127.0.0.1' # Server IP PORT = 65432 # Server Port with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.connect((HOST, PORT)) s.sendall(b'Hello, world') data = s.recv(1024) print('Received', repr(data))
五、應用層
應用層是計算機網路協議棧中的最上層,主要負責應用程序之間的通信。常見的應用層協議有HTTP、FTP、SMTP等。其中,HTTP協議是Web應用中最為常用的一種協議,主要用於Web伺服器與客戶端之間的通信。
HTTP協議採用「請求-響應」模式,客戶端向Web伺服器發送HTTP請求,伺服器響應HTTP響應。HTTP請求和響應分別由請求行、請求頭和請求體以及響應行、響應頭和響應體組成。
// Java 代碼示例:使用HttpURLConnection發送HTTP請求 import java.net.HttpURLConnection; import java.net.URL; import java.io.*; public class HttpExample { public static void main(String[] args) { try { URL url = new URL("https://httpbin.org/get"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); String inputLine; while ((inputLine = in.readLine()) != null) { System.out.println(inputLine); } in.close(); } catch (Exception e) { e.printStackTrace(); } } }
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/270582.html