聊聊iOS中TCP / UDP 協議

TCP (Transmission Control Protocol)和UDP(User Datagram Protocol)協議屬於
傳輸層協議。
UDP(User Datagram protocol)用戶數據報協議,它只提供應用進程尋址和簡單的差錯檢測,並不提供其他功能。
TCP(Transmission Control Protocol,傳輸控制協議)是面向連接的協議,也就是說,在收發數據前,必須和對方建立可靠的連接。一個TCP連接必須要經過三次“對話”才能建立起來,其中的過程非常複雜,只簡單的描述下這三次對話的簡單過程:主機A向主機B發出連接請求數據包:“我想給你發數據,可以嗎?”,這是第一次對話;主機B向主機A發送同意連接和要求同步(同步就是兩臺主機一個在發送,一個在接收,協調工作)的數據包:“可以,你什麼時候發?”,這是第二次對話;主機A再發出一個數據包確認主機B的要求同步:“我現在就發,你接着吧!”,這是第三次對話。三次“對話”的目的是使數據包的發送和接收同步,經過三次“對話”之後,主機A才向主機B正式發送數據
 
1.上傳數據是怎麼和後臺服務器交互的;
 
後臺和前端的交互手段是通過網絡接口來實現的.上傳數據通過http請求上傳,iOS9之後是https請求,需要把數據轉換成data類型,然後拼接到POST請求體(body)中,通過請求數據一起發送到服務器上。
對於服務器端的返回的格式,一般使用json格式返回。它有優勢,傳遞數據相對小,ios客戶端也容易解析。至於服務器端你可以有多種選擇, asp.net ,java, php 均可。
 
二、兩種請求方式的區別:
1GET請求,請求的數據會附加在URL之後,以?分割URL和傳輸數據,多個參數用&連接。URL的編碼格式採用的是ASCII編碼,而不是uniclde,即是說所有的非ASCII字符都要編碼之後再傳輸。
POST請求:POST請求會把請求的數據放置在HTTP請求包的包體中。上面的item=bandsaw就是實際的傳輸數據。
因此,GET請求的數據會暴露在地址欄中,而POST請求則不會。
 
2、傳輸數據的大小
HTTP規範中,沒有對URL的長度和傳輸的數據大小進行限制。但是在實際開發過程中,對於GET,特定的瀏覽器和服務器對URL的長度有限制。因此,在使用GET請求時,傳輸數據會受到URL長度的限制。
對於POST,由於不是URL傳值,理論上是不會受限制的,但是實際上各個服務器會規定對POST提交數據大小進行限制,ApacheIIS都有各自的配置。
 
3、安全性
POST的安全性比GET的高。這裏的安全是指真正的安全,而不同於上面GET提到的安全方法中的安全,上面提到的安全僅僅是不修改服務器的數據。比如,在進行登錄操作,通過GET請求,用戶名和密碼都會暴露再URL上,因爲登錄頁面有可能被瀏覽器緩存以及其他人查看瀏覽器的歷史記錄的原因,此時的用戶名和密碼就很容易被他人拿到了。除此之外,GET請求提交的數據還可能會造成Cross-site request frogery攻擊
 
9、解釋HTTP中Get和Post,它們有什麼區別,哪個使用時更加安全?
Http定義了與服務器交互的不同方法,最基本的方法有4種,分別是GET,POST,PUT,DELETE。URL全稱是資源描述符,我們可以這樣認爲:一個URL地址,它用於描述一個網絡上的資源,而HTTP中的GET,POST,PUT,DELETE就對應着對這個資源的查,改,增,刪4個操作。到這裏,大家應該有個大概的瞭解了,GET一般用於獲取/查詢資源信息,而POST一般用於更新資源信息。
一、原理區別
1.根據HTTP規範,GET用於信息獲取,而且應該是安全的和冪等的。
2.根據HTTP規範,POST表示可能修改變服務器上的資源的請求。
 
3、如何處理多個網絡請求併發的情況
 
通過GCD和NSOperationQueue來控制併發

 
92.TCP和UDP的區別是什麼?
TCP面向連接、傳輸可靠(保證數據正確性,保證數據順序)、用於傳輸大量數據(流模式)、速度慢,建立連接需要開銷較多(時間,系統資源)。
UDP面向非連接、傳輸不可靠、用於傳輸少量數據(數據包模式)、速度快。
 
