CMU CSAPP筆記 第十一章
阿新 • • 發佈:2018-11-12
基本網路知識
網路系統層次
- LAN(區域網)
- Ethernet(乙太網)
- WAN(廣域網)
- LAN(區域網)
資料的傳輸過程
TCP/IP協議
- IP
- 基本的命名方法和遞送機制
- IPv4和IPv6
- 最初的網際網路協議使用32位地址,稱位IPv4,而IPv6有128位地址
- IP地址通常以一種點分十進位制來表示
- 128.2.194.242就是地址0x8002c2f2
- UDP
- 不可靠資料報協議
- 使得包可以在程序間而不是主機間傳遞
- TCP
- 提供程序間可靠的雙向連結
- IP
域名
- 通過一個叫做DNS的分散式資料庫來維護
- 將IP地址與域名對映
- 一個IP地址可以對映到多個域名,一個域名也可以對映到多個IP地址
- 每個主機都有本地域名localhost
- 通過Linux下的nslookup命令可以檢視域名對應的IP地址
Socekt
- socket(套位元組)
- 套位元組地址:IP地址:埠
- 例如199.16.156.198:80
- 埠分為臨時埠和知名埠
- WEB伺服器埠通常為80,電子郵件埠為25
- 埠為16bit整數
- 套位元組地址:IP地址:埠
- socket介面
- socket從Linux程式角度來看就是一個file descriptor
- 地址結構
- 伺服器和客戶端的連線過程
- 伺服器和客戶端都呼叫socket函式建立檔案描述符
- 伺服器呼叫bind函式準備連線
- 由於預設socket描述符用於客戶端,伺服器呼叫listen函式將其轉變為監聽描述符,這個描述符伺服器自開機執行只建立一次
- 最後呼叫accept函式等待伺服器請求到達,返回已連線描述符,這個描述符每當一個伺服器和客服端連線就建立一個
- 區分監聽和已連線的目的是建立併發伺服器,同時處理多個客戶端
- 同時客戶端(使用者)呼叫connect函式準備連線,開啟clientfd描述符
- 如圖, 可以用open_clientfd和open_listenfd函式封裝這些函式
WEB伺服器
- web伺服器向客戶端提供的內容
- 每條伺服器返回的內容都和他管理的某個檔案相關聯,這些檔案都有一個唯一的名字URL
- 客服端使用到埠前的部分,伺服器使用埠後的部分
- 預設埠為80
- 埠後不加字尾預設為補全缺失的 ‘/’ 並取出網站的主頁
- 靜態內容
- 讀取伺服器上的磁碟檔案並返回給客戶端
- 例如 http://www.w3.org/Protocols/rfc2616/rfc2616.html
- 動態內容
- 執行一個可執行檔案並將輸出返回給客戶端
- 執行一個可執行檔案並將輸出返回給客戶端
- 每條伺服器返回的內容都和他管理的某個檔案相關聯,這些檔案都有一個唯一的名字URL
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