標籤:
眾所周知,網路應用在互連網時代的重要性,個人作為一個現代人在日常生活中基本上離不開網路。
iOS網路開發這一塊,無疑是很重要的一塊。個人認為是比較難啃的,來來回回學了好幾回,還是暈暈沒學明白,下面希望通過寫這份學習筆記能加深對網路開發的理解。
初次寫部落格,只是為了記述一些學習開發想法,請各位多多指教。
一、URL中常見的協議
那麼什麼是URL呢?
URL全稱是Uniform Resource Locator(同意資源定位器),URL是唯一的,通過一個URL,能找到互連網唯一的一個資源。
URL的基本格式=協議://主機地址/路徑
協議:不同的協議代表不同的資源尋找方式、資源傳輸方式,
下面有幾種常用的協議
- 網路開發中最常用的協議:HTTP:超文字傳輸通訊協定 (HTTP),訪問的是遠端網路資源,格式是http://
- 訪問本機電腦上的資源:file協議 格式:file://
- 訪問電子郵件地址:mailto 格式:mailto://
- 訪問共用主機的檔案資源 :FTP 格式:ftp://
主機地址:存在資源的主機的IP地址
路徑:資源在主機中的具體位置
二、HTTP協議
各部落格論壇都有很多關於HTTP的文章,我這就班門弄斧了,可以轉到大神的部落格去學習。
下面給出百度百科連結,或自行查閱書籍資源
點擊開啟連結
我自己的理解:
http串連是建立在TCP串連上的一種應用,HTTP串連使用“請求--響應”的方式,不僅在請求時需要先建立串連,而且需要用戶端在伺服器發出請求後,伺服器才能回複資料給用戶端,請求結束後,自動釋放串連,這種方式可以節省傳輸時間,相對於socket也屬於“短串連”。
那麼來拓展一下:什麼是TCP,說到TCP肯定會有UDP的存在,這也是面試很可能會問到的。
- TCP:傳輸控制通訊協定,提供的是連線導向,可靠的位元組流服務,它屬於運輸層協議。(具體的OSI七層和TCP/IP五層,請轉向百科或大神部落格)
- 前提:當Client Access Server彼此交換資料前,必須先在雙方之間建立一個TCP串連,之後才能傳輸資料
- 功能:提供逾時重發,檢驗資料、流量控制、反饋機制,保證資料能從一端傳到另一端,理想狀態下,TCP串連一旦建立,在通訊雙方中的任何一方主動關閉串連前,TCP串連都將被一直保持下去,中斷連線時,伺服器和用戶端均可以主動發起斷開TCP串連的請求
- 用途:TCP發送的包有序號,雙方收到包後要給一個反饋,如果超過一定時間還沒收到反饋就自動執行逾時重發,因此TCP最大的優點是可靠。網頁http,郵件smtp,遠端連線,檔案ftp傳送
- 三向交握:建立串連-->發送請求-->應答請求-->請求結束通知。打電話的例子:
[喂喂喂,能聽到我嗎?]
[沒問題。能聽到我說一聲。]
[沒問題。]
2.UDP:使用者資料包通訊協定,是一個無串連,簡單的面向資料報的傳輸層協議
3.Socket串連與HTTP串連的區別:
Socket:由於通常情況下Socket串連就是TCP串連,因此Socket串連一旦建立,通訊雙方即可開始相互發送資料內容,直到雙方串連斷開。
在實際應用開發中,用戶端到伺服器之間的通訊往往需要穿越多個中間節點,例如路由器、網關、防火牆等,大部分防火牆預設會關閉長時間處於非活躍狀態的串連而導致Socket串連斷連,因此需要通過輪詢告訴網路,該串連處於活躍狀態.
HTTP:HTTP協議是建立在TCP協議之上的一種應用,HTTP串連使用的是“要求-回應”的方式,不僅在請求時需要先建立串連,而且需要用戶端向伺服器發出請求後,伺服器才能回複資料。
在請求結束後,會主動釋放串連。
從建立串連到關閉串連的過程稱為“一次串連”。
由於HTTP在每次請求結束後都會主動釋放串連,因此HTTP串連是一種“短串連”,要保持用戶端程式的線上狀態,需要不斷地向伺服器發起串連請求。
通常的做法是即使不需要獲得任何資料,用戶端也保持每隔一段固定時間向伺服器發送一次“保持串連”的請求,伺服器在收到該請求後對用戶端進行回複,表明知道用戶端“線上”。若伺服器長時間無法收到用戶端的請求,則認為用戶端“下線”,若用戶端長時間無法收到伺服器的回複,則認為網路已經斷開
使用情境:很多情況下,需要伺服器主動向用戶端推送資料,保持用戶端與伺服器資料的即時與同步。
此時若雙方建立的是Socket串連,伺服器就可以直接將資料傳送給用戶端;
若雙方建立的是HTTP串連,則伺服器需要等到用戶端發送一次請求後才能將資料傳回用戶端,因此,用戶端定時向伺服器發送串連請求,不僅可以保持線上,同時也是在“詢問”伺服器是否有新的資料,如果有就將資料傳給用戶端
Socket原理
通訊端(socket)是通訊的基石,是支援TCP/IP協議的網路通訊的基本操作單元。
它是網路通訊中端點的抽象表示,包含進行網路通訊必須的五種資訊:1串連使用的協議,2本地主機的IP地址,3本地進程的協議連接埠,4遠程主機的IP地址,5遠地進程的協議連接埠。
應用程式層通過傳輸層進行資料通訊時,TCP會遇到同時為多個應用程式進程提供並發服務的問題。
多個TCP串連或多個應用程式進程可能需要通過同一個TCP協議連接埠傳輸資料。為了區別不同的應用程式進程和串連,電腦作業系統為應用程式與TCP/IP協議互動提供了通訊端(Socket)介面。應用程式層可以和傳輸層通過Socket介面,區分來自不同應用程式進程或網路連接的通訊,實現資料轉送的並發服務。
建立Socket串連:建立Socket串連至少需要一對通訊端,其中一個運行於用戶端,稱為ClientSocket,另一個運行於伺服器端,稱為ServerSocket
通訊端之間的串連過程分為三個步驟:伺服器監聽,用戶端請求,串連確認
伺服器監聽:伺服器端通訊端並不定位具體的用戶端通訊端,而是處於等待串連的狀態,即時監控網路狀態,等待用戶端的串連請求
用戶端請求:用戶端的通訊端提出串連請求,要串連的目標是伺服器端的通訊端。為此,用戶端的通訊端必須首先描述它要已連線的服務器的通訊端,指出伺服器端通訊端的地址和連接埠號碼,然後就向伺服器端通訊端提出串連請求
串連確認:當伺服器端通訊端監聽到或者說接收到用戶端通訊端的串連請求時,就響應用戶端通訊端的請求,建立一個新的線程,把伺服器端通訊端的描述發給用戶端,一旦用戶端確認了此描述,雙方就正式建立串連。而伺服器端通訊端繼續處於監聽狀態,繼續接收其他用戶端通訊端的串連請求
Socket串連與TCP串連:建立Socket串連時,可以指定使用的傳輸層協議,Socket可以支援不同的傳輸層協議(TCP或UDP),當使用TCP協議進行串連時,該Socket串連就是一個TCP串連
iOS網路應用入門