82.網絡通信用過哪些方式(100%的人說了AFNetworking...)如何處理多個網絡請求併發的情況
1)、直接使用socket的方式
2)、AFNetworking
使用多線程中的併發隊列去處理網絡的併發請求。
 
83.在網絡請求中如何提高性能
在網絡請求中如何保證安全性
 iOS  在數據傳輸過程中有數據泄露的可能,客戶端在進行網絡請求時一般都採用加密的方式來保證數據的安全性,在iOS9以後,蘋果爲了保護數據的安全性,使用了Https協議。
11、socket是什麼?
(1)socket是一套完成tcp,udp協議的接口。
HTTP協議:簡單對象訪問協議,對應於應用層  ,HTTP協議是基於TCP連接的
tcp協議:    對應於傳輸層
ip協議:     對應於網絡層
TCP/IP是傳輸層協議,主要解決數據如何在網絡中傳輸;而HTTP是應用層協議,主要解決如何包裝數據。
Socket是對TCP/IP協議的封裝,Socket本身並不是協議,而是一個調用接口(API),通過Socket,我們才能使用TCP/IP協議。Socket的出現只是使得程序員更方便地使用TCP/IP協議棧而已,是對TCP/IP協議的抽象,從而形成了我們知道的一些最基本的函數接口。
 
http連接:http連接就是所謂的短連接,即客戶端向服務器端發送一次請求,服務器端響應後連接即會斷掉;
socket連接:socket連接就是所謂的長連接,理論上客戶端和服務器端一旦建立起連接將不會主動斷掉;但是由於各種環境因素可能會是連接斷開,比如說:服務器端或客戶端主機down了,網絡故障,或者兩者之間長時間沒有數據傳輸,網絡防火牆可能會斷開該連接以釋放網絡資源。
 
(2)建立Socket連接至少需要一對套接字,套接字簡單來說就是通信的兩方的一種約定,用套接字中的相關函數來完成通信過程。其中一個運行於客戶端,稱爲ClientSocket ,另一個運行於服務器端,稱爲ServerSocket 。
套接字之間的連接過程分爲三個步驟:服務器監聽,客戶端請求,連接確認。
1。服務器監聽:服務器端套接字並不定位具體的客戶端套接字,而是處於等待連接的狀態,實時監控網絡狀態,等待客戶端的連接請求。
2。客戶端請求:指客戶端的套接字提出連接請求,要連接的目標是服務器端的套接字。爲此,客戶端的套接字必須首先描述它要連接的服務器的套接字,指出服務器端套接字的地址和端口號,然後就向服務器端套接字提出連接請求。3。連接確認:當服務器端套接字監聽到或者說接收到客戶端套接字的連接請求時,就響應客戶端套接字的請求,建立一個新的線程,把服務器端套接字的描述發給客戶端,一旦客戶端確認了此描述,雙方就正式建立連接。而服務器端套接字繼續處於監聽狀態,繼續接收其他客戶端套接字的連接請求。
 
AFHTTPRequestOperation 核心代碼
與NSURLConnection對象不同,每個共享應用範圍的設置如會話管理、緩存策略、Cookie存儲以及URL協議等,這些NSURLSession對象都可以單獨進行配置。使用特定的配置來初始化會話,它可以發送任務來獲取數據,並上傳或下載文件。
在AFNetworking 2.0中,使用AFHTTPRequestOperation,有可能創建一個沒有額外開銷的獨立的網絡請求來獲取數據。NSURLSession則需要更多的開銷,爲了獲得所要請求的數據。
41.AFNetworking新版本和以前版本的區別,NSURLSession使用
(1)NSURLConnection的API已廢棄
棄用的類
下面的類已從AFNetworking 3.0中廢棄:
       •     AFURLConnectionOperation
       •     AFHTTPRequestOperation
       •     AFHTTPRequestOperationManager
修改的類
下面的類包含基於NSURLConnection的API的內部實現。他們已經被使用NSURLSession重構:
       •     UIImageView+AFNetworking
       •     UIWebView+AFNetworking
       •     UIButton+AFNetworking
(2)AFHTTPRequestOperation 核心代碼
與NSURLConnection對象不同,每個共享應用範圍的設置如會話管理、緩存策略、Cookie存儲以及URL協議等,這些NSURLSession對象都可以單獨進行配置。使用特定的配置來初始化會話,它可以發送任務來獲取數據,並上傳或下載文件。
在AFNetworking 2.0中,使用AFHTTPRequestOperation,有可能創建一個沒有額外開銷的獨立的網絡請求來獲取數據。NSURLSession則需要更多的開銷,爲了獲得所要請求的數據。
 
