0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Socket套接字的原理說明

嵌入式應(yīng)用開發(fā) ? 來源:嵌入式應(yīng)用開發(fā) ? 作者:嵌入式應(yīng)用開發(fā) ? 2022-06-18 19:16 ? 次閱讀

應(yīng)用層通過傳輸層進行數(shù)據(jù)通信時,TCP和UDP會遇到同時為多個應(yīng)用程序進程提供并發(fā)服務(wù)的問題。多個TCP連接或多個應(yīng)用程序進程可能需要 通過同一個TCP協(xié)議端口傳輸數(shù)據(jù)。為了區(qū)別不同的應(yīng)用程序進程和連接,許多計算機操作系統(tǒng)為應(yīng)用程序與TCP/IP協(xié)議交互提供了稱為套接字 (Socket)的接口,區(qū)分不同應(yīng)用程序進程間的網(wǎng)絡(luò)通信和連接。

生成套接字主要有3個參數(shù):通信的目的IP地址、使用的傳輸層協(xié)議(TCP或UDP)和使用的端口號。Socket原意是“插座”。通過將這3個參數(shù)結(jié)合起來,與一個“插座”Socket綁定,應(yīng)用層就可以和傳輸 層通過套接字接口,區(qū)分來自不同應(yīng)用程序進程或網(wǎng)絡(luò)連接的通信,實現(xiàn)數(shù)據(jù)傳輸?shù)牟l(fā)服務(wù)。

Socket以看成在兩個程序進行通訊連接中的一個端點,一個程序?qū)⒁欢?a target="_blank">信息寫入Socket中,該Socket將這段信息發(fā)送給另外一個Socket中,使這段信息能傳送到其他程序中。

pYYBAGKts-eAKn0ZAAD_l5ZPZxg590.png

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中閱讀這段信息。

要通過互聯(lián)網(wǎng)進行通信,至少需要一對套接字,一個運行于客戶機端,稱之為ClientSocket,另一個運行于服務(wù)器端,稱之為serverSocket。
根據(jù)連接啟動的方式以及本地套接字要連接的目標(biāo),套接字之間的連接過程可以分為三個步驟:服務(wù)器監(jiān)聽,客戶端請求,連接確認(rèn)。
服務(wù)器監(jiān)聽:是服務(wù)器端套接字并不定位具體的客戶端套接字,而是處于等待連接的狀態(tài),實時監(jiān)控網(wǎng)絡(luò)狀態(tài)。

客戶端請求:是指由客戶端的套接字提出連接請求,要連接的目標(biāo)是服務(wù)器端的套接字。為此,客戶端的套接字必須首先描述它要連接的服務(wù)器的套接字,指出服務(wù)器端套接字的地址和端口號,然后就向服務(wù)器端套接字提出連接請求。

連 接確認(rèn):是指當(dāng)服務(wù)器端套接字監(jiān)聽到或者說接收到客戶端套接字的連接請求,它就響應(yīng)客戶端套接字的請求,建立一個新的線程,把服務(wù)器端套接字的描述發(fā)給客 戶端,一旦客戶端確認(rèn)了此描述,連接就建立好了。而服務(wù)器端套接字繼續(xù)處于監(jiān)聽狀態(tài),繼續(xù)接收其他客戶端套接字的連接請求。

socket通信流程:

1、服務(wù)器根據(jù)地址類型(ipv4,ipv6)、socket類型、協(xié)議創(chuàng)建socket
2、服務(wù)器為socket綁定ip地址和端口號
3、服務(wù)器socket監(jiān)聽端口號請求,隨時準(zhǔn)備接收客戶端發(fā)來的連接,這時候服務(wù)器的socket并沒有被打開
4、客戶端創(chuàng)建socket
5、客戶端打開socket,根據(jù)服務(wù)器ip地址和端口號試圖連接服務(wù)器socket
6、服務(wù)器socket接收到客戶端socket請求,被動打開,開始接收客戶端請求,直到客戶端返回連接信息。這時候socket進入阻塞狀態(tài),所謂阻塞即accept()方法一直到客戶端返回連接信息后才返回,開始接收下一個客戶端諒解請求
7、客戶端連接成功,向服務(wù)器發(fā)送連接狀態(tài)信息
8、服務(wù)器accept方法返回,連接成功
9、客戶端向socket寫入信息
10、服務(wù)器讀取信息
11、客戶端關(guān)閉
12、服務(wù)器端關(guān)閉

審核編輯:符乾江

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • TCP
    TCP
    +關(guān)注

    關(guān)注

    8

    文章

    1375

    瀏覽量

    79173
  • 套接字
    +關(guān)注

    關(guān)注

    0

    文章

    5

    瀏覽量

    1878
