計算機網路自頂向下--應用層

weixin_34075268發表於2017-06-18

這兩週把機械工業的『計算機網路自頂向下方法』讀了一遍。可以說把知識點講解得鞭辟入裡,比謝希仁那本綠皮教材不知高到哪裡去了。

我看書的時候做了概括內容和重點內容的筆記,加上了我個人理解。像運輸層協議的例子、家裡配置路由器、翻牆、之前的比特幣勒索病毒之類一些生活中實際的例子,我都有提及。當把應用層、運輸層、網路層、鏈路層看完後,書中還給出了一個完整的瀏覽器請求過程的例子,從DHCP、UDP、IP和乙太網,到DNS和ARP,再到域內路由選擇DNS伺服器,Web客戶-伺服器之間的TCP和HTTP,一共24個步驟,基本上學到的四層協議中的知識都用到了,十分經典。這個例子在鏈路層最後一部分。

以下是我所做的筆記,包括應用層到鏈路層所有重要的知識點。算是一份複習大綱或者預習大綱(不能應試)。仔細看完可能要幾個小時,在這分享出來給沒有計算機網路基礎的同學們,看完後應該對計算機網路有了初步的瞭解。不過還是建議買這本書去讀,不會令人失望的。

本書結構是自頂向下的,所以請按下列順序閱讀:

1.計算機網路自頂向下--應用層
2.計算機網路自頂向下--運輸層
3.計算機網路自頂向下--網路層
4.計算機網路自頂向下--鏈路層

應用層


應用層協議原理

網路應用程式體系結構

  • 客戶 - 伺服器(C/S)
    • Web、FTP、Telnet、電子郵件
  • 對等(P2P)
    • 檔案共享(BitTorrent)、對等方協助下載加速器(迅雷)、網路電話(Skype)、IPTV(迅雷看看)
  • 混合(C/S + P2P)
    • 即時訊息應用,伺服器跟蹤使用者IP地址,使用者之間P2P直接傳送報文

程式通訊

  • 進行通訊是實際是程式,不是程式。不同端系統的程式間交換報文相互通訊
  • 客戶和伺服器程式
    • 發起通訊的程式標識為客戶,等待聯絡的程式是伺服器
    • 瀏覽器 - Web伺服器交換報文
    • P2P 檔案從一個對等方的程式傳輸到另一個counterpart的程式
  • 程式與計算機網路之間的介面
    • 套接字Socket,是同一臺主機內應用層與運輸層之間的介面,應用程式和網路之間的API
  • 程式定址
    • 主機地址(IP地址)
    • 接收程式識別符號(埠號)
  • 因特網提供的運輸服務
    • TCP服務
      • 面向連線,全雙工
      • 可靠的資料傳送服務
      • 擁塞控制
      • 安全套接字層SSL
    • UDP服務
      • 不可靠資料傳送服務
    • 因特網運輸協議不提供的服務
      • 能為時間敏感應用提供滿意的服務,但不提供任何定時或頻寬保證
  • 應用層協議
    • 定義了執行在不同端系統上應用程式程式如何相互傳遞報文
      • 報文型別,如請求報文,響應報文
      • 報文型別的語法,欄位含義
      • 何時、如何傳送報文,響應規則
    • Web、檔案傳輸、電子郵件、目錄服務、P2P及其協議

Web和HTTP

HTTP概況

  • Web的應用層協議是超文字傳輸協議(HTTP),HTTP由一個客戶程式和一個伺服器程式實現,通過交換HTTP報文進行會話,80埠
  • URL地址包括主機名和路徑名,Web伺服器用於儲存Web物件,每個物件由URL定址
  • HTTP使用TCP作為其支撐運輸協議。HTTP協議不擔心資料丟失,不關注TCP從網路的資料丟失和亂序故障恢復細節,那是TCP以及協議棧低層協議的工作
  • HTTP是無狀態協議,不儲存客戶資訊
  • Web伺服器總是開啟的,一般有一個固定的IP地址,並服務於來自不同瀏覽器的請求

