TCP/IP協議棧

一、參考書籍

(1)TCP/IP詳解 卷1:協議
(2)計算機網絡:自頂向下方法
在這裏插入圖片描述

二、必須掌握的內容

1.TCP/IP協議體系的認知

(1)分層。一部分處於用戶態,一部分處於內核態。數據鏈路層,網絡層,傳輸層封裝於操作系統內核態。應用層存在於操作系統的用戶空間,包括DNS,FTP,HTTPs,HTTP,工作中接觸較多的是應用層的部分。但其它層的原理必須理解,面試考察。
(2)層與層之間下層對上層是透明的,傳輸在每一層是對等的。

2.數據鏈路層

(1)以太網幀的格式。
(2)MTU(最大傳輸單元)的概念。
(3)ARP協議和RARP協議(地址協議和逆地址協議,網卡MAC地址和IP地址互查機制)(網絡層和鏈路層的中間層)ARP報文格式,查詢原理,緩存機制

3.網絡層

(1)掌握IP首部格式:如16位分片標識、DF不分片標誌、MF更多分片標誌、13位片偏移、8位生存時間TTL、16位的首部檢驗和等等。
(2)掌握如何IP分片:如總長大於MTU值,畫分片情況;如何避免IP分片(在應用層或傳輸層做限制);確定分片順序;確定分片是否全部到達。
(3)掌握IP選路。會看路由表。Route print 。路由表每個字段的含義
(4)掌握ICMP(因特網控制報文協議):(理解爲網絡層和傳輸層的中間協議,)報文格式;2種查詢報文+5種差錯報文。

4.傳輸層

(1)掌握UDP協議:無連接,不可靠的特點;首部各個字段
(2)掌握TCP協議(面試集中考察):面向連接,可靠;首部各字段(序號,確認號,首部長度,窗口大小,校驗和等特別的,完成可靠功能的部分);TCP連接控制機制(三次握手,四次揮手,同時打開,同時關閉,半關閉);TCP流量控制機制(滑動窗口、慢啓動、擁塞避免、快速重傳、快速恢復的算法原理);TCP超時重傳機制(四個定時器);一些問題(爲什麼三次握手四次揮手?爲什麼TCP和UDP都存在尾包頭?

5.應用層

(1)掌握DNS(域名解析)協議:名字空間;DNS指針查詢(反向查找或逆向解析)基本原理、DNS緩存
(2)FTP協議(活化石):控制連接和數據連接(爲什麼需要這兩種連接);兩種工作模式(PASV+PORT);各種FTP指令和響應碼;FTP斷點續傳,匿名FTP
(3)HTTP協議:報文格式(請求報文、響應報文、請求頭各種字段、響應頭各種字段);HTTP狀態碼。
(4)HTTPS協議:詳細握手過程;各種算法(摘要算法、數字簽名、數字證書的原理與過程)

三、常見面試題目

1.分層的概念

(1)OSI 有哪幾層,會畫出來,知道主要幾層的各自作用

1. 應用層(數據):確定進程之間通信的性質以滿足用戶需要以及提供網絡與用戶應用
2. 表示層(數據):主要解決擁護信息的語法表示問題,如加密解密
3. 會話層(數據):提供包括訪問驗證和會話管理在內的建立和維護應用之間通信的機
制,如服務器驗證用戶登錄便是由會話層完成的
4. 傳輸層(段):實現網絡不同主機上用戶進程之間的數據通信,可靠
與不可靠的傳輸,傳輸層的錯誤檢測,流量控制等
5. 網絡層(包):提供邏輯地址(IP)、選路,數據從源端到目的端的
傳輸
6. 數據鏈路層(幀):將上層數據封裝成幀,用 MAC 地址訪問媒介,錯誤檢測與修正
7. 物理層(比特流):設備之間比特流的傳輸,物理接口,電氣特性等

(2)知道各個層使用的是哪個數據交換設備。(交換機、路由器、網關)

1. 網關:應用層、傳輸層(網關在傳輸層上以實現網絡互連,是最複雜的網絡互連設
備,僅用於兩個高層協議不同的網絡互連。網關的結構也和路由器類似,不同的是
互連層。網關既可以用於廣域網互連,也可以用於局域網互連)
2. 路由器:網絡層(路由選擇、存儲轉發)
3. 交換機:數據鏈路層、網絡層(識別數據包中的 MAC 地址信息,根據 MAC 地址進
行轉發,並將這些 MAC 地址與對應的端口記錄在自己內部的一個地址表中)
4. 網橋:數據鏈路層(將兩個 LAN 連起來,根據 MAC 地址來轉發幀)
5. 集線器(Hub):物理層(純硬件設備,主要用來連接計算機等網絡終端)
6. 中繼器:物理層(在比特級別對網絡信號進行再生和重定時,從而使得它們能夠在
網絡上傳輸更長的距離)

2.數據鏈路層

(1)ARP協議
問題 1 : ARP 的作用?
ARP 爲 IP 地址到對應的硬件地址提供動態映射。

問題 2 :點對點鏈路使用 ARP 嗎?
不使用

問題 3 : ARP 高效運行的關鍵是什麼?
關鍵是每個主機上都有一個 ARP 的高速緩存。

問題 4 : ARP 報文的各個字段以及含義?
在這裏插入圖片描述

幀類型:ARP:0x0806 (2)
ARP 首部:
硬件類型:硬件地址的類型,1 表示以太網地址。(2)
協議類型:協議地址的類型,0x0800 表示 IP 地址。(2)
硬件地址長度:字節爲單位 6 (1)
協議地址長度:字節爲單位 4 (1)
操作類型:2 個字節。 ARP 請求 1,ARP 回覆 2,RARP 請求 3,RARP 應答 4。(2)
發送者硬件地址:6 個字節(6)
發送者 IP 地址:4 個字節(4)
目標硬件地址:6 個字節(6)
目標 IP 地址:4 個字節(4)
CRC 校驗:4 個字節 (4)

總結:
arp 總共 28 個字節。
記憶方法: 以太網先目地後源,ARP 先發送端後目地端。先硬件後協議。

問題 5 : ARP 協議有什麼弱點?
(1)緩存:主機的地址映射是基於高速緩存的,動態更新的。地址刷新是有時間限制的。 可以通過下次更新之前修改計算機上的地址緩存,造成拒絕服務攻擊或者 ARP 欺騙。
(2)廣播: 攻擊者可以僞裝 ARP 應答。
(3)ARP 應答沒有認證,都是合法的。可以在不接受到請求的時候就發出應答包。

問題 6 : ARP 代理的概念和應用場景
若 ARP 請求是從一個網絡的主機發送給另一個網絡上的主機,那麼連接這兩個網絡的路由
器就可以回答該請求,這個過程叫做 ARP 代理。
ARP 代理路由器響應 ARP 請求的 MAC 地址爲路由器的 MAC 地址而非 ARP 請求的主機的 MAC 地址。
ARP 代理的應用環境:兩個物理網絡之間的路由是使用相同的網絡號,兩個路由器設置成 ARP 代理,實現相互隱瞞物理網絡

問題 7: 免費 ARP
指主機發送 ARP 查找自己的 IP 地址,即數據鏈路層 SIP=DIP
作用有兩個:
1)一個主機使用免費 ARP 確定是有存在有其他主機設置了相同的 IP 地址
2)如果發送免費 ARP 的主機改變了 MAC 地址,可以通過發送免費 ARP 的方式告知其他主機端更新 ARP 表