收藏 人收藏

    評論

    相關(guān)推薦

    嵌入式學(xué)習(xí)-飛凌嵌入式ElfBoard ELF 1板卡-CAN編程示例之socket CAN

    。如何使用socket CAN就像TCP/IP協(xié)議一樣,在使用CAN網(wǎng)絡(luò)之前你首先需要打開一個套接。CAN的套接使用到了一個新的協(xié)議族,
    發(fā)表于 11-15 09:25

    飛凌嵌入式ElfBoard ELF 1板卡-CAN編程示例之socket CAN編程步驟

    創(chuàng)建socket使用CAN通信協(xié)議簇,需要在創(chuàng)建socket時將PF_CAN作為第一個參數(shù);同時選定原始套接協(xié)議(SOCK_RAW)。綁定can設(shè)備這里是將創(chuàng)建好的
    發(fā)表于 11-15 09:23

    飛凌嵌入式ElfBoard ELF 1板卡-CAN編程示例之socket CAN

    。如何使用socket CAN就像TCP/IP協(xié)議一樣,在使用CAN網(wǎng)絡(luò)之前你首先需要打開一個套接。CAN的套接使用到了一個新的協(xié)議族,
    發(fā)表于 11-14 08:51

    socket 和 WebSocket 的區(qū)別

    在現(xiàn)代網(wǎng)絡(luò)通信中,Socket和WebSocket是兩種常見的通信協(xié)議。它們在實現(xiàn)網(wǎng)絡(luò)通信、數(shù)據(jù)傳輸?shù)确矫姘l(fā)揮著重要作用。然而,它們之間存在一些關(guān)鍵的區(qū)別。 1. Socket套接
    的頭像 發(fā)表于 11-12 14:33 ?567次閱讀

    嵌入式學(xué)習(xí)-飛凌嵌入式ElfBoard ELF 1板卡-網(wǎng)絡(luò)編程示例之socket編程

    套接描述符。參數(shù)name指出說明對方套接地址結(jié)構(gòu)的指針。對方套接
    發(fā)表于 11-12 10:59

    飛凌嵌入式ElfBoard ELF 1板卡-網(wǎng)絡(luò)編程示例之socket編程

    套接描述符。參數(shù)name指出說明對方套接地址結(jié)構(gòu)的指針。對方套接
    發(fā)表于 11-11 14:14

    socket與WebSocket的區(qū)別與聯(lián)系

    在現(xiàn)代網(wǎng)絡(luò)通信中,Socket和WebSocket是兩種常見的通信協(xié)議。它們在網(wǎng)絡(luò)編程中扮演著重要的角色,但它們之間存在一些關(guān)鍵的區(qū)別和聯(lián)系。 1. 定義和基本概念 Socket套接
    的頭像 發(fā)表于 11-04 09:19 ?527次閱讀

    socket在物聯(lián)網(wǎng)中的應(yīng)用案例

    物聯(lián)網(wǎng)(IoT)是一個由互聯(lián)網(wǎng)、傳統(tǒng)電信網(wǎng)、傳感器網(wǎng)絡(luò)等多種網(wǎng)絡(luò)組成的網(wǎng)絡(luò),它允許物體與物體、物體與人、人與人之間的智能化交互。在這個過程中,Socket套接)作為網(wǎng)絡(luò)通信的基本接口,扮演著
    的頭像 發(fā)表于 11-04 09:17 ?439次閱讀

    TM4C129x基于套接的TI-RTOS NDK以太網(wǎng)應(yīng)用

    電子發(fā)燒友網(wǎng)站提供《TM4C129x基于套接的TI-RTOS NDK以太網(wǎng)應(yīng)用.pdf》資料免費下載
    發(fā)表于 09-23 11:15 ?0次下載
    TM4C129x基于<b class='flag-5'>套接</b><b class='flag-5'>字</b>的TI-RTOS NDK以太網(wǎng)應(yīng)用

    套接socket包含哪些參數(shù)

    套接Socket)是計算機網(wǎng)絡(luò)中最基本的通信抽象,它定義了兩個進程間通信的端點。在TCP/IP協(xié)議棧中,套接是實現(xiàn)網(wǎng)絡(luò)通信的核心組件。
    的頭像 發(fā)表于 08-16 11:02 ?536次閱讀

    socket的基本概念和原理

    的通信。它是一個抽象的概念,用于表示網(wǎng)絡(luò)中的一個通信實體。在計算機網(wǎng)絡(luò)中,Socket允許應(yīng)用程序通過網(wǎng)絡(luò)發(fā)送和接收數(shù)據(jù)。Socket的概念最早由UNIX操作系統(tǒng)引入,后來被廣泛應(yīng)用于各種操作系統(tǒng)和編程語言中。 2. Socket
    的頭像 發(fā)表于 08-16 10:51 ?1321次閱讀

    socket包含哪些基本信息?

    在計算機網(wǎng)絡(luò)中,套接Socket)是一種通信端點的抽象表示,用于在網(wǎng)絡(luò)中進行數(shù)據(jù)傳輸。套接是網(wǎng)絡(luò)編程的基礎(chǔ),它提供了一種簡單、靈活的方
    的頭像 發(fā)表于 08-16 10:43 ?317次閱讀

    請問UDP套接是否支持使用AT命令的組播?

    UDP 套接是否支持使用 AT 命令的組播?
    發(fā)表于 07-16 06:02

    請問怎們設(shè)置socket套接的rec函數(shù)的阻塞時間?

    請問怎們設(shè)置socket套接的rec函數(shù)的阻塞時間?
    發(fā)表于 06-24 06:14

    鴻蒙原生應(yīng)用開發(fā)-網(wǎng)絡(luò)管理Socket連接(一)

    一、簡介 Socket連接主要是通過Socket進行數(shù)據(jù)傳輸,支持TCP/UDP/TLS協(xié)議。 二、基本概念 Socket套接,就是對網(wǎng)
    發(fā)表于 04-01 14:20