計算機網絡(測試開發面試題總結)
協議層及其服務模型
Q:爲什麼要分層?
A:因爲Internet非常複雜。 對於複雜的系統,分層有以下幾點好處:
- 使其結構非常清晰,清楚地知道各層之間的關係;
- 模塊化會使系統的維護、升級更見簡化,改變某一層服務的具體實現對系統其他部分透明(不影響)。
But: 分層也有弊端,因爲每一層可能都要重複較低層的功能。
參考模型
- ISO/OSI七層參考模型:
層號 | 層的名稱 |
---|---|
7 | 應用層 |
6 | 表示層 |
5 | 會話層 |
4 | 傳輸層 |
3 | 網絡層 |
2 | 數據鏈路層 |
1 | 物理層 |
- TCP/IP參考模型:
層號 | 層的名稱 |
---|---|
5 | 應用層 |
4 | 傳輸層 |
3 | 網絡層 |
2 | 數據鏈路層 |
1 | 物理層 |
- 兩種參考模型:ISO/OSI是理論上的標準,TCP/IP是事實上的標準。
網際協議棧
- 應用層:支持網絡應用,報文傳送。
HTTP,FTP,SMTP,STTP
- 傳輸層:主機進程間數據段傳送。
TCP,UDP
- 網絡層:主機(源目標節點)間分組傳送。
IP協議,路由協議
- 數據鏈路層:相鄰網絡節點間的數據幀傳送。
PPP,Ethernet,……
- 物理層:物理介質上的比特傳送
應用層
網絡應用程序體系結構
1. 客戶機/服務器體系結構
- 服務器主機總是打開
- 服務器具有固定的、衆所周知的IP地址
- 客戶機具有動態的IP地址
- 客戶機之間不能通信
2. P2P體系結構
- 沒有總是打開的服務器
- 任意一對主機之間可以直接通信
- 對等方間歇連接,可以改變IP地址
3. 客戶機/服務器和P2P混合體繫結構
- 文件在對等方之間相互交換、文件搜索通過服務器
- 兩個聊天用戶之間是P2P、註冊和查詢通過服務器
HTTP協議
網頁由許多對象組成,每一個對象都被一個URL(統一資源定位符)尋址:
I. 什麼是HTTP協議?
HTTP,超文本傳輸協議,Web的應用層協議,採用客戶機/服務器的模式。協議的本質是對信息傳輸內容和順序的約定。HTTP協議就約定了客戶端與服務器之間通信的標準。
HTTP是無狀態協議,服務器不維護客戶先前的狀態信息。也就是說:如果客戶機第一次登錄並且成功後,再第二次登錄,服務器仍然不會知道當前請求的是哪個用戶。
II. HTTP連接
- 非持久HTTP連接:每個TCP連接只傳送一個對象,下載多個對象需要創建多個TCP連接,HTTP/1.0使用非持久HTTP連接。
- 持久HTTP連接:一個TCP連接可傳送多個對象,HTTP/1.1默認使用持久HTTP連接。
III. HTTP報文格式
a. HTTP請求報文:
sp:空格,cr:回車,lf:換行,URI:統一資源標識符
URI與URL的區別: URL是URI的子集,它們都定義了資源是什麼。但有區別:URI可以唯一標識該對象,而URL不僅可以唯一標識該元素,還可以定位到它
,所以叫統一資源定位符。舉例:身份證號是URI,身份證地址+姓名是URL。
HTTP請求報文示例:
- HTTP/1.0方法:
GET:從服務器獲取指定數據
POST:向服務器傳送指定數據
HEAD:服務器收到請求時返回響應消息只包含HEAD頭部
,不包含請求對象主體 - HTTP/1.1方法:
GET、POST 、HEAD
PUT:文件在實體主體中被上載到URL指定的路徑
DELETE:刪除URL字段指定的文件
GET方法 vs POST方法:
- 本質定義。GET是從服務器獲取數據,POST是把需要處理的數據提交到服務器上。
- 安全性。GET方法將請求的數據加在URL後,用 ? 分隔URL和請求數據,多個參數用 & 連接,地址欄中可見,所以非常不安全;POST方法要傳送的數據在請求包的實體中,地址欄中不可見,比GET更安全。
- 傳輸數據大小。由於GET方法中請求的數據在URL後面,而URL長度是有限制的,不能超過
2KB
,因此GET傳輸的數據較少並且有限;但POST對數據大小沒有限制
。 - 有害性。瀏覽器後退或者刷新,GET方法不會產生什麼動作,也就是不會修改服務器數據,但POST會重新提交數據給服務器。
b. HTTP響應報文:
HTTP響應狀態碼:
HTTP響應狀態碼位於HTTP響應報文的第一行,常見的狀態碼有:
- 200 OK 請求成功,響應消息返回所請求的對象
- 204 No Content 請求成功,但是沒有數據。一般用在:只需要返回是否成功的情況。
- 301 Moved Permanently 請求對象已永久遷移,新的URL 在響應首部用字段
Location:
指出,瀏覽器接受到帶Location頭的響應時,就會跳轉到相應的地址。 - 302 表示臨時重定向。請求對象暫時遷移,新的URL 在響應首部用字段
Location:
指出,瀏覽器接受到帶Location頭的響應時,就會跳轉到相應的地址。 - 400 Bad Request 該請求不能被服務器解讀
- 403 Forbidden 拒絕訪問。沒有權限訪問此網站。
- 404 Not Found 服務器上不存在所請求的對象
- 500 內部服務器錯誤。
- 502 Bad Gateway 錯誤的網關。可能是後端服務器tomcat沒有起來,應用服務的問題;也可能是連接超時,向服務器發送請求時由於服務器當前鏈接太多,導致服務器方面無法給於正常的響應。
- 505 HTTP Version Not Supported
Q: 什麼是無效鏈接?
無效鏈接即死鏈接。也就是那些不可到達
的鏈接。通俗地理解是以前可以通過點擊這個鏈接到達網站頁面,後續可能由於網站遷移、改版或操作不當等原因,使得鏈接指向的目標頁面不存在而無法訪問所遺留的鏈接,即稱爲死鏈接。訪問死鏈接時,一般會出現“抱歉,您所訪問的頁面不存在”的提示信息或者 404
狀態頁面。
IV. HTTP常見首部行:
請求報文:
- Host:請求的目標域名和端口號
- User-agent:向服務器發送瀏覽器的版本、系統、應用程序信息
Cookie
:當前域名下的cookie數據- Accept-language:向服務器聲明客戶機接收的語言版本
- Connection:告訴服務器採用什麼連接方式,例如Connection: Close 關閉默認的HTTP持久連接(用於HTTP/1.1)
響應報文:
- Connection
- Date:服務器發送資源時的服務器時間
- Server:HTTP服務器的應用程序信息
Location
:重定向,讓客戶端跳轉到新的URL進行訪問Last-Modified
:服務器發來的當前資源的最後一次修改時間
,如果下一次請求時,服務器上當前資源的修改時間比這個大(更晚),就返回新的資源內容。- Content-Length:消息實體的傳輸長度
- Content-Type:響應體的媒體資源類型(比如html類型,UTF-8編碼等等)
V. HTTP vs HTTPS
HTTP:是超文本傳輸協議,是以明文
方式傳輸數據的,沒有提供任何數據加密,並且不會驗證通信方的身份。
HTTPS:是安全套接字層超文本傳輸協議,是由SSL + HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,比HTTP更加安全。
注意: HTTPS協議並非是應用層的一種新的協議,只是在HTTP通信接口部分用SSL協議代替
而已。原本HTTP與TCP之間直接進行通信,但加入SSL後就先是HTTP與SSL進行通信,再是SSL與TCP進行通信。
HTTP與HTTPS的區別:
- HTTPS協議需要到CA(電子認證服務)申請證書。
- HTTP是超文本傳輸協議,HTTPS是更安全的SSL加密傳輸協議。
- 使用完全不同的連接方式,端口也不同,HTTP使用
80端口
,而HTTPS使用443端口
。 - HTTP連接很簡單,是無狀態的;HTTPS是由
SSL + HTTP
構建的可進行加密傳輸、身份認證的更安全的網絡協議。
VI. SSL協議
SSL:位於TCP/IP協議與各種應用層協議之間。
- SSL協議基本內容
- SSL記錄協議:建立在可靠傳輸協議的基礎之上(如TCP),爲高層協議提供數據封裝、壓縮、加密等基本功能。
- SSL握手協議:建立在SSL記錄協議之上,在數據傳輸之前,雙方進行身份驗證、協商加密算法、交換加密密鑰等。
- SSL協議原理
公鑰加密法
。客戶端向服務端索要公鑰,收到後用自己的私鑰加密信息,服務端收到密文後用自己的私鑰解密。
注意: 1999年把SSL協議標準化改名爲TLS(傳輸層安全協議),但這兩者其實是同一種協議,只是不同階段的稱呼而已。
Cookie和Session
- cookie:因爲HTTP請求是無狀態的,它不會認識當前的用戶是誰。cookie的出現就爲了解決這個問題。用戶第一次請求服務器時,服務器會返回一些數據(cookie)給瀏覽器,瀏覽器保存到本地,等下一次再請求服務器時就會
自動帶上本地的cookie數據
,服務器拿到這個數據就知道該請求用戶是誰了。但是cookie只能存少量數據,不同瀏覽器存儲大小不同,但一般不超過4KB。 - session:session和cookie的作用類似,都是爲了保存用戶相關的信息,但是不同的是:
session是保存在服務器上的
,cookie保存在本地瀏覽器
。保存在服務器上的session數據不容易被竊取,更加安全,但弊端是佔用了服務器的資源。
DNS:域名系統
I. DNS是什麼?
DNS,全稱爲Domain Name System,域名系統。是因特網的目錄服務,主機、路由器有多種標識符,包括主機名和IP地址。主機名是爲了方便人類記憶創建的,是拿給人看的,而IP地址纔是用於分組尋址的 ,因爲它是固定的長度:
32bit
,更加規範、路由器更加容易接受。所以我們需要一個轉換器,來將主機名轉換成IP地址。這時候DNS的作用就出現了,當然,DNS不僅只有這個功能。
- 從實體上來看:是一種由分層DNS服務器實現的分佈式數據庫
- 從協議上來看:是一種實現域名轉換的應用層協議
II. DNS提供什麼功能?
- 提供主機名到IP地址映射的查詢服務 (核心功能)
- 提供主機別名服務。 一個複雜的主機可能有一個
規範主機名
和多個主機別名,主機別名比規範主機名更容易記憶。DNS提供根據主機別名查找規範主機名的服務。 - 郵件服務器別名
- 負載分配。 對於被頻繁訪問的大型站點來說,它可能有多臺服務器,那這時主機與IP地址就不再是一一對應了,而是
一個主機名對應多個IP地址
。在大量的、連續多次訪問中,DNS通過旋轉IP地址來實現負載均衡。
當客戶機進行DNS請求時,DNS服務器便會把全部的IP地址放在響應報文中進行應答,但在不同的回答中它會旋轉這些IP地址的順序,客戶機總會向排在最前面的IP地址
發出請求。
III. DNS服務器:
- 根DNS服務器: 因特網上有13個根DNS服務器,其中大部分分佈在美洲。
- 頂級DNS服務器: 負責頂級域名
edu, gov, org, com
等和所有國家的頂級域名uk, fr, cn, jp
(edu教育機構域名,gov政府部門域名,org非盈利性的組織,com企業域名,uk英國,fr法國,cn中國,jp日本) - 權威DNS服務器: 在因特網上具有公共可訪問主機(如Web服務器和郵件服務器)的每個組織機構必須提供公共可訪問的DNS記錄,這些記錄將這些主機的名字映射爲IP地址。組織機構的權威DNS服務器負責保存這些DNS記錄。多數大學和公司維護它們的基本權威DNS服務器。
- 本地DNS服務器:
嚴格來說並不屬於DNS服務器的層次結構
,它起到一個代理的作用,將主機提交的請求轉發到層次結構中。
IV. DNS如何工作的?
DNS有兩種查詢方式:遞歸查詢
和迭代查詢
,從主機到本地DNS服務器是遞歸查詢,本地DNS服務器向另外三個服務器的查詢是迭代查詢。
我們以該圖爲例,來描述DNS的查詢過程,一共8條路徑(8份報文):
(主機cis.poly.edu想要查詢主機gaia.cs.umsaa.edu的IP地址)
- 主機
cis.poly.edu
向本地DNS服務器發送查詢報文 - 本地DNS服務器收到後向根DNS服務器
轉發
查詢報文 - 根DNS服務器注意到
edu
域名,返回負責edu的頂級DNS服務器的IP地址
- 本地DNS服務器根據收到的IP地址查詢頂級DNS服務器
- 頂級DNS服務器注意到
umass.edu
域名,返回負責umass.edu的權威DNS服務器的IP地址
。該權威DNS服務器是負責馬薩諸塞大學的dns.cs.umass.edu
- 本地DNS服務器根據收到的IP地址查詢權威DNS服務器dns.cs.umass.edu
- 權威DNS服務器dns.cs.umass.edu將使用
gaia.cs.umass.edu
的IP地址
作爲響應,返回給本地DNS服務器 - 本地DNS服務器將 包含所查詢IP地址的報文 返回給主機
cis.poly.edu
由此可見, 在迭代查詢過程中,被查詢的名字服務器回覆可以被查詢的名字服務器的IP地址。也就是說,它總是在告訴本地DNS服務器:“我不知道它的名字,但是你可以問服務器xxx”
。
傳輸層
傳輸層服務
在兩個不同的主機上運行的應用程序之間提供的邏輯通信。
傳輸層協議運行在端系統:
發送方:
將應用程序報文分成數據段
發送給網絡層
接收方:
將數據段重新整理成報文
發送給應用層
UDP協議
I. 什麼是UDP協議?
UDP:用戶數據報協議,是一種無連接
的傳輸協議。它只在IP數據報服務之上提供很少一點的功能:即 端口功能 和 差錯檢測功能 。所以它是“無修飾”、“不加渲染”、“盡最大努力”服務,因此可能會出現的問題:
- 丟失
- 報文失序
- UDP的
無連接
體現在:
- 接收者與發送者之間沒有握手;
- 每一個UDP數據段的處理獨立於其他的數據段(支持一對一、一對多、多對一的數據通信)
- 從UDP可能出現的問題看起來它很糟糕,那爲什麼它依然存在並使用着?(優點)
- 不需要建立連接,所以能減少延遲;
- 要求簡單,發送者與接收者之間不需要保持連接狀態;
- 很小的數據段首部;
- 沒有擁塞控制,會以儘可能快的速度傳輸
II. UDP用戶數據報
UDP用戶數據報包含兩個字段:UDP首部字段
+ 數據字段
。其中首部長度爲8個字節,包含:
16位源端口 | 16位目的端口 |
---|---|
16位UDP長度 | 16位UDP校驗和 |
- 端口:是應用層和傳輸層的服務接口
- UDP長度:
首部 + 數據
總長度 - UDP校驗和:僞首部、首部、數據 三部分的校驗和
- 僞首部:它並不是在UDP數據報中存在的有效數據,也不會被髮送,它的存在
僅是爲了計算校驗和
,所以叫做僞首部。它是提取了源IP地址、目的IP地址等字段構造的數據。
III. UDP的校驗和
發送方:
- 將數據段看作
16bit
的整數數列, - 校驗和:數據段內容相加、變反
- 將校驗和放在UDP首部的校驗和域中
接收方:
- 計算接收到的數據的校驗和
- 檢查該校驗和是否等於校驗和域中的值
注意,即使沒有檢查到錯誤,也有可能是錯的。差錯檢測並不是100%可靠,但是儘可能提供了大概率的檢錯能力。
計算校驗和示意圖:
TCP協議
I. 什麼是TCP?
TCP是面向連接的
、可靠的
、基於字節流的
傳輸協議。它提供的功能和特性:
- 一對一,即一個發送者、一個接收者
- 可靠按序的字節流
- 流水線:TCP擁塞控制和流量控制設置窗口大小
- 收發緩衝區
- 全雙工數據:同一個連接上的雙向數據流
- 面向連接:在數據交換前握手,初始化發送方和接收方的狀態
- 流量控制:發送方不會淹沒接收方
II. TCP報文段
第一行:
- 源端口和目的端口——各佔2字節。端口是應用層與傳輸層的服務接口。
第二行:
序號——佔4字節
。TCP連接傳輸的數據流中的每一個字節都會被編上一個序號。而這裏的序號字段指的是發送的數據段中第一個字節的序號。
第三行:
確認號——佔4字節
。是期望收到對方下一次發來的序號字段的值。
第四行:
- 數據偏移(即首部長度)——佔4bit。數據偏移的單位爲:32位的字(即以4字節爲單位,因爲首部字段中的一行就是4字節)
- 保留字段——佔6bit。保留爲今後可能的使用,目前設置爲0。
- 緊急URG(URGent)——當URG=1時,表明緊急指針字段(第五行的) 有效,說明此報文段中有非常緊急的數據,需要儘快傳送。
確認ACK
——當ACK=1時確認號(第三行的) 有效,當ACK=0時確認號無效。- 復位RST——當RST=1時,表明TCP連接中出現嚴重差錯(比如主機崩潰等),必須馬上釋放連接,重新建立新的連接。
同步SYN
——當SYN=1時,表明這是一個連接請求或者連接接受報文。終止FIN
——當FYN=1時,表明此報文段的發送方的數據已發送完畢,並且要求釋放連接。- 窗口字段——佔2字節。包含
滑動窗口
和擁塞窗口
,後面詳解。
第五行:
校驗和——佔2字節
。包括首部校驗和數據校驗兩部分。在計算校驗和的時候要在TCP報文段前面加上12字節的僞首部。緊急指針——佔2字節
。指出本報文段中緊急數據共有多少字節。(緊急數據放在本報文段數據的最前面)- 填充字段——爲了使整個首部的長度是4字節的整數倍。
TCP三次握手(3Q)
Q1: 爲什麼是三次握手,不是兩次?
防止失效的連接請求報文段又傳回到主機B。
假定是兩次握手:主機A發送一個連接請求給主機B,但是它在網絡節點滯留了,沒有收到確認,所以A就又發送了一個連接請求,這一次主機B收到了SYN確認,並且發送ACK確認號給主機A,於是它們倆建立了連接並傳輸數據。當數據傳輸完畢後,它們關閉了連接。而此時,失效的連接請求
可能又重新傳到了主機B,它以爲主機A又想跟它連接了,於是就發送ACK確認號,如果是兩次握手的話那麼連接就建成了,主機B於是開始一直等待主機A傳輸數據,但是事實上A並不知道它們在連接,所以會導致主機B浪費了它的資源。
Q2: 搜索敏感詞彙時,頁面被重置的原理
關鍵字檢測,針對明文或者base64等弱加密通訊內容,與準備好的敏感詞庫進行匹配,當發現敏感詞時,將服務器發回的SYN/ACK, 確認號:x+1
包改成SYN/ACK, 確認號:0
, 這代表TCP連接被重置,用戶便主動放棄了連接,提示連接失敗。讓用戶誤認爲服務器拒絕連接,而主動放棄繼續與服務器連接,自動阻斷記錄含有敏感詞的網頁。
Q3: 瀏覽器輸入域名發生了什麼?(Web頁面請求過程)
- 瀏覽器會從主機的
Hosts
文件中查看是否有該域名和IP地址的映射; - 如果Hosts文件沒有,瀏覽器會查看自己的
緩存
; - 當上面兩個方法都行不通時,只能去請求
DNS服務器
來獲取IP地址; - 獲取到IP地址後,建立
TCP連接
、三次握手; - 確認連接後發送一個
HTTP請求報文
; - 服務器處理請求,並對請求做出
響應
; - 瀏覽器收到服務器響應,得到
html
代碼; 渲染
頁面。(瀏覽器根據響應報文來解析CSS樣式、JS交互等等)
TCP四次揮手(3Q)
Q1: 發送FIN終止字段表明沒有數據可發了,那爲什麼還要發送指示數據的序號字段呢?
因爲當客戶機/服務器發送FIN字段後,它還希望收到服務器/客戶端發來的確認信息,那麼如何指定接收的那條確認信息的序號呢?就得先在發送FIN時就初始化本數據段的序號,而這個數據段裏面的數據部分是特殊的一字節。
Q2: 關閉連接時,爲什麼客戶端最後還要等2MSL的時間?
MSL(Maximum Segment Lifetime):報文段最大生存時間。是任何IP數據報在因特網中存活的最大時間,超過這個時間IP數據報就會被丟棄,TCP允許設置不同的MSL值。實際中的常用值一般是30s,1min,2min。等待2MSL有兩個好處:
- 保證TCP協議的全雙工連接能夠可靠關閉。
保證客戶端發送的最後一個ACK數據段能夠到達服務器
。因爲這個ACK有可能丟失,那麼服務器收不到確認號,它就會再發送一次FIN,而客戶機就能在這2MSL的時間中收到服務器傳來的報文,再給出ACK迴應,此時會重啓2MSL計時器。 - 保證本次連接的重複數據段從網絡中消失。防止在“三次握手”中提到的“失效的連接請求段又重新回到主機B”出現在本連接中。因爲在傳輸過程中有可能存在
滯留的數據段
,如果客戶機發送完最後一個ACK就直接關閉了,然後立馬開啓一個新的連接,而如果這個新連接的端口號恰好和剛剛是一樣的,那麼當建立了新連接之後,上一次連接中滯留的數據段可能會再到達服務器,而服務器就會以爲它是這一次連接中發送的數據,然而並不是。所以需要等待2MSL,使本次連接網絡中滯留的數據段全部消失。
Q3: 爲什麼是四次揮手?
從上面兩幅圖中可以看出,四次揮手和三次握手最大的區別在於中間部分,建立連接
時服務器端發送確認號是把SYN和ACK放在一個數據段中發送,而關閉連接
時ACK和FIN是分成兩個數據段傳送的。所以關閉連接就比建立連接多出一個數據報。那爲什麼關閉連接時不能也把ACK和FIN合在一起傳送呢?原因是,當客戶機發起關閉連接時,僅僅表示它不再傳送數據了,但它仍可以接收數據,而這時服務器可以立即關閉,也可以在發送剩餘的數據之後再傳送FIN字段來關閉,所以說ACK和FIN往往需要分開發送。
TCP擁塞控制(1Q)
先注意!擁塞控制 ≠ 流量控制
-
什麼是流量控制?
TCP連接的接收方有一個接收緩衝區
。應用程序可能從這個緩衝區讀出數據很慢
,因此需要保證發送速率和接收應用程序的提取速率匹配
,發送方不能發送的太多太快,讓接收緩衝區溢出。流量控制使用接收窗口(即接收緩衝區的剩餘空間),接收方在報文段中宣告接收窗口的剩餘空間,發送方需要限制沒有被確認的數據不能超過接收窗口,從而保證接收緩衝區不溢出
。
滑動窗口:接收
數據端使用的窗口大小,用來告知發送端它的緩存大小,以此可以控制發送端發送數據的大小,從而達到流量控制的目的。(由於TCP是全雙工鏈接,因此發送方和接收方都有滑動窗口) -
什麼是擁塞控制?
從信息角度看,擁塞是:“太多源主機發送太多的數據,速度太快以至於網絡來不及處理”。表現爲:丟失分組
(路由器的緩衝區溢出)、長延遲
(在路由器的緩衝區排隊)
擁塞窗口:發送
數據端使用的窗口大小,擁塞窗口不代表緩存,擁塞窗口指某一源端數據流在一個RTT內可以最多發送的數據包數
。
擁塞控制是防止過多的數據注入網絡
中,這樣可以使網絡中的路由器或鏈路
不致過載。擁塞控制是一個全局性的過程,和流量控制不同,流量控制指點對點通信量
的控制。
TCP的四種擁塞控制算法:
I. 慢啓動:
當主機開始發送數據時,如果立即將大量數據字節注入到網絡,那麼就有可能因爲不清楚當前網絡的負荷情況而引起網絡阻塞。所以,最好的方法是先探測一下
,即由小到大逐漸增大發送窗口
,也就是說,由小到大逐漸增大擁塞窗口數值。通常在剛剛發送報文段時,先把擁塞窗口cwnd設置爲 1 個最大報文段MSS的數值。而在每收到一個新的報文段的確認後,把擁塞窗口增加至多一個MSS的數值(1個確認報文對應2個MSS,即:呈指數增長)。用這樣的方法逐步增大發送方的擁塞窗口cwnd,可以使分組注入到網絡的速率更加合理。
注意:慢開始當中的“慢”並不是指cwnd的增長速率慢,而是在TCP開始發送報文段時先設置cwnd = 1
,使得發送方在開始時只發送一個報文段。
II. 擁塞避免:
讓擁塞窗口cwnd緩慢的增大
,即每經過一個往返時間RTT就把發送方的擁塞窗口cwnd + 1
,而不是加倍,即:呈線性增長。這樣擁塞窗口cwnd按線性規律緩慢的增長,比慢開始算法的擁塞窗口增長速率緩慢的多。
AIMD(加法增大乘法減小):
- 加法增大:當網絡頻發出現超時情況時,ssthresh就下降的很快,爲了減少注入到網絡當中的分組數,在執行
擁塞避免
算法時,使擁塞窗口緩慢的增大
,以防止網絡過早出現擁塞。 - 乘法減小:無論在慢啓動階段還是在擁塞避免階段,只要網絡出現
超時
,就將cwnd置爲1
,sthresh置爲cwnd的一半
,然後開始執行慢啓動
算法。
III. 快重傳:
所謂快重傳,就是使發送方儘快進行重傳
,而不是等超時重傳計時器超時再重傳。
- 要求接收方不要等待自己發送數據時才進行捎帶確認,而是要立即發送確認;
- 即使收到了
失序
的報文段也要立即發出對已收到的報文段的重複確認。 - 發送方一旦收到
3個連續的重複確認
,就將相應的報文段立即重傳,而不是等該報文段的超時重傳計時器超時再重傳。 - 對於個別丟失的報文段,發送方不會出現超時重傳,也就不會誤認爲出現了擁塞(進而降低擁塞窗口cwnd爲1)。使用快重傳可以使整個網絡的
吞吐量提高
約20%。
IV. 快恢復:
發送方一旦收到3個重複確認,就知道現在只是丟失了個別的報文段
。於是不啓動
慢開始算法,而執行快恢復算法;發送方將慢開始門限ssthresh
值和擁塞窗口cwnd
值調整爲當前窗口的一半
;開始執行擁塞避免算法。(閾值ssthresh的作用是:當下一次出現超時,慢啓動到閾值後開始啓動擁塞避免。)
也有的快恢復實現是把快恢復開始時的擁塞窗口
cwnd值再增大一些, 即等於新的ssthresh + 3
。因爲:
- 既然發送方收到3個重複的確認,就表明有3個數據報文段已經
離開了網絡
; - 這3個報文段
不再消耗網絡資源
而是停留在接收方的接收緩存中; - 可見現在網絡中不是堆積了報文段而是減少了3個報文段。因此可以適當把擁塞窗口擴大些。
對於TCP Tahoe
版本:(已經廢棄)
- 無論
超時
還是收到三個重複的確認
,都直接將擁塞窗口置爲1個 MSS
。(僅有慢啓動和擁塞避免)
對於TCP Reno
版本:
- 當
超時
事件發生時:- 擁塞窗口立即設置爲
1個 MSS
; - 窗口開始
指數增長
(進入慢啓動); - 到達一個閾值後再
線性增長
(擁塞避免)
- 擁塞窗口立即設置爲
收到三個重複的確認
時:- 擁塞窗口
減半+3
(快恢復); - 然後,窗口
線性增長
(擁塞避免)
- 擁塞窗口
Q: 什麼時候應該使用TCP?什麼時候應該使用UDP?
- TCP:當對網絡通訊
質量
有要求的時候,比如:整個數據要準確無誤
的傳遞給對方,這往往用於一些要求可靠的應用,比如HTTP、HTTPS、FTP等傳輸文件的協議,POP、SMTP等郵件傳輸的協議。 在日常生活中,常見使用TCP協議的應用如下:瀏覽器、採用FTP的Outlook,採用SSH的QQ文件傳輸…… - UDP:當對網絡通訊
質量要求不高
的時候,要求網絡通訊速度能儘量的快
,這時就可以使用UDP。比如,日常生活中,常見使用UDP協議的應用如下: QQ語音、QQ視頻……
網絡層
網絡層功能
發送方:
傳輸報文段到接收方主機
接收方:
將收到的報文段遞交給傳輸層
在每個主機、路由器上都需要運行網絡層協議。路由器會檢查通過它的所有IP數據報的頭部字段,然後根據目的IP地址對數據報進行轉發。
網絡層提供的兩個主要功能:
- 轉發(forwarding): 將分組從路由器的
輸入端口
轉移到正確的路由器輸出端口
- 路由(routing): 確定分組從
發送方
傳輸到接收方
(目的主機)所經過的路徑(或路由)
網際IP協議(1Q)
I. 什麼是IP協議?
網際協議或互聯網協議(Internet Protocol,IP)是用於報文交換網絡的一種面向數據的協議,是網絡層通信的標準協議,它負責提供基本的數據段傳送功能,
讓每一塊數據段都能夠到達目的主機,但不檢查是否被正確接收
。
II. IP數據報格式
Q: TCP和UDP用一個端口發送信息是否衝突 ?
不會衝突。因爲在IP數據報首部有“高層”
字段,它定義了傳輸層的協議。而客戶機和服務器會根據IP數據報和TCP/UDP報文段中提供的:傳輸協議、源IP地址、目的IP地址、源端口、目的端口
來判別接收者。
III. IP 地址
IP地址:分配給主機或路由器接口的標識符。
IP地址有兩種:IPV4和IPV6
- IPV4:32個二進制位長(4字節),常用點分十進制表示
- IPV6:128個二進制位長(16字節)常用冒號分隔表示
IV. 傳統的IP地址分類
一些特殊的IP地址:
- 本地地址
127.0.0.1--127.255.255.254
這是預留的一組IP地址,主要是用來識別主機本身的地址。也叫做“localhost”,一般用來測試。 - 私有地址
10.x.x.x, 172.16.x.x--172.31.x.x, 192.168.x.x
這三個地址段被稱爲私有IP地址段,也就是局域網所使用的地址段,在公網上不能被路由。 0.0.0.0
這個地址嚴格上來說不是真正意義上的IP地址。主要是用來標識不清楚的網絡和主機的。系統遇到無法識別的網絡或主機的時候會統一的歸納到這個地址255.255.255.255
這個地址是受限的廣播地址。主要指一個網段內的所有主機。
V. 劃分子網
網絡號相同的IP地址屬於同一個網絡。而網絡還可以劃分爲若干子網。劃分子網的方法是:從主機號借用若干個比特作爲子網號,剩下的主機位爲主機號。
子網掩碼: 子網號字段長度是可變的,因此,爲了確定子網地址,IP協議提供了子網掩碼的概念 。
子網掩碼用來確定網絡地址(包括網絡號和子網號)和主機地址的長度
。子網掩碼長爲32位比特,其中的1
對應於IP地址中的網絡號和子網號
,而子網掩碼中的0
對應於主機號
。
路由協議
- RIP: 路由信息協議
是一種比較簡單的內部網關協議
,主要用於規模較小的網絡,比如校園網以及結構較簡單的地區性網絡。對於更爲複雜的環境和大型網絡,一般不使用RIP。RIP是一種基於距離矢量(DV)算法的協議,它通過UDP報文進行路由信息的交換,使用的端口號爲520。其使用跳數來衡量到達目的地址的距離,爲了限制收斂時間,RIP規定度量值(該值等於從本網絡到達目的網絡間的路由器數量)爲0到15
之間的整數,大於等於16的跳數將會定義爲網絡或主機不可達,因此RIP不適合大型網絡。 - OSPF: 開放最短路徑優先協議
屬於鏈路狀態路由協議
,OSPF提出了“區域(area)”的概念,每個區域中所有路由器維護着一個相同的鏈路狀態數據庫 (LSDB),其使用鏈路狀態數據庫,通過最短生成樹算法(SPF算法) 計算得到路由表:存放從源節點到每個目的節點的最低費用路徑上的下一跳節點。即指出對於發往某個目的節點的分組,從該節點發出後的下一個節點
。因此其收斂速度較快。目前OSPF協議在各種網絡中廣泛部署,目前針對IPv4協議使用的是OSPF Version 2(RFC2328);針對IPv6協議使用OSPF Version 3(RFC2740)。 - IGRP: 內部網關路由協議 (Cisco 所有)
屬於Cisco的私有協議,最大跳數默認爲100
。
數據鏈路層(2Q)
I. 數據鏈路層的職責
數據鏈路層是將數據報
從一個節點
傳送到與該節點有直接的物理鏈路相連
的另一個節點。
另,數據報可以在不同的鏈路
上,通過不同的鏈路層協議
發送。每個鏈路層協議提供不同的服務:可以提供/也可以不提供可靠數據傳輸服務。
II. 鏈路層協議
-
Ethernet協議
以太網
是使用最廣泛的局域網技術。由於其簡單、成本低、可擴展性強、與IP網能夠很好地結合等特點,以太網技術的應用正從企業內部網絡向公用電信網領域邁進。以太網接入是指將以太網技術與綜合佈線相結合,作爲公用電信網的接入網,直接向用戶提供基於IP的多種業務的傳送通道。以太網技術的實質是一種二層的媒質訪問控制技術,可以在五類線上傳送,也可以與其它接入媒質相結合,形成多種寬帶接入技術。以太網與電話銅纜上的VDSL相結合,形成EoVDSL技術;與無源光網絡相結合,產生EPON技術;在無線環境中,發展爲WLAN技術。 -
frame relay協議
幀中繼
(frame relay)是於1992年興起的一種新的公用數據網通訊協議,1994年開始獲得迅速發展。幀中繼是一種有效的數據傳輸技術,它可以在一對一或者一對多的應用中快速而低廉
的傳輸數字信息。它可以使用於語音、數據通信,既可用於局域網(LAN)也可用於廣域網(WAN)的通信。每個幀中繼用戶將得到一個接到幀中繼節點的專線。幀中繼網絡對於端用戶來說,它通過一條經常改變且對用戶不可見的信道來處理和其他用戶間的數據傳輸。 -
IEEE 802協議
IEEE 802 在保持以太網原有優點的基礎上,引入或增強了自愈保護、優先級和公平算法、OAM等功能,是以太網技術的重要創新。 -
PPP協議
點對點協議
(Point to Point Protocol,PPP)爲在點對點連接上傳輸多協議數據包提供了一個標準方法。PPP 最初設計是爲兩個對等節點之間的 IP 流量傳輸提供一種封裝協議。在 TCP-IP 協議集中它是一種用來同步調製連接的數據鏈路層協議(OSI模式中的第二層),替代了原來非標準的第二層協議,即 SLIP。 -
ARP協議 (在OSI模型中ARP協議屬於鏈路層;而在TCP/IP模型中,ARP協議屬於網絡層。)
地址解析協議
,即ARP(Address Resolution Protocol),是根據IP地址
獲取物理地址
的一個TCP/IP協議。主機發送信息時將包含目標IP地址的ARP請求廣播到局域網絡上的所有主機,並接收返回消息,以此確定目標的物理地址;收到返回消息後將該IP地址和物理地址
存入本機ARP緩存
中並保留一定時間,下次請求時直接查詢ARP緩存以節約資源。地址解析協議是建立在網絡中各個主機互相信任
的基礎上的,局域網絡上的主機可以自主發送ARP應答消息,其他主機收到應答報文時不會檢測該報文的真實性就會將其記入本機ARP緩存;由此攻擊者就可以向某一主機發送僞ARP應答報文,使其發送的信息無法到達預期的主機或到達錯誤的主機,這就構成了一個ARP欺騙。ARP命令可用於查詢本機ARP緩存中IP地址和MAC地址的對應關係、添加或刪除靜態對應關係等。相關協議有RARP、代理ARP。NDP用於在IPv6中代替地址解析協議。- ARP分層的位置是TCP/IP的網絡層
- ARP報文是由以太網幀進行封裝傳輸的,沒有封裝進IP包
- 實際上,對網絡接口層的以太網幀來講,它們同樣是幀的上層協議,當收到以太幀時,根據幀的協議字段判斷是送到ARP還是IP
- 之所以不把它放在數據鏈路層,是因爲它並不具備數據鏈路層的功能,它的作用是
爲數據鏈路層提供接收方的幀地址
-
RARP協議
反向地址轉換協議
(RARP:Reverse Address Resolution Protocol)RARP允許局域網的物理機器從網關服務器的 ARP 表或者緩存上請求其 IP 地址
。網絡管理員在局域網網關路由器裏創建一個表以映射物理地址(MAC)和與其對應的 IP 地址。當設置一臺新的機器時,其 RARP 客戶機程序需要向路由器上的 RARP 服務器請求相應的 IP 地址。假設在路由表中已經設置了一個記錄,RARP 服務器將會返回 IP 地址給機器,此機器就會存儲起來以便日後使用。
Q1: APP鏈接點進後加載一段時間後仍無內容,分析可能的情況
- 網絡信號差
- DNS解析慢
- 建立鏈接慢
當我們獲取到服務器IP後,客戶端和服務器建立連接,這個鏈接的速度與質量取決於線路的優劣
。最常見的問題就是跨線路訪問,地理位置相差很遠的訪問,中繼網絡異常等。排查方法:如果ping一個網址,存在大量丟包或者很高延遲(國內ping延遲超過50ms),就會導致訪問的連接線路異常。 - 服務器響應慢
當一個服務器健康運行,這個時間幾乎可忽略,但是如果服務器不那麼健康,比如CPU,內存,磁盤,帶寬
,只要一個達到瓶頸的服務器就是亞健康,將直接影響訪問速度。排查方法:如果此前訪問很快的網站訪問突然變慢了,在網絡無問題的情況下,雲主機可查看內部資源使用情況
;虛擬主機則可通過執行簡單命令或直接訪問圖片來判斷服務器資源佔用情況。 - 本身問題,加載速度慢
加載時間慢可以說是最明顯、最大程度
影響訪問速度的因素了。當用戶訪問一個網站時候,服務器會向客戶端發送大量的內容,這會佔用大量的服務器帶寬。帶寬就是最常見也是最直接影響打開的因素。
Q2: 什麼是防火牆?
防火牆對流經它的網絡通信進行掃描,這樣能夠過濾掉一些攻擊
,以免其在目標計算機上被執行。防火牆還可以關閉不使用的端口
。而且它還能禁止特定端口的流出通信
,封鎖特洛伊木馬。最後,它可以禁止來自特殊站點的訪問
,從而防止來自不明入侵者的所有通信。