參考鏈接
www.cnblogs.com/wendingding/p/3813466.html
www.reibang.com/p/1389677a5840
www.cnblogs.com/meier1205/p/5971313.html
blog.csdn.net/hopedark/article/details/50729763
我相信出去面試的同學經(jīng)常會被問到網(wǎng)絡(luò)層相關(guān)的問題,其實作為一個ios開發(fā),可能接觸這一塊比較少,但是如果想表現(xiàn)自己是一位老程序員,這方面的知識是不可少的.首先上一張圖給大家看看網(wǎng)絡(luò)請求過程.
七層模型介紹(OSI 模型(Open System Interconnection model))
1.物理層:物理層負責最后將信息編碼成電流脈沖或其它信號用于網(wǎng)上傳輸彪笼;eg:RJ45等將數(shù)據(jù)轉(zhuǎn)化成0和1;
2.數(shù)據(jù)鏈路層:數(shù)據(jù)鏈路層通過物理網(wǎng)絡(luò)鏈路提供數(shù)據(jù)傳輸蚂且。不同的數(shù)據(jù)鏈路層定義了不同的網(wǎng)絡(luò)和協(xié) 議特征,其中包括物理編址配猫、網(wǎng)絡(luò)拓撲結(jié)構(gòu)、錯誤校驗杏死、數(shù)據(jù)幀序列以及流控;可以簡單的理解為:規(guī)定了0和1的分包形式泵肄,確定了網(wǎng)絡(luò)數(shù)據(jù)包的形式;
數(shù)據(jù)鏈路層:SLIP淑翼,CSLIP腐巢,PPP,MTU
3.網(wǎng)絡(luò)層:網(wǎng)絡(luò)層負責在源和終點之間建立連接;可以理解為玄括,此處需要確定計算機的位置冯丙,怎么確定?IPv4遭京,IPv6胃惜!
網(wǎng)絡(luò)層:IP,ICMP哪雕,OSPF船殉,EIGRP,IGMP
IP 協(xié)議:是網(wǎng)絡(luò)互連協(xié)議(Internet Protocol)的縮寫斯嚎。它提供了能適應(yīng)各種網(wǎng)絡(luò)硬件的靈活性利虫,對底層網(wǎng)絡(luò)硬件幾乎沒任何要求挨厚,任何一個網(wǎng)絡(luò)只要能夠從一個地點向另一個地點傳送二進制數(shù)據(jù),即可使用IP協(xié)議加入互聯(lián)網(wǎng)絡(luò)了
4.傳輸層:傳輸層向高層提提供可靠的端到端的網(wǎng)絡(luò)數(shù)據(jù)流服務(wù),可以理解為:每一個應(yīng)用程序都會在網(wǎng)卡注冊一個端口號糠惫,該層就是端口與端口的通信疫剃!常用的(TCP/IP)協(xié)議;
傳輸層:TCP硼讽,UDP
說說關(guān)于UDP/TCP的區(qū)別巢价?
UDP: 是用戶數(shù)據(jù)報協(xié)議: 主要用在實時性要求高以及對質(zhì)量相對較弱的地方,但面對現(xiàn)在高質(zhì)量的線路不是容易丟包除非是一些擁塞條件下, 如流媒體
TCP: 是傳輸控制協(xié)議:是面連接的,那么運行環(huán)境必然要求其可靠性不可丟包有良好的擁塞控制機制如http ftp telnet 等
什么是三次握手與四次揮手?
三次握手實現(xiàn)的過程:
第一次握手:建立連接時理郑,客戶端發(fā)送同步序列編號到服務(wù)器蹄溉,并進入發(fā)送狀態(tài)咨油,等待服務(wù)器確認
第二次:服務(wù)器收到同步序列編號您炉,確認并同時自己也發(fā)送一個同步序列編號+確認標志,此時服務(wù)器進入接收狀態(tài)
第三次:客戶端收到服務(wù)器發(fā)送的包役电,并向服務(wù)器發(fā)送確認標志赚爵,隨后鏈接成功。
注意:是在鏈接成功后在進行數(shù)據(jù)傳輸法瑟。
四次揮手:
第一次: 客戶端向服務(wù)器發(fā)送一個帶有結(jié)束標記的報文冀膝。
第二次:服務(wù)器收到報文后,向客戶端發(fā)送一個確認序號霎挟,同時通知自己相應(yīng)的應(yīng)用程序:對方要求關(guān)閉連接
第三次: 服務(wù)器向客戶端發(fā)送一個帶有結(jié)束標記的報文窝剖。
第四次: 客戶端收到報文后,向服務(wù)器發(fā)送一個確認序號酥夭。鏈接關(guān)閉赐纱。
5.會話層:會話層建立、管理和終止表示層與實體之間的通信會話熬北;建立一個連接(自動的手機信息疙描、自動的網(wǎng)絡(luò)尋址);
6.表示層:表示層提供多種功能用于應(yīng)用層數(shù)據(jù)編碼和轉(zhuǎn)化,以確保以一個系統(tǒng)應(yīng)用層發(fā)送的信息 可以被另一個系統(tǒng)應(yīng)用層識別;可以理解為:解決不同系統(tǒng)之間的通信,eg:Linux下的QQ和Windows下的QQ可以通信讶隐;
7.應(yīng)用層:OSI 的應(yīng)用層協(xié)議:包括文件的傳輸起胰、訪問及管理協(xié)議(FTAM) ,以及文件虛擬終端協(xié)議(VIP)和公用管理系統(tǒng)信息(CMIP)等;
應(yīng)用層:TFTP,HTTP巫延,SNMP效五,F(xiàn)TP,SMTP炉峰,DNS火俄,Telnet 等等
一、HTTP 協(xié)議:是超文本傳輸協(xié)議讲冠,對應(yīng)于應(yīng)用層瓜客,用于如何封裝數(shù)據(jù),http 為短連接:客戶端發(fā)送請求都需要服務(wù)器端回送響應(yīng).請求結(jié)束后,主動釋放鏈接,因此為短連接谱仪。通常的做法是玻熙,不需要任何數(shù)據(jù),也要保持每隔一段時間向服務(wù)器發(fā)送"保持連接"的請求疯攒。這樣可以保證客戶端在服務(wù)器端是"上線"狀態(tài),HTTP連接使用的是"請求-響應(yīng)"方式嗦随,不僅在請求時建立連接,而且客戶端向服務(wù)器端請求后敬尺,服務(wù)器才返回數(shù)據(jù)枚尼。
二、FTP 協(xié)議 :是文件傳輸協(xié)議砂吞,是File Transfer Protocol的簡稱署恍,它的作用是用于控制互聯(lián)網(wǎng)上文件的雙向傳輸,因此一定不會是即時聊天使用的蜻直;UDP是面向無連接的傳輸層協(xié)議盯质,數(shù)據(jù)傳輸是不可靠的,它只管發(fā)概而,不管收不收得到呼巷;TCP是面向連接的,可靠的傳輸層協(xié)議赎瑰;HTTP是超文本傳輸協(xié)議王悍,對應(yīng)于應(yīng)用層,而HTTP是基于TCP的餐曼。
二.網(wǎng)絡(luò)請求篇---URL
? ? ? ? ??客戶端都是通過一個URL去請求數(shù)據(jù),那我們就根據(jù)這個URL去解讀這個請求的過程以 及涉及的知識,.URL的全稱是Uniform Resource Locator(統(tǒng)一資源定位符),通過1個URL压储,能找到互聯(lián)網(wǎng)上唯一的1個資源,URL就是資源的地址、位置.互聯(lián)網(wǎng)上的每個資源都有一個唯一的URL.
?一. URL 基本介紹
二.URL中常見的協(xié)議介紹
(1)HTTP ?
超文本傳輸協(xié)議晋辆,訪問的是遠程的網(wǎng)絡(luò)資源渠脉,格式是http://
1、HTTP協(xié)議簡介
不管是移動客戶端還是PC端瓶佳,訪問遠程的網(wǎng)絡(luò)資源經(jīng)常使用HTTP協(xié)議,訪問百度主頁:http://www.baidu.com,獲得新浪的微博數(shù)據(jù),獲得大眾點評的團購數(shù)據(jù).
2.HTTP協(xié)議的作用
?HTTP的全稱是Hypertext Transfer Protocol芋膘,超文本傳輸協(xié)議
(1)規(guī)定客戶端和服務(wù)器之間的數(shù)據(jù)傳輸格式
(2)讓客戶端和服務(wù)器能有效地進行數(shù)據(jù)溝通
3.HTTP的通信過程
要想使用HTTP協(xié)議向服務(wù)器索取數(shù)據(jù),得先了解HTTP通信的完整過程
完整的http通信可以分為2大步驟
(1)請求:客戶端向服務(wù)器索要數(shù)據(jù)
(2)響應(yīng):服務(wù)器返回客戶端相應(yīng)的數(shù)據(jù)
4.HTTP通信過程 - 請求和響應(yīng)
? 4.1.HTTP通信過程 - 請求
HTTP協(xié)議規(guī)定:1個完整的由客戶端發(fā)給服務(wù)器的HTTP請求中包含以下內(nèi)容
請求行:包含了請求方法霸饲、請求資源路徑为朋、HTTP協(xié)議版本
GET /MJServer/resources/images/1.jpg HTTP/1.1
請求頭:包含了對客戶端的環(huán)境描述、客戶端請求的主機地址等信息
Host: 192.168.1.105:8080// 客戶端想訪問的服務(wù)器主機地址
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9) Firefox/30.0// 客戶端的類型厚脉,客戶端的軟件環(huán)境
Accept: text/html, */*// 客戶端所能接收的數(shù)據(jù)類型
Accept-Language: zh-cn// 客戶端的語言環(huán)境
Accept-Encoding: gzip// 客戶端支持的數(shù)據(jù)壓縮格式
請求體:客戶端發(fā)給服務(wù)器的具體數(shù)據(jù)习寸,比如文件數(shù)據(jù)
4.2.HTTP通信過程 - 響應(yīng)
客戶端向服務(wù)器發(fā)送請求,服務(wù)器應(yīng)當做出響應(yīng)傻工,即返回數(shù)據(jù)給客戶端
HTTP協(xié)議規(guī)定:1個完整的HTTP響應(yīng)中包含以下內(nèi)容:
狀態(tài)行:包含了HTTP協(xié)議版本霞溪、狀態(tài)碼孵滞、狀態(tài)英文名稱
HTTP/1.1 200 OK
響應(yīng)頭:包含了對服務(wù)器的描述、對返回數(shù)據(jù)的描述
Server: Apache-Coyote/1.1// 服務(wù)器的類型
Content-Type: image/jpeg// 返回數(shù)據(jù)的類型
Content-Length: 56811// 返回數(shù)據(jù)的長度
Date: Mon, 23 Jun 2014 12:54:52 GMT// 響應(yīng)的時間
實體內(nèi)容:服務(wù)器返回給客戶端的具體數(shù)據(jù)鸯匹,比如文件數(shù)據(jù)
5.請求方法
在HTTP/1.1協(xié)議中坊饶,定義了8種發(fā)送http請求的方法
GET、POST殴蓬、OPTIONS匿级、HEAD、PUT染厅、DELETE痘绎、TRACE、CONNECT肖粮、PATCH
根據(jù)HTTP協(xié)議的設(shè)計初衷孤页,不同的方法對資源有不同的操作方式
PUT :增
DELETE :刪
POST:改
GET:查
提示:最常用的是GET和POST(實際上GET和POST都能辦到增刪改查)
2.get和post請求
要想使用GET和POST請求跟服務(wù)器進行交互,得先了解一個概念:參數(shù)就是傳遞給服務(wù)器的具體數(shù)據(jù)尿赚,比如登錄時的帳號散庶、密碼
GET和POST對比:GET和POST的主要區(qū)別表現(xiàn)在數(shù)據(jù)傳遞上
GET
在請求URL后面以?的形式跟上發(fā)給服務(wù)器的參數(shù)蕉堰,多個參數(shù)之間用&隔開凌净,比如http://ww.test.com/login?username=123&pwd=234&type=JSON
注意:由于瀏覽器和服務(wù)器對URL長度有限制,因此在URL后面附帶的參數(shù)是有限制的屋讶,通常不能超過1KB
POST
發(fā)給服務(wù)器的參數(shù)全部放在請求體中
理論上冰寻,POST傳遞的數(shù)據(jù)量沒有限制(具體還得看服務(wù)器的處理能力)
3.GET和POST的選擇
? ?選擇GET和POST的建議
(1)如果要傳遞大量數(shù)據(jù),比如文件上傳皿渗,只能用POST請求
(2)GET的安全性比POST要差些斩芭,如果包含機密\敏感信息,建議用POST
(3)如果僅僅是索取數(shù)據(jù)(數(shù)據(jù)查詢)乐疆,建議使用GET
(4)如果是增加划乖、修改、刪除數(shù)據(jù)挤土,建議使用POST.
三琴庵、Socket 連接
要想明白 Socket,必須要理解 TCP 連接仰美。
TCP 三次握手:握手過程中并不傳輸數(shù)據(jù)迷殿,在握手后服務(wù)器與客戶端才開始傳輸數(shù)據(jù),理想狀態(tài)下咖杂,TCP 連接一旦建立庆寺,在通訊雙方中的任何一方主動斷開連接之前 TCP 連接會一直保持下去。
Socket?是對 TCP/IP 協(xié)議的封裝诉字,Socket 只是個接口不是協(xié)議懦尝,通過 Socket 我們才能使用 TCP/IP 協(xié)議知纷,除了 TCP,也可以使用 UDP 協(xié)議來傳遞數(shù)據(jù)陵霉。
創(chuàng)建 Socket?連接的時候屈扎,可以指定傳輸層協(xié)議,可以是 TCP 或者 UDP撩匕,當用 TCP 連接腰奋,該Socket就是個TCP連接,反之殃恒。
Socket?原理
Socket?連接,至少需要一對套接字吞滞,分為 clientSocket,serverSocket 連接分為3個步驟:
(1) 服務(wù)器監(jiān)聽:服務(wù)器并不定位具體客戶端的套接字扁凛,而是時刻處于監(jiān)聽狀態(tài)忍疾;
(2) 客戶端請求:客戶端的套接字要描述它要連接的服務(wù)器的套接字,提供地址和端口號谨朝,然后向服務(wù)器套接字提出連接請求卤妒;
(3) 連接確認:當服務(wù)器套接字收到客戶端套接字發(fā)來的請求后,就響應(yīng)客戶端套接字的請求,并建立一個新的線程,把服務(wù)器端的套接字的描述發(fā)給客戶端字币。一旦客戶端確認了此描述则披,就正式建立連接。而服務(wù)器套接字繼續(xù)處于監(jiān)聽狀態(tài)洗出,繼續(xù)接收其他客戶端套接字的連接請求.
Socket為長連接:通常情況下Socket 連接就是 TCP 連接士复,因此 Socket 連接一旦建立,通訊雙方開始互發(fā)數(shù)據(jù)內(nèi)容,直到雙方斷開連接翩活。在實際應(yīng)用中阱洪,由于網(wǎng)絡(luò)節(jié)點過多,在傳輸過程中菠镇,會被節(jié)點斷開連接冗荸,因此要通過輪詢高速網(wǎng)絡(luò),該節(jié)點處于活躍狀態(tài)利耍。
很多情況下蚌本,都是需要服務(wù)器端向客戶端主動推送數(shù)據(jù),保持客戶端與服務(wù)端的實時同步堂竟。
若雙方是 Socket 連接魂毁,可以由服務(wù)器直接向客戶端發(fā)送數(shù)據(jù)。
若雙方是 HTTP 連接出嘹,則服務(wù)器需要等客戶端發(fā)送請求后席楚,才能將數(shù)據(jù)回傳給客戶端。
因此税稼,客戶端定時向服務(wù)器端發(fā)送請求烦秩,不僅可以保持在線垮斯,同時也詢問服務(wù)器是否有新數(shù)據(jù),如果有就將數(shù)據(jù)傳給客戶端只祠。