什么是socket?
計(jì)算機(jī)專業(yè)術(shù)語就是:
網(wǎng)絡(luò)上的兩個(gè)程序通過一個(gè)雙向的通信連接實(shí)現(xiàn)數(shù)據(jù)的交換,這個(gè)連接的一端稱為一個(gè)socket. Socket的英文原義是"孔"或"插座". 作為BSD UNIX的進(jìn)程通信機(jī)制, 取后一種意思. 通常也稱作"套接字", 用于描述IP地址和端口, 是一個(gè)通信鏈的句柄, 可以用來實(shí)現(xiàn)不同虛擬機(jī)或不同計(jì)算機(jī)之間的通信. Internet上的主機(jī)一般運(yùn)行了多個(gè)服務(wù)軟件, 同時(shí)提供幾種服務(wù). 每種服務(wù)都打開一個(gè)Socket, 并綁定到一個(gè)端口上, 不同的端口對(duì)于不同的服務(wù). Socket正如其英文原義那樣, 像一個(gè)多孔插座. 一臺(tái)主機(jī)猶如布滿各種插座的房間, 每個(gè)插座有一個(gè)編號(hào), 有的插座提供220伏交流電, 有的提供110伏交流電, 有的則提供有限電視節(jié)目. 客戶軟件將插頭插到不同編號(hào)的插座, 就可以得到不同的服務(wù).
通俗語:
Socket稱"套接字"
網(wǎng)絡(luò)上的兩個(gè)程序通過一個(gè)雙向的通信連接實(shí)現(xiàn)數(shù)據(jù)的交換, 這個(gè)連接的一端稱為一個(gè)socket端, 平時(shí)我們向服務(wù)器發(fā)送一個(gè)網(wǎng)絡(luò)請(qǐng)求, 然后服務(wù)器響應(yīng)請(qǐng)求, 返回服務(wù)器數(shù)據(jù)應(yīng)用程序通常通過"套接字"向網(wǎng)絡(luò)發(fā)出請(qǐng)求或者應(yīng)答網(wǎng)絡(luò)請(qǐng)求.
細(xì)節(jié):
1.Socket相當(dāng)于一個(gè)"管道"或者說"隧道"兩邊的連接, 一個(gè)進(jìn)入, 一個(gè)出來
2.用戶名和密碼是存儲(chǔ)在服務(wù)器的數(shù)據(jù)庫中
3.我們要保證客戶端程序是訪問web應(yīng)用程序還是數(shù)據(jù)庫應(yīng)用程序呢?就是通過端口號(hào)
網(wǎng)絡(luò)通信要素:
1.網(wǎng)絡(luò)上的請(qǐng)求就是通過Socket來建立連接然后互相通信
2.IP地址(網(wǎng)絡(luò)上主機(jī)設(shè)備的唯一標(biāo)識(shí)) (尋找服務(wù)器的主機(jī))
3.端口號(hào)(定位程序)
4.用于標(biāo)示進(jìn)程(一個(gè)程序就是一個(gè)進(jìn)程) 的邏輯地址, 不同進(jìn)程的標(biāo)示
5.有效端口: 0~65535, 其中0~1024由系統(tǒng)使用或者保留端口, 開發(fā)中建議使用1024以上的端口
6.傳輸協(xié)議(用什么樣的方式進(jìn)行交互) (方式就是TCP和UDP需要還是不需要建立連接. 就像快遞一樣, 向順豐或者是圓通的一個(gè)方式)
7.通訊的規(guī)則(常見協(xié)議: TCP延曙、UDP)
TCP:
三次握手,就是為了數(shù)據(jù)的安全性和可靠性 比如打電話:
第一次握手:先撥過去
第二次握手:對(duì)方"喂"了一聲, 響應(yīng)一下,
第三次握手:我聽到對(duì)方之后, 也說了一句"喂", 響應(yīng)
只有這三個(gè)步驟, 別人喂了一聲, 你也喂了一聲, 它能聽到我的響應(yīng), 我還能聽到它的響應(yīng)才是成功的. 假如借錢, 這樣才能保證了安全性和可靠性.
- 必須建立連接, 效率會(huì)稍低(每一次都要建立連接)
2.進(jìn)行了多少次HTTP請(qǐng)求, 就進(jìn)行了多少次三次握手(HTTP是效率低些, 但是影響不大,因?yàn)橛脩粝麓伟l(fā)送網(wǎng)絡(luò)請(qǐng)求的時(shí)間不固定, 所以沒有多大影響) (打電話如果一直保持, 電話費(fèi)不就多了嗎)
3.HTTP就是每發(fā)送一次請(qǐng)求, 就建立一次TCP連接, 三次握手.
UDP:
將數(shù)據(jù)及源和目的封裝成數(shù)據(jù)包中, 不需要建立連接(就像老師(源)屏幕廣播, 就及時(shí)的把數(shù)據(jù)同步發(fā)送到你的電腦上(目的), 直接發(fā)送. 加入網(wǎng)絡(luò)斷了, 再次看到屏幕的時(shí)候, 只能看到最新的內(nèi)容. 沒了就沒了, 錯(cuò)過了就錯(cuò)過了)
沒個(gè)數(shù)據(jù)報(bào)的大小限制在64Kb之內(nèi)(首先是實(shí)時(shí)的, 如果數(shù)據(jù)弄大點(diǎn), 如果出問題, 就不會(huì)有太大的破壞)
因?yàn)闊o需連接, 因此是不可靠協(xié)議(省去了三次握手, 性能就高了)
不需要建立連接, 速度快
應(yīng)用:
Socket通信流程圖:
1.bind()就是綁定端口 (服務(wù)器要有端口標(biāo)識(shí)自己)
2.listen()就是監(jiān)聽端口看有沒有連接過來, 我同意就接受連接 (假如客戶端要連接web應(yīng)用程序端口, 就要監(jiān)聽80端口. 假如是惡意攻擊, 多次并發(fā)請(qǐng)求, 會(huì)造成網(wǎng)絡(luò)阻塞, 那我就可以斷開你的連接)
3.accept()
4.write()客戶端發(fā)請(qǐng)求
5.read()服務(wù)端接受請(qǐng)求
假如客戶端發(fā)送登錄請(qǐng)求, 我服務(wù)器是要做出來請(qǐng)求的, 服務(wù)器要做回應(yīng)數(shù)據(jù), 發(fā)數(shù)據(jù)給客戶端, 做一個(gè)write()寫的操作一個(gè)HTTP的請(qǐng)求完了后, 接下有個(gè)操作, 結(jié)束連接. 因?yàn)橄麓握?qǐng)求的時(shí)間是不固定的. 就做一個(gè)close()操作
HTTP的底層就通過Socket建立連接通信管道, 實(shí)現(xiàn)數(shù)據(jù)的傳輸
HTTP是一個(gè)TCP的傳輸協(xié)議(方式), 它是一個(gè)可靠的安全的協(xié)議
實(shí)現(xiàn)Socket服務(wù)端監(jiān)聽方法:
1.實(shí)現(xiàn)socket的監(jiān)聽方法就是使用C語言實(shí)現(xiàn)(系統(tǒng)默認(rèn)就有, 但是麻煩)
2.使用CocoaAsyncSocket第三方(OC的) , 內(nèi)部是對(duì)C的封裝, 耗時(shí)操作肯定是耗時(shí)的, 開發(fā)的時(shí)候, 我們也是用的這個(gè)框架
3.Telnet命令 telnet host port/telnet 193.168.10.10 5288 telnet命令時(shí)連接服務(wù)器上的某個(gè)端口對(duì)應(yīng)的服務(wù)
Socket層上的協(xié)議:
2.HTTP協(xié)議 (類似于字典的協(xié)議)
3.XMPP協(xié)議(是一款即時(shí)通訊協(xié)議 ,目的是定義數(shù)據(jù)傳輸?shù)母袷?
4.自定義即時(shí)通訊協(xié)議, json格式
補(bǔ)充:TCP靠欢、 UDP 拢切、HTTP 、 Socket之間的區(qū)別
IP:網(wǎng)絡(luò)層協(xié)議;
TCP和UDP:傳輸層協(xié)議;
HTTP:應(yīng)用層協(xié)議
SOCKET: TCP/IP網(wǎng)絡(luò)的API
TCP/IP代表傳輸控制協(xié)議/網(wǎng)際協(xié)議, 指的是一系列協(xié)議.
TCP和UDP使用IP協(xié)議從一個(gè)網(wǎng)絡(luò)傳送數(shù)據(jù)包到另一個(gè)網(wǎng)絡(luò). 把IP想象成一種高速公路, 它允許其他協(xié)議在上面行駛并找到其他電腦的出口. TCP和UDP是高速公路上的"卡車", 它們攜帶的貨物就是像HTTP, 文件傳輸協(xié)議FTP這樣的協(xié)議等.
TCP和UDP是FTP, HTTP和SMTP之類使用的傳輸層協(xié)議. 雖然TCP和UDP都是用來傳輸其他協(xié)議的, 它們卻有一個(gè)顯著的不同:TCP提供有保證的數(shù)據(jù)傳輸, 而UDP不提供. 這意味著TCP有一個(gè)特殊的機(jī)制來確保數(shù)據(jù)安全的不出錯(cuò)的從一個(gè)端點(diǎn)傳到另一個(gè)端點(diǎn), 而UDP不提供任何這樣的保證.
HTTP(超文本傳輸協(xié)議)就是利用TCP在兩臺(tái)電腦(通常是Web服務(wù)器和客戶端)之間的傳輸信息的協(xié)議. 客戶端使用Web瀏覽器發(fā)起HTTP請(qǐng)求給Web服務(wù)器, Web服務(wù)器發(fā)送被請(qǐng)求的信息給客戶端.
記住, 需要IP協(xié)議來連接網(wǎng)絡(luò);TCP是一種允許我們安全傳輸數(shù)據(jù)的機(jī)制, 使用TCP協(xié)議來傳輸數(shù)據(jù)的HTTP是Web服務(wù)器和客戶端使用的特殊協(xié)議.
Socket接口是TCP/IP網(wǎng)絡(luò)的API, Socket接口定義了許多函數(shù)或歷程, 用以開發(fā)TCP/IP網(wǎng)絡(luò)上的應(yīng)用程序.