問題 8 : 數據鏈路層 MTU 的最大值和最小值是多少?

  1. 數據鏈路層的 最小 MTU 爲 64 字節。
    對於IEEE802.3,兩個站點的最遠距離不超過2500m,由 4 箇中繼器連接而成,其衝突窗口爲 51.2us(2 倍電纜傳播延遲加上 4 箇中繼器的雙向延遲).
    對於 10Mbps 的 IEEE802.3 來說,這個時間等於發送 64 字節,即 512 位的時間,64 字節就是由此而來的。如果一個站點已經傳輸了 512bit,就認爲它已經佔用了這個信道。

  2. 數據鏈路層的 最大 MTU 爲 1500 字節,即數據字段的最大長度

3.網絡層

(1)IP協議

問題 1 :如何理解 IP 的不可靠和無連接。
不可靠:指的是不能保證數據報能成功地到達目的地。
發生錯誤時候,丟棄該數據包,發送 ICMP 消息給信源端。 可靠性由上層提供。
無連接:IP 不維護關於後續數據報的狀態信息。

體現在,IP 數據可以不按順序發送和接收。A 發送連續的數據報,到達 B 不一定是連續的,
來回路由選擇可能不一樣,路線也不一樣,到達先後順序也不一樣

問題 2 : IP 報文的格式和各個字段的含義。
在這裏插入圖片描述
版本號: IPV4 就是 4,IPV6 就是 6 (4)
首部長度: 4 個字節爲單位。最小爲 5,最大爲 15。所以最小長度 20 個字節,最大爲 60
個字節。(4)
服務類型: Qos 用,目前不怎麼使用。(8)
總長度: 字節爲單位。 最多可以傳送 65535 字節的 IP 數據包。(16)
標識字段(8)
標誌 (3)
段偏移(5)與分片有關。
生存時間 TTL: 經過一個路由器減一。 字段爲 0 時,數據報被丟棄,並且發送 ICMP 報文通知源主機。目的是防止數據報在選路時無休止地在網絡中流動。(8)
協議:區分上層協議 (8)
首部校驗和:僅對首部進行校驗。(16)【對比: ICMP,IGMP,TCP,UDP:對首部和數據進行校驗】
源地址:(32)
目的地址:(32)

