1、DNS優化
兩種方案:1、自建DNS,通過服務器下發ip列表,ping出最優ip,ip直連代替訪問域名;2、使用HttpDNS服務代替傳統UDP DNS。
2、TCP為何是3次握手
3次握手的目的是交換客戶端和服務端的初始序列號,是在不可靠傳輸通道中實施可靠傳輸的最高效方案。四次握手可靠,但是浪費一次握手。兩次的話,關閉的服務器會被延遲到達的任何一條消息激活,浪費資源。
3、簡述HTTPs
客戶端發起TCP3次握手后,連接建立。接著進行TLS握手,告訴服務器客戶端支持的非對稱加密算法和Hash算法。服務器選擇其中一個加密算法生成公鑰A和私鑰A,私鑰A自己保存,并向CA發送公鑰A申請證書。CA用自己的私鑰B,簽名服務器發來的公鑰A和身份等信息,放入證書中,返回給服務器。服務器將證書發給客戶端,客戶端用內置于瀏覽器或者操作系統的Root CA公鑰B來驗證證書的完整性和有效性。如果驗證通過,說明通信對方是期望的服務器。生成對稱加密密鑰所需的信息,用證書中的公鑰A加密,發給服務器。服務器用自己的私鑰A解密,提取對稱加密密鑰所需的信息。至此,安全通道建立,之后的所有通信內容都通過算法生成的對稱加密密鑰來加密。
4、簡述Charles抓包原理
Charles代理其實可以看成中間人攻擊。對于客戶端而言,Charles是服務器。對于服務器而言,Charles是客戶端。欺騙服務器,對于只驗證服務器證書的連接來說,不用任何修改,如果雙向驗證,Charles還需要安裝客戶端攜帶的證書。欺騙客戶端,需要在客戶端里安裝Charles的RootCA證書,這樣,客戶端就會信任Charles作為服務器下發的證書。兩邊都欺騙過去,就可以抓包了。
4、DNS 根服務器為何是13個IP
UDP 應用程序設計中數據包被限制成512字節或更小,這樣可以防止被IP層分片,導致數據包丟失。讓所有的根服務器數據能包含在一個 512 字節的 UDP 包中,根服務器只能限制在 13 個。
5、簡述TCP擁塞控制
TCP的慢啟動是以指數增長的方式快速觸達網絡帶寬的天花板,一旦超過最大值發生了丟包,會以最大發送窗口的一半來繼續發送數據,之后如果未發生丟包,會線性增長逐漸加大發送窗口。但是TCP認為一旦丟包就是窗口大小超過了網絡帶寬,是不符合現今的網絡現狀的,無線環境下,丟包幾率大大增加,但是并沒有到達最大帶寬。這也可以看作是TCP的缺陷。
6、iOS 中 DataTask 與 DownloadTask的區別
DownloadTask下載的數據直接存文件,不會有明顯的內存增長情況。
7、iOS 中每個請求一個URLSession和多個請求共用一個URLSession有區別嗎
同一個session下的請求,可能在同一個連接下,因為http1.1默認啟用了keep-alive,能大幅減少請求時間。而開啟了新的session肯定會啟用新的連接。
8、httpShouldUsePipelining 應該啟用嗎
不,服務器如果不支持管線化,可能會導致客戶端問題。而且pipeline會有head of line blocking的問題。
9、為什么大量網絡仍然使用http/https協議
框架穩定,傳輸可靠,防火墻端口也是重要的一方面。
10、除了自建DNS、建立長鏈接,移動網絡還有什么別的優化手段
(1)減少數據傳輸量,壓縮數據 ;
(2)網絡環境檢測,根據不同的網絡選用不同的參數,如請求超時時間,圖片大小,圖片格式等;
(3)使用緩存;
(3)使用http2等新協議。
11、延遲和丟包率哪個更影響傳輸效率
暫不回答,等我弄清楚
12、一種簡單的網絡模塊添加緩存功能的方式
通過Http header里的cache-control字段,修改response的header,并且存儲到SessionConfig的cache里。
(隨時更新)