1. 程式人生 > IOS開發 >iOS | 面試知識整理 - 網路相關 (七)

iOS | 面試知識整理 - 網路相關 (七)

前言:

最近公司專案不怎麼忙,閒暇時間把iOS 在面試中可能會遇到的問題整理了一番,一部分題目是自己面試遇到的,一部分題目則是網上收錄的,方便自己鞏固複習,也分享給大家! 知識點比較多,比較雜,這裡做了分類,下面是分類連結地址;

面試知識點整理 - 目錄:

iOS | 面試知識整理 - OC基礎 (一)
iOS | 面試知識整理 - OC基礎 (二)
iOS | 面試知識整理 - OC基礎 (三)
iOS | 面試知識整理 - UI 相 關 (四)
iOS | 面試知識整理 - 記憶體管理 (五)
iOS | 面試知識整理 - 多 線 程 (六)
iOS | 面試知識整理 - 網路相關 (七)
iOS | 面試知識整理 - 資料持久化 (八)


iOS | 面試知識整理 - Swift 基礎 (九)

iOS | 面試知識整理 - 網路相關 (七)

1.如何理解HTTP?

HTTP本質上是一種協議,全稱是Hypertext Transfer Protocol,即超文字傳輸協議。HTTP是一個基於TCP/IP通訊協議來傳遞資料,該協議用於規定客戶端與服務端之間的傳輸規則,所傳輸的內容不侷限於文字(其實可以傳輸任意型別的資料)。

一次HTTP可以看做是一個事務,其工作過程分為4步:

  1. 客戶端與伺服器建立連線
  2. 建立連線後,客戶端給服務端傳送請求
  3. 伺服器收到訊息後,給與響應操作
  4. 客戶端收到訊息後,展示到螢幕上,斷開連線.

2.說一下 http中的 get 和 post 區別?

  • get 一般用於從服務端獲取資料,post 用於向服務端傳送資料
  • get 引數拼接在 url 地址裡面,post 引數則放在其包體裡,post 比 get 稍安全,隱祕
  • get 可以被快取,可以儲存在瀏覽器瀏覽歷史中

3. 一次完整的HTTP請求過程?當我們在瀏覽器的位址列輸入 'http://www.baidu.com ,然後回車,回車這一瞬間到看到頁面到底發生了什麼呢?

域名解析 --> 發起TCP的3次握手 --> 建立TCP連線後發起http請求 --> 伺服器響應http請求,瀏覽器得到html程式碼 --> 瀏覽器解析html程式碼,並請求html程式碼中的資源(如js、css、圖片等) --> 瀏覽器對頁面進行渲染呈現給使用者
複製程式碼

4.請求報文簡要說明?

請求報文主要包括: 請求行,請求頭,請求體

  1. 請求行: 請求行包含請求方法(Method)、請求統一資源識別符號(URI)、HTTP版本號
  2. 請求頭:請求頭主要存放對客戶端想給服務端的附加資訊下Host: 目標伺服器的網路地址 Accept: 讓服務端知道客戶端所能接收的資料型別,如text/html /Content-Length: body的長度 等等
  3. 請求體: 真正需要發給服務端的資料

5.響應報文簡要說明?

響應報文也包括三部分: 響應行,響應頭和響應實體
1.狀態行 :是服務端返回給客戶端的狀態資訊,包含HTTP版本號、狀態碼、狀態碼對應的英文名稱。
2.響應頭: 附加資訊和請求頭類似
3.響應體: 伺服器返回的真正資料

6.HTTP的特點有什麼?

HTTP 是一個屬於應用層的面向物件的協議,HTTP 協議一共有五大特點:

  1. 支援客戶/伺服器模式。
  2. 簡單快速:客戶向伺服器請求服務時,只需傳送請求方法和路徑。請求方法常用的有GET、HEAD、POST。每種方法規定了客戶與伺服器聯絡的型別不同。由於HTTP協議簡單,使得HTTP伺服器的程式規模小,因而通訊速度很快。
  3. 靈活:HTTP允許傳輸任意型別的資料物件。正在傳輸的型別由Content-Type(Content-Type是HTTP包中用來表示內容型別的標識)加以標記。
  4. 無連線:無連線的含義是限制每次連線只處理一個請求。伺服器處理完客戶的請求,並收到客戶的應答後,即斷開連線。採用這種方式可以節省傳輸時間。
  5. 無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺少狀態意味著如果後續處理需要前面的資訊,則它必須重傳,這樣可能導致每次連線傳送的資料量增大。另一方面,在伺服器不需要先前資訊時它的應答就較快。