問題 3 :爲什麼 IP 首部中要有總長度字段?
因爲一些數據鏈路(以太網)需要填充一些數據以達到最小長度。因爲以太網幀的最小長度是 46 個字節,但是 IP 長度可能更短,所以需要總長度來確定 IP 數據部分的內容。

問題 4:IP 首部校驗和怎麼計算的,與 ICMP , IGMP , TCP ,UDP 的首部校驗和有什麼區別
(1) 先把校驗和字段置 0。
(2) 對首部中每個 16 位比特進行二進制反碼求和。
(3) 結果存在檢驗和字段中。
(4) 收到一份 IP 數據包後,同樣對首部中每個 16bit 二進制反碼求和。
(5) 最後結果全爲 1,表示正確,否則表示錯誤。
(6) 如果是錯誤的, IP 就丟棄該數據報,但是不生成差錯報文,由上層去處理。

共同點:用到的算法都是一樣的。
區別: IP 計算的時候沒有將數據包括在內。
ICMP, IGMP, TCP, UDP 同時覆蓋首部和數據檢驗碼。

問題 5: 主機和路由器本質區別是?
主機從不把數據報從一個接口轉發到另一個接口,而路由器則要轉發數據報。

問題 6: IP 路由選擇的過程是怎麼樣的?
根據最長匹配原則,找到條目,發送到指定的路由器。如果不能找到,返回一個“主機不可達”或“網絡不可達”的錯誤。

問題 7: IP 路由選擇的特性有什麼?
(1) IP 路由選擇是逐跳進行的。
IP 並不知道到達任何目的的完整路徑,只提供下一跳地址。
(2) 爲一個網絡指定一個路由器,而不是爲每個主機指定一個路由器。這樣可以縮小路由表規模。

問題 8: IP 搜索路由表的步驟
搜索匹配的主機地址 ----》搜索匹配的網絡地址 ----》搜索默認選項

IP 層進行的選路實際上是一種選路機制,它搜索路由表並決定向哪個網絡接口發送分組。

問題 9:如果路由表中沒有默認項,而又沒有找到匹配項,這時如何處理?
結果取決於該 IP 數據報是由主機產生的還是被轉發的。
如果數據報是由本機產生的,那麼就給發送該數據報的應用程序返回一個差錯,或者是“主機不可達差錯”或者是“網絡不可達差錯”。
如果是被轉發的數據報,就給原始發送一份 ICMP 主機不可達的差錯報文。

問題 10: IP 地址的分類,如何劃分的,及會計算各類地址支持的主機數

1. A 類地址:首位爲 0, 1.0.0.1~~126.255.255.254;主機號 24 位
2. B 類地址:首位爲 10, 128.0.0.1~~191.255.255.254;主機號 16 位
3. C 類地址:首位爲 110, 192.0.0.1~~223.255.255.254;主機號 8 位
4. D 類地址(多播地址,也叫做組播地址):首位爲 1110, 224.0.0.1~~239.255.255.254
5. E 類地址:此類地址是保留地址,首位爲 11110, 240.0.0.1~~254.255.255.254

(2)ICMP協議

問題 1: ICMP 的層次和作用。
在這裏插入圖片描述
ICMP 一般認爲是在三層的。主要傳遞一些差錯報文和其他需要注意的信息。

問題 2: ICMP 報文的分類?
ICMP 分爲兩類,一類是 ICMP 查詢報文,另一類是 ICMP 差錯報文。
在這裏插入圖片描述
問題 3: ICMP 的主機不可達報文是在什麼情況下發出的?
三層設備(路由器)給該主機尋路時,沒有找到相應路徑,向源 IP 發回 ICMP 主機不可達

問題 4:什麼情況不會導致產生 ICMP 差錯報文?

1) ICMP 差錯報文。
2) 目的地址是廣播地址或者多播地址的 IP 數據報。
3) 鏈路層廣播的數據報
4) 不是 IP 分片的第一片
5) 源地址不是單個主機的數據包。

