網絡基礎
問題:為什么要學習網絡編程?
(1)網絡編程是一種實時更新應用數據的常用手段
(2)網絡編程是開發(fā)優(yōu)秀網絡應用的前提和基礎-
網絡基本概念
(1)客戶端(就是手機或者ipad等手持設備上面的APP)
移動應用(iOS、android等應用)
(2)服務器 (遠程服務器-本地服務器)
為客戶端提供服務、提供數據、提供資源的機器
** 按照軟件開發(fā)階段來分,服務器可以大致分為以下2種 : **-
遠程服務器
別名:外網服務器、正式服務器
使用階段:應用上線后使用的服務器
使用人群:供全體用戶使用
速度:取決于服務器的性能、用戶的網速 -
本地服務器
別名:內網服務器、測試服務器
使用階段:應用處于開發(fā)、測試階段使用的服務器
使用人群:僅供公司內部的開發(fā)人員、測試人員使用
速度:由于是局域網,所以速度飛快,有助于提高開發(fā)測試效率
-
遠程服務器
請求(客戶端索要數據的方式)
客戶端向服務器索取數據的一種行為響應(需要客戶端解析數據)
服務器對客戶端的請求做出的反應,一般指返回數據給客戶端-
數據庫(服務器的數據從哪里來)
請求與響應流程圖.png
Http
URL介紹
統(tǒng)一資源定位符
URL的全稱是Uniform Resource Locator(統(tǒng)一資源定位符)
通過1個URL,能找到互聯網上唯一的1個資源
URL就是資源的地址、位置,互聯網上的每個資源都有一個唯一的URLurl格式(協議\主機地址\路徑)
協議 :不同的協議,代表著不同的資源查找方式、資源傳輸方式
主機地址 :存放資源的主機(服務器)的IP地址(域名)
**路徑 : **資源在主機(服務器)中的具體位置-
url的基本格式
URL的基本格式= (協議://) (主機地址) / (路徑)
示例 : (https://) (www.baidu.com) / (img/bdlogo.gif)
示例圖.png -
協議
【file】訪問的是本地計算機上的資源,格式是 : file://(不用加主機地址)
【ftp】訪問的是共享主機的文件資源,格式是 : ftp://
【mailto】訪問的是電子郵件地址,格式是 : mailto:
【http】超文本(媒體)傳輸協議,訪問的是遠程的網絡資源,格式是 : http://
注 : http協議是在網絡開發(fā)中最常用的協議-
TCP/IP協議簇
(1) 通常意義上,我們使用的網絡是在TCP/IP協議簇的基礎上運作的,而HTTP屬于它內部的一個子集。
(2) 計算機與網絡設備需要通信,雙方就必須要基于相同的方法,比如具體應該如何探測通信目標,由哪一方面發(fā)起通信,使用什么語言進行溝通等等,所有的這一切都需要規(guī)則。而我們則把這些規(guī)則稱之為協議(potocol)。
(3) 在協議中規(guī)定了很多的各式各樣的內容,如選址方法,雙方建立通信的順序等等。這些協議如(ICMP DNS TCP FTP HTTP SNMP PPPoE IP FDDI)等等,通常我們把TCP/IP認為是在IP協議的通信過程中,使用到的協議簇的統(tǒng)稱。
(4) TCP 協議簇里面最重要的一點就是分層設計:按照層次分別分為應用層、傳輸層、網絡層和數據鏈路層。其中,與****HTTP****關系密切的協議有TCP、IP、DNS等。
TCP協議簇的分層.png -
Http協議
-
(1)http協議作用
a.超文本傳輸協議,全稱是Hypertext Transfer Protocol
b."規(guī)定"客戶端和服務器之間的"數據傳輸格式"
c.讓客戶端和服務器能有效地進行數據溝通
- (2)http協議優(yōu)缺點
a.簡單快速(協議簡單,服務器端程序規(guī)模小,通信速度快)
b.靈活(允許傳輸各種數據)
c.非持續(xù)性連接(1.1之前版本是非持續(xù)的("短鏈接"),即限制每次連接只處理一個請求,服務器對客戶端的請求做出響應后,馬上斷開連接,這種方式可以節(jié)省傳輸時間) -
(3)基本通信過程
a.請求:客戶端向服務器索要數據
b.響應:服務器返回客戶端相應的
- (4) URL的解析,及客戶端與服務器之間的通訊過程
說明:
-
- 1,2,3,4是為了解析獲取的主機域名和端口號
- 5是連接到解析后的主機地址的指定的端口
-
6,7,8是客戶端發(fā)送請求以及服務器接收請求后返回數據,接收到數據后,鏈接關閉
-
TCP/IP協議簇
三次握手
TCP是面向連接的,無論哪一方向另一方發(fā)送數據之前,都必須先在雙方之間建立一條連接。在TCP/IP協議中,TCP協議提供可靠的連接服務,連接是通過三次握手進行初始化的。
**三次握手的目的 : **是同步連接雙方的序列號和確認號并交換 TCP窗口大小信息。

-
三次握手的過程
**第一次握手 : **建立連接。
客戶端發(fā)送連接請求報文段,將SYN位置為1,Sequence Number為x;然后,客戶端進入SYN_SEND狀態(tài),等待服務器的確認;**第二次握手 : **服務器收到SYN報文段。
服務器收到客戶端的SYN報文段,需要對這個SYN報文段進行確認,設置Acknowledgment Number為x+1(Sequence Number+1);同時,自己還要發(fā)送SYN請求信息,將SYN位置為1,Sequence Number為y;服務器端將上述所有信息放到一個報文段(即SYN+ACK報文段)中,一并發(fā)送給客戶端,此時服務器進入SYN_RECV狀態(tài);**第三次握手 : **客戶端收到服務器的SYN+ACK報文段。
然后將Acknowledgment Number設置為y+1,向服務器發(fā)送ACK報文段,這個報文段發(fā)送完畢以后,客戶端和服務器端都進入ESTABLISHED(建立)狀態(tài),完成TCP三次握手。
當完成三次握手后,客戶端與服務器就可以開始傳輸數據了.-
為什么要有三次握手
四次揮手
當客戶端和服務器通過三次握手建立了TCP連接以后,當數據傳送完畢,肯定是要斷開TCP連接的啊。那對于TCP的斷開連接,這里就有了神秘的“四次分手”.

-
四次揮手的過程
- **第一次分手 : **主機1(可以是客戶端,也可以是服務器端),設置Sequence Number和Acknowledgment Number,向主機2發(fā)送一個FIN報文段;此時,主機1進入FIN_WAIT_1狀態(tài);這表示主機1沒有數據要發(fā)送給主機2了;
- **第二次分手 : **主機2收到了主機1發(fā)送的FIN報文段,向主機1回一個ACK報文段,Acknowledgment Number為Sequence Number加1;主機1進入FIN_WAIT_2狀態(tài);主機2告訴主機1,我“同意”你的關閉請求;
- **第三次分手 : **主機2向主機1發(fā)送FIN報文段,請求關閉連接,同時主機2進入LAST_ACK狀態(tài);
- **第四次分手 : **主機1收到主機2發(fā)送的FIN報文段,向主機2發(fā)送ACK報文段,然后主機1進入TIME_WAIT狀態(tài);主機2收到主機1的ACK報文段以后,就關閉連接;此時,主機1等待2MSL后依然沒有收到回復,則證明Server端已正常關閉,那好,主機1也可以關閉連接了。
**注 : **MSL是Maximum Segment Lifetime英文的縮寫,中文可以譯為“報文最大生存時間”,他是任何報文在網絡上存在的最長時間,超過這個時間報文將被丟棄。 -
為什么要有四次揮手
-
四次揮手中的狀態(tài)的含義
Http請求的發(fā)送
-
發(fā)送http請求的方法
在HTTP/1.1協議中,定義了8種發(fā)送http請求的方法
-- GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT、PATCH
-- 根據HTTP協議的設計初衷,不同的方法對資源有不同的操作方式(如:增 , 刪 , 改 , 查)
-- "最常用的是GET和POST"(實際上GET和POST都能辦到增刪改查) -
GET和POST請求的對比
GET請求和POST請求的區(qū)別在于參數如何傳遞-
GET請求
在請求URL后面以?的形式跟上發(fā)給服務器的參數,多個參數之間用&隔開.
比如 : http://ww.test.com/loginusername=123&pwd=234&type=JSON
注意 : 由于瀏覽器和服務器對URL長度有限制,因此在URL后面附帶的參數是有限制的,通常不能超過1KB -
POST請求
發(fā)給服務器的參數全部放在請求體中
理論上,POST傳遞的數據量沒有限制(具體還得看服務器的處理能力) -
如何選擇用戶GET請求還是POST請求
除簡單數據查詢外,其它的一律使用POST請求
-
GET請求
a.如果要"傳遞大量數據",比如文件上傳,"只能用POST請求"
b.GET的安全性比POST要差些,"如果包含機密\敏感信息","建議用POST"
c.如果"僅僅是索取數據"(數據查詢),"建議使用GET"
d.如果是"增加、修改、刪除數據","建議使用POST"
iOS中發(fā)送http請求的方案
- 蘋果原生
NSURLConnection 03年推出的古老技術
NSURLSession:【重點】13年推出iOS7之后, 以取代NSURLConnection功能強大;
能支持后臺網絡請求與數據傳輸等;
CFNetwork: 底層技術、C語言的(前兩種都是基于這個, 開發(fā)中基本用不 上) - 第三方框架
ASIHttpRequest: 外號“HTTP終結者”,功能極其強大,可惜早已停止更新
AFNetworking:【重點】簡單易用,提供了基本夠用的常用功能,維護和 使用者多
MKNetworkKit: 維護和使用者少, 功能強大, 但是上手較難
**建議 : ** 為了提高開發(fā)效率,企業(yè)開發(fā)用的基本是第三方框架
http請求通信的過程
(1)請求 : 【包括請求頭+請求體(請求體非必選)】
(2)響應 : 【響應頭+響應體】
(3)通信過程 :
a.發(fā)送請求的時候把請求頭和請求體(請求體是非必須的)包裝成一個請求對象
b.服務器端對請求進行響應,在響應信息中包含響應頭和響應體,響應信息是對服務器端的描述,具體的信息放在響應體中傳遞給客戶端
(4)狀態(tài)碼 :
【200】:請求成功
【400】:客戶端請求的語法錯誤,服務器無法解析
【404】:無法找到資源
【500】:服務器內部錯誤,無法完成請求








