聊聊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.上傳數據是怎麼和後臺server交互的。
 
後臺和前端的交互手段是經過網絡接口來實現的.上傳數據經過http請求上傳,iOS9以後是https請求,需要把數據轉換成data類型,而後拼接到POST請求體(body)中。經過請求數據一塊兒發送到server上。
對於server端的返回的格式,通常使用json格式返回。它有優點,傳遞數據相對小,iosclient也easy解析。

至於server端你可以有多種選擇, asp.net ,java, php 都可。php

 
2、兩種請求方式的差異:
1 GET 請求,請求的數據會附加在 URL 以後,以 ?

切割URL和數據傳輸,多個參數用&鏈接。URL的編碼格式採用的是ASCII編碼,而不是uniclde。便是說所有的非ASCII字符都要編碼以後再傳輸。html

POST 請求: POST 請求會把請求的數據放置在 HTTP 請求包的包體中。上面的 item=bandsaw 就是實際的數據傳輸。
所以, GET 請求的數據會暴露在地址欄中,而 POST 請求則不會。
 
2 、數據傳輸的大小
HTTP 規範中,沒有對 URL 的長度和傳輸的數據大小進行限制。但是在實際開發過程當中,對於 GET ,特定的瀏覽器和server對 URL 的長度有限制。

所以,在使用GET請求時。數據傳輸會受到URL長度的限制。前端

對於 POST ,由於不是 URL 傳值,理論上是不會受限制的,但是實際上各個server會規定對 POST 提交數據大小進行限制。 Apache IIS 都有各自的配置。
 
3 、安全性
POST 的安全性比 GET 的高。這裏的安全是指真正的安全,而不一樣於上面 GET 提到的安全方法中的安全。上面提到的安全不過不改動server的數據。

比方,在進行登陸操做,經過GET請求,username和password都會暴露再URL上。因爲登陸頁面有可能被瀏覽器緩存以及其它人查看瀏覽器的歷史記錄的緣由。此時的username和password就很是easy被他人拿到了。除此以外,GET請求提交的數據還可能會形成Cross-site request frogery攻擊java

 
九、解釋HTTP中Get和Post,它們有什麼差異,哪一個使用時更加安全?
Http定義了與server交互的不一樣方法。最主要的方法有4種,各自是GET,POST,PUT。DELETE。URL全稱是資源描寫敘述符。咱們可以這樣以爲:一個URL地址。它用於描寫敘述一個網絡上的資源,而HTTP中的GET。POST,PUT,DELETE就相應着對這個資源的查,改。增,刪4個操做。到這裏,你們應該有個大概的瞭解了,GET通常用於獲取/查詢資源信息。而POST通常用於更新資源信息。
1、原理差異
1.依據HTTP規範。GET用於信息獲取,而且應該是安全的和冪等的。
2.依據HTTP規範。POST表示可能改動變server上的資源的請求。

 
三、怎樣處理多個網絡請求併發的狀況
 
經過GCD和NSOperationQueue來控制併發

 
92.TCP和UDP的差異是什麼?
TCP面向鏈接、傳輸可靠(保證數據正確性,保證數據順序)、用於傳輸大量數據(流模式)、速度慢,創建鏈接需要開銷較多(時間。系統資源)。

UDP面向非鏈接、傳輸不可靠、用於傳輸少許數據(數據包模式)、速度快。

 
82.網絡通訊用過哪些方式(100%的人說了AFNetworking...)怎樣處理多個網絡請求併發的狀況
1)、直接使用socket的方式
2)、AFNetworking
使用多線程中的併發隊列去處理網絡的併發請求。
 
83.在網絡請求中怎樣提升性能
在網絡請求中怎樣保證安全性
 iOS  在傳輸數據過程當中有數據泄露的可能。client在進行網絡請求時通常都採用加密的方式來保證數據的安全性,在iOS9之後,蘋果爲了保護數據的安全性。使用了Https協議。

十一、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協議的抽象。從而造成了咱們知道的一些最主要的函數接口。ios

 
http鏈接:http鏈接就是所謂的短鏈接,即client向server端發送一次請求,server端響應後鏈接即會斷掉;
socket鏈接:socket鏈接就是所謂的長鏈接。理論上client和server端一旦創建起鏈接將不會主動斷掉。但是由於各類環境因素可能會是鏈接斷開,比方說:server端或client主機down了,網絡故障,或者二者之間長時間沒有傳輸數據,網絡防火牆可能會斷開該鏈接以釋放網絡資源。
 