問題 5: ICMP 重定向差錯報文是怎麼來的,在何種場合出現?
在這裏插入圖片描述

1) 主機發送 IP 數據報給 R1,因爲主機的默認路由指向的下一跳是 R1。
2) R1 收到數據報並且檢查它的路由表,發現 R2 是發送該數據報的下一跳。當他將數
據報發送給 R2 的時候,發現發送的接口與接受的端口是一樣的,因此同時發送一
個 ICMP 重定向報文給主機。
3) R1 接受到 ICMP 重定向報文後,接下來的數據報就發送給 R2,而不再發送給 R1。


問題 6:重定向報文有什麼規則?
重定向報文只能有路由器生成。
重定向報文是爲主機而不是爲路由器使用的。

問題 7: Ping 命令的具體過程是怎麼樣的?
參考文章: 《對於 Ping 的過程,你真的瞭解嗎? 》
https://mp.weixin.qq.com/s/DfQT3Vw2xaq60YIil-7Yxw

四、傳輸層

1.UDP協議

問題 1: UDP 和 TCP 的簡單介紹
UDP 是一個簡單的面向數據報的運輸層協議:進程的每個輸出操作都正好產生一個 UDP 數據報,並組裝成一份待發送的 IP 數據報。

TCP 是面向流字符,應用程序產生的全體數據與真正發送的單個 IP 數據報可能沒什麼聯繫。

問題 2: UDP 報頭字段和含義?
在這裏插入圖片描述
源端口號(2)
目地端口號(2)
UDP 長度:是 UDP 的報文總長度,是多於的。 IP 總長度減去首部長度就是此值。(2)
UDP 校驗和:注意點:校驗和是可選的。 (TCP 是必選的)校驗和覆蓋 UDP 首部和數據
(TCP 也一樣覆蓋首部和數據,但是 IP 指覆蓋首部) (2)

問題 3: UDP 的校驗和是怎麼計算的?
UDP 的校驗和要計算首部和數據部分。首部還包括僞首部。
在這裏插入圖片描述
多了 12 個字節的僞首部。
注意點: UDP 長度計算兩次。
如果檢驗和有錯,則 UDP 數據報被悄悄丟棄,不產生任何差錯報文。

問題 4:爲什麼要加有僞首部?
目的是讓 UDP 兩次檢查數據是否已經正確到達目的地。
IP 接受正確的目的地址,傳送到正確的上層程序。
所有僞首部包括:源 IP 地址,目的 IP 地址, 0,協議號, UDP 長度

2.TCP協議

問題 1: TCP 通過哪些方式來保證可靠性?
1) 應用數據被分割成 TCP 認爲最適合發送的數據塊。
2) 確認機制,發送報文後,等待確認。
3) 重發機制,沒有收到確認,將重發數據段。
4) 保持它首部和數據的校驗和。 確認數據的準確性。
5) 排序,丟棄重複的,流量控制

問題 2: TCP 與 UDP 的概念相互的區別及優劣

1. TCP 面向連接, UDP 面向無鏈接
2. TCP 面向報文, UDP 面向字節流
3. TCP 提供可靠傳輸服務(數據順序、正確性), UDP 傳輸不可靠
4. TCP 協議傳輸速度慢, UDP 協議傳輸速度快
5. TCP 協議對系統資源要求多(頭部開銷大), UDP 協議要求少

問題 3: TCP、 UDP 爲什麼存在僞包頭?
UDP(TCP)檢驗和:是根據 UDP(TCP)數據報和僞報頭計算得到的差錯檢測值。
僞報頭包含源和目的 IP 地址,以及來自 IP 數據報報頭的協議值。 IP 數據報在網絡中傳送時
包含 UDP 數據報。
僞報頭並不會在網絡中傳送,校驗和中所包含的僞報頭內容可以避免目的端錯誤地接收錯誤
路由的數據報。校驗和值的計算方法和 IP 報頭檢驗和的計算方法類似

問題 4: 爲什麼要 3 次握手, 4 次揮手

1. 3 次握手:防止已過期的連接請求報文突然又傳送到服務器,因而產生錯誤
2. 4 次揮手:確保數據能夠完成傳輸,但關閉連接時,當收到對方的 FIN 報文通知時,它
僅僅表示對方沒有數據發送給你了;但未必你所有的數據都全部發送給對方了,所以你可以
未必會馬上會關閉 SOCKET,也即你可能還需要發送一些數據給對方之後,再發送 FIN 報文
給對方來表示你同意現在可以關閉連接了,所以它這裏的 ACK 報文和 FIN 報文多數情況下
都是分開發送的