7.常用的HTTP方法有哪些?

HTTP1.0定義了三種請求方法: GET,POST 和 HEAD方法。
HTTP1.1新增了五種請求方法: OPTIONS,PUT,DELETE,TRACE 和 CONNECT 方法。

  1. GET 請求指定的頁面資訊,並返回實體主體。
  2. HEAD 類似於get請求,只不過返回的響應中沒有具體的內容,用於獲取報頭
  3. POST 向指定資源提交資料進行處理請求(例如提交表單或者上傳檔案)。資料被包含在請求體中。POST請求可能會導致新的資源的建立和/或已有資源的修改。
  4. PUT 從客戶端向伺服器傳送的資料取代指定的文件的內容。
  5. DELETE 請求伺服器刪除指定的頁面。
  6. CONNECT HTTP/1.1協議中預留給能夠將連線改為管道方式的代理伺服器。
  7. OPTIONS 允許客戶端檢視伺服器的效能。
  8. TRACE 回顯伺服器收到的請求,主要用於測試或診斷。

8.TCP是什麼?

  • tcp(傳輸控制協議)是一種面向連線的、可靠的、基於位元組流的傳輸層通訊協議。是專門為了在不可靠的網際網路絡上提供一個可靠的端到端位元組流而設計的,面向位元組流。會有三次握手來建立連線,而且在資料傳遞時,有確認. 視窗. 重傳. 擁塞控制機制,在資料傳完之後,還會斷開來連線用來節約系統資源。

9.UDP是什麼?

  • UDP(使用者資料報協議)是與TCP相對應的協議。它是面向非連線的協議,它不與對方建立連線,而是直接就把資料包傳送過去!UDP適用於一次只傳送少量資料、對可靠性要求不高的應用環境可以使用UDP

10.TCP和UDP區別

  1. TCP面向連線(三次握手);UDP是無連線的,即傳送資料之前不需要建立連線
  2. TCP提供可靠的服務。也就是說,通過TCP連線傳送的資料,無差錯,不丟失,不重複,且按序到達;UDP盡最大努力交付,即不保證可靠交付,Tcp通過校驗和,重傳控制,序號標識,滑動視窗、確認應答實現可靠傳輸。如丟包時的重發控制,還可以對次序亂掉的分包進行順序控制。
  3. UDP具有較好的實時性,工作效率比TCP高,適用於對高速傳輸和實時性有較高的通訊或廣播通訊。
  4. 每一條TCP連線只能是點到點的;UDP支援一對一,一對多,多對一和多對多的互動通訊
  5. TCP對系統資源要求較多,UDP對系統資源要求較少。

11.什麼是三次握手?

所謂三次握手(Three-Way Handshake)即建立TCP連線,是指建立一個TCP連線時,需要客戶端和服務端總共傳送3個包以確認連線的建立。

  • 第一次握手:客戶端傳送 syn 包(syn=j)到伺服器,並進入 SYN_SEND 狀態,等待服 務器確認;
  • 第二次握手:伺服器收到 syn 包,必須確認客戶的 SYN(ack=j+1),同時自己也發 送一個 SYN 包(syn=k),即 SYN+ACK 包,此時伺服器進入 SYN_RECV 狀態;
  • 第三次握手:客戶端收到伺服器的 SYN+ACK 包,向伺服器傳送確認包 ACK(ack=k+1), 此包傳送完畢,客戶端和伺服器進入 ESTABLISHED 狀態,完成三次握手。 握手過程中傳送的包裡不包含資料,三次握手完畢後,客戶端與伺服器才正式開始 傳送資料。

參考: www.cocoachina.com/programmer/…

12.什麼是四次揮手?

由於TCP連線是全雙工的,因此每個方向都必須單獨進行關閉。這原則是當一方完成它的資料傳送任務後就能傳送一個FIN來終止這個方向的連線。收到一個 FIN只意味著這一方向上沒有資料流動,一個TCP連線在收到一個FIN後仍能傳送資料。首先進行關閉的一方將執行主動關閉,而另一方執行被動關閉。

  1. TCP客戶端傳送一個FIN,用來關閉客戶到伺服器的資料傳送。
  2. 伺服器收到這個FIN,它發回一個ACK,確認序號為收到的序號加1。和SYN一樣,一個FIN將佔用一個序號。
  3. 伺服器關閉客戶端的連線,傳送一個FIN給客戶端。
  4. 客戶端發回ACK報文確認,並將確認序號設定為收到序號加1。

