1. 程式人生 > >CMU CSAPP筆記 第十一章

CMU CSAPP筆記 第十一章

基本網路知識

  • 網路系統層次

    • LAN(區域網)
      • Ethernet(乙太網)
    • WAN(廣域網)
      這裡寫圖片描述

    這裡寫圖片描述

  • 資料的傳輸過程
    這裡寫圖片描述

這裡寫圖片描述

  • TCP/IP協議

    • IP
      • 基本的命名方法和遞送機制
      • IPv4和IPv6
        • 最初的網際網路協議使用32位地址,稱位IPv4,而IPv6有128位地址
      • IP地址通常以一種點分十進位制來表示
        • 128.2.194.242就是地址0x8002c2f2
    • UDP
      • 不可靠資料報協議
      • 使得包可以在程序間而不是主機間傳遞
    • TCP
      • 提供程序間可靠的雙向連結
  • 域名

    • 通過一個叫做DNS的分散式資料庫來維護
    • 將IP地址與域名對映
      • 一個IP地址可以對映到多個域名,一個域名也可以對映到多個IP地址
      • 每個主機都有本地域名localhost
      • 通過Linux下的nslookup命令可以檢視域名對應的IP地址

這裡寫圖片描述

Socekt

  • socket(套位元組)
    • 套位元組地址:IP地址:埠
      • 例如199.16.156.198:80
    • 埠分為臨時埠和知名埠
      • WEB伺服器埠通常為80,電子郵件埠為25
      • 埠為16bit整數
  • socket介面
    • socket從Linux程式角度來看就是一個file descriptor
    • 地址結構
      這裡寫圖片描述

這裡寫圖片描述

  • 伺服器和客戶端的連線過程
    • 伺服器和客戶端都呼叫socket函式建立檔案描述符
    • 伺服器呼叫bind函式準備連線
    • 由於預設socket描述符用於客戶端,伺服器呼叫listen函式將其轉變為監聽描述符,這個描述符伺服器自開機執行只建立一次
    • 最後呼叫accept函式等待伺服器請求到達,返回已連線描述符,這個描述符每當一個伺服器和客服端連線就建立一個
      • 區分監聽和已連線的目的是建立併發伺服器,同時處理多個客戶端
    • 同時客戶端(使用者)呼叫connect函式準備連線,開啟clientfd描述符
  • 如圖, 可以用open_clientfd和open_listenfd函式封裝這些函式

這裡寫圖片描述

WEB伺服器

  • web伺服器向客戶端提供的內容
    • 每條伺服器返回的內容都和他管理的某個檔案相關聯,這些檔案都有一個唯一的名字URL
      • 客服端使用到埠前的部分,伺服器使用埠後的部分
      • 預設埠為80
      • 埠後不加字尾預設為補全缺失的 ‘/’ 並取出網站的主頁
    • 靜態內容
    • 動態內容

HTTP事務

  • HTTP請求
    • 首先要連線伺服器和客戶端
    • 格式:method URI version
    • method一般為 GET
    • URI為URL埠後面的部分
    • version為HTTP版本,一般為HTTP/1.0或HTTP\1.1
  • HTTP響應的常見狀態碼

這裡寫圖片描述

  • 傳遞動態內容
    • ?分割檔名和引數
    • 每個引數用 & 隔開
    • 舉例: GET /adder?1500&213 HTTP/1.1