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/