13.什麼是HTTTS?

HTTPS(全稱:Hyper Text Transfer Protocol over Secure Socket Layer 或 Hypertext Transfer Protocol Secure,超文字傳輸安全協議),是以安全為目標的HTTP通道,簡單講是HTTP的安全版。即HTTP下加入SSL層,HTTPS的安全基礎是SSL,因此加密的詳細內容就需要SSL。

14.HTTPS連線過程簡述

  1. 客戶端向服務端發起 https 請求
  2. 伺服器(需要申請 ca 證書),返回證書(包含公鑰)給客戶端
  3. 客戶端使用根證書驗證 伺服器證書的有效性,進行身份確認
  4. 客戶端生成對稱金鑰,通過公鑰進行密碼,傳送給伺服器
  5. 伺服器使用私鑰進行 解密,獲取對稱金鑰
  6. 雙發使用對稱加密的資料進行通訊

15.什麼是對稱加密

對稱加密是最快速、最簡單的一種加密方式,加密(encryption)與解密(decryption)用的是同樣的金鑰(secret key)。對稱加密有很多種演算法,由於它效率很高,所以被廣泛使用在很多加密協議的核心當中。
常見的有AES,DES,3DES等

16.非對稱加密

非對稱加密為資料的加密與解密提供了一個非常安全的方法,它使用了一對金鑰,公鑰(public key)和私鑰(private key)。私鑰只能由一方安全保管,不能外洩,而公鑰則可以發給任何請求它的人。非對稱加密使用這對金鑰中的一個進行加密,而解密則需要另一個金鑰。
常見的: RSA演算法

17. http 與https區別

HTTPS和HTTP的區別主要為以下四點:

  1. https協議需要到ca申請證書,一般免費證書很少,需要交費。
  2. http是超文字傳輸協議,資訊是明文傳輸,https 則是具有安全性的ssl加密傳輸協議。
  3. http和https使用的是完全不同的連線方式,用的埠也不一樣,前者是80,後者是443。
  4. http的連線很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網路協議,比http協議安全

18.說一下Session 和 Cookie 的概念?

  • Session 是伺服器用來認證,追蹤使用者的資料結構,通過判斷客戶端傳來的資訊確定使用者,確定使用者唯一標誌是客戶端傳來的 SessionId
  • Cookie 是客戶端用來儲存使用者資訊的機制,初次會話時,http 協議會在 Cookie 裡記錄一個SessionID,之後每次會話時把 SessionID發給伺服器
  • Session 一般用於使用者驗證,他預設儲存在伺服器的一個檔案裡,當然也可以儲存在記憶體,資料庫裡
  • 若是客戶端禁用了Cookie,則客戶端會用URL重寫技術,即會話時在URL的末尾加上 SessionID,發給伺服器

19.什麼Socket?

  • 網路上的兩個程式通過一個雙向的通訊連線實現資料的交換,這個連線的一端稱為一個socket。
  • 建立網路通訊連線至少要一對埠號(socket)。socket本質是程式設計介面(API),對TCP/IP的封裝,TCP/IP也要提供可供程式設計師做網路開發所用的介面,這就是Socket程式設計介面;HTTP是轎車,提供了封裝或者顯示資料的具體形式;Socket是發動機,提供了網路通訊的能力。

20.什麼是DNS?

域名系統(DomainNameSystem,縮寫:DNS)是[網際網路]的一項服務。它作為將域名和IP地址相互對映的一個分散式資料庫,能夠使人更方便地訪問[網際網路]

21.DNS劫持問題?

DNS劫持又稱(域名劫持),是指在劫持的網路範圍內攔截域名解析的請求,分析請求的域名,把審查範圍以外的請求放行,否則返回假的IP地址或者什麼都不做使請求失去響應,其效果就是對特定的網路不能訪問或訪問的是假網址。
解決辦法: 使用HTTPDNS

22.網路七層是什麼?