(3)UIKit的遷移
圖片下載已經被重構,以遵循AlamofireImage架構與新的AFImageDownloader類。這個類的圖片下載職責的代理人是UIButton與UIImageView的類目,並且提供了一些方法,在必要時可以自定義。類別中,下載遠程圖片的實際方法沒有改變。
UIWebView的類目被重構爲使用AFHTTPSessionManager作爲其網絡請求。
UIAlertView的類目被廢棄
從AFNetworking 3.0後UIAlertView的類目因過時而被廢棄。並沒有提供UIAlertController類目的計劃,因爲這是應用程序應處理的邏輯,而不是這個庫。
 
NSURLSession使用
NSURLSession是IOS SDK提供的一組相對容易使用的網絡API。它包括幾個部分NSURLRequest,NSURLCache,NSURLSession,NSURLSessionConfiguration,NSURLSessionTask。
 
6、無網情況下,從本地數據庫sqlite上拉加載時,每次取10條,如何實現?
判斷網絡情況,在無網絡情況下,上拉加載的時候,通過謂詞設置從數據庫中取出數據10條數據,刷新界面。
 
20.http與https的區別,https的好處有哪些?
http是超⽂文本傳輸協議,信息是明⽂文傳輸,https 則是具有安全性的ssl加密傳輸 協議。
https相⽐比http更安全。
https協議需要到ca申請證書,⼀一般免費證書很少,需要交費。 http和https使⽤用的是完全不同的連接⽅方式⽤用的端⼜⼝口也不⼀一樣,前者是80,後者是 443。
http的連接很簡單,是⽆無狀態的 HTTPS協議是由SSL+HTTP協議構建的可進⾏行加密傳輸、⾝身份認證的⽹網絡協議 要⽐比http協議安全
41.網絡通信用過哪些方式(100%的人說了AFNetworking...)如何處理多個網絡請求併發的情況
 
1)、直接使用socket的方式
2)AFNetworking
使用多線程中的併發隊列去處理網絡的併發請求
 
42.在網絡請求中如何提高性能
在網絡請求中如何保證安全性
 iOS  在數據傳輸過程中有數據泄露的可能,客戶端在進行網絡請求時一般都採用加密的方式來保證數據的安全性,在iOS9以後,蘋果爲了保護數據的安全性,使用了Https協議。
 
 
2、加載大量圖片時,如果網絡較差會出現什麼情況?如何處理?
 
可能會出現數據請求緩慢,圖像加載不出來的情況 ,嚴重的會導致程序崩潰
處理方法:
1.做好數據緩存,程序使用時先從緩存讀取,如果對應緩存沒有,再請求數據。
2.控制請求次數和數據量
 
3、使用過哪些網絡請求方式?用過哪些第三方框架,有哪些區別?
 
http協議申明瞭客戶端與服務端交互的方式,即請求方式:
get、post、put、delete
這四種方式可以對網絡資源(url描述的內容)進行:查、改、增、刪
 
CLLocationManager實現定位,查詢並實時顯示周邊商戶;
常用的是下面兩種:
1:get方法:下行/從服務端獲得數據
    (1)get請求一般只是從服務器獲得數據,請求時一般會提交服務器一些請求參數,附加在url上的,參數之間以&分割。
    (2)url中英文和數字原樣識別,而中文或者一些其他字符需要編碼。
    (3)get請求提交的數據一般放在http協議的頭header中
 
2:post方法:上傳/上傳數據改變服務端內容
    (1)post請求多用於給服務器提交數據。
    (2)post請求提交的數據一般放在http的主體數據包body中
 
 
用過的第三發框架有3種,ASIHttpRequest,AFNetWorking,MKNetWork.
三種的區別:ASIHttpRequest比較臃腫,MKNetWork和AFNektwork感覺比較輕量級,本人推薦MKNetWork,比較簡單
 
4.APP內部下載和離線下載的實現(像迅雷一樣可以離線下載)
內部下載: 1. 創建NSURLSession 並 根據鏈接創建一個NSURLRequest
            2. 開始下載
            3. 在代理中接受數據並根據路徑寫入到文件夾下
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章