非持續連線和持續連線

  • 採用非持續連線的HTTP
    • 每個TCP連線只傳輸一個請求報文和一個響應報文
    • 每個連線在客戶和伺服器都要分配TCP的緩衝區和保持TCP變數
    • TCP連線三次握手,第三次握手向TCP連線傳送一個HTTP請求報文
    • 每一個物件經受兩倍RTT的交付時延,一個用於建立連線,一個用於請求和接收一個物件
  • 採用持續連線的HTTP(default)
    • 伺服器傳送響應後保持該TCP連線開啟,經過一定時間間隔(超時)未被使用,HTTP伺服器關閉該連線

HTTP報文格式

  • 請求報文
    • 請求行
    • 首部行(請求頭)
      • host(Web代理快取記憶體使用)、Connection、Useragent、cookie、Authorization等等
    • 實體體
      • POST請求輸入值
  • 響應報文
    • 狀態行,狀態碼

使用者與伺服器的互動:cookie

  • 伺服器希望限制使用者訪問,或希望把內容與使用者身份聯絡起來
  • 使用者第一次請求伺服器—>響應報文的響應頭(首部行)帶一個cookie—>瀏覽器管理cookie—>請求報文帶cookie—>伺服器根據cookie識別使用者

Web快取(代理伺服器)

  • 類似計算機主存cache,命中率越高效率越高
  • 與CDN(內容分發網路)結合

條件Get方法

  • 響應頭帶了個修改時間引數,是代理伺服器用來更新快取的策略

檔案傳輸協議FTP

兩個並行TCP連線

  • 控制連線:使用者標識、口令、操作命令,貫穿整個使用者會話期間
  • 資料連線:傳輸檔案,一個檔案一個連線,非連續
  • FTP的控制資訊是帶外傳送的(如上),HTTP屬於帶內傳送

電子郵件

SMTP

  • 需要將二進位制多媒體資料編碼為ASCII碼,接收方再還原
  • 不使用中間郵件伺服器傳送郵件,若接收方郵件伺服器沒開機,報文會保留在傳送方郵件伺服器上等待新的嘗試

與HTTP對比

  • HTTP是拉協議,SMTP是推協議
  • HTTP把每個物件封裝到自己的相應報文中,SMTP把所有報文放在一個報文中

郵件訪問協議

  • POP3:非常簡單
  • IMAP:有各種檔案操作
  • 基於Web的電子郵件

過程舉例

  • 牛嚴的代理(qq郵箱客戶端)—>SMTP/HTTP—>QQ郵箱伺服器—>SMTP—>清華郵箱伺服器—>POP3/IMAP/HTTP—>殷人昆的代理(清華郵箱Web端)

DNS:因特網的目錄服務

DNS提供的服務

  • 主機名—>IP地址轉換的目錄服務
    • DNS(域名系統) = DNS伺服器 + DNS協議 。 DNS協議執行在UDP上,53號埠
    • 通常由其他應用層協議使用,包括HTTP、SMTP、FTP
  • 主機別名
  • 郵件伺服器別名,允許一個公司的郵件伺服器和Web伺服器使用相同主機名
  • 負載分配,一個站點若有多臺伺服器(多IP地址),DNS伺服器迴圈回答這些地址