OSI模型有7層結構,每層都可以有幾個子層。 OSI的7層從上到下分別是 7 應用層 6 表示層 5 會話層 4 傳輸層 3 網路層 2 資料鏈路層 1 物理層 ;其中高層(即7、6、5、4層)定義了應用程式的功能,下面3層(即3、2、1層)主要面向通過網路的端到端的資料流。

  1. 應用層
    網路服務與終端使用者的一個介面。
    協議有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP
  2. 表示層
    資料的表示、安全、壓縮。(在五層模型裡面已經合併到了應用層)
    格式有,JPEG、ASCll、DECOIC、加密格式等
    3 .會話層
    建立、管理、終止會話。(在五層模型裡面已經合併到了應用層)
    對應主機程序,指本地主機與遠端主機正在進行的會話
  3. 傳輸層
    定義傳輸資料的協議埠號,以及流控和差錯校驗。
    協議有:TCP UDP,資料包一旦離開網絡卡即進入網路傳輸層
  4. 網路層
    進行邏輯地址定址,實現不同網路之間的路徑選擇。
    協議有:ICMP IGMP IP(IPV4 IPV6) ARP RARP
  5. 資料鏈路層
    建立邏輯連線、進行硬體地址定址、差錯校驗 [2] 等功能。(由底層網路定義協議)
    將位元組合成位元組進而組合成幀,用MAC地址訪問介質,錯誤發現但不能糾正。
  6. 物理層
    建立、維護、斷開物理連線。(由底層網路定義協議)

23.專案中網路層如何做安全處理?

  1. 儘量使用https
  2. 不要傳輸明文密碼
  3. Post並不比Get安全
  4. 不要使用301跳轉
  5. http請求都帶上MAC
  6. http請求使用臨時金鑰
  7. AES使用CBC模式

24.斷點續傳如何實現?

通過HTTP,可以非常方便的實現斷點續傳。

  • 斷點續傳主要依賴於HTTP頭部定義的Range,應用可以通過HTTP請求曾經獲取失敗的資源的某一個返回或者部分來恢復下載該資源。當然並不是所有風伺服器都支援Range,所以不支援Range的不在我們考慮之內。Range是以位元組計算的,請求的時候不比給我結尾位元組數,因為請求方並不一定知道資源的大小。

通過這個關鍵字可以告訴伺服器返回哪些資料給我。
比如:

  • bytes=500-999 表示第500-第999位元組
  • bytes=500- 表示從第500位元組往後的所有位元組
  • 然後我們再根據伺服器返回的資料,將得到的data資料拼接到檔案後面,就可以實現斷點續傳了。

25.什麼是WebSocket,解決了什麼問題?

WebSocket是應用層第七層上的一個應用層協議,它必須依賴 HTTP 協議進行一次握手 ,握手成功後,資料就直接從 TCP 通道傳輸,與 HTTP 無關了
Websocket的資料傳輸是frame形式傳輸的,比如會將一條訊息分為幾個frame,按照先後順序傳輸出去。這樣做會有幾個好處:

  1. 大資料的傳輸可以分片傳輸,不用考慮到資料大小導致的長度標誌位不足夠的情況。
  2. 和http的chunk一樣,可以邊生成資料邊傳遞訊息,即提高傳輸效率。
    總之:WebSocket 的實現分為握手,資料傳送/讀取,關閉連線。

26.什麼是心跳?

  • 心跳就是用來檢測TCP連線的雙方是否可用
  • 客戶端發起心跳Ping(一般都是客戶端),假如設定在10秒後如果沒有收到回撥,那麼說明伺服器或者客戶端某一方出現問題,這時候我們需要主動斷開連線。

27.如何保證公鑰不被篡改?

  • 解決方法:將公鑰放在數字證書中。只要證書是可信的,公鑰就是可信的。

28. 公鑰加密計算量太大,如何減少耗用的時間?

  • 解決方法:每一次對話(session),客戶端和伺服器端都生成一個"對話金鑰"(session key),用它來加密資訊。由於"對話金鑰"是對稱加密,所以運算速度非常快,而伺服器公鑰(非對稱加密)只用於加密"對話金鑰"本身,這樣就減少了加密運算的消耗時間。

29.AF中常駐執行緒的實現

  • 使用單例建立執行緒 新增到runloop中,且加了一個NSMachPort,來防止這個新建的執行緒由於沒有活動直接退出。【 使用MachPort配合RunLoop進行執行緒保活】

  • AF3.x為什麼不再需要常駐執行緒?
    NSURLConnection的一大痛點就是:發起請求後,這條執行緒並不能隨風而去,而需要一直處於等待回撥的狀態。
    NSURLSession發起的請求,不再需要在當前執行緒進行代理方法的回撥!可以指定回撥的delegateQueue,這樣我們就不用為了等待代理回撥方法而苦苦保活執行緒了。
    同時還要注意一下,指定的用於接收回調的Queue的maxConcurrentOperationCount設為了1,這裡目的是想要讓併發的請求序列的進行回撥。
    為什麼要序列回撥?

