深入淺出計算機網路

一、網路基礎

計算機網路是將多台計算機互相連接起來,實現資源共享和通信的技術。網路通訊的基礎是數據傳輸,網路通訊中的數據傳輸是通過將數據拆分成若干個數據包進行傳輸實現的。數據包的傳輸需要遵循一定的協議,例如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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-16 13:37
下一篇 2024-12-16 13:37

相關推薦

  • 深入淺出統計學

    統計學是一門關於收集、分析、解釋和呈現數據的學科。它在各行各業都有廣泛應用,包括社會科學、醫學、自然科學、商業、經濟學、政治學等等。深入淺出統計學是指想要學習統計學的人能夠理解統計…

    編程 2025-04-25
  • 深入淺出torch.autograd

    一、介紹autograd torch.autograd 模塊是 PyTorch 中的自動微分引擎。它支持任意數量的計算圖,可以自動執行前向傳遞、後向傳遞和計算梯度,同時提供很多有用…

    編程 2025-04-24
  • 深入淺出SQL佔位符

    一、什麼是SQL佔位符 SQL佔位符是一種佔用SQL語句中某些值的標記或佔位符。當執行SQL時,將使用該標記替換為實際的值,並將這些值傳遞給查詢。SQL佔位符使查詢更加安全,防止S…

    編程 2025-04-24
  • 深入淺出:理解nginx unknown directive

    一、概述 nginx是目前使用非常廣泛的Web伺服器之一,它可以運行在Linux、Windows等不同的操作系統平台上,支持高並發、高擴展性等特性。然而,在使用nginx時,有時候…

    編程 2025-04-24
  • 深入淺出ThinkPHP框架

    一、簡介 ThinkPHP是一款開源的PHP框架,它遵循Apache2開源協議發布。ThinkPHP具有快速的開發速度、簡便的使用方式、良好的擴展性和豐富的功能特性。它的核心思想是…

    編程 2025-04-24
  • 深入淺出arthas火焰圖

    arthas是一個非常方便的Java診斷工具,包括很多功能,例如JVM診斷、應用診斷、Spring應用診斷等。arthas使診斷問題變得更加容易和準確,因此被廣泛地使用。artha…

    編程 2025-04-24
  • 深入淺出AWK -v參數

    一、功能介紹 AWK是一種強大的文本處理工具,它可以用於數據分析、報告生成、日誌分析等多個領域。其中,-v參數是AWK中一個非常有用的參數,它用於定義一個變數並賦值。下面讓我們詳細…

    編程 2025-04-24
  • 深入淺出Markdown文字顏色

    一、Markdown文字顏色的背景 Markdown是一種輕量級標記語言,由於其簡單易學、易讀易寫,被廣泛應用於博客、文檔、代碼注釋等場景。Markdown支持使用HTML標籤,因…

    編程 2025-04-23
  • 深入淺出runafter——非同步任務調度器的實現

    一、runafter是什麼? runafter是一個基於JavaScript實現的非同步任務調度器,可以幫助開發人員高效地管理非同步任務。利用runafter,開發人員可以輕鬆地定義和…

    編程 2025-04-23
  • 深入淺出TermQuery

    一、TermQuery概述 TermQuery是Lucene中最基本、最簡單、最常見的查詢方法之一。它完全符合其名字,意味著只能對一個單詞進行查詢。 TermQuery可以用於搜索…

    編程 2025-04-23

發表回復

登錄後才能評論