問題 5: TCP 的流量控制機制
主要是下面的四種機制:
慢啓動(慢開始):

1. 慢開始不是指 cwnd 的增長速度慢(指數增長),而是指 TCP 開始發送設置 cwnd=1。
2. 思路:不要一開始就發送大量的數據,先探測一下網絡的擁塞程度,也就是說由小到大
逐漸增加擁塞窗口的大小。這裏用報文段的個數的擁塞窗口大小舉例說明慢開始算法,實時
擁塞窗口大小是以字節爲單位的。
3. 爲了防止 cwnd 增長過大引起網絡擁塞,設置一個慢開始門限(ssthresh 狀態變量)
當 cnwd< ssthresh,使用慢開始算法
當 cnwd=ssthresh,既可使用慢開始算法,也可以使用擁塞避免算法
當 cnwd> ssthresh,使用擁塞避免算法

擁塞避免:

1. 擁塞避免並非完全能夠避免擁塞,是說在擁塞避免階段將擁塞窗口控制爲按線性規律增
長,使網絡比較不容易出現擁塞。
2. 思路:讓擁塞窗口 cwnd 緩慢地增大,即每經過一個往返時間 RTT 就把發送方的擁塞控
制窗口加一。

無論是在慢開始階段還是在擁塞避免階段,只要發送方判斷網絡出現擁塞(其根據就是沒有
收到確認,雖然沒有收到確認可能是其他原因的分組丟失,但是因爲無法判定,所以都當做
擁塞來處理),就把慢開始門限設置爲出現擁塞時的發送窗口大小的一半。然後把擁塞窗口
設置爲 1,執行慢開始算法。 如圖所示:

在這裏插入圖片描述
快速重傳:

1. 快重傳要求接收方在收到一個失序的報文段後就立即發出重複確認(爲的是使發送方及
早知道有報文段沒有到達對方)而不要等到自己發送數據時捎帶確認。快重傳算法規定,發
送方只要一連收到三個重複確認就應當立即重傳對方尚未收到的報文段,而不必繼續等待設
置的重傳計時器時間到期。
2. 由於不需要等待設置的重傳計時器到期,能儘早重傳未被確認的報文段,能提高整個網
絡的吞吐量。

快速恢復:

1. 當發送方連續收到三個重複確認時,就執行“乘法減小”算法,把 ssthresh 門限減半。
但是接下去並不執行慢開始算法。
2. 考慮到如果網絡出現擁塞的話就不會收到好幾個重複的確認,所以發送方現在認爲網絡
可能沒有出現擁塞。所以此時不執行慢開始算法,而是將 cwnd 設置爲 ssthresh 的大小,
然後執行擁塞避免算法。

在這裏插入圖片描述

五、應用層

1.DNS

問題 0: DNS 的概念,用途, DNS 查詢的實現算法

(1) 概念
域名解析, www.xxx.com 轉換成 ip,能夠使用戶更方便的訪問互聯網,而不
用去記住能夠被機器直接讀取的 ip 地址
DNS 協議運行在 UDP 協議之上,使用端口號 53

(2)主機解析域名的順序
 瀏覽器緩存
找本機的 hosts 文件
 路由緩存
找 DNS 服務器(本地域名、頂級域名、根域名)

(3)迭代查詢、遞歸查詢

2.http基本格式

(1)http請求
在這裏插入圖片描述
(2)http相應
在這裏插入圖片描述
問題 2: GET、 POST 區別
在這裏插入圖片描述

問題3:Cookies 和 Session 的區別

1. cookie 是一種發送到客戶瀏覽器的文本串句柄,並保存在客戶機硬盤上,可以用來在
某個 WEB 站點會話間持久的保持數據
2. session 其實指的就是訪問者從到達某個特定主頁到離開爲止的那段時間。 Session 其
實是利用 Cookie 進行信息處理的,當用戶首先進行了請求後,服務端就在用戶瀏覽器
上創建了一個 Cookie,當這個 Session 結束時,其實就是意味着這個 Cookie 就過期
了
3. cookie 數據保存在客戶端, session 數據保存在服務器端

問題 4: 一次完整的 HTTP 請求所經歷的步驟
比如:在瀏覽器中輸入 www.baidu.com 後執行的全部過程
在這裏插入圖片描述
也可以參考文章:《抓包實戰 | 瀏覽器裏的 HTTP 請求到底是如何完成的? 》
https://mp.weixin.qq.com/s/_fB7r53BGZRvpG9YAPRQ8A

問題 5: http2.0 和 http1.1 的區別
在這裏插入圖片描述

六、參考

from codesheep
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章