十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專(zhuān)業(yè)推廣+無(wú)憂售后,網(wǎng)站問(wèn)題一站解決
本篇內(nèi)容介紹了“socket通信和tcp通信的區(qū)別有哪些”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
創(chuàng)新互聯(lián)公司成立于2013年,我們提供高端網(wǎng)站建設(shè)、網(wǎng)站制作公司、網(wǎng)站設(shè)計(jì)、網(wǎng)站定制、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、微信平臺(tái)小程序開(kāi)發(fā)、微信公眾號(hào)開(kāi)發(fā)、seo優(yōu)化服務(wù),提供專(zhuān)業(yè)營(yíng)銷(xiāo)思路、內(nèi)容策劃、視覺(jué)設(shè)計(jì)、程序開(kāi)發(fā)來(lái)完成項(xiàng)目落地,為成都活動(dòng)板房企業(yè)提供源源不斷的流量和訂單咨詢(xún)。
socket通信和tcp通信的區(qū)別:1、tcp協(xié)議屬于傳輸層協(xié)議,而socket是應(yīng)用層和傳輸層之間的一個(gè)抽象層;2、建立一個(gè)TCP連接需要三次握手;3、socket連接可以保持長(zhǎng)連接;4、tcp服務(wù)端和tcp客戶端使用socket通信等。
本文操作環(huán)境:Windows10系統(tǒng)、Dell G3電腦。
socket通信和tcp通信的區(qū)別是什么?
tcp和socket的區(qū)別
一:tcp協(xié)議
tcp協(xié)議屬于傳輸層協(xié)議(UDP也屬于傳輸層協(xié)議,但是UDP協(xié)議是無(wú)狀態(tài)的)。建立一個(gè)TCP連接需要三次握手,斷開(kāi)一個(gè)TCP連接需要四次揮手。手機(jī)能夠使用聯(lián)網(wǎng)功能,是因?yàn)槭謾C(jī)底層實(shí)現(xiàn)了TCP/IP協(xié)議,使用手機(jī)終端通過(guò)無(wú)線網(wǎng)就可以與服務(wù)端建立一個(gè)tcp連接。TCP協(xié)議可以對(duì)上層網(wǎng)絡(luò)提供接口,使上層網(wǎng)絡(luò)數(shù)據(jù)的傳輸建立在“無(wú)差別”的網(wǎng)絡(luò)之上。
tcp建立連接需要三次握手:
圖1:tcp連接三次握手示意圖
如圖所示:
客戶端要與服務(wù)端建立tcp連接,首先向服務(wù)端發(fā)送一個(gè)syn J信號(hào),服務(wù)端收到此信號(hào)后向客戶端回答一個(gè)ACK J+1信號(hào),并額外加了一個(gè)syn K信號(hào),客戶端收到ACK J+1信號(hào)后就知道,服務(wù)端能收到我的信號(hào),后面我客戶端就可以放心的發(fā)送數(shù)據(jù)給你服務(wù)端而不用擔(dān)心你服務(wù)端接收不到我發(fā)送的數(shù)據(jù)了。
客戶端收到服務(wù)端發(fā)送的SYN K信號(hào)后,還需要向服務(wù)端回一個(gè) ACK K+1信號(hào),這樣服務(wù)端收到此信號(hào)就知道,我服務(wù)端給你客戶端發(fā)送的信號(hào),你客戶端能夠收到,這樣我服務(wù)端就可以放心的給你客戶端發(fā)送數(shù)據(jù)而不用擔(dān)心你客戶端收不到自己發(fā)送的數(shù)據(jù)了。
其實(shí)從上面的描述可以看到:
建立連接完全可以跟斷開(kāi)TCP連接一樣分四步走,只不過(guò)是把服務(wù)端的應(yīng)答信號(hào)ACK和客戶端的認(rèn)證請(qǐng)求信號(hào)SYNC這兩步做成一步走了。
tcp連接關(guān)閉時(shí)需要四次揮手:
圖2:tcp連接斷開(kāi)時(shí)四次揮手示意圖
客戶端收到服務(wù)端的應(yīng)答信號(hào)ACK M+1后,客戶端就知道:服務(wù)端知道我客戶端不會(huì)再發(fā)送數(shù)據(jù)包給你服務(wù)端了,你可以停止對(duì)我的監(jiān)聽(tīng)了。
但是此時(shí)只是客戶端->服務(wù)端的單向流動(dòng)停止了,另一個(gè)方向的流動(dòng):
服務(wù)端->客戶端的數(shù)據(jù)發(fā)送還可以正常進(jìn)行,直到服務(wù)端向客戶端發(fā)送FIN N揮手信號(hào),客戶端向服務(wù)端回應(yīng)ACK N+1信號(hào),服務(wù)端才知道:客戶端知道我服務(wù)端不會(huì)再發(fā)送數(shù)據(jù)包給你客戶端了,你可以停止對(duì)我的監(jiān)聽(tīng)了。
至此,客戶端->服務(wù)端的單向流動(dòng)和服務(wù)端->客戶端的單向流動(dòng)兩個(gè)方向都停止,可以關(guān)閉連接了。
二:socket
我們知道兩個(gè)進(jìn)程如果需要進(jìn)行通訊最基本的一個(gè)前提能能夠唯一的標(biāo)示一個(gè)進(jìn)程,在本地進(jìn)程通訊中我們可以使用PID來(lái)唯一標(biāo)示一個(gè)進(jìn)程,但PID只在本地唯一,網(wǎng)絡(luò)中的兩個(gè)進(jìn)程PID沖突幾率很大,這時(shí)候我們需要另辟它徑了,我們知道IP層的ip地址可以唯一標(biāo)示主機(jī),而TCP層協(xié)議和端口號(hào)可以唯一標(biāo)示主機(jī)的一個(gè)進(jìn)程,這樣我們可以利用ip地址+協(xié)議+端口號(hào)唯一標(biāo)示網(wǎng)絡(luò)中的一個(gè)進(jìn)程。
能夠唯一標(biāo)示網(wǎng)絡(luò)中的進(jìn)程后,它們就可以利用socket進(jìn)行通信了,什么是socket呢?
我們經(jīng)常把socket翻譯為套接字,socket是在應(yīng)用層和傳輸層之間的一個(gè)抽象層,它把TCP/IP層復(fù)雜的操作抽象為幾個(gè)簡(jiǎn)單的接口供應(yīng)用層調(diào)用已實(shí)現(xiàn)進(jìn)程在網(wǎng)絡(luò)中通信。
圖5:socket通信系統(tǒng)模塊示意圖
tcp服務(wù)端和tcp客戶端使用socket通信的過(guò)程如下。
從圖中可以看到,socket連接可以保持長(zhǎng)連接。
圖6:基本socket客戶/服務(wù)端通信流程示意圖
注意的是,socket連接可以由客戶端主動(dòng)關(guān)閉,也可以由服務(wù)端主動(dòng)關(guān)閉。
“socket通信和tcp通信的區(qū)別有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!