(2)創建Socket鏈接至少需要一對套接字,套接字簡單來講就是通訊的雙方的一種約定,用套接字中的相關函數來完畢通訊過程。當中一個執行於client。稱爲ClientSocket 。還有一個執行於server端,稱爲ServerSocket 。
套接字之間的鏈接過程分爲三個步驟:server監聽。client請求,鏈接確認。
1。

server監聽:server端套接字並不定位詳細的client套接字。而是處於等待鏈接的狀態。實時監控網絡狀態,等待client的鏈接請求。sql

2。client請求:指client的套接字提出鏈接請求。要鏈接的目標是server端的套接字。

爲此,client的套接字必須首先描寫敘述它要鏈接的server的套接字。指出server端套接字的地址和port號,而後就向server端套接字提出鏈接請求。數據庫

3。json

鏈接確認:當server端套接字監聽到或者說接收到client套接字的鏈接請求時。就響應client套接字的請求。創建一個新的線程,把server端套接字的描寫敘述發給client,一旦client確認了此描寫敘述,兩方就正式創建鏈接。瀏覽器

而server端套接字繼續處於監聽狀態,繼續接收其它client套接字的鏈接請求。緩存

 
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提供的一組相對easy使用的網絡API。它包含幾個部分NSURLRequest。NSURLCache,NSURLSession,NSURLSessionConfiguration。NSURLSessionTask。
 
六、無網狀況下。從本地數據庫sqlite上拉載入時,每次取10條,怎樣實現?
推斷網絡狀況,在無網絡狀況下,上拉載入的時候,經過謂詞設置從數據庫中取出數據10條數據,刷新界面。

 
20.http與https的差異,https的優勢有哪些?
http是超⽂文本傳輸協議,信息是明⽂文傳輸,https 則是具備安全性的ssl加密傳輸 協議。
https相⽐比http更安全。
https協議需要到ca申請證書,⼀通常免費證書很是少,需要交費。

http和https使⽤用的是全然不一樣的鏈接⽅方式⽤用的端⼜⼝口也不⼀同樣,前者是80,後者是 443。

http的鏈接很是easy,是⽆無狀態的 HTTPS協議是由SSL+HTTP協議構建的可進⾏行加密傳輸、⾝身份認證的⽹網絡協議 要⽐比http協議安全
41. 網絡通訊用過哪些方式( 100% 的人說了 AFNetworking... )怎樣處理多個網絡請求併發的狀況
 
1) 、直接使用 socket 的方式
2) AFNetworking
使用多線程中的併發隊列去處理網絡的併發請求
 
42. 在網絡請求中怎樣提升性能
在網絡請求中怎樣保證安全性
 iOS  在傳輸數據過程當中有數據泄露的可能,client在進行網絡請求時通常都採用加密的方式來保證數據的安全性,在 iOS9 之後,蘋果爲了保護數據的安全性,使用了 Https 協議。
 
 
二、載入大量圖片時。假設網絡較差會出現什麼狀況?怎樣處理?
 
可能會出現數據請求緩慢。圖像載入不出來的狀況 ,嚴重的會致使程序崩潰
處理方法:
1.作好數據緩存。程序使用時先從緩存讀取,假設相應緩存沒有。再請求數據。
2.控制請求次數和數據量
 
三、使用過哪些網絡請求方式?用過哪些第三方框架。有哪些差異?
 
http協議申明瞭client與服務端交互的方式,即請求方式:
get、post、put、delete
這四種方式可以對網絡資源(url描寫敘述的內容)進行:查、改、增、刪
 
CLLocationManager實現定位,查詢並實時顯示周邊商戶;
常用的是如下兩種:
1:get方法:下行/從服務端得到數據
    (1)get請求通常僅僅是從server得到數據。請求時一般會提交server一些請求參數。附加在url上的,參數之間以&切割。
    (2)url中英文和數字原樣識別,而中文或者一些其它字符需要編碼。

    (3)get請求提交的數據通常放在http協議的頭header中
 
2:post方法:上傳/上傳數據改變服務端內容
    (1)post請求多用於給server提交數據。
    (2)post請求提交的數據通常放在http的主體數據包body中
 
 
用過的第三發框架有3種,ASIHttpRequest,AFNetWorking,MKNetWork.
三種的差異:ASIHttpRequest比較臃腫,MKNetWork和AFNektwork感受比較輕量級,本人推薦MKNetWork,比較簡單
 
4.APP內部下載和離線下載的實現(像迅雷同樣可以離線下載)
內部下載: 1. 建立NSURLSession 並 依據連接建立一個NSURLRequest
            2. 開始下載
            3. 在代理中接受數據並依據路徑寫入到目錄下
相關文章
相關標籤/搜索