Socket是為網(wǎng)絡(luò)服務(wù)提供的一種機(jī)制,學(xué)習(xí)之前對Socket沒有任何的理解潭流,在此僅想分享自己的學(xué)習(xí)歷程和一些學(xué)習(xí)心得毙死,第一次寫,若有不足之處還望指教
OSI倔丈、TCP\IP參考模型
簡單解釋:
1.物理層:主要定義物理設(shè)備標(biāo)準(zhǔn)憨闰,如網(wǎng)線的接口類型、各種傳輸介質(zhì)的傳輸速率等需五。
2.數(shù)據(jù)鏈路層:主要將從物理層接收的數(shù)據(jù)進(jìn)行MAC地址的封裝與解封裝鹉动。
3.網(wǎng)絡(luò)層:選擇合適的網(wǎng)間路由和交換結(jié)點,確保數(shù)據(jù)及時傳送宏邮,將從下層接收到的數(shù)據(jù)進(jìn)行IP地址的封裝與解封裝
4.傳輸層:定義了一些傳輸數(shù)據(jù)的協(xié)議和端口泽示,如TCP缸血、UDP協(xié)議,主要將從下層接收的數(shù)據(jù)進(jìn)行分段和傳輸械筛,到達(dá)目的地址后再進(jìn)行重組捎泻,以往把這一層數(shù)據(jù)叫做段
5.會話層:通過傳輸層建立數(shù)據(jù)傳輸通路。
6.表示層:主要是進(jìn)行對接收的數(shù)據(jù)進(jìn)行解釋埋哟、壓縮與解壓縮等笆豁,即把計算機(jī)能夠識別的東西轉(zhuǎn)化成人能夠識別的東西(如圖片、聲音等)赤赊。
7.應(yīng)用層:主要是一些終端的應(yīng)用闯狱,比如說FTP(各種文件下載)、瀏覽器抛计、QQ等哄孤,可以將其理解為在電腦屏幕上可以看到的東西,也就是終端應(yīng)用吹截。
網(wǎng)絡(luò)通訊要素:
IP地址:網(wǎng)絡(luò)中設(shè)備的標(biāo)示
端口號:用來標(biāo)示進(jìn)程的邏輯地址瘦陈,不同進(jìn)程的標(biāo)示
傳輸協(xié)議:用什么樣的方式進(jìn)行交互,常見協(xié)議TCP/UDP
TCP/UDP
TCP(傳輸控制協(xié)議)
1.建立連接饭弓,形成數(shù)據(jù)傳輸?shù)耐ǖ?/p>
2.在連接中可進(jìn)行大數(shù)據(jù)傳輸(數(shù)據(jù)的大小不受限制)
3.通過三次握手建立連接双饥,可靠協(xié)議,安全送達(dá)
4.先建立連接弟断,效率較低
UDP(用戶數(shù)據(jù)報協(xié)議)
1.不需要建立連接咏花,將數(shù)據(jù)封裝在數(shù)據(jù)包中
2.每個數(shù)據(jù)包得大小限制在64k之內(nèi)
3.無需連接阀趴,是不可靠協(xié)議
4.不需要連接昏翰,速度較快
Socket
1.網(wǎng)絡(luò)提供服務(wù)的一種機(jī)制
2.通信的兩端都是socket
3.網(wǎng)絡(luò)通信其實就是socket間的通信
4.數(shù)據(jù)在兩個socket間通過IO傳輸
iOS中常用的兩種Socket類型
流式Socket(SOCK_STREAM):流式是一種面向連接的Socket,針對于面向連接的TCP服務(wù)應(yīng)用
數(shù)據(jù)報式Socket(SOCK_DGRAM):數(shù)據(jù)報式Socket是一種無連接的Socket刘急,對應(yīng)于無連接的UDP服務(wù)應(yīng)用
Http與Socket的區(qū)別
1.Http是基于Socket的實現(xiàn)棚菊;Http應(yīng)用層協(xié)議,主要解決如何包裝數(shù)據(jù)
2.Http傳輸?shù)臄?shù)據(jù)格式是規(guī)定好的叔汁,Socket實現(xiàn)數(shù)據(jù)傳輸是最原始统求,Socket實現(xiàn)的數(shù)據(jù)傳輸格式可自定義
3.Http建立的連接稱為短連接,Socket建立的連接為長連接
4.Socket是對TCP/IP協(xié)議的封裝据块,Socket本身并不是協(xié)議码邻,而是一個調(diào)用接口(API),通過Socket我們才能使用TCP/IP協(xié)議
最后
大家看完覺得還比較感興趣的話,可以自己模仿微信實現(xiàn)簡單的聊天功能
相關(guān)下載鏈接
iOS XMPP框架:https://github.com/robbiehanson/XMPPFramework
Server:http://www.igniterealtime.org/downloads/index.jsp
數(shù)據(jù)庫:http://dev.mysql.com/downloads/mysql/