DNS工作機理

  • 分散式、層次資料庫
    • 層次結構
      • 根DNS伺服器:13個根伺服器(群),世界各地
      • 頂級域(DNS)伺服器:com/org/edu/uk/cn,由世界各公司維護
      • 權威DNS伺服器:自己維護,或儲存在某服務提供商的一個權威伺服器中
    • 本地DNS伺服器:當主機發出DNS請求時,先發往本地伺服器,若無快取,轉發到DNS伺服器層次結構中的根DNS伺服器,迭代返回各層次DNS伺服器地址,最後才能直接查詢主機名對應的IP地址
    • 遞迴查詢、迭代查詢,通常從請求主機到本地DNS伺服器的查詢是遞迴的,其餘的查詢是迭代的
  • DNS快取
    • 允許本地DNS繞過查詢鏈中的根DNS伺服器
    • 有快取時間
  • DNS記錄和報文
    • 資源記錄(如果你在阿里的萬網上註冊一個域名,是需要這個配置的)
      • A:主機名-IP地址,如(relay1.bar.foo.com, 145.37.93.126, A)
      • NS:域名-DNS伺服器主機名, 如(foo.com, dns.foo.com , NS)
      • CNAME:別名-其他服務規範主機名,如( foo.com, relay1.bar.foo.com, CNAME)
      • MX:別名-郵件伺服器規範主機名(foo.com, mail.bar.foo.com, MX)
    • DNS報文
      • 查詢報文
      • 回答報文
    • 在DNS資料庫中插入記錄
      • 向某註冊登入機構註冊域名時(如萬網),需要提供基本和輔助權威DNS伺服器的名字和IP地址

安全性

  • DDoS(分散式拒絕服務)頻寬泛洪攻擊:向處理如.com域的域名伺服器傳送大量DNS請求,使得大部分合法請求無法獲得響應
  • DNS毒害(汙染):給你返回假的或不能用的IP地址。比如中國的『牆』。所以如果你能拿到google的當前IP地址(百度搜的到),手動在hosts裡配置,是可以做到直接訪問谷歌伺服器的。說到翻牆,一般大家都是用某種方法配置一臺海外伺服器當做中轉(國家一般不牆這種個人伺服器),來訪問牆外伺服器的,比如shadowsocks,shadowrocket之類的軟體可以用來配置中轉伺服器。
  • DNS反射攻擊:請求中冒充目標主機源地址,大量請求DNS伺服器,DNS就大量向源地址主機傳送回答,淹沒目標主機

P2P應用

P2P檔案分發

  • 在P2P檔案分發中,每個對等方能重新分發它所有的該檔案的任何部分,可以協助伺服器分發
  • P2P體系結構的擴充套件性
    • 最小分發時間,對等方N越大,P2P的最小分發時間越小
    • 對等方除了是位元的消費者外還是他們的重新分發者
  • BitTorrent(沒錯就是你們老用的種子)
    • P2P檔案共享協議,參與一個特定檔案分發的所有對等方結合被稱為一個洪流(torrent),在一個洪流的對等方彼此下載等長度的檔案塊,可以隨時離開洪流,也可繼續向其他對等方上載
    • Alice加入某洪流時,會在追蹤器裡進行註冊,週期性通知追蹤器它仍在洪流中。
    • 洪流隨機從參與對等方的結合中選擇一個子集,將他們的IP地址發給Alice,Alice維護這張對等方列表,檢視與所有對等方建立並行的TCP連線。
    • Alice週期詢問每個鄰近對等方(連上的)他們有的檔案塊列表,她隨時知道鄰居有哪些檔案塊
    • Alice使用最稀缺優先技術,首先請求那些鄰居們副本數量最少的塊,使該檔案塊迅速分發,以均衡每個塊在洪流中的副本數量
    • BitTorrent使用一種演算法,Alice優先從像她傳時速度最快的鄰居(4個,每10s修改一次)那裡獲取檔案塊。
    • 每過30s,Alice也要隨機選擇另外一個對等方Bob,向他傳送塊。若Alice是Bob最快的前四快,Bob也是Alice的前4快,則Bob和Alice互相傳送資料。
    • 每過30s換一個新的物件,互相交換資料(一報還一報),為了使對等方能夠找到彼此協調的速率上傳
  • BitTorrent其他機制和變種
    • 片、流水線、隨機優先選擇、殘局模型、反怠慢等機制
    • 變種:P2P直播流式應用,如PPLive和PPstream

分散式雜湊表(DHT)

  • 分散式、P2P版本的key-value資料庫,在大量對等方上儲存key-value值(鍵值對)
  • 分散式資料庫用來定位擁有某key-value的對等方,然後向查詢方返回該鍵值對
  • 環形DHT、對等方擾動(瞭解即可)

相關文章