一、Socket
1.概念:
Socket(又叫套接字)是通信的基石,是支持TCP/IP協(xié)議的網(wǎng)絡(luò)通信的基本操作單元。它是網(wǎng)絡(luò)通信過程中端點(diǎn)的抽象表示,包含進(jìn)行網(wǎng)絡(luò)通信必須的五種信息:連接協(xié)議,客戶端的IP地址,客戶端的端口,服務(wù)器的IP地址,服務(wù)器的端口。
一個(gè)Socket是一對(duì)IP地址和端口。
Socket可以看成在兩個(gè)程序進(jìn)行通訊連接中的一個(gè)端點(diǎn),一個(gè)程序?qū)⒁欢涡畔懭隨ocket中,該Socket將這段信息發(fā)送給另外一個(gè)Socket中,使這段信息能傳送到其他程序中。你可以這么理解:Socket是進(jìn)程之間用來對(duì)話的中間層工具。
2.作用:
應(yīng)用層通過傳輸層進(jìn)行數(shù)據(jù)通信時(shí),TCP和UDP會(huì)遇到同時(shí)為多個(gè)應(yīng)用程序進(jìn)程提供并發(fā)服務(wù)的問題。為了區(qū)別不同的應(yīng)用程序進(jìn)程和連接,許多計(jì)算機(jī)操作系統(tǒng)為應(yīng)用程序與TCP/IP協(xié)議交互提供了稱為套接字(Socket)的接口,區(qū)分不同應(yīng)用程序進(jìn)程間的網(wǎng)絡(luò)通信和連接。Socket(套接字)是對(duì) TCP/IP 或者UDP/IP協(xié)議的封裝,Socket本身并不是協(xié)議,而是一個(gè)調(diào)用接口(API),通過Socket,我們才能使用TCP/IP協(xié)議。通過調(diào)用這個(gè)接口(API),程序員在開發(fā)網(wǎng)絡(luò)應(yīng)用程序的時(shí)候,就可以不用關(guān)心底層是怎么實(shí)現(xiàn)的,減輕開發(fā)的難度。
3.Socket的實(shí)現(xiàn)方式
Socket是一個(gè)中間層工具,它存在于操作系統(tǒng)的內(nèi)核。電腦上的進(jìn)程為了真正通過Socket來發(fā)送/接受數(shù)據(jù),Socket必須和一個(gè)能夠進(jìn)行數(shù)據(jù)傳送的接口連接起來,再通過這個(gè)接口送出數(shù)據(jù)。這個(gè)接口就是端口,而這個(gè)連接的過程就叫做綁定。應(yīng)用層就可以和傳輸層通過套接字接口(API),區(qū)分來自不同應(yīng)用程序進(jìn)程或網(wǎng)絡(luò)連接的通信,實(shí)現(xiàn)數(shù)據(jù)傳輸?shù)牟l(fā)服務(wù)。
假設(shè)有兩個(gè)主機(jī)要進(jìn)行通信?Host A和Host B
?Host A上的程序A將一段信息寫入Socket中,Socket的內(nèi)容被Host A的網(wǎng)絡(luò)管理軟件訪問,并將這段信息通過Host A的網(wǎng)絡(luò)接口卡發(fā)送到Host B,Host B的網(wǎng)絡(luò)接口卡接收到這段信息后,傳送給Host B的網(wǎng)絡(luò)管理軟件,網(wǎng)絡(luò)管理軟件將這段信息保存在Host B的Socket中,然后程序B才能在Socket中閱讀這段信息。
Socket連接的實(shí)現(xiàn)方式:
要通過互聯(lián)網(wǎng)進(jìn)行通信,至少需要一對(duì)套接字,一個(gè)運(yùn)行于客戶機(jī)端,稱之為clientSocket,另一個(gè)運(yùn)行于服務(wù)器端,稱之為serverSocket。
基于TCP協(xié)議的Socket通訊類似于B/S架構(gòu),面向連接,但不同的是服務(wù)器可以向客戶端主動(dòng)推送消息。
先從服務(wù)器說起。服務(wù)器先初始化Socket,然后與端口綁定(bind),對(duì)端口進(jìn)行監(jiān)聽(listen),調(diào)用accept阻塞,等待客戶端連接。在這時(shí)如果有個(gè)客戶端初始化一個(gè)Socket,要連接的目標(biāo)是服務(wù)器的套接字,為此,客戶端的套接字必須首先描述它要連接的服務(wù)器的套接字,指出服務(wù)器套接字的地址和端口,然后就向服務(wù)器套接字提出連接請(qǐng)求(connect),當(dāng)服務(wù)器套接字監(jiān)聽到或者說接收到客戶端套接字的連接請(qǐng)求,它就響應(yīng)客戶端套接字的請(qǐng)求,建立一個(gè)新的線程,把服務(wù)器套接字的描述發(fā)給客戶端,一旦客戶端確認(rèn)了此描述,連接就建立好了。而服務(wù)器套接字繼續(xù)處于監(jiān)聽狀態(tài),繼續(xù)接收其他客戶端套接字的連接請(qǐng)求。
?基于UDP協(xié)議(不可靠連接)是無連接模式通訊,占用資源少,響應(yīng)速度快,延時(shí)低。至于可靠性,可通過應(yīng)用層的控制來滿足。
建立一個(gè)套接字(Socket)、綁定服務(wù)器端IP地址及端口--服務(wù)器端、通過SendTo()方法向指定主機(jī)發(fā)送消息(需提供主機(jī)IP地址及端口)、通過ReciveFrom()方法接收指定主機(jī)發(fā)送的消息(需提供主機(jī)IP地址及端口)。
4.Socket與TCP/IP的關(guān)系
?創(chuàng)建Socket連接時(shí),可以指定使用的傳輸層協(xié)議,Socket可以支持不同的傳輸層協(xié)議(TCP或UDP),當(dāng)使用TCP協(xié)議進(jìn)行連接時(shí),該Socket連接就是一個(gè)TCP連接。
Socket是對(duì)TCP/IP協(xié)議的封裝和應(yīng)用(程序員層面上)。也可以說,TCP/IP協(xié)議是傳輸層協(xié)議,主要解決數(shù)據(jù)如何在網(wǎng)絡(luò)中傳輸,而HTTP是應(yīng)用層協(xié)議,主要解決如何包裝數(shù)據(jù)。關(guān)于TCP/IP和HTTP協(xié)議的關(guān)系,網(wǎng)絡(luò)有一段比較容易理解的介紹:
“我們?cè)趥鬏敂?shù)據(jù)時(shí),可以只使用(傳輸層)TCP/IP協(xié)議,但是那樣的話,如 果沒有應(yīng)用層,便無法識(shí)別數(shù)據(jù)內(nèi)容,如果想要使傳輸?shù)臄?shù)據(jù)有意義,則必須使用到應(yīng)用層協(xié)議,應(yīng)用層協(xié)議有很多,比如HTTP、FTP、TELNET等,也可以自己定義應(yīng)用層協(xié)議。WEB使用HTTP協(xié)議做應(yīng)用層協(xié)議,以封裝HTTP文本信息,然后使用TCP/IP做傳輸層協(xié)議將它發(fā)到網(wǎng)絡(luò)上?!?/p>
我們平時(shí)說的最多的Socket是什么呢,實(shí)際上Socket是對(duì)TCP/IP協(xié)議的封裝,Socket本身并不是協(xié)議,而是一個(gè)調(diào)用接口(API),通過Socket,我們才能使用TCP/IP協(xié)議。 實(shí)際上,Socket跟TCP/IP協(xié)議沒有必然的聯(lián)系。Socket編程接口在設(shè)計(jì)的時(shí)候,就希望也能適應(yīng)其他的網(wǎng)絡(luò)協(xié)議。所以說,Socket的出現(xiàn)只是使得程序員更方便地使用TCP/IP協(xié)議棧而已,是對(duì)TCP/IP協(xié)議的抽象,從而形成了我們知道的一些最基本的函數(shù)接口,比如create、 listen、connect、accept、send、read和write等等。網(wǎng)絡(luò)有一段關(guān)于Socket和TCP/IP協(xié)議關(guān)系的說法比較容易理解:
“TCP/IP只是一個(gè)協(xié)議棧,就像操作系統(tǒng)的運(yùn)行機(jī)制一樣,必須要具體實(shí)現(xiàn),同時(shí)還要提供對(duì)外的操作接口。這個(gè)就像操作系統(tǒng)會(huì)提供標(biāo)準(zhǔn)的編程接口,比如win32編程接口一樣,TCP/IP也要提供可供程序員做網(wǎng)絡(luò)開發(fā)所用的接口,這就是Socket編程接口。”
實(shí)際上,傳輸層的TCP是基于網(wǎng)絡(luò)層的IP協(xié)議的,而應(yīng)用層的HTTP協(xié)議又是基于傳輸層的TCP協(xié)議的,而Socket本身不算是協(xié)議,就像上面所說,它只是提供了一個(gè)針對(duì)TCP或者UDP編程的接口。Socket是對(duì)端口通信開發(fā)的工具,它要更底層一些。
5.Socket可以實(shí)現(xiàn)的網(wǎng)絡(luò)應(yīng)用
=>客戶端-服務(wù)器通信:通過Socket,客戶端可以與服務(wù)器建立連接并發(fā)送請(qǐng)求,服務(wù)器接收請(qǐng)求并返回響應(yīng)。
=>網(wǎng)絡(luò)聊天和即時(shí)通訊:通過Socket,可以在多個(gè)用戶之間實(shí)現(xiàn)實(shí)時(shí)的文字、音頻或視頻通信。
=>文件傳輸:可以使用Socket在不同計(jì)算機(jī)之間傳輸文件,如上傳和下載文件。
=>遠(yuǎn)程控制:可通過Socket在遠(yuǎn)程計(jì)算機(jī)上執(zhí)行指令或操作。
=>P2P(點(diǎn)對(duì)點(diǎn))通信:Socket提供了直接的點(diǎn)對(duì)點(diǎn)通信接口,允許兩個(gè)或多個(gè)計(jì)算機(jī)直接進(jìn)行數(shù)據(jù)交換。
使用Socket進(jìn)行網(wǎng)絡(luò)編程時(shí),需要考慮協(xié)議、端口、IP地址、數(shù)據(jù)格式等因素,以確保通信的正確性和有效性。不同編程語言和平臺(tái)都有相應(yīng)的Socket API和庫,可以根據(jù)自己的需求選擇合適的工具和技術(shù)。
二、TCP/IP協(xié)議
1.概念:
TCP/IP(Transmission Control Protocol/Internet Protocol,傳輸控制協(xié)議/網(wǎng)絡(luò)協(xié)議)是指能夠在多個(gè)不同網(wǎng)絡(luò)間實(shí)現(xiàn)信息傳輸?shù)膮f(xié)議簇。TCP/IP協(xié)議不僅僅指的是TCP 和IP兩個(gè)協(xié)議,而是指一個(gè)由FTP、SMTP、TCP、UDP、IP等協(xié)議構(gòu)成的協(xié)議簇, 只是因?yàn)樵赥CP/IP協(xié)議中TCP協(xié)議和IP協(xié)議最具代表性,所以被稱為TCP/IP協(xié)議。
2.簡介:
TCP/IP傳輸協(xié)議,即傳輸控制/網(wǎng)絡(luò)協(xié)議,也叫作網(wǎng)絡(luò)通訊協(xié)議。它是在網(wǎng)絡(luò)的使用中的最基本的通信協(xié)議。TCP/IP傳輸協(xié)議對(duì)互聯(lián)網(wǎng)中各部分進(jìn)行通信的標(biāo)準(zhǔn)和方法進(jìn)行了規(guī)定。并且,TCP/IP傳輸協(xié)議是保證網(wǎng)絡(luò)數(shù)據(jù)信息及時(shí)、完整傳輸?shù)膬蓚€(gè)重要的協(xié)議。TCP/IP傳輸協(xié)議是嚴(yán)格來說是一個(gè)四層的體系結(jié)構(gòu),包括應(yīng)用層、傳輸層、網(wǎng)絡(luò)層和數(shù)據(jù)鏈路層。文章來源:http://www.zghlxwxcb.cn/news/detail-814239.html
TCP/IP協(xié)議是Internet最基本的協(xié)議,其中應(yīng)用層的主要協(xié)議有Telnet、文章來源地址http://www.zghlxwxcb.cn/news/detail-814239.html
到了這里,關(guān)于網(wǎng)絡(luò)通信(Socket/TCP/UDP)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!