在作移動端開發時,感受iOS對網絡層的封裝其實已經作到很是便利於開發者使用。無論使用iOS原生作網絡請求仍是第三方框架裏的AFN或ASI,都是基本讓開發者不須要理會太多的網絡通訊的理論性知識。鑑於最近想作OA項目移動端開發,仍是好好整理下這方面的理論爲接下來的即時通信作準備。-- linweida程序員
第一種是基於原生開發的交互過程:web
(1)移動客戶端經過協議(http、https稱爲協議)調用API訪問接口頁面,好比經過url爲http://localhost:8080/api/login.sap?name=123&password=123。數據庫
(2)編譯器經過API命令調用服務器的webservice訪問數據庫。編程
(3)服務器的數據庫經過數據庫語句處理數據並返回結果給webservice。api
(4)服務器的webservice把數據庫的數據轉換爲JSON或XML格式的數據文本傳給移動客戶端。瀏覽器
(3)移動客戶端獲得數據文本後,通過反序列化後處理內容。安全
第二種是基於手機瀏覽器開發的交互過程是:服務器
(1)移動客戶端使用瀏覽器調用服務器的webservice接口訪問數據。網絡
(2)服務器的數據庫經過數據庫語句處理數據並返回結果給webservice。框架
(3)服務器的webservice把數據庫的數據轉換爲JSON或XML格式的數據文本傳給移動客戶端。
(4)移動客戶端接收到服務器webservice傳過來的數據文本後,通過反序列化後處理內容。
因爲存在衆多的網絡模型,國際化標準組織設計了OSI模型統一網絡鏈接問題。OSI模型由低到高分別是物理層(Physical Layer)、數據鏈路層(Data Link Layer)、網絡層(Network Layer)、傳輸層(Transport Layer)、會話層(Session Layer)、表示層(Presentation Layer)和應用層(Application Layer)。
第一層到第三層屬於OSI參考模型的低三層,負責建立網絡通訊鏈接的鏈路,也稱爲媒體層。
第四層到第七層 爲OSI參考模型的高四層,具體負責端到端的數據通訊,也稱爲主機層。在客戶端開發中也是主要了解這高四層。
第一,IP地址是網絡上主機設備的惟一標識。
第二,端口是用於標示進程的邏輯地址,不一樣進程的標示。有效端口在0~65535,其中保留端口是0~1024。
第三,傳輸協議是用什麼樣的方式進行交互,常見協議是TCP或UDP。
傳輸層的做用:負責獲取所有信息。它必須跟蹤數據單元碎片、亂序到達的數據包和其它在傳輸過程當中可能發生的危險。介於低三層和高三層之間的一層,它是源端到目的端對數據傳送進行控制從低到高的最後一層。
傳輸層的協議:TCP(傳輸控制協議)、UDP(用戶數據包協議)等。從低到高往下延伸,TCP/IP協議族包括運輸層、網絡層、鏈路層。
傳輸層區分不一樣程序的數據流:它只知道目標主機上的哪一個服務程序來響應這個程序,而不知道這個服務程序是幹什麼的。傳輸層的TCP和UDP能夠接收來自多個應用程序的數據流,用端口號標識他們,而後把他們送給Internet層處。同時TCP和UDP接收來自Internet層的數據包,用端口號區分他們,而後交給不一樣的應用程序。(在同一IP地址(同一個目標主機)上不一樣的端口號是兩個不一樣的連接。IP地址和端口號用來惟一的肯定網絡上數據的目的地。)
(1)須要通過三次握手才能完成通訊的協議,因此它是可靠的面向連接的協議。
(2)前期在三次握手時會耗費時間,後期數據傳遞時還須要確認機制、重傳機制、擁塞控制機制等。而且每臺機器都要維護全部的傳輸連接,事實上每一個連接都會佔用系統的CPU、內存等硬件資源。
(3)在握手時容易被人利用攻擊。
(4)在開發中若是要求整個數據要準確無誤的傳輸給對方,這就須要要求可靠的應用,就須要用到TCP協議,好比HTTP、HTTPS、FTP等傳輸文件的協議,POP、SMTP等郵件傳輸的協議。
(1)只須要將消息發出去並不理會對方是否成功接收,因此它是不可靠的無連接的協議。
(2)因爲不須要通過三次握確認重傳和擁塞控制等機制,沒有須要在傳輸數據時浪費通訊流量和通訊時間因此他開銷很小,而且傳輸快。
(3)UDP協議可以傳輸的數據包大小不能超過64KB。
(4)在開發中當網絡通訊質量要求不高的時候,要求網絡通信速度能儘可能快時就是用UDP協議。
(1)不能直接認爲哪一種協議是不安全的。在數據傳輸的完整性講,TCP是安全的。而在易攻擊程度講,UDP是安全的。
(2)從數據丟失角度講,數據丟包是看網絡的成分比較大,哪一種協議其實都會有丟包。只是TCP協議若是發生丟包時能夠利用send的返回值內容告訴某個端以後能夠重傳。而UDP協議發生丟包時就不會重傳,可是能夠從編碼標記,將丟包的數據保存起來從新傳輸。
(1)客戶端 向服務器 發出鏈接請求;
(2)服務器 對客戶端 授予請求;
(3)客戶端 向服務器 確認。
(4)(第四次握手)兩端之間斷開連接。
Socket又稱爲套接字,是系統提供的用於網絡通訊的方法。網絡上的兩個程序經過一個雙向的通訊鏈接實現數據的交換,鏈接的一端稱之爲一個socket。應用程序一般經過「套接字」向網絡發出請求或者回復網絡請求。總之,網絡請求是經過Socket來創建鏈接而後互相通訊的。Socket的是指並非一種協議,沒有規定計算機應當以怎麼樣傳遞消息,只是給程序員提供了一個發送消息的接口,程序員使用這個接口的方法來發送與接收消息。Socket描述IP和端口,獲取對方的IP和端口後就能夠給對方發送消息,再由服務器來處理髮送的這些消息。因此Socket必定包含了通訊的雙方,即客服端和服務器。
先從服務器端提及。服務器端先初始化Socket,而後與端口綁定(bind),對端口進行監聽(listen),調用accept阻塞,等待客戶端鏈接。在這時若是有個客戶端初始化一個Socket,而後鏈接服務器(connect),若是鏈接成功,這時客戶端與服務器端的鏈接就創建了。客戶端發送數據請求,服務器端接收請求並處理請求,而後把迴應數據發送給客戶端,客戶端讀取數據,最後關閉鏈接,一次交互結束。
(1)TCP編程的服務器端通常步驟是:
一、建立一個socket,用函數socket(); 二、設置socket屬性,用函數setsockopt(); * 可選 三、綁定IP地址、端口等信息到socket上,用函數bind(); 四、開啓監聽,用函數listen(); 五、接收客戶端上來的鏈接,用函數accept(); 六、收發數據,用函數send()和recv(),或者read()和write(); 七、關閉網絡鏈接; 八、關閉監聽;
(2)TCP編程的客戶端通常步驟是:
一、建立一個socket,用函數socket(); 二、設置socket屬性,用函數setsockopt();* 可選 三、綁定IP地址、端口等信息到socket上,用函數bind();* 可選 四、設置要鏈接的對方的IP地址和端口等屬性; 五、鏈接服務器,用函數connect(); 六、收發數據,用函數send()和recv(),或者read()和write(); 七、關閉網絡鏈接;
(3)UDP編程的服務器端通常步驟是:
一、建立一個socket,用函數socket(); 二、設置socket屬性,用函數setsockopt();* 可選 三、綁定IP地址、端口等信息到socket上,用函數bind(); 四、循環接收數據,用函數recvfrom(); 五、關閉網絡鏈接;
(4)UDP編程的客戶端通常步驟是:
一、建立一個socket,用函數socket(); 二、設置socket屬性,用函數setsockopt();* 可選 三、綁定IP地址、端口等信息到socket上,用函數bind();* 可選 四、設置對方的IP地址和端口等屬性; 五、發送數據,用函數sendto(); 六、關閉網絡鏈接;
經過傳輸層(端口號:傳輸端口與接收端口)創建數據傳輸的通路,在會話層及以上的高層次中,數據傳送的單位再也不另外命名,統稱爲報文(而在會話層如下的數據傳送單位中TCP叫作段、UDP叫作數據報)。會話層不參與具體的傳輸,它提供包括訪問驗證和會話管理在內的創建和維護應用之間通訊的機制。如服務器驗證用戶登陸即是由會話層完成的。 主要在你的系統之間發起會話或者接受會話請求(設備之間須要互相認識能夠是IP也能夠是MAC或者是主機名)
(1)會話管理:容許用戶在兩個實體設備之間創建、維持和終止會話,並支持它們之間的數據交換。例如提供單方向會話或雙向同時會話,並管理會話中的發送順序,以及會話所佔用時間的長短。
(2)會話流量控制:提供會話流量控制和交叉會話功能。
(3)尋址:使用遠程地址創建會話鏈接。
(4)出錯控制:從邏輯上講會話層主要負責數據交換的創建、保持和終止,但實際的工做倒是接收來自傳輸層的數據,並負責糾正錯誤。會話控制和遠程過程調用均屬於這一層的功能。但應注意,此層檢查的錯誤不是通訊介質的錯誤,而是磁盤空間、打印機缺紙等類型的高級錯誤。
它對來自應用層的命令和數據進行解釋,對各類語法賦予相應的含義,並按照必定的格式傳送給會話層。其主要功能是「處理用戶信息的表示問題,如編碼、數據格式轉換和加密解密」等。
(1)數據格式處理:協商和創建數據交換的格式,解決各應用程序之間在數據格式表示上的差別。
(2)數據的編碼:處理字符集和數字的轉換。例如因爲用戶程序中的數據類型(整型或實型、有符號或無符號等)、用戶標識等均可以有不一樣的表示方式,所以,在設備之間須要具備在不一樣字符集或格式之間轉換的功能。
(3)壓縮和解壓縮:爲了減小數據的傳輸量,這一層還負責數據的壓縮與恢復。
數據的加密和解密:能夠提升網絡的安全性。
若是兩臺計算機的應用程序要交換數據,A計算機須要先把信息發送到第七層的應用層。而後此層將信息發送到表示層(第六層),表示層將數據轉送到會話層(第五層),如此繼續,直至物理層(第一層)。
應用層 | DHCP · DNS · FTP · Gopher · HTTP · IMAP4 · IRC · NNTP · XMPP · POP3 · SIP · SMTP · SNMP · SSH · TELNET · RPC · RTCP · RTP ·RTSP · SDP · SOAP · GTP · STUN · NTP · SSDP |
表示層 | HTTP/HTML · FTP · Telnet · ASN.1(具備表示層功能) |
會話層 | ADSP·ASP·H.245·ISO-SP·iSNS·NetBIOS·PAP·RPC· RTCP·SMPP·SCP·SSH·ZIP·SDP(具備會話層功能) |
傳輸層 | TCP · UDP · TLS · DCCP · SCTP ·RSVP · PPTP |
網絡層 | IP (IPv4 · IPv6) · ICMP · ICMPv6 · IGMP ·IS-IS · IPsec · BGP · RIP · OSPF ·ARP · RARP |
數據鏈路層 | Wi-Fi(IEEE 802.11) · WiMAX(IEEE 802.16) ·ATM · DTM · 令牌環 · 以太網路 · FDDI · 幀中繼 · GPRS · EVDO · HSPA · HDLC · PPP · L2TP · ISDN ·STP |
物理層 | 以太網路卡 · 調制解調器 · 電力線通訊(PLC) · SONET/SDH(光同步數字傳輸網) · G.709(光傳輸網絡) · 光導纖維 · 同軸電纜 · 雙絞線 |
之後找時間把Socket編程的過程寫一下,哈哈!