- (AFURLSessionManagerTaskDelegate *)delegateForTask:(NSURLSessionTask *)task {
    NSParameterAssert(task);
    AFURLSessionManagerTaskDelegate *delegate = nil;
    [self.lock lock];
    //給所要訪問的資源加鎖,防止造成資料混亂
    delegate = self.mutableTaskDelegatesKeyedByTaskIdentifier[@(task.taskIdentifier)];
    [self.lock unlock];
    return delegate;
}
複製程式碼

這邊對 self.mutableTaskDelegatesKeyedByTaskIdentifier 的訪問進行了加鎖,目的是保證多執行緒環境下的資料安全
面試官可能會問你:為什麼AF3.0中需要設定self.operationQueue.maxConcurrentOperationCount = 1;而AF2.0卻不需要?
--->>>
AF3.0的operationQueue是用來接收NSURLSessionDelegate回撥的,鑑於一些多執行緒資料訪問的安全性考慮,設定了maxConcurrentOperationCount = 1來達到序列回撥的效果
--->>>
AF2.0的operationQueue是用來新增operation並進行併發請求的,所以不要設定為1。

30. XMPP是什麼?

  1. XMPP 是一種基於XML的協議,XMPP是一個分散型通訊網路
  2. XMPP是一種基於標準通用標記語言的子集XML的協議,它繼承了在XML環境中靈活的發展性,XMPP有超強的擴充套件性。XMPP中定義了三個角色,客戶端,服務端,閘道器。通訊能夠在這個三者的任意兩個之間雙向發生,而他們的傳輸是XML流
  3. XMPP工作原理:所有從一個客戶端到另一個客戶端的訊息和資料都要通過服務端
  4. XMPP允許建立並行的TCP套接字連結對所有連線上的客戶端和伺服器端。持久的套接字的連線使得XMPP能夠更有效的支援高階的具有存在能力的應用在頻寬和處理資源的使用中。

小結:
而XMPP的核心部分就是一個在網路上分片斷髮送XML的流協議。這個流協議是XMPP的即時通訊指令的傳遞基礎,也是一個非常重要的可以被進一步利用的網路基礎協議。所以可以說,XMPP用TCP傳的是XML流。

31.MAC地址和ip地址的區別?

  • MAC地址就是在媒體接入層上使用的地址,也叫實體地址、硬體地址或鏈路地址,由網路裝置製造商生產時寫在硬體內部。
  • IP即指使用TCP/IP協議指定給主機的32位地址。IP地址由用點分隔開的4個8八位組構成,如192.168.0.1就是一個IP地址,這種寫法叫點分十進位制格式。
  • IP地址相當於你現在所處的地址,會隨著你的移動發生改變,而mac地址相當於你的身份證號這些個人資訊,是獨一無二的,不會改變的。

32 .抓包工具抓取HTTPS的原理

需要做的事情是對客戶端偽裝服務端,對服務端偽裝客戶端,具體

  • 截獲真實客戶端的HTTPS請求,偽裝客戶端向真實服務端傳送HTTPS請求
  • 接受真實伺服器響應,用Charles自己的證書偽裝服務端向真實客戶端傳送資料內容

沒有配置HTTPS 證書時,雖然是HTTPS請求確是能抓到資料,如果APP內配置了https證書,就抓不到資料了,

33.Ping是什麼協議

  • ping也屬於一個通訊協議,是TCP/IP協議的一部分。利用“ping”命令可以檢查網路是否連通,

  • PING (Packet Internet Groper),因特網包探索器,用於測試網路連線量的程式。Ping傳送一個ICMP(Internet Control Messages Protocol)即因特網信報控制協議;回聲請求訊息給目的地並報告是否收到所希望的ICMPecho (ICMP回聲應答)。它是用來檢查網路是否通暢或者網路連線速度的命令。作為一個生活在網路上的管理員或者黑客來說,ping命令是第一個必須掌握的DOS命令,它所利用的原理是這樣的:利用網路上機器IP地址的唯一性,給目標IP地址傳送一個數據包,再要求對方返回一個同樣大小的資料包來確定兩臺網路機器是否連線相通,時延是多少。

下一篇入口:

iOS | 面試知識整理 - 資料持久化 (八)

其實呢作為一個開發者,有一個學習的氛圍跟一個交流圈子特別重要,這是我的微信 大家有興趣可以新增 邀請小夥伴們進入微信群裡一起 交流(想要加群的可以加小編微信進群哦17512010526)


作者:LEON_iOS
連結:www.jianshu.com/p/2f82ea462…