1 常用的計算機網絡體系結構
1.1 OSI體系結構
1、為了使不同體系結構的計算機網絡都能夠互聯,國際標準化組織於1977年成立了專門機構研究該問題,不久他們就提出了一個試圖使各種計算機在世界範圍內都能夠互連成網的標準框架,也就是著名的“開放系統互連參考模型”,簡稱為OSI,OSI體系結構有時候我們也稱之為OSI模型。
2、OSI是一個七層協議的體系結構:從下往上依次是物理層、數據鏈路層、網絡層、運輸層、會話層、表示層、應用層。
3、OSI試圖達到一種理想境界,即全球計算機網絡都遵循這個統一標準,因而全球的計算機將能夠很方便地進行互連和交換數據。在20世紀80年代,許多大公司甚至一些國家的政府機構紛紛表示支持OSI。當時看來似乎在不久的將來全世界一定會按照OSI制定的標準來構造自己的計算機網絡。
4、然而到了20世紀90年代初期,雖然整套的OSI國際標準都已經制定出來了,但由於基於TCP/IP 的互聯網已搶先在全球相當大的範圍成功地運行了,而與此同時卻幾乎找不到有什麼廠家生產出符合OSI標準的商用產品。因此人們得出這樣的結論:OSI 只獲得了一些理論研究的成果,但在市場化方面則事與願違地失敗了。
現今規模最大的、覆蓋全球的、基於TCP/IP的互聯網並未使用OSI標準。
5、OSI失敗的原因可歸納為:
- OSI的專家們缺乏實際經驗,他們在完成OSI標準時缺乏商業驅動力;
- OSI的協議實現起來過分複雜,而且運行效率很低;
- OSI標準的制定週期太長,因而使得按OSI標準生產的設備無法及時進入市場;
- OSI的層次劃分不太合理,有些功能在多個層次中重複出現。
6、OSI體系結構是法律上的國際標準, TCP/IP體系結構是事實上的國際標準
1.2 具有五層協議的體系結構
1、TCP/IP是一個四層的體系結構,它包含應用層、運輸層、網際層和網絡接口層(用網際層這個名字是強調這一層是為了解決不同網絡的互連問題)。
2、OSI的七層協議體系結構概念清楚,理論也比較完整,但是太過於複雜不實用。TCP/IP體系結構不同,但是現在卻得到了非常廣泛的應用。
3、在學習計算機網絡的原理時往往採取折中的辦法,即綜合OSI和TCP/IP 的優點,採用一種只有五層協議的體系結構,這樣既簡潔又能將概念闡述清楚。有時為了方便,也可把最底下兩層稱為網絡接口層。
4、下面我們結合互聯網的情況,自上而下地,非常簡要的介紹一下各層的主要功能。
- 應用層(application layer)
- 應用層是體系結構中的最高層。應用層的任務是通過應用進程間的交互來完成特定網絡應用。應用層協議定義的是應用進程間通信和交互的規則。這裏的進程就是指主機中正在運行的程序。對於不同的網絡應用需要有不同的應用層協議。在互聯網中的應用層協議很多,如域名系統DNS,支持萬維網應用的 HTTP 協議,支持電子郵件的SMTP協議,等等。我們把應用層交互的數據單元稱為報文(message)。
- 運輸層(transport layer)
- 運輸層的任務就是負責向兩台主機中進程之間的通信提供通用的數據傳輸服務。
- 運輸層主要使用以下兩種協議:
- 傳輸控制協議TCP (Transmission Control Protocol):提供面向連接的、可靠的數據傳輸服務
- 用户數據報協議UDP (User Datagram Protocol):提供無連接的、盡最大努力(best-effort)的數據傳輸服務(不保證數據傳輸的可靠性)
- TCP和UDP協議都有固定的格式,數據在經過運輸層時會根據所選擇的運輸協議在應用層傳遞過來的數據基礎上加上對應協議的頭部。
- 網絡層(network layer)
- 主要作用是實現兩個網絡系統之間的數據透明傳送,具體包括路由選擇,擁塞控制和網際互連等。
- 在發送數據時,網絡層把運輸層產生的報文段或用户數據報封裝成分組或包進行傳送。在TCP/IP體系中,由於網絡層使用IP協議,因此分組也叫做IP數據報,簡稱為數據報。
- 數據在經過網絡層時會加上IP協議的頭部
- 數據鏈路層(data link layer)
- 數據鏈路層常簡稱為鏈路層。我們知道,兩台主機之間的數據傳輸,總是在一段一段的鏈路上傳送的,這就需要使用專門的鏈路層的協議。在兩個相鄰結點之間傳送數據時,數據鏈路層將網絡層交下來的IP數據報組裝成幀(framing),在兩個相鄰結點間的鏈路上傳送幀(frame)。每一幀包括數據和必要的控制信息(如同步信息、地址信息、差錯控制等)。
- 物理層(physical layer)
- 利用傳輸介質為數據鏈路層提供物理連接,實現比特流的透明傳輸。
- 物理層上所傳輸數據的單位是比特。
2 物理層
2.1 物理層的基本概念
1、物理層主要解決在各種傳輸媒體上傳輸比特0和1的問題,進而給數據鏈路層提供透明傳輸比特流的服務
2、由於傳輸媒體的種類太多(例如同軸電纜、光纖、無線電波等),物理連接方式也有很多例如點對點連接、廣播連接等,因此物理層協議種類也比較多。但是物理層為了解決在各種傳輸媒體上傳輸比特0和1的問題,無論是那種物理層協議都需要滿足主以下四個任務:
2.2 傳輸媒體
1、導引型傳輸媒體:電磁波被導引沿着固體媒體傳播
-
同軸電纜
- 可以從上圖看出同軸電纜的各層都是共圓心的,也就是同軸心的
- 同軸電纜有兩種:
- 基帶同軸電纜:數字傳輸,過去用於局域網
- 寬帶同軸電纜:模擬傳輸,目前主要用於有線電視
- 同軸電纜價格較貴且佈線不夠靈活和方便,隨着集線器的出現,在局域網領域基本上都是採用雙絞線作為傳輸媒體
-
雙絞線
-
雙絞線是最常用的傳輸媒體,把兩根互相絕緣的銅導線放在一起,然後按照一定規則絞合起來就構成了雙絞線。
-
常用的雙絞線包含八根銅導線,每兩根絞合成一條雙絞線,絞合組合如下:
- 藍色線和藍白雙色線絞合
- 橙色線和橙白雙色線絞合
- 綠色線和綠白雙色線絞合
- 棕色先和棕白雙色線絞合
-
絞合的作用:
- 抵禦部分來自外界的電磁干擾
- 減少相鄰導線的電磁干擾
-
根據有無屏蔽層,雙絞線分為:無屏蔽雙絞線和屏蔽雙絞線
-
無屏蔽
-
屏蔽雙絞線:在雙絞線與外層絕緣封套之間有一個金屬屏蔽層
-
-
常用的絞合線類別、帶寬及典型應用
-
-
光纖
- 光纖的優點
- 通信容量大(25000~30000GHz的帶寬)
- 傳輸損耗小,遠距離傳輸時更加經濟。
- 抗雷電和電磁干擾性能好。這在大電流脈衝干擾的環境下尤為重要。
- 無串音干擾,保密性好,不易被竊聽。
- 體積小,重量輕。
- 光纖的優點
2、非導引型傳輸媒體:非導引型傳輸媒體是指自由空間
- 無線電波
- 微波
- 紅外線
- 可見光
3 數據鏈路層
3.1 數據鏈路層概述
1、數據鏈路層在網絡體系結構中所處的地位
如下圖所示:主機H1給主機H2發送數據,中間要經過三個路由器、電話網、局域網、廣域網等多種網絡。
從五層協議原理體系結構的角度來看,主機應該具有體系結構中的各個層次,而路由器只需要具有體系結構中的網絡層、數據鏈路層、物理層。網絡中的各個設備通過傳輸媒體進行互連,主機H1將需要發送的數據逐層封裝後通過物理層將構成數據包的各個比特轉換為電信號發送到傳輸媒體,數據包進入到路由器後,從下網上逐層解封到網絡層,路由器根據數據包的目的網絡地址和自身的轉發表確定數據包的轉發端口,然後從網絡層向下逐層封裝數據包,最後通過物理層將數據包發送到傳輸媒體,最後到達主機H2,主機H2在接收到數據包後再逐層解封。
當我們研究數據鏈路層時,我們可以只關心數據鏈路層,而不考慮其他各層。我們可以想象,數據只在數據鏈路層從左至右沿水平方向傳送。從數據鏈路層來看,主機H1到主機H2 的通信可以看作是在4段不同的鏈路上的通信所組成的。
所謂的鏈路(Link)就是從一個結點到相鄰結點的一段物理線路,而中間沒有任何其他的交換結點。要在鏈路上傳輸數據,僅有鏈路還不夠,還需要一些通信協議來控制這些數據的傳輸,如果把實現這些協議的硬件和軟件加到鏈路上就構成了數據鏈路(Data Link)
在數據鏈路上傳輸的數據包,又稱為幀。(數據鏈路層是以幀作為單位傳輸和處理的)
注意:結點就是網絡中的一台主機。
數據鏈路層的協議有很多種,但是有三個基本問題是共同的。這三個基本問題就是:封裝成幀、透明傳輸和差錯檢測。
3.2 封裝成幀
封裝成幀是指數據鏈路層給上層交付的協議數據單元添加幀頭和幀尾使之成為幀。
-
幀頭和幀尾中包含有重要的控制信息
-
幀頭和幀尾的作用之一就是幀定界
-
例如:PPP幀的第一個字節和最後一個字節就是幀定界,通過這兩個字節就能夠從物理層交付的比特流中提取出一個一個的幀。
-
-
並不是每種數據鏈路層協議的幀都包含有幀定界標誌,例如MAC幀在幀頭和幀尾中是沒有包含幀定界的標誌的, 那麼接收方是如何從物理層交付的比特流中提取出一個個的以太網幀的呢?
-
第一步:數據鏈路層封裝好MAC幀,將其交付給物理層
-
第二步:物理層在MAC幀的前面添加8字節的前導碼,前導碼的前7個字節為前同步碼,其作用是使接收方的時鐘同步,之後的1個字節為幀開始定界符,表明其後緊跟着的就是MAC幀。
-
3.3 透明傳輸
1、透明傳輸是指數據鏈路層對上層交付的傳輸數據沒有任何限制,就好像數據鏈路層不存在一樣。
- 當數據幀中的數據是幀定界標誌時,發送端的數據鏈路層該如何處理呢?
-
當物理鏈路提供的是面向字符的傳輸服務時(物理鏈路以字符為單位傳輸數據):數據鏈路層在交付數據給物理層時,對幀進行掃描,首先掃描到SOH,然後每掃描到一個SOH或者EOT就在前面加轉義字符ESC,直至掃描到最後一個EOT,這種方式稱之為:字節填充(byte stuffing)或字符填充(character stuffing)
接收端的數據鏈路層在將數據送往網絡層之前刪除插入的轉義字符
-
當物理鏈路提供的是面向比特的傳輸服務時(物理鏈路以比特為單位傳輸數據):在數據發送前採用零比特填充法:對數據進行掃描,每5個連續的比特1後面就插入1個比特0考研真題:
-
2、為了提高幀的傳輸效率,應當使幀的數據部分的長度儘可能大些。
3、考慮到差錯控制等多種因素,每一種數據鏈路層協議都規定了幀的數據部分的長度上限,即最大傳送單元MTU(Maximum Transfer Unit)。
3.4 差錯校驗
1、實際的通信鏈路都不是理想的,比特流在傳輸過程中由於受到各種干擾可能會產生差錯: 1可能會變成0,而0也可能變成1。這稱為比特差錯,或者稱為誤碼。
2、一段時間內,傳輸錯誤的比特佔所傳輸比特總數的比率稱為誤碼率(Bit Error Rate)
3、接收方是如何知道數據在傳輸的過程中出現差錯了呢?使用差錯檢測碼來檢測數據在傳輸過程中是否產生了比特差錯,是數據鏈路層所要解決的重要問題之一。
4、在封裝好的幀中利用若干個字節表示幀校驗序列FCS字段。FCS :Frame Check Sequence(幀校驗序列)。FCS字段由一些差錯校驗算法計算得出,常用的校驗算法為:循環冗餘校驗CRC(Cyclic Redundancy Check)。
5、接收方在接收到數據後計算出一個FCS,然後將計算得出的FCS與接收到的數據幀中的FCS進行比較。
由於判斷FCS是否正確只能檢測出幀在傳輸過程中出現了差錯,但並不能定位錯誤,因此無法糾正錯誤。接收方可以通過檢錯重傳方式來糾正傳輸中的差錯,或者僅僅是丟棄檢測到差錯的幀,這取決於數據鏈路層向其上層提供的是可靠傳輸服務還是不可靠傳輸服務。
3.4 以太網
1、以太網概念
-
以太網是一種計算機局域網技術。IEEE(電氣與電子工程師協會:Institute of Electrical and Electronics Engineers)組織的IEEE 802.3標準制定了以太網的技術標準,它規定了包括物理層的連線、電子信號和介質訪問層協議的內容。以太網是應用最普遍的局域網技術,取代了其他局域網技術如令牌環、FDDI和ARCNET。
-
以太網是一種有線系統,最初使用同軸電纜進行數據傳輸,後來發展到使用雙絞線和光纖並延續至今。
2、以太網的兩個標準
-
1980年9月,DEC公司、英特爾(Intel)公司和施樂公司聯合提出了10 Mbit/s 以太網規約的第一個版本DIX V1(DIX是這三個公司名稱的縮寫)。
-
1982年又修改為第二版規約(實際上也就是最後的版本),即DIX Ethernet V2,成為世界上第一個局域網產品的規約。
-
1983年,IEEE 802委員會的802.3工作組制定了第一個IEEE的以太網標準IEEE 802.3[W-IEEE802.3],數據率為10 Mbit/s。以太網的兩個標準 DIX Ethernet V2與IEEE的802.3標準只有很小的差別,因此很多人也常把802.3局域網簡稱為”以太網”。
-
IEEE 802委員會的介紹(引用自《計算機網絡-謝希仁》)
-
IEEE 802.3 定義了以太網的物理層和數據鏈路層的介質訪問控制部分,其中物理層由兩個組件組成:線纜和設備,數據鏈路層可以分為兩部分:邏輯鏈路控制(LLC)、介質訪問控制(MAC)。
-
物理層
-
線纜:以太網的通信線纜由最先的同軸電纜發展到今天的雙絞線和光纖。
-
雙絞線兩端配有RJ45八針連接器,這種八針連接器用於在半雙工和全雙工模式下進行數據的發送和接收。
-
半雙工模式:數據一次沿一個方向傳輸
-
全雙工模式:數據沿兩個方向傳輸,以太網的全雙工模式可以通過使用一對雙絞線實現
-
-
光纖線纜:光纖線纜使用玻璃光纖或塑料光纖作為光脈衝的傳輸通道來傳輸數據
-
光纖電纜可以根據實際需求使用不同類型的連接器:SFP連接器、SC連接器
-
-
設備:以太網設備由計算機、打印機等具有網絡接口卡的設備所組成,常用的以太網設備有路由 器、交換機、網橋,而工作在數據鏈路層上的設備為交換機、網橋,路由器工作在五層體系結構中的網絡層。
-
-
數據鏈路層
- 邏輯鏈路控制LLC:為網絡層提供統一的接口以便數據在設備間傳輸。很多廠商生產的適配器上就僅裝有 MAC 協議而沒有 LLC 協議。
- 介質訪問控制MAC:使用分配給網絡接口卡的硬件地址來標識特定的計算機或設備接口,通過這種方法來表示數據傳輸的源地址和目的地址。
3.5 以太網的MAC層
1、MAC層的硬件地址
-
MAC地址 (英語:Media Access Control Address) ,直譯為媒體存取控制位址 ,也稱為局域網地址 (LAN Address),MAC位址 ,以太網地址 (Ethernet Address)或物理地址 (Physical Address),它是一個用來確認網絡設備位置的位址。
-
IEEE 802標準為局域網規定了一種48位(6字節)的全球地址(一般簡稱為“地址”),這個地址會固化在適配器的ROM中。
-
IEEE 的註冊管理機構 RA 負責向廠家分配地址字段的前三個字節(即高位 24 位)。地址字段中的後三個字節(即低位 24 位)由廠家自行指派,稱為擴展標識符,必須保證生產出的適配器沒有重複地址。世界上凡要生產局域網適配器的廠家都必須向IEEE購買由這三個字節構成的這個號(即地址塊),這個號的正式名稱是組織唯一標識符。
- 例如,3Com公司生產的適配器的MAC地址的前三個字節是 02-60-8C。地址字段中的後三個字節(即低位24位)則由廠家自行指派,只要保證生產出的適配器沒有重複地址即可
-
一個地址塊可以生成2^24個(二百八十多萬億個)不同的地址。這種 48 位地址稱為MAC-48,它的通用名稱是EUI-48。
-
一般情況下,用户主機會包含兩個網絡適配器:有線局域網適配器(有線網卡)和無線局域網適配器(無線網卡)。每個網絡適配器都有一個全球唯一的MAC地址。而交換機和路由器往往擁有更多的網絡接口,所以會擁有更多的MAC地址。綜上所述,嚴格來説,MAC地址是對網絡上各接口的唯一標識,而不是對網絡上各設備的唯一標識。
-
我們可以在DOS窗口輸入命令:ipconfig /all , 查看本機網卡的MAC地址。
2、MAC地址的格式
- MAC地址的表示方法
-
MAC地址的含義
3、MAC 幀的格式
數據鏈路層在網絡層交付的IP數據包前面加上“目的地址”、“源地址”、“類型”字段,並且在最後加入4字節的FCS字段,組成一個以太網MAC幀,然後再交付給物理層
-
目的地址:接收主機的MAC地址
-
源地址:發送主機的MAC地址
-
類型:類型字段標誌上一層使用的是什麼協議,以便把收到的 MAC 幀的數據上交給上一層的這個協議。
注意:當數據字段的長度小於 46 字節時,應在數據字段的後面加入整數字節的填充字段,以保證以太網的 MAC 幀長不小於 64 字節。
4、MAC地址的識別
當多個主機連接到同一個廣播信道上,要實現兩個主機之間的通信,每個主機發送的幀中包含了目的地址和源地址,廣播信道上的每一台主機都能夠收到該幀,接收到幀的主機將幀中的目的地址與保存在網絡適配器的電可擦除可編程只讀存儲器
EEPROOM
中的MAC地址進行比較,如果匹配則接受該幀,否則就丟棄該幀。
根據MAC地址為單播MAC地址還是廣播MAC地址還是多播MAC地址,在計算機網絡中“發往本站(本主機)的幀”分為三種:單播(unicast)幀(一對一)、廣播(broadcast)幀(一對全體)、多播(multicast)幀(一對多)。
-
單播MAC地址
-
廣播MAC地址
-
多播MAC地址
-
隨機MAC地址:據斯諾登介紹,美國國家安全局有一套系統通過監視電子設備的MAC地址來跟蹤城市中每個人的行動,因此蘋果率先在ios系列設備掃描網絡時採用隨機MAC地址技術,隨後Windows10,安卓6.0以及內核版本3.18的Linux系統也提供隨機MAC地址功能。 目前大多數移動設備都採用了隨機MAC地址技術。
3.6 以太網交換機
1、以太網交換機的基本功能
- 以太網交換機是基於以太網傳輸數據的交換機,以太網交換機通常都有多個接口,每個接口都可以直接與一台主機或另一個以太網交換機相連,一般都工作在全雙工方式。
- 以太網交換機具有並行性,能同時連通多對接口,使多對主機能同時通信。
- 以太網交換機工作在數據鏈路層(也包括物理層),它收到幀後,在幀交換表中查找幀的目的MAC地址所對應的接口號,然後通過該接口轉發幀。
- 幀的兩種轉發方式:
- 存儲轉發:交換機在轉發之前必須接收整個幀,並進行錯誤校檢,如無錯誤再將這一幀發往目的地址。幀通過交換機的轉發時延隨幀長度的不同而變化。
- 直接交換:採用基於硬件的交叉矩陣(交換機只要檢查到幀頭中所包含的目的地址就立即轉發該幀,而無需等待幀全部的被接收,也不進行錯誤校驗。由於以太網幀頭的長度總是固定的,因此幀通過交換機的轉發時延也保持不變。)
- 以太網交換機是一種即插即用設備,其內部的幀交換表是通過自學習算法自動的逐漸建立起來的。
2、以太網交換機自學習和轉發幀的流程
剛上電時以太網交換機內部的幀交換表是空的,隨着網絡中各主機間的通信,通過自學習算法自動的逐漸建立起來幀交換表。
如下圖所示相互連接的“以太網交換機1”和“以太網交換機2”各自連接了三台主機,構成了一個交換式以太網。為了簡單起見各台主機的MAC地址我們用一個大寫字母表示,並且假設各台主機知道網絡中其他各主機的MAC地址。
下面我們來了解以太網交換機是如何進行自學習和轉發幀的:
- 主機A發送數據給主機B
- 該幀從交換機1的接口1進入交換機,交換機1首先進行登記工作,將該幀中的源MAC地址A記錄到自己的幀交換表中,並且將接口號1與MAC地址A相對應也記錄到幀交換表中。以上的登記工作就稱之為交換機的自學習。
- 交換機1對該幀進行轉發,該幀中的目的MAC地址是B,在幀交換表中查找MAC地址B,發現找不到就對該幀進行盲目地轉發(也成為泛洪),也就説會將該幀在除接口1以外的其他所有接口進行轉發。
- 主機B在接收到該幀後,根據該幀的目的MAC地址B與自己的MAC地址比較,發現相等就説明該幀是發送給自己的,於是主機B接受該幀,主機C則會丟棄該幀。
- 該幀從交換機1的接口4通過交換機2的接口2進入交換機2,交換機2首先進行登記工作,將該幀中的源MAC地址A記錄到自己的幀交換表中,並且將接口號2與MAC地址A相對應也記錄到幀交換表中
- 交換機2對該幀進行轉發,該幀中的目的MAC地址是B,在幀交換表中查找MAC地址B,發現找不到就對該幀進行盲目地轉發(也成為泛洪),也就説會將該幀在除接口2以外的其他所有接口進行轉發。
- 主機D、E、F丟棄該幀
注意:在幀交換表中每條記錄都有自己的有效時間,到期自動刪除。這是因為MAC地址與交換機接口的對應關係並不是永久性的(對應的接口可能會更換計算機)
3、以太網交換機的生成樹協議STP
-
思考:如何提高以太網的可靠性?假如在網絡中有三台交換機A、B、C,他們之間的連接方式如下圖所示,假如他們之間的鏈路出現了故障則會影響各個交換機之間的通信
-
添加冗餘鏈路可以提高以太網的可靠性:在交換機B和C之間添加冗餘鏈路。但是冗餘鏈路也會帶來負面效應—-形成網絡環路。
-
網絡環路帶來的問題
-
廣播風暴:廣播幀在各個交換機之間反覆轉發,分別按順時針和逆時針方向同時兜圈。廣播風暴會大量消耗網絡資源,使得網絡無法正常轉發其他數據幀。
-
主機收到反覆的廣播幀,會大量消耗主機的資源。
-
交換機的幀交換表震盪:同一個MAC地址的記錄在其他錯誤記錄之間反覆震盪。
-
-
以太網交換機使用生成樹協議STP(Spanning Tree Protocol)可以在增加冗餘鏈路來提高網絡可靠性的同時又避免網絡環路帶來的各種問題。
-
不論交換機之間採用怎樣的物理連接,交換機都能夠自動計算並構建一個邏輯上沒有環路的網絡,其邏輯拓撲結構必須是樹型的(無邏輯環路)。最終生成的樹型邏輯拓撲要確保連通整個網絡;
-
當首次連接交換機或網絡物理拓撲發生變化時(有可能是人為改變或故障),交換機都將進行生成樹的重新計算。
-
-
説明:生成樹算法STA需要大家自行了解。
-
3.7 虛擬局域網VLAN
1、廣播域
使用一個或多個以太網交換機互連起來的交換式以太網,其所有站點都屬於
同一個廣播域
。隨着交換式以太網規模的擴大,廣播域相應擴大,從而形成一個巨大的廣播域。
但是巨大的廣播域會帶來很多的弊端:
- 廣播風暴
- 難以管理和維護
- 潛在的安全問題
例如,網絡中的某台主機A需要向另外一台主機B發送數據,此時主機A只有主機B的IP地址,但是沒有主機B的MAC地址,主機A需要發送ARP(ARP屬於體系結構的網絡層,在後續的課程中我們會介紹)廣播請求來獲取主機B的MAC地址,該ARP請求會傳遍整個網絡,網絡中的其他所有主機都能夠收到廣播。
廣播風暴會浪費網絡資源和各個主機的CPU資源,但是在實際應用中網絡中會頻繁出現廣播信息,TCP/IP協議棧中的很多協議都會使用廣播:
- 地址解析協議ARP(已知IP地址,找出對應的MAC地址)
- 動態主機配置協議DHCP(用於自動配置IP地址)
我們可以使用分割廣播域的方法對廣播域進行隔離:
-
使用路由器隔離廣播域:但是路由器的成本較高,局域網中如果全部用路由器隔離廣播域不大現實
-
使用虛擬局域網VLAN
2、虛擬局域網VLAN概述
虛擬局域網VLAN(Virtual Local Area Network)是一種將局域網內的設備劃分成與物理位置無關的邏輯組的技術,這些邏輯組具有某些共同的需求。
假如在網絡中有三個局域網,分別叫做局域網1、局域網2、局域網3,我們可以使用一個交換機S4將三個局域網互連成一個更大的局域網。原來每個局域網就成為新的大的局域網中的各個網段。我們可以在S4上將整個局域網劃分成兩個VLAN:VLAN1和VLAN2,這樣兩個不同的VLAN之間的廣播數據包不會互相傳輸,當然如果是在同一個VLAN中的主機依然可以進行廣播通信。
注意:不是所有的交換機都能夠進行VLAN劃分,一般需要企業級交換機才可以。
3.8 華為eNSP VLAN實驗
下面我們使用華為的eNSP進行VLAN的實驗。
1、新建一個拓撲,然後在拓撲中加入兩台S5700的交換機LSW1和LSW2,LSW1和LSW2互相連接,並且每台交換機上接入兩台PC。
2、如上圖所示:LSW1交換機的 GE 0/0/1和GE 0/0/2接口分別接PC1和PC2, LSW2交換機的 GE 0/0/1和GE 0/0/2接口分別接PC3和PC4,LSW1和LSW2的GE 0/0/3接口互連。
3、對PC1、PC2、PC3、PC4進行如下設置:
- IP地址分別設置為192.168.1.101, 192.168.1.102, 192.168.1.103, 192.168.1.104
- 子網掩碼全部設置為:255.255.255.0
- 網關全部設置為:192.168.1.0
4、設置完成以後,將兩台交換機和4台PC啓動,然後分別在每台PC的命令行使用ping命令查看能夠ping同其他PC。
5、配置交換機LSW1,構建vlan2和vlan3
-
進入命令行輸入 system-view命令進入系統試圖
-
輸入 display vlan 查看交換機中的vlan
-
通過命令行,創建vlan2
-
通過命令行,創建vlan3
-
輸入命令 display vlan 查看交換機中的vlan,發現有三個vlan
-
-
將0/0/1和0/0/2端口設置為access類型:通過access端口的數據包都是不帶VLAN tag的,且只屬於一個VLAN,在access端口進方向,交換機接收到數據包後,先判斷是否帶VLAN tag,有則丟棄數據包,沒有則打上該端口已配置的VLAN tag,在access端口出方向,交換機將打了與端口相同VLAN tag的數據包轉發出去,並且去掉VLAN tag變成普通數據包,一般連接計算機
-
輸入命令 dis cur 查看端口名稱,注意:按回車鍵可以顯示更多信息,按 ctrl + c可以退出該命令
-
設置access類型,並且將端口分配給不同的VLAN
-
因為GE 0/0/1端口接PC1,並且GE 0/0/1端口分配給了vlan2,所以PC1就在vlan 2中了,同理,PC3在vlan3中,此時如果我們在PC1的命令行中ping PC2是不能ping通了,因為他們已經不在同一個局域網中了。
-
-
將0/0/3端口設置為trunk類型:端口可以承載多個VLAN,通過trunk端口的數據包都必須帶上VLAN tag,在trunk端口進方向,交換機接收到數據包後,先判斷是否帶VLAN tag,沒有則丟棄數據包,有則按照對應VLAN進行轉發,在trunk端口出方向,交換機將帶VLAN tag的數據包原封不動轉發出去,沒有帶VLAN tag數據包不會從trunk端口轉發出去,一般用來接其他交換機
-
設置完交換機LSW1後,用同樣的方法設置交換機LSW2,同樣的將0/0/1端口分配給vlan2,將0/0/2端口分配給vlan3,0/0/3端口設置為trunk模式。
-
設置完成以後,PC1和PC3屬於vlan2, PC2和PC4屬於vlan3
-
我們可以在PC1和PC2上使用ping命令驗證
-
PC1 ping命令
-
PC2 ping 命令
-
4 網絡層
4.1 網絡層概述
網絡層的主要任務是實現網絡互連,進而實現數據包在各網絡之間的傳輸。
要實現網絡層任務,需要解決以下主要問題:
-
網絡層向運輸層提供怎樣的服務(“可靠傳輸”還是“不可靠傳輸”)
-
TCP/IP協議體系結構的網際層提供的是無連接的、不可靠的數據包服務
-
ATM、幀中繼和X.25的網絡層提供的是面向連接的、可靠的虛電路服務
-
-
網絡層尋址問題
- 路由選擇問題:路由器根據路由表選擇下一跳
因特網(Internet)是目前全世界用户數量最多的互聯網,它使用TCP/IP協議棧。由於TCP/IP協議棧的網絡層使用網際協議IP,它是整個協議棧的核心協議,因此在TCP/IP協議棧中網絡層常稱為網際層。本章節我們通過學習TCP/IP協議棧的網際層來學習網絡層的理論知識和實踐技術。
4.2 IPv4地址概述
1、在因特網中,為了實現計算機之間的相互通信,通常需要為每台計算機分配一個IP地址。在互聯網的發展過程中主要有兩個版本的互聯網協議,分別是IPv4(Internet Protocol version 4)和 IPv6(Internet Protocol version 6)。
注意:在本課程中我們不對IPv4和IPv6的協議內容進行對比,只對比IPv4的IP地址和IPv6的IP地址。
2、IPv4 的IP地址就是給因特網(Internet)上的每一台主機(或路由器))的每一個接口分配一個在全世界範圍內是唯一的32比特的標識符,地址總數為2^32個。
3、IPv6 的 IP地址採用128比特地址長度,地址總數為2^128個。
4、IP地址由因特網名字和數字分配機構ICANN(Internet Corporation for Assigned Names and Numbers)進行分配。我國用户可向亞太網絡信息中心APNIC(Asia Pacific Network Information Center)申請IP地址,需要繳費。
5、因為當下互聯網中的絕大多數設備採用的是IPv4的IP地址,所以本課程我們只學習IPv4的IP地址的相關知識。
6、由於32比特的IPv4地址不方便閲讀、記錄以及輸入等,因此IPv4地址採用點分十進制表示方法以方便用户使用,例如:192.168.1.100
7、八位無符號二進制整數轉十進制:二進制表示中從右至左分別表示低比特位和高比特位。
8、十進制正整數轉8位無符號二進制數的方法:
-
方法1:除2取餘法,直到最後商為0
-
-
方法2:湊值法(必須熟記8位二進制數各位的權值128 64 32 16 8 4 2 1)
4.3 IPv4 地址的分類
1、IPv4 的IP地址由網絡號(指定主機所屬的網絡)和 主機號(指定被尋址的子網中的某個節點)組成,IP地址可以分為A、B、C、D、E五類。
2、注意事項:
3、各類IP地址的細節
-
A類地址
-
A類地址的取值範圍:
-
A類地址可指派的網絡數量:因為網絡號佔8個bit,並且最高位固定為0,網絡號有2^7=128中組合,但是因為最小網絡號0和最大網絡號127不能指派,所以最終A類IP地址能夠指派的網絡數量為:
-
A類地址每個網絡中可以分配的地址數量:因為主機號站24個bit,主機號有2^24種組合,因為全0的網絡號和全1的廣播地址不能指派,所以需要減2
-
-
B類地址
-
B類地址的取值範圍:
-
B類地址可指派的網絡數量:因為網絡號佔16個bit,並且最高位固定為10,網絡號有2^(16-2)種組合
-
B類地址每個網絡中可以分配的地址數量:因為主機號站16個bit,主機號有2^16種組合,因為全0的網絡號和全1的廣播地址不能指派,所以需要減2
-
-
C類地址
-
C類地址的取值範圍
-
C類地址可指派的網絡數量:因為網絡號佔24個bit,並且最高位固定為110,網絡號有2^(24-3)
-
C類地址每個網絡中可以分配的地址數量:因為主機號站8個bit,主機號有2^8種組合,因為全0的網絡號和全1的廣播地址不能指派,所以需要減2
-
-
D類、E類地址
-
練習1
- 練習2
4.4 子網的劃分
1、我們先來看一道筆試題:用一根網線直接相連的兩台主機的IP地址分別為192.168.1.100、192.168.2.100,請問使用什麼方法可以讓這兩台主機能夠進行正常的數據通信?
答案:將兩台主機的子網掩碼設置為255.255.0.0
2、子網掩碼
-
子網掩碼(subnet mask)是一個32位地址,又叫網絡掩碼、地址掩碼,它用來指明一個IP地址的哪些位標識的是主機所在的子網,以及哪些位標識的是主機。子網掩碼不能單獨存在,它必須結合IP地址一起使用。子網掩碼將某個IP地址劃分成網絡地址和主機地址兩部分。
-
左邊是網絡位,用二進制數字“1”表示,1的數目等於網絡位的長度;右邊是主機位,用二進制數字“0”表示,0的數目等於主機位的長度。這樣做的目的是為了讓掩碼與IP地址做按位與運算時用0遮住原主機數,而不改變原網絡段數字,而且很容易通過0的位數確定子網的主機數。
-
子網掩碼的兩個功能:
- 屏蔽IP地址的一部分以區別網絡標識和主機標識
- 將一個大的IP網絡劃分為若干小的子網絡
-
子網掩碼的工作流程:將32位的子網掩碼與IP地址進行二進制形式的按位邏輯“與”運算,得到該IPv4地址所在的網絡地址
3、子網的劃分
子網掩碼是在IPv4地址資源緊缺的背景下為了解決lP地址分配而產生的虛擬lP技術,通過子網掩碼將A、B、C三類地址劃分為若干子網,從而顯著提高了IP地址的分配效率,有效解決了IP地址資源緊張的局面。另一方面,在企業內網中為了更好地管理網絡,網管人員也利用子網掩碼的作用,人為地將一個較大的企業內部網絡劃分為更多個小規模的子網,再利用三層交換機的路由功能實現子網互聯,從而有效解決了網絡廣播風暴和網絡病毒等諸多網絡管理方面的問題。
32比特的子網掩碼可以表明分類IP地址的主機號部分被借用了幾個比特作為子網號。
下面我們舉例説明劃分子網的細節:已知某個網絡的地址為218.75.230.0,使用子網掩碼255.255.255.128對其進行子網劃分,請給出劃分細節。
解析流程:
- 從IP地址坐起第一個十進制為218,所以該IP地址為C類地址,C類地址的子網掩碼默認為:255.255.255.0,而此時給出的子網掩碼為255.255.255.128,則説明子網掩碼向主機號借用了一個bit作為子網號
-
因為子網掩碼向主機號借用了一個bit作為子網號,所以可劃分出來的子網數量為2^1 = 2 個。每個子網可分配的地址數量為:2^(8-1) - 2 = 126個。因為主機號的最高位被子網掩碼借用了,主機號只有7位了,所以最多可分配2^(8-1)=128個地址,但是還需要去掉主機號為全0的網絡地址和主機號為全1的廣播地址所以還需要減2。
-
詳細的子網劃分
4、練習題:我們通過一道考研真題對子網的劃分方法進行鞏固
5、子網掩碼的CIDR斜線記法
格式:IP地址/n
説明:n表示子網掩碼所使用的bit數,表示子網掩碼中網絡號的長度,通過n的個數確定子網的主機數=2^(32-n)-2
例1:192.168.1.100/24,其子網掩碼錶示為255.255.255.0
例2:172.16.198.12/20,其子網掩碼錶示為255.255.240.0
4.5 IP 協議
1、用户數據在網絡層(網際層)中使用IP協議進行封裝,然後交付給數據鏈路層。IP協議提供不可靠無連接的數據報傳輸服務。
2、使用IP協議封裝的數據我們稱之為IP數據報。
3、IP數據報的首部:IP數據報的首部由20個字節組成,IP數據報的首部常以32個比特為單位進行描述,下圖中的每一行都由32個比特(也就是4個字節)構成,每個小格子稱為字段或者域。
-
版本:佔4比特,表示IP協議的版本
-
首部長度:佔4比特,表示IP數據報首部的長度。該字段的取值以4字節為單位。最小十進制取值為5,表示lP數據報首部只有20字節固定部分,最大十進制取值為15,表示IP數據報首部包含20字節固定部分和最大40字節可變部分
-
區分服務:8比特,一般不使用
-
總長度:佔16比特,表示IP數據報的總長度(首部+數據載荷)。最大取值為十進制的65535,以字節為單位(實際使用中不會傳輸這麼長的IP數據報)。
-
標識、標誌、片偏移:這三個字段共同用於IP數據報分片,以太網中數據鏈路層規定MTU的值為1500字節,如果某個IP數據報總長度超過MTU,需要將原IP數據報分片成多個小的數據報,再將每個小的數據報封裝成幀。
-
標識:佔16比特,屬於同一個數據報的各分片數據報應該具有相同的標識。IP軟件維持一個計數器,每產生一個數據報,計數器值加1,並將此值賦給標識字段。
-
標誌:佔3比特,各比特含義如下:
- DF位:1表示不允許分片,0表示允許分片
- MF位:1表示“後面還有分片”,0表示“這是最後一個分片”
- 保留位:必須為0
-
片偏移:佔13比特,指出分片數據報的數據載荷部分偏移其在原數據報的位置有多少個單位,片偏移以8個字節為單位。
-
IP數據報分片舉例
-
-
生存時間:佔8比特,最初以秒為單位,最大生存週期為255秒。路由器轉發IP數據報時將IP數據報首部中的該字段的值減去IP數據報在本路由器上所耗費的時間,若不為0就轉發,否則就丟棄。現在以“跳數”為單位,路由器轉發IP數據報時,將IP數據報首部中的該字段的值減1,若不為0就轉發,否則就丟棄。
-
TTL作用可以防止IP數據報再網絡中永久兜圈
-
-
協議:佔8比特,指明IPv4數據報的數據部分是何種協議數據單元。常用的一些協議和相應的協議字段值如下。.
-
首部檢驗和:佔16比特,用來檢測首部在傳輸過程中是否出現差錯。比CRC檢驗碼簡單,稱為因特網檢驗和。IP數據報每經過一個路由器,路由器都要重新計算首部檢驗和,因為某些字段(生存時間、標誌片偏移等)的取值可能發生變化。
-
源IP地址:佔32比特,表示發送主機的IP地址。
-
目的IP地址:佔32比特,表示目的主機的IP地址。
4.6 IP數據報的發送和轉發過程
IP數據報的發送和轉發過程包含兩部分:主機發送IP數據報、路由器轉發數據報。
假設在網絡中由一台路由器連接了兩個局域網,每個局域網的網絡地址、子網掩碼,以及每台主機的IP地址分配如下圖所示:
請同學們思考:為什麼左邊網絡的網絡地址是:192.168.0.0,右邊網絡的網絡地址是192.168.0.128?
同一個網絡中的主機是可以直接通信的, 這叫做直接交付,而不同網絡中間的主機是不能直接通信的,需要通過路由器進行中轉,這屬於間接交付。那源主機是如何判斷目的主機和自己是否在同一個網絡中呢?
主機C將自己的IP地址與子網掩碼進行按位與操作得到主機C的網絡地址:192.168.0.0,然後將目的主機的IP地址與自己的子網掩碼進行按位與操作得到目的網絡地址:192.168.0.128,發現兩個網路並不相等,説明主機C和主機F不在同一個網絡中,不能進行直接交付,主機C將數據發送給路由器R,由路由器R再轉發給主機F,這樣就實現了主機F和主機F之間的數據通信(間接交付)。
但是問題又來了:主機C又是如何知道要將數據發送給路由器R呢?我們需要將路由器的接口地址192.168.0.126作為主機C的默認網關,這樣當主機C發現目的地址與自己不在同一網絡中時則將數據發送給設置好的默認網關(路由器)。因此我們可以將左邊網絡中所有主機的默認網關填寫為192.168.0.126,將右邊網絡所有主機的默認網關填寫為192.168.0.254。
那麼路由器又是如何對數據進行轉發的呢?假設主機A需要將數據發送給主機D,因為主機A與主機D不在同一個網絡,所以主機A將數據發送給路由器R,路由器會進行如下操作:
- 首先檢查lP數據報首部是否出錯:若出錯,則直接丟棄該lP數據報並通告源主機,若沒有出錯,則進行轉發
- 然後根據IP數據報的目的地址在路由表中查找匹配的條目:若找到匹配的條目,則轉發給條目中指示的下一跳若找不到,則丟棄該IP數據報並通告源主機
4.7 路由表
1、什麼是路由?
路由就是報文從源端到目的端的路徑。當報文從路由器到目的網段有多條路由可達時,路由器可以根據路由表中最佳路由進行轉發。
2、什麼是路由表?
在計算機網絡中,路由表(routing table)是一個存儲在路由器或者聯網計算機中的電子表格(文件)或類數據庫。路由表存儲着指向特定網絡地址的路徑。路由表建立的主要目標是為了實現路由協議和靜態路由選擇。路由表就相當於一張地圖告訴數據報該如何去往目的地。
路由器會根據路由表進行數據包的轉發:
在ubuntu系統下我們可以使用route -n 命令查看系統的路由表:
在windows下可以使用 route print 命令查看系統的路由表:
我們發現ubuntu和windows系統的路由表中都有一條特殊的路由:目標地址為全網地址0.0.0.0 ,子網掩碼為0.0.0.0,對應下一跳的地址為網關地址。那麼這條路由的作用是什麼呢?
我們先了解一下,計算機或者路由器是如何將一條數據通過網絡發送出去的。首先將目的IP地址與自己的子網掩碼進行按位與運算得到目的主機的主機號,然後拿該主機號與路由表中的路由進行匹配,如果匹配到了則將數據轉發給指定的下一跳,如果沒有匹配到,則轉發給目標地址為0.0.0.0所對應的下一跳。
因此目標地址為0.0.0.0所對應的那條路由的作用就是:這條路由就是我們所説的默認路由,是對IP數據包中的目的地址找不到存在的其他路由時,路由器所選擇的路由。
注意1:當我們發現主機(尤其是一些嵌入式或者物聯網的設備)不能夠上網或者不能ping通外網的時候,假如檢查了IP地址、DNS等設置都沒問題後依然不能解決,我們可以查看系統的路由表中是否沒有添加默認路由。
注意2:不同的路由器查看路由表的命令不一樣
思科路由器查看路由表命令為:show ip route
華為路由器查看路由表命令為:display ip routing-table
3、路由表的類型
路由表可以分為:靜態路由和動態路由。
- 動態路由:動態路由是指動態路由協議(如RIP)自動建立路由,並且能夠根據實際情況的變化適時地進行調整。
- 動態路由之所以能根據網絡的情況自動計算路由、選擇轉發路徑,是由於當網絡發生變化時,路由器之間彼此交換的路由信息會告知對方網絡的這種變化,通過信息擴散使所有路由器都能得知網絡變化。
- 路由器根據某種路由算法(不同的動態路由協議算法不同)把收集到的路由信息加工成路由表,供路由器在轉發IP報文時查閲
- 常見的動態路由協議有:RIP、OSPF、IS-IS、BGP、IGRP/EIGRP
- 靜態路由:由網絡管理員手動配置的路由。
- Linux系統靜態路由操作:
- 添加路由:route -n add -net 目標地址/子網掩碼位數 gw 下一跳,例如:route -n add -net 192.168.1.0/24 192.168.33.2
- 添加默認路由:route add default gw IP
- 刪除路由:route delete -net 目標地址/子網掩碼位數,例如:route delete -net 192.168.1.0/24
- 注意:參數-net 表示操作某個網段,如果操作的數具體某台主機的地址則使用-host選項
- 路由器靜態路由操作:
- 添加路由:ip route 目標地址 子網掩碼 下一跳地址,例如:ip route 192.168.3.0 255.255.255.0 192.168.1.1
- 刪除路由:no ip route 目標地址 子網掩碼 下一跳地址
- Linux系統靜態路由操作:
4、路由表實驗
下面我們使用思科的模擬器Cisco Packet Tracer進行路由表的實驗
1)首先我們先搭建基礎的網絡,如下圖所示:
2)在此次實驗中我們通過設置三個路由器的路由表實現主機PC0與主機PC1之間的通信
3)分別設置主機PC0與主機PC1的ip地址
4)分別設置三台路由器的IP地址
5)分別為三個路由器設置靜態路由
6)在PC0嘗試ping PC1
4.8 ARP高速緩存表
1、地址解析協議ARP
-
通過前面的學習,我們知道:如果網絡中的主機需要互相通信,那麼源主機必須要知道目的主機的IP地址和MAC地址,因為在數據鏈路層封裝的MAC幀中需要封裝目的地址和源地址。當已知目的主機的IP地址時,可以通過ARP協議獲得目的主機的MAC地址。
-
ARP請求報文封裝在MAC幀中,目的地址為FF-FF-FF-FF,並且以廣播的形式發送的。
-
ARP協議工作流程
2、ARP高速緩存表
ARP高速緩存(ARP cache),由最近的ARP項組成的一張臨時表,表中記錄了主機IP地址和MAC地址的對應關係。
注意:ARP報文只能在發送主機所在的廣播域中被使用!
3、ARP欺騙
ARP 欺騙是一種以 ARP 地址解析協議為基礎的一種網絡攻擊方式。
ARP欺騙的原理:利用ARP協議沒有安全認證機制,攻擊者發送假的ARP數據包到網上,尤其是送到網關上。其目的是要讓送至特定的IP地址的流量被錯誤送到攻擊者所取代的地方。因此攻擊者可將這些流量另行轉送到真正的網關(被動式數據包嗅探,passive sniffing)或是篡改後再轉送(中間人攻擊,man-in-the-middle attack)。
ARP欺騙分為兩種:
- 主機型欺騙:攻擊者向其他主機發送ARP響應包,攻擊者在響應包中填入網關的IP地址和自己MAC地址,這樣主機A應該發送給網關的數據包會被網關轉發給主機B
- 網關型欺騙:攻擊者向網關發送ARP響應包,攻擊者在響應包中填入被攻擊主機的IP地址和自己MAC地址,這樣網關接收到互聯網中發給主機A的數據時也會轉發給主機B
ARP欺騙的危害:
- 信息安全收到威脅
- 網絡延遲增加
- 網絡通信中斷
ARP欺騙防範方法:
- 安裝補丁
- 靜態綁定:網內的主機與網關做IP和MAC綁定
- 使用ARP防火牆
- 不要點開通訊工具中的一些可疑鏈接、圖片、文件等。
4.9 特殊IP地址
1、127.0.0.1
迴環地址,該地址還有 一個別名叫 “localhost”,無論是哪個程序,一旦使用該地址發送數據,協議軟件會立即返回,不進行任何網絡傳輸,除非出錯,包含該網絡號的分組是不能夠出現 在任何網絡上的。
2、10...,172.16..――172.31..,192.168..*
上面三個網段是私有地址,可以用於自己組網使用,這些地址主要用於企業內部網絡中,但不能夠在Internet網上使用,Internet網沒有這些地址 的路由,而使用這三個網段的計算機要上網必須要通過網絡地址轉換(NAT),將私有地址翻譯成公用合法的IP地址。
3、255.255.255.255
受限制的廣播地址,對本機來説,這個地址指本網段內(同一個廣播域)的所有主機,該地址用於主機配置過程中IP數據包的目的地址,這時主機可能還不知道它 所在網絡的網絡掩碼,甚至連它的IP地址也還不知道。在任何情況下,路由器都會禁止轉發目的地址為受限的廣播地址的數據包,這樣的數據包僅會出現在本地網絡中。
4、224.0.0.0—239.255.255.255
組播地址
5、169.254..
如果你的主機使用了DHCP功能自動獲得一個ip地址,那麼當你的DHCP服務器發生故障或響應時間太長而超出系統規定的一個時間,windows系統會為你分配這樣一個地址。如果你發現你的主機ip地址是個諸如此類的地址,很不幸,十有八九是你的網絡不能正常運行了。
6、114.114.114.114
中國電信DNS
7、8.8.8.8
谷歌DNS
5 運輸層
5.1 運輸層概述
之前課程所介紹的計算機網絡體系結構中的物理層、數據鏈路層以及網絡層它們共同解決了將主機通過異構網絡互聯起來所面臨的問題,實現了主機到主機的通信。兩個主機進行通信實際上就是兩個主機中的應用進程互相通信,應用進程之間的通信又稱為端到端的通信。
當網絡的邊緣部分中的兩個主機使用網絡的核心部分的功能進行端到端的通信時,只有位於網絡邊緣部分的主機的協議棧才有運輸層,而網絡核心部分中的路由器在轉發分組時都只用到下三層的功能。如何為運行在不同主機上的應用進程提供直接的通信服務是運輸層的任務。
運輸層提供的是應用進程間的邏輯通信,“邏輯通信”的意思是:運輸層之間的通信好像是沿水平方向傳送數據。但事實上這兩個運輸層之間並沒有一條水平方向的物理連接。
根據應用需求的不同,因特網的運輸層為應用層提供了兩種不同的運輸協議,即面向連接的TCP和無連接的UDP。
5.2 端口號
1、思考
主機A使用QQ向PC發送了一組數據,數據在網絡中經過傳輸後到達主機B,主機B對數據進行解包以後又是如何知道該數據是發送給哪個進程的呢?
TCP/IP體系的運輸層使用端口號來區分應用層的不同應用進程。
2、端口號的值
- 端口號使用16比特表示,取值範圍0~65535
- 熟知端口號:0~1023,IANA把這些端口號指派給了TCP/IP體系中最重要的一些應用協議,例如:FTP使用21/20,HTTP使用80,DNS使用53。
- 登記端口號:1024~49151,為沒有熟知端口號的應用程序使用。使用這類端口號必須在IANA按照規定的手續登記,以防止重複。例如:Microsoft RDP微軟遠程桌面使用的端口是3389。
- 短暫端口號:49152~65535,留給客户進程選擇暫時使用。當服務器進程收到客户進程的報文時,就知道了客户進程所使用的動態端口號。通信結束後,這個端口號可供其他客户進程以後使用。
- 常用端口號及對應的網絡應用程序表格如下:
-
在Linux中/etc/service文件中保存了知名的服務器端口號
-
端口號只具有本地意義,即端口號只是為了標識本計算機應用層中的各進程,在因特網中,不同計算機中的相同端口號是沒有聯繫的。
5.3 傳輸控制協議TCP
傳輸控制協議 TCP (Transmission Control Protocol)一種基於連接的可靠的穩定的無重複的傳輸協議。
1、TCP頭部信息
TCP協議頭部信息如下:
- 16位源端口號(Source Port):發送主機中進程的端口號
- 16位目的端口號(Destination Port):接收主機中進程的端口號
- 32位序列號(Sequence Number):每一個包中都包含序列號,序列號被系統初始化為某個隨機值ISN。後續的TCP報文段中序號加上該報文段所攜帶數據的第一個字節在整個字節流中的偏移。例如,某個TCP報文段傳送的數據是字節流中的第1025~2048字節,那麼該報文段的序號值就是ISN+1025
- 32位確認號(Acknowledgment Number):目的主機返回確認號,使源主機知道某個或幾個報文段已被接收
- 四位首部長度(Header Length):由於TCP首部包含一個長度可變的選項部分,所以需要這麼一個值來指定這個TCP報文段到底有多長
- URG標誌:表示緊急指針(urgent pointer)是否有效
- ACK標誌:表示確認號是否有效。我們稱攜帶ACK標識的TCP報文段為確認報文段
- PSH標誌:提示接收端應用程序應該立即從TCP接收緩衝區中讀走數據,為接收後續數據騰出空間(如果應用程序不將接收到的數據讀走,它們就會一直停留在TCP接收緩衝區中)
- RST標誌:表示要求對方重新建立連接。我們稱攜帶RST標誌的TCP報文段為復位報文段
- SYN標誌:表示請求建立一個連接。我們稱攜帶SYN標誌的TCP報文段為同步報文段
- FIN標誌:表示通知對方本端要關閉連接了。我們稱攜帶FIN標誌的TCP報文段為結束報文段
- 16位窗口大小(window size) :是TCP流量控制的一個手段。這裏説的窗口,指的是接收通告窗口(Receiver Window,RWND)。它告訴對方本端的TCP接收緩衝區還能容納多少字節的數據,這樣對方就可以控制發送數據的速度
- 16位校驗和(TCP check sum): 由發送端填充,接收端對TCP報文段執行CRC算法以檢驗TCP報文段在傳輸過程中是否損壞。注意,這個校驗不僅包括TCP頭部,也包括數據部分。這也是TCP可靠傳輸的一個重要保障。
- 16位緊急指針(urgent pointer) :是一個正的偏移量。它和序號字段的值相加表示最後一個緊急數據的下一字節的序號。因此,確切地説,這個字段是緊急指針相對當前序號的偏移,不妨稱之為緊急偏移。TCP的緊急指針是發送端向接收端發送緊急數據的方法。
- TCP頭部選項 :TCP頭部的最後一個選項字段(options)是可變長的可選信息。這部分最多包含40字節
2、TCP運輸連接的階段
- 建立TCP連接
- 數據傳輸
- 釋放TCP連接
注意:三報文握手我們也稱之為三次握手或者三路握手,四報文揮手我們也稱之為四次揮手或者四路揮手
3、TCP連接的建立
TCP連接的建立需要解決以下三個問題:
- 使TCP雙方能夠確知對方的存在
- 使TCP雙方能夠協商一些參數(如最大窗口值、是否使用窗口擴大選項和時間戳選項以及服務質量等)
- 使TCP雙方能夠對運輸實體資源(如緩存大小、連接表中的項目等)進行分配
三次握手過程:
-
由客户端的某個進程主動發起TCP連接建立,最初兩端的TCP進程都處於關閉狀態
-
TCP服務器被動等待客户進程的TCP請求,所以TCP服務器進入監聽狀態
-
TCP客户進程向TCP服務器進程發送TCP建接請求報文段,並且進入同步已發送狀態
-
TCP連接請求報文段首部中的同步位SYN被設置為1,表明這是一個TCP連接請求報文段,32位序列號字段seq被設置了一個初始值x,作為TCP客户進程所選擇的初始序號。
-
TCP服務器進程接收到TCP連接請求報文段後,如果同意建立連接,則向TCP客户進程發送TCP連接請求確認報文段,並且進入同步已接收狀態,該報文段首部中的同步位SYN和確認位ACK都設置為1,表明這是一個TCP連接請求確認報文段。序號字段seq被設置了一個初始值y,作為TCP服務器進進程選擇的初始序號,確認號字段ack的值被設置成x+1,表明接收到了TCP客户進程序號為x的報文。
-
TCP客户進程收到TCP連接請求確認報文段後,還要向TCP服務器進程發送一個普通的TCP確認報文段,並且進入連接已建立狀態,報文段首部中的確認位ACK設置為1,表明這是一個普通的TCP確認報文段。序列號字段seq設置為x+1,確認號字段ack的值被設置成y+1,表明接收到了TCP服務進程序號為y的報文,TCP服務器進程收到該確認報文段後也進入連接已建立狀態。
-
思考:假如TCP連接的建立使用兩次握手而不是三次握手可以嗎?
- 假設TCP客户進程發送了一個TCP請求報文段,但是該報文段在網絡結點中被長時間滯留了,TCP客户採用超時重傳機制重發TCP請求報文段並且被TCP服務進程接收,TCP服務進程發送一個TCP連接請求確認報文段,然後TCP服務進程和客户進程可以進行數據的傳輸,數據傳輸完成以後雙方都處於關閉狀態。
- 隨後滯留在網絡結點中的那個失效的TCP請求報文段被TCP服務進程接收,TCP服務進程又發送一個TCP連接請求確認報文段,並且進入連接已建立狀態,由於TCP客户進程並沒有發起新的TCP連接請求,並且已經處於關閉狀態了,因此不會理會TCP服務器發送的報文段,但是TCP服務器進程已經進入了連接已建立狀態,他認為新的TCP連接已經建立好了,就會一直等待TCP客户進程發來數據,將會浪費TCP服務器主機的很多資源。
-
因此:TCP連接的建立必須採用三次握手。
-
練習:
四次揮手過程:TCP通過四次揮手來釋放連接,數據通信結束後,TCP雙方都可以釋放連接
-
假設由客户進程主動關閉TCP連接
-
客户進程發送連接釋放報文段,並且進入終止等待1狀態,該報文段中的首部終止位FIN設置位1,ACK設置為1,表明這是一個連接釋放報文段,同時也對之前接收打報文段進行確認,seq=u表示TCP客户進程之前已發送過的數據的最後一個字節的序號+1,ack=v表示客户進程之前已收到的數據的最後一個字節的序號+1
-
服務器進程接收到TCP連接釋放報文段後,會發送一個普通的TCP確認報文段並且進入關閉等待狀態,此時TCP客户進程到服務器進程這個方向的連接就釋放了,這時的TCP連接屬於半關閉狀態,也就是TCP客户進程已經沒有數據要發送了,但是TCP服務器進程如果還有數據需要發送,客户進程則還需要接收,這個狀態可能會持續一段時間,直到TCP服務器進程將數據發送完畢。
-
TCP客户進程收到TCP確認報文段後就進入終止等待2狀態,等待TCP服務器進程發出的TCP連接釋放報文段。
-
當TCP服務器進程的沒有數據要發送了後,釋放連接(被動關閉),TCP服務器進程發送TCP連接釋放報文段並進入最後確認狀態。FIN=1,ACK=1表明這是一個連接釋放報文段,seq=w,ack=u+1同時也對之前收到的報文段進行確認。思考:為什麼seq=w,而不是seq=v+1呢?
-
TCP客户進程收到TCP連接釋放報文段後,必須針對該報文段發送普通的TCP確認報文段,之後進入時間等待狀態
-
TCP服務器進程收到該報文段後就進入關閉狀態
-
而TCP客户進程還需要經過2MSL後才能進入關閉狀態。MSL(Maximum Segment Lifetime)意思是最長報文段壽命,RFC793建議為2分鐘。
-
思考:為什麼TCP客户進程還需要經過2MSL後才能進入關閉狀態?
-
假設TCP客户進程收到TCP連接釋放報文段,並且針對該報文段發送普通的TCP確認報文段後馬上進入關閉狀態,但是該確認報文段丟失了,TCP服務器進程無法收到該確認報文段,TCP服務器程序就會以為之前發送的TCP連接釋放報文段TCP客户進程沒有收到,然後TCP服務器進程會對之前所發送的TCP連接釋放報文段超時重傳,並仍處於最後確認狀態。由於TCP客户進程已經處於關閉狀態了,不會處理TCP服務器進程發送的連接釋放報文段,這樣就會造成TCP服務器反覆發送TCP連接釋放報文段,並且一直處於最後確認狀態而無法進入關閉狀態。因此客户端等待2MSL可以確保服務器進程收到最後一個TCP確認報文。
-
5.4 TCP可靠傳輸的實現
1、分段傳輸:應用數據根據MSS(Maxitum Segment Size 最大分段大小,這個值TCP協議在實現的時候往往用MTU值代替(需要減去IP數據包包頭的大小20Bytes和TCP數據段的包頭20Bytes)所以往往MSS為1460 )值被分割成TCP認為最適合發送的數據段。
注意:在運輸層的分段傳輸(分組傳輸)和網絡層的IP數據報分片傳輸的區別:分段傳輸只有TCP協議才有的,並且分段的依據為MSS,分片傳輸的依據為MTU。
2、超時重傳:當TCP發出一個段後,它啓動一個定時器,等待目的端確認收到這個報文段。如果不能及時收到一個確認,將重發這個報文段。
3、CRC校驗和:TCP將保持它首部和數據的檢驗和如果收到段的檢驗和有差錯,TCP將丟棄這個報文段和不確認收到此報文段。
4、流量控制:TCP 提供一種機制可以讓「發送方」根據「接收方」的實際接收能力控制發送的數據量,這就是所謂的流量控制。TCP連接的每一方都有固定大小的緩衝空間,TCP的接收端只允許發送端發送接收端緩衝區能接納的數據。當接收方來不及處理髮送方的數據,能提示發送方降低發送的速率,防止包丟失。TCP使用的流量控制協議是可變大小的滑動窗口協議。接收方有即時窗口(滑動窗口),隨ACK報文發送。(TCP 利用滑動窗口實現流量控制)
5、滑動窗口:
-
應答機制:假如TCP 每發送一個數據報,都要進行一次確認應答。當上一個數據包收到了應答了, 再發送下一個,這個模式就有點像我和你面對面聊天,你一句我一句。這樣的傳輸方式有一個缺點:數據包的往返時間越長,通信的效率就越低。為解決這個問題,我們可以使用累計應答。
-
累計應答:接收方在接收到多個數據包後再根據接收到的數據包進行應答,也稱為累計確認。
-
窗口:窗口的實現實際上是操作系統開闢的一個緩存空間,接收方根據實際情況在應答數據包中告知自己的接收窗口大小。窗口大小就是指無需等待確認應答,而可以繼續發送數據的最大值(以字節為單位)。發送方主機在等到確認應答返回之前,必須在緩衝區(發送窗口)中保留已發送的數據。如果按期收到確認應答,此時數據就可以從緩存區清除。
-
滑動窗口:如果發送窗口左部的字節已經發送並且收到了確認,那麼就將發送窗口向右滑動一定距離,直到左部第一個字節不是已發送並且已確認的狀態;接收窗口的滑動類似,接收窗口左部字節已經發送確認並交付主機,就向右滑動接收窗口。
-
假設主機A發送數據給主機B,在建立TCP連接時,主機B在確認報文中將自己的接收窗口rwnd告知主機A。(假設接收窗口大小為400)
-
主機A根據主機B的接收窗口大小創建自己的發送窗口(在內存上開闢一塊空間緩存一個接收窗口大小的數據),並且假設每個數據包中載荷數據為100Bytes
-
主機A分別將第一組數據(為了方便講解假設seq=1,實際上應該為seq=ISN+1), 第二組數據(seq=101)、第三組數據(seq=201)、第四組數據(seq=301)發送給主機B,中間不需要等待主機B的應答數據報(累計應答)
-
假設第三組數據(seq=201)在輸出過程中被丟失了,儘管主機B接收到了第四組數據,但是因為累計應答時只應答最大連續報文,所以應答數據包中ack=201表示序號201之前的所有數據全部正確接收。假設主機B將接收窗口大小調整為300,在應答報文中rwnd=300
-
主機A接收到應答數據報後,將自己發送窗口中的序號1~200的數據刪除,發送窗口往前(向右)移動並且將大小重新設置為300(開闢接收窗口大小的緩存序號為201-500的數據)
-
主機B將序號為201,301,401的數據報發送給主機B
-
假設以上三組數據報沒有丟失,主機B在接收到所有數據後發送應答數據報,ack=501,並且將窗口調整為100,rwnd=100A
-
主機A接收到應答數據報後,將自己發送窗口中的序號201~500的數據刪除,發送窗口往前(向右)移動並且將大小重新設置為100(開闢接收窗口大小的緩存序號為501-600的數據)
-
主機A將序號位600的數據報發送給主機B ,按照以上邏輯知道數據發送完畢。
-
接收窗口為0的處理:當發送窗口被調整為0後,發送方就不能再發送數據了,假如接收方的接收窗口調整為大於0了,如果不採取特殊措施發送方是不知道的,因為接收方不會主動告知發送方自己接收窗口的大小。這時就需要持續計數器了,當發送方接收到接收窗口為0的應答報文時馬上啓動一個持續計時器,當定時達到時主動向接收方發送一個零窗口探測報文,該報文只攜帶一個字節的數據,然後這種邏輯直到接收方回覆的接收窗口大於0。
-
5.5 用户數據報協議UDP
1、UDP概述
UDP 是User Datagram Protocol的簡稱, 中文名是用户數據包協議。
UDP是一種無連接的不可靠的傳輸協議(不需要進行三次握手和四次揮手)。
UDP不提供數據包分組、組裝和不能對數據包進行排序的缺點,也就是説,當報文發送之後,是無法得知其是否安全完整到達的,因此適合實時數據傳輸,例如:
IP電話、網絡視頻會議
等實時應用。
2、UDP的頭部
3、UDP的應用
使用UDP運輸協議可以進行單播、多播和廣播。
-
單播應用:DNS域名解析,域名系統是因特網上作為域名和IP(Internet Protocol Address)地址相互映射的一個分佈式數據庫。
-
瀏覽器如何通過域名去查詢URL對應的IP(對應服務器地址)呢?
-
瀏覽器緩存:瀏覽器會按照一定的頻率緩存DNS記錄。
-
操作系統緩存:如果瀏覽器緩存中找不到需要的DNS記錄,那就去操作系統中找。
-
路由緩存:路由器也有DNS緩存。
-
ISP的DNS服務器:ISP是互聯網服務提供商(Internet Service Provider)的簡稱,ISP有專門的DNS服務器應對DNS查詢請求
-
根服務器:ISP的DNS服務器還找不到的話,它就會向根服務器發出請求,進行遞歸查詢
-
-
當兩個網絡應用進程間需要快速傳輸大文件(音視頻文件、圖片文件等)時也可以使用UDP單播。
-
-
多播應用:網絡視頻會議、教學,視頻監控等。IP多播(也稱多址廣播或組播)技術,是一種允許一台或多台主機(多播源)發送單一數據包到多台主機(一次的,同時的)的TCP/IP網絡技術。IP多播通信必須依賴於IP多播地址,在IPv4中它是一個D類IP地址,範圍從224.0.0.0到239.255.255.255。
-
廣播的應用:ARP數據報廣播
注意:在進行UDP編程時,UDP包的大小可以達到64k,但實際上MTU大小隻有1k多,如果直接發一個超過MTU大小的包,就會在網絡層被分片,這樣的問題是,如果只要有一個分片在傳輸中出錯了即校驗不正確(這是較容易發生的),整個傳輸的udp包就被丟棄。注意是整個而不是單個分片。這就是為什麼發送UDP包通常也是1k多大小的原因。
5.6 TCP和UDP的區別
1、對比
除了上圖所展示的區別外,使用TCP傳輸協議時,一旦建立好TCP連接後,系統需要實時的維護該連接,所以TCP所消耗的系統資源比UDP要多。
另外因為TCP的可靠性傳輸機制導致TCP傳輸數據時比UDP要慢的多。
2、TCP的長連接和短鏈接
-
長連接:TCP通信雙方在建立好連接後,在較長一段時間內保持連接,直至某一方主動關閉連接。長連接多用於操作頻繁,點對點的通訊,例如在物聯網開發中某下位機需要定時地頻繁向服務發送數據等。
-
短鏈接:通信雙方有數據交互時,就建立一個TCP連接,數據發送完成後,則斷開此TCP連接。短連接多用於操作不頻繁,點對點的通訊,例如:在HTTP/1.0中默認使用短連接。也就是説,客户端和服務器每進行一次HTTP操作,就建立一次連接,任務結束就中斷連接。
-
長連接短鏈接對比
3、UDP的靈活應用
應用項目:高壓線覆冰監測系統。
監控中心為了較快顯示工業攝像頭採集到的高清照片,監控子站主機需要使用UDP與監控中心主機進行圖像數據的傳輸,但是因為使用了UDP傳輸協議可能會導致某些數據報丟失。為了保證圖像數據的完整性,我們需要在應用層設計私有協議保障丟失的數據報能夠進行重傳。
6 wireshark
6.1 wireshark的安裝
6.2 界面介紹
1、網卡選擇
2、首頁
常用按鈕從左到右的功能依次是:
- 列出可用接口。
- 抓包時需要設置的一些選項。一般會保留最後一次的設置結果。
- 開始新的一次抓包。
- 暫停抓包。
- 繼續進行本次抓包。
- 打開抓包文件。可以打開之前抓包保存後的文件。不僅可以打開wireshark軟件保存的文件,也可以打開tcpdump使用-w參數保存的文件。
- 保存文件。把本次抓包或者分析的結果進行保存。
- 關閉打開的文件。文件被關閉後,就會切換到初始界面。
- 重載抓包文件。
3、數據包列表, 顯示捕獲到的數據包,每個數據包編號,時間戳,源地址,目標地址,協議,長度,以及數據包信息。
4、數據包詳細信息,在數據包列表中選擇指定數據包,在數據包詳細信息中會顯示數據包的所有詳細信息內容。數據包詳細信息面板是最重要的,用來查看協議中的每一個字段。各行信息分別為
- Frame: 物理層的數據幀概況
- Ethernet II: 數據鏈路層以太網幀頭部信息
- Internet Protocol Version 4: 互聯網層IP包頭部信息
- User Datagram Protocol: 傳輸層的數據段頭部信息,此處是UDP
- Hypertext Transfer Protocol: 應用層的信息,此處是HTTP協議
5、我們可以在過濾器窗口篩選出http協議的相關數據包,並且查看TCP包的每個字段
6.3 wireshark過濾器
初學者使用wireshark時,將會得到大量的冗餘數據包列表,以至於很難找到自己自己抓取的數據包部分。wireshar工具中自帶了兩種類型的過濾器,學會使用這兩種過濾器會幫助我們在大量的數據中迅速找到我們需要的信息。
1、設置數據抓取選項
點擊常用按鈕中的設置按鈕,就會彈出設置選項對話框。在這個對話框中我們可以選中需要監聽的接口,設置混雜模式,設置抓取數據包的過濾條件。如下圖:
首先,選中需要監聽獲取數據包的接口。接口列表區列出了所有可以使用的接口。如果接口前面的複選框被選中,説明對這個接口監聽捕獲數據包。
其次,設置混雜模式。設置混雜模式的作用是將網卡設置到混雜模式。如果不設置混雜模式,你的計算機只能獲取數據包發往的目標是你計算機和從你計算機出去的數據包。如果設置了混雜模式,你就可以捕獲局域網中所有的數據包。如果窗口中的 “Use promiscuous mode on all interfaces”前面的複選框被選中,説明對所有的接口使用混雜模式。如果想單獨設置,可以雙擊接口列表中的接口,會彈出如下的對話框。然後選中或者去掉“Capture packets in promiscuous mode”前面複選框。然後點ok按鈕。
2、顯示過濾器
顯示過濾器應用於捕獲文件,用來告訴wireshark只顯示那些符合過濾條件的數據包。顯示過濾器比捕獲過濾器更常用。他可以用來過濾不想看到的數據包,但是不會把數據刪除。如果想恢復原狀,只要把過濾條件刪除即可。
過濾器表達式對話框,是的wireshark的可以很簡單的設置過濾表達式。點擊“Expression”按鈕就可以打開這個對話框。如下圖:
對話框分左中右三部分。左邊為可以使用的所有協議域(過濾項)。右邊為和協議域相關的條件值(過濾值)。中間為協議域與條件值之間的關係(過濾關係)。
一條基本的表達式由過濾項、過濾關係、過濾值三項組成。
比如:http contains baidu.com, http為過濾項, contains 為過濾關係, baidu.com 為過濾值,表示顯示http協議包中包含關鍵詞“baidu.com”的所有數據包
比如:ip.addr == 192.168.1.1,ip.addr是過濾項、==是過濾關係,192.168.1.1是過濾值(整條表達示的意思是找出所有ip協議中源或目標ip、等於、192.168.1.1的數據包)
3、過濾關係
過濾關係就是大於、小於、等於等幾種等式關係,我們可以直接看官方表格,注意其中有“English”和“C-like”兩個字段,這個意思是説“English”和“C-like”這兩種寫法在wireshark中是等價的、都是可用的。
4、複合過濾表達式
所謂複合過濾表達式,就是指由多條基本過濾表達式組合而成的表達示。基本過濾表達式的寫法還是不變的,複合過濾表達示多出來的東西就只是基本過濾表達示的“連接詞”。我們依然直接參照官方表格,同樣“English”和“C-like”這兩個字段還是説明這兩種寫法在wireshark中是等價的、都是可用的。
5、執行ping www.baidu.com獲取的數據包列表如下
觀察上述獲取的數據包列表,含有大量的無效數據。這時可以通過設置顯示器過濾條件進行提取分析信息。ip.addr == 14.215.177.39 and icmp。並進行過濾
6、常見用顯示過濾需求及其對應表達式
- 數據鏈路層:
- 篩選mac地址為04:f9:38:ad:13:26的數據包:eth.src == 04:f9:38:ad:13:26
- 篩選源mac地址為04:f9:38:ad:13:26的數據包:eth.src == 04:f9:38:ad:13:26
- 網絡層:
- 篩選ip地址為192.168.1.1的數據包:ip.addr == 192.168.1.1
- 篩選192.168.1.0網段的數據: ip contains 192.168.1
- 篩選192.168.1.1和192.168.1.2之間的數據包:ip.addr == 192.168.1.1 && ip.addr == 192.168.1.2
- 篩選從192.168.1.1到192.168.1.2的數據包:ip.src == 192.168.1.1 && ip.dst == 192.168.1.2
- 傳輸層:
- 篩選tcp協議的數據包:tcp
- 篩選除tcp協議以外的數據包:!tcp
- 篩選端口為80的數據包:tcp.port == 80
- 篩選12345端口和80端口之間的數據包:tcp.port == 12345 && tcp.port == 80
- 篩選從12345端口到80端口的數據包:tcp.srcport == 12345 && tcp.dstport == 80
- 應用層:
- 特別説明:http中http.request表示請求頭中的第一行(如GET index.jsp HTTP/1.1),http.response表示響應頭中的第一行(如HTTP/1.1 200 OK),其他頭部都用http.header_name形式。
- 篩選url中包含.php的http數據包:http.request.uri contains .php
- 篩選內容包含username的http數據包:http contains username
6.4 使用wireshark分析TCP三次握手
1、設置過濾阿里雲服務器的IP地址:ip.addr == 47.104.157.132
2、使用TCP調試助手連接阿里雲服務器上的TCP服務端
3、我們發現wireshark捕獲到了3條TCP數據
-
第一次握手數據包:客户端發送一個TCP,標誌位為SYN,序列號為0, 代表客户端請求建立連接。 如下圖
-
第二次握手:服務器發回確認包, 標誌位為 SYN,ACK. 將確認序號(Acknowledgement Number)設置為客户的seq加1以.即0+1=1, 如下圖
-
第三次握手:客户端再次發送確認包(ACK) SYN標誌位為0,ACK標誌位為1,如下圖:
6.5 使用wireshark分析TCP數據包
1、使用tcp調試助手向阿里雲服務器TCP服務端發送hello,並且接收到服務器返回的hello world
2、我們發現wireshark捕獲到了四條TCP數據
7 應用層
7.1 應用層概述
應用層是網絡體系結構中的最上層,所有的網絡應用程序和服務都工作在應用層。
常見的網絡應用程序:瀏覽器、手遊、即時通信軟件、網站的後台程序、網遊的主程等。
常見的網絡服務:telnet、FTP、ssh等。
7.2 萬維網
1、萬維網概述
萬維網WWW (World Wide Web)並非某種特殊的計算機網絡。它是一個大規模的、聯機式的信息儲藏所,是運行在因特網上的一個分佈式應用。
萬維網利用網頁之間的超鏈接將不同網站的網頁鏈接成一張邏輯上的信息網。
萬維網是歐洲粒子物理實驗室的Tim Berners-Lee(蒂姆伯納斯李)最初於1989年3月提出的。
1993年2月,第一個圖形界面的瀏覽器Mosaic誕生,1995年著名的Netscape Navigator(網景)瀏覽器上市
目前流行的瀏覽器有以下幾種:
2、統一資源定位符URL
當我們訪問某個網頁時,在瀏覽器的地址欄會出現一長串的字符,這一長串的字符我們稱之為統一資源定位符URL。
我們所訪問到的網頁上的內容其實是服務器上的某個資源,每個資源在服務器上都對應着一個位置。
萬維網使用統一資源定位符URL來指明因特網上任何種類“資源”的位置。
URL的一般形式由以下四個部分組成:
我們可以將某個網頁另存為文件,存儲後有一個html文件和一個文件夾。
文件夾中的內容如下:
萬維網文檔:由HTMLCSS、JavaSaript編寫的方維網文檔
7.3 HTTP協議
1、瀏覽器發送HTTP請求的過程
2、HTTP協議概述
超文本傳輸協議HTTP(HyperText Transfer Protocol)定義了瀏覽器(即萬維網客户進程)怎樣向萬維網服務器請求萬維網文檔,以及萬維網服務器怎樣把萬維網文檔傳送給瀏覽器。是處理客户端和服務端之間的通信
3、HTTP/1.0
HTTP/1.0採用非持續連接方式。在該方式下,每次瀏覽器要請求一個文件都要與服務器建立TCP連接,當收到響應後就立即關閉連接。每請求一個文檔就要有兩倍的RTT的開銷。若一個網頁上有很多引用對象(例如圖片等)
那麼請求每一個對象都需要花費2RTT的時間。
為了減小時延,瀏覽器通常會建立多個並行的TCP連接同時請求多個對象。但是,這會大量佔用萬維網服務器的資源,特別是萬維網服務器往往要同時服務於大量客户的請求,這會使其負擔很重。
4、HTTP/1.1
HTTP/1.1採用持續連接方式。在該方式下,萬維網服務器在發送響應後仍然保持這條連接,使同一個客户(瀏覽器)和該服務器可以繼續在這條連接上傳送後續的HTTP請求報文和響應報文。這並不侷限於傳送同一個頁面上引用的對象,而是隻要這些文檔都在同一個服務器上就行。
為了進一步提高效率,HTTP/1.1的持續連接還可以使用流水線方式工作,即瀏覽器在收到HTTP的響應報文之前就能夠連續發送多個請求報文。這樣的一個接一個的請求報文到達服務器後,服務器就發回一個接一個的響應報文。這樣就節省了很多個RTT時間,使TCP連接中的空閒時間減少,提高了下載文檔的效率。
5、HTTP報文格式
HTTP是面向文本的,其報文中的每一個字段都是一些ASCII碼串,並且每個字段的長度都是不確定的。
我們可以利用瀏覽器的開發者工具查看某個HTTP請求的報文:
HTTP協議支持的請求方法:
HTTP常見的請求頭:
Connection:決定HTTP連接(不是TCP連接)是否在當前事務完成後關閉。
Keep-Alive:多次請求複用一個TCP連接。
Keep-Alive: timeout=5, max=1000
User-Agent:這個字段可以幫助統計客户端用了什麼瀏覽器、操作系統等
Content-Type:請求的時候,告知服務端數據的媒體類(MediaType/MIME Type)。返回的時候告知客户端,數據的媒體類型。
Cookie:Cookie提供了一種機制使得萬維網服務器能夠“記住”用户,而無需用户主動提供用户標識信息。也就是説,Cookie是一種對無狀態的HTTP進行狀態化的技術。
HTTP是無狀態的:協議對於事務處理沒有記憶能力,對同一個url請求沒有上下文關係,每次的請求都是獨立的,它的執行情況和結果與前面的請求和之後的請求是無直接關係的,它不會受前面的請求應答情況直接影響,也不會直接影響後面的請求應答情況
使用Cookie在服務器上記錄用户信息:
狀態碼:web服務器告訴客户端請求的狀態
常見的狀態碼為以下四類:
-
200狀態碼
-
-
3xx狀態碼
-
4xx狀態碼
-
5xx狀態碼