chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

socket是什么以及socket的原理和內核實現(xiàn)

jf_EksNQtU6 ? 來源:小白debug ? 2023-02-01 09:44 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

我相信大家剛開始學socket的時候,都跟我一樣。

云里霧里的,對socket的概念很模糊。

這篇文章我打算從一個初學者的角度開始聊起,讓大家了解下我眼里的socket是什么以及socket的原理和內核實現(xiàn)。

socket的概念

故事要從一個插頭說起。

e91c8214-a1a5-11ed-bfe3-dac502259ad0.png

插頭與插座

當我將插頭插入插座,那看起來就像是將兩者連起來了。

e931d2b8-a1a5-11ed-bfe3-dac502259ad0.png

風扇與電力系統(tǒng)建立"連接"

而插座的英文,又叫socket。

巧了,我們程序員搞網(wǎng)絡編程時也會用到一個叫socket的東西。

其實兩者非常相似。通過socket,我們可以與某臺機子建立"連接",建立"連接"的過程,就像是將插口插入插槽一樣。

e9611faa-a1a5-11ed-bfe3-dac502259ad0.png

大概概念是了解了,但我相信各位對socket其實還是很模糊。

我們從大家最熟悉的使用場景開始說起。

socket的使用場景

我們想要將數(shù)據(jù)從A電腦的某個進程發(fā)到B電腦的某個進程。

這時候我們需要選擇將數(shù)據(jù)發(fā)過去的方式,如果需要確保數(shù)據(jù)要能發(fā)給對方,那就選可靠的TCP協(xié)議,如果數(shù)據(jù)丟了也沒關系,看天意,那就選擇不可靠的UDP協(xié)議。

初學者毫無疑問,首選TCP。

e97e9ea4-a1a5-11ed-bfe3-dac502259ad0.png

TCP是什么

那這時候就需要用socket進行編程。

于是第一步就是創(chuàng)建個關于TCP的socket。就像下面這樣。

sock_fd=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

這個方法會返回socket_fd,它是socket文件的句柄,是個數(shù)字,相當于socket的身份證號。

得到了socket_fd之后,對于服務端,就可以依次執(zhí)行bind(),listen(),accept()方法,然后坐等客戶端的連接請求。

對于客戶端,得到socket_fd之后,你就可以執(zhí)行connect()方法向服務端發(fā)起建立連接的請求,此時就會發(fā)生TCP三次握手。

e99ed318-a1a5-11ed-bfe3-dac502259ad0.gif

握手建立連接流程

連接建立完成后,客戶端可以執(zhí)行send()方法發(fā)送消息,服務端可以執(zhí)行recv()方法接收消息,反過來,服務器也可以執(zhí)行send(),客戶端執(zhí)行recv()方法。

到這里為止,就是我們大部分程序員最熟悉的使用場景。

socket的設計

現(xiàn)在,socket我們見過,也用過,但對大部分程序員來說,它是個黑盒。

那既然是黑盒,我們索性假設我們忘了socket。重新設計一個內核網(wǎng)絡傳輸功能。

網(wǎng)絡傳輸,從操作上來看,無非就是,發(fā)數(shù)據(jù)和遠端之間互相收發(fā)數(shù)據(jù)。也就是對應著寫數(shù)據(jù)讀數(shù)據(jù)。

e9b8b922-a1a5-11ed-bfe3-dac502259ad0.png

讀寫收發(fā)

但顯然,事情沒那么簡單。

這里還有兩個問題。

第一個是,接收端和發(fā)送端可能不止一個,因此我們需要一些信息做下區(qū)分,這個大家肯定很熟悉,可以用IP和端口。IP用來定位是哪臺電腦,端口用來定位是這臺電腦上的哪個進程。

第二個是,發(fā)送端和接收端的傳輸方式有很多區(qū)別,可以是可靠的TCP協(xié)議,也可以是不可靠的UDP協(xié)議,甚至還需要支持基于icmp協(xié)議的ping命令。

sock是什么

寫過代碼的都知道,為了支持這些功能,我們需要定義一個數(shù)據(jù)結構去支持這些功能。

這個數(shù)據(jù)結構,叫sock。

為了解決上面的第一個問題,我們可以在sock里加入IP和端口字段。

e9e8ce5a-a1a5-11ed-bfe3-dac502259ad0.png

sock加入IP和端口字段

而第二個問題,我們會發(fā)現(xiàn)這些協(xié)議雖然各不相同,但還是有一些功能相似的地方,比如收發(fā)數(shù)據(jù)時的一些邏輯完全可以復用。按面向對象編程的思想,我們可以將不同的協(xié)議當成是不同的對象類(或結構體),將公共的部分提取出來,通過"繼承"的方式,復用功能。

基于各種sock實現(xiàn)網(wǎng)絡傳輸功能

于是,我們將功能重新劃分下,定義了一些數(shù)據(jù)結構。

ea0538d8-a1a5-11ed-bfe3-dac502259ad0.png

繼承sock的各類sock

sock是最基礎的結構,維護一些任何協(xié)議都有可能會用到的收發(fā)數(shù)據(jù)緩沖區(qū)。

inet_sock特指用了網(wǎng)絡傳輸功能的sock,在sock的基礎上還加入了TTL,端口,IP地址這些跟網(wǎng)絡傳輸相關的字段信息。說到這里大家就懵了,難道還有不是用網(wǎng)絡傳輸?shù)模坑?,比如Unix domain socket,用于本機進程之間的通信,直接讀寫文件,不需要經(jīng)過網(wǎng)絡協(xié)議棧。這是個非常有用的東西,我以后一定講講(畫餅)。

inet_connection_sock是指面向連接的sock,在inet_sock的基礎上加入面向連接的協(xié)議里相關字段,比如accept隊列,數(shù)據(jù)包分片大小,握手失敗重試次數(shù)等。雖然我們現(xiàn)在提到面向連接的協(xié)議就是指TCP,但設計上linux需要支持擴展其他面向連接的新協(xié)議

tcp_sock就是正兒八經(jīng)的tcp協(xié)議專用的sock結構了,在inet_connection_sock基礎上還加入了tcp特有的滑動窗口、擁塞避免等功能。同樣udp協(xié)議也會有一個專用的數(shù)據(jù)結構,叫udp_sock。

好了,現(xiàn)在有了這套數(shù)據(jù)結構,我們將它們跟硬件網(wǎng)卡對接一下,就實現(xiàn)了網(wǎng)絡傳輸?shù)墓δ堋?/p>

提供socket層

可以想象得到,這里面的代碼肯定非常復雜,同時還操作了網(wǎng)卡硬件,需要比較高的操作系統(tǒng)權限,再考慮到性能和安全,于是決定將它放在操作系統(tǒng)內核里。

既然網(wǎng)絡傳輸功能做在內核里,那用戶空間的應用程序想要用這部分功能的話,該怎么辦呢?

這個好辦,本著不重復造輪子的原則,我們將這部分功能抽象成一個個簡單的接口。以后別人只需要調用這些接口,就可以驅動我們寫好的這一大堆復雜的數(shù)據(jù)結構去發(fā)送數(shù)據(jù)。

那么問題來了,怎么樣將這部分功能暴露出去呢?讓其他程序員更方便的使用呢?

既然跟遠端服務端進程收發(fā)數(shù)據(jù)可以抽象為“讀和寫”,操作文件也可以抽象為"讀和寫",正好有句話叫,"linux里一切皆是文件",那我們索性,將內核的sock封裝成文件就好了。創(chuàng)建sock的同時也創(chuàng)建一個文件,文件有個句柄fd,說白了就是個文件系統(tǒng)里的身份證號碼,通過它可以唯一確定是哪個sock。

這個文件句柄fd其實就是sock_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)里的sock_fd。

將句柄暴露給用戶,之后用戶就可以像操作文件句柄那樣去操作這個sock句柄。在用戶空間里操作這個句柄,文件系統(tǒng)就會將操作指向內核sock結構。

是的,操作這個特殊的文件就相當于操作內核里對應的sock。

ea14be16-a1a5-11ed-bfe3-dac502259ad0.png

通過文件找到sock

有了sock_fd句柄之后,我們就需要提供一些接口方法,讓用戶更方便的實現(xiàn)特定的網(wǎng)絡編程功能。這些接口,我們列了一下,發(fā)現(xiàn)需要有send(),recv(),bind(),listen(),connect()這些。到這里,我們的內核網(wǎng)絡傳輸功能就算設計完成了。

現(xiàn)在是不是眼熟了,上面這些接口方法其實就是socket提供出來的接口

所以說,socket其實就是個代碼庫 or 接口層,它介于內核和應用程序之間,提供了一些高度封裝過的接口,讓我們去使用內核網(wǎng)絡傳輸功能。

ea2b21a6-a1a5-11ed-bfe3-dac502259ad0.png

基于sock實現(xiàn)網(wǎng)絡傳輸功能

到這里,我們應該明白了。我們平時寫的應用程序里代碼里雖然用了socket實現(xiàn)了收發(fā)數(shù)據(jù)包的功能,但其實真正執(zhí)行網(wǎng)絡通信功能的,不是應用程序,而是linux內核。相當于應用程序通過socket提供的接口,將網(wǎng)絡傳輸?shù)倪@部分工作外包給了linux內核

這聽起來像不像我們最熟悉的前后端分離的服務架構,雖然這么說不太嚴謹,但看上去linux就像是被分成了應用程序和內核兩個服務。內核就像是后端,暴露了好多個api接口,其中一類就是socket的send()和recv()這些方法。應用程序就像是前端,負責調用內核提供的接口來實現(xiàn)想要的功能。

ea4d6e6e-a1a5-11ed-bfe3-dac502259ad0.png

進程通過socket調用內核功能

看到這里,我擔心大家會有點混亂,來做個小的總結

在操作系統(tǒng)內核空間里,實現(xiàn)網(wǎng)絡傳輸功能的結構是sock,基于不同的協(xié)議和應用場景,會被泛化為各種類型的xx_sock,它們結合硬件,共同實現(xiàn)了網(wǎng)絡傳輸功能。為了將這部分功能暴露給用戶空間的應用程序使用,于是引入了socket層,同時將sock嵌入到文件系統(tǒng)的框架里,sock就變成了一個特殊的文件,用戶就可以在用戶空間使用文件句柄,也就是socket_fd來操作內核sock的網(wǎng)絡傳輸能力。

這個socket_fd是一個int類型的數(shù)字?,F(xiàn)在回去看socket的中文翻譯,套接字,將它理解為一用于連的數(shù),是不是就覺得特別合理了。

ea5d36a0-a1a5-11ed-bfe3-dac502259ad0.png

網(wǎng)絡分層與基于sock實現(xiàn)網(wǎng)絡傳輸功能

socket如何實現(xiàn)網(wǎng)絡通信

上面關于怎么實現(xiàn)網(wǎng)絡通信功能這一塊一筆帶過了。

現(xiàn)在我們來聊聊。

這套sock的結構其實非常復雜。我們以最常用的TCP協(xié)議為例,簡單了解下它是怎么實現(xiàn)網(wǎng)絡傳輸功能的。

我將它分為兩階段,分別是建立連接數(shù)據(jù)傳輸。

建立連接

對于TCP,要傳數(shù)據(jù),就得先在客戶端和服務端中間建立連接。

在客戶端,代碼執(zhí)行socket提供的connect(sockfd, "ip:port")方法時,會通過sockfd句柄找到對應的文件,再根據(jù)文件里的信息指向內核的sock結構。通過這個sock結構主動發(fā)起三次握手。

eaa45e9a-a1a5-11ed-bfe3-dac502259ad0.png

TCP三次握手

在服務端握手次數(shù)還沒達到"三次"的連接,叫半連接,完成好三次握手的連接,叫全連接。它們分別會用半連接隊列全連接隊列來存放,這兩個隊列會在你執(zhí)行l(wèi)isten()方法的時候創(chuàng)建好。當服務端執(zhí)行accept()方法時,就會從全連接隊列里拿出一條全連接。

eacd64fc-a1a5-11ed-bfe3-dac502259ad0.png

半連接隊列和全連接隊列

至此,連接就算準備好了,之后,就可以開始傳輸數(shù)據(jù)。

雖然都叫隊列,但半連接隊列其實是個hash表,而全連接隊列其實是個鏈表。

那么問題來了,為什么半連接隊列要設計成哈希表而全連接隊列是個鏈表?這個在我在我之前寫的《沒有accept,能建立TCP連接嗎?》已經(jīng)提到過,不再重復。

數(shù)據(jù)傳輸

為了實現(xiàn)發(fā)送和接收數(shù)據(jù)的功能,sock結構體里帶了一個發(fā)送緩沖區(qū)和一個接收緩沖區(qū),說是緩沖區(qū),但其實就是個鏈表,上面掛著一個個準備要發(fā)送或接收的數(shù)據(jù)。

當應用執(zhí)行send()方法發(fā)送數(shù)據(jù)時,同樣也會通過sock_fd句柄找到對應的文件,根據(jù)文件指向的sock結構,找到這個sock結構里帶的發(fā)送緩沖區(qū),將數(shù)據(jù)會放到發(fā)送緩沖區(qū),然后結束流程,內核看心情決定什么時候將這份數(shù)據(jù)發(fā)送出去。

接收數(shù)據(jù)流程也類似,當數(shù)據(jù)送到linux內核后,數(shù)據(jù)不是立馬給到應用程序的,而是先放在接收緩沖區(qū)中,數(shù)據(jù)靜靜躺著,卑微的等待應用程序什么時候執(zhí)行recv()方法來拿一下。就像我的文章,躺在你的推文列表里,卑微的等一個點贊關注轉發(fā)三連。懂?

eadc9602-a1a5-11ed-bfe3-dac502259ad0.png

sock的發(fā)送和接收緩沖區(qū)

IP和端口其實不在sock下,而在inet_sock下,上面這么畫只是為了簡化。。。

那么問題來了,發(fā)送數(shù)據(jù)是應用程序主動發(fā)起,這個大家都沒問題。

那接收數(shù)據(jù)呢?數(shù)據(jù)從遠端發(fā)過來了,怎么通知并給到應用程序呢?

這就需要用到等待隊列。

eb0b4146-a1a5-11ed-bfe3-dac502259ad0.png

sock內的等待隊列

當你的應用進程執(zhí)行recv()方法嘗試獲取(阻塞場景下)接收緩沖區(qū)的數(shù)據(jù)時。

?如果有數(shù)據(jù),那正好,取走就好了。這點沒啥疑問。

?但如果沒數(shù)據(jù),就會將自己的進程信息注冊到這個sock用的等待隊列里,然后進程休眠。如果這時候有數(shù)據(jù)從遠端發(fā)過來了,數(shù)據(jù)進入到接收緩沖區(qū)時,內核就會取出sock的等待隊列里的進程,喚醒進程來取數(shù)據(jù)。

eb2abe5e-a1a5-11ed-bfe3-dac502259ad0.png

recv時無數(shù)據(jù)進程進入等待隊列

有時候,你會看到多個進程通過fork的方式,listen了同一個socket_fd。在內核,它們都是同一個sock,多個進程執(zhí)行l(wèi)isten()之后,都嗷嗷等待連接進來,所以都會將自身的進程信息注冊到這個socket_fd對應的內核sock的等待隊列中。如果這時真來了一個連接,是該喚醒等待隊列里的哪個進程來接收連接呢?這個問題的答案比較有趣。

?在linux 2.6以前,會喚醒等待隊列里的所有進程。但最后其實只有一個進程會處理這個連接請求,其他進程又重新進入休眠,這些被喚醒了又無事可做最后只能重新回去休眠的進程會消耗一定的資源。就好像你在廣東的街頭,想問路,叫一聲靚仔,幾十個人同時回頭,但你其實只需要其中一個靚仔告訴你路該怎么走。你這種一不小心動這靚仔的場景,在計算機領域中,就叫驚群效應

?在linux 2.6之后,只會喚醒等待隊列里的其中一個進程。是的,socket監(jiān)聽的驚群效應問題被修復了。

eb5c7bec-a1a5-11ed-bfe3-dac502259ad0.png

驚群效應

看到這里,問題又來了。

服務端 listen 的時候,那么多數(shù)據(jù)到一個 socket 怎么區(qū)分多個客戶端的?

以TCP為例,服務端執(zhí)行l(wèi)isten方法后,會等待客戶端發(fā)送數(shù)據(jù)來??蛻舳税l(fā)來的數(shù)據(jù)包上會有源IP地址和端口,以及目的IP地址和端口,這四個元素構成一個四元組,可以用于唯一標記一個客戶端。

其實說四元組并不嚴謹,因為過程中還有很多其他信息,也可以說是五元組。。。但大概理解就好,就這樣吧。。。

eb6d53d6-a1a5-11ed-bfe3-dac502259ad0.png

四元組

服務端會創(chuàng)建一個新的內核sock,并用四元組生成一個hash key,將它放入到一個hash表中。

eb81eab2-a1a5-11ed-bfe3-dac502259ad0.png

四元組映射成hash鍵

下次再有消息進來的時候,通過消息自帶的四元組生成hash key再到這個hash表里重新取出對應的sock就好了。所以說服務端是通過四元組來區(qū)分多個客戶端的

eb9c4df8-a1a5-11ed-bfe3-dac502259ad0.png

多個hash_key對應多個客戶端

sock怎么實現(xiàn)"繼承"

最后遺留一個問題。

大家都知道linux內核是C語言實現(xiàn)的,而C語言沒有類也沒有繼承的特性,是怎么做到"繼承"的效果的呢?

在C語言里,結構體里的內存是連續(xù)的,將要繼承的"父類",放到結構體的第一位,就像下面這樣。

structtcp_sock{
/*inet_connection_sockhastobethefirstmemberoftcp_sock*/
structinet_connection_sockinet_conn;
//其他字段
}

structinet_connection_sock{
/*inet_sockhastobethefirstmember!*/
structinet_sockicsk_inet;
//其他字段
}

然后我們就可以通過結構體名的長度來強行截取內存,這樣就能轉換結構體,從而實現(xiàn)類似"繼承"的效果。

//sock轉為tcp_sock
staticinlinestructtcp_sock*tcp_sk(conststructsock*sk)
{
return(structtcp_sock*)sk;
}
ebb6284a-a1a5-11ed-bfe3-dac502259ad0.png

內存布局

總結

?socket中文套接字,我理解為一用于連的數(shù)。并不一定準確,歡迎評論。

? sock在內核,socket_fd在用戶空間,socket層介于內核和用戶空間之間。

?在操作系統(tǒng)內核空間里,實現(xiàn)網(wǎng)絡傳輸功能的結構是sock,基于不同的協(xié)議和應用場景,會被泛化為各種類型的xx_sock,它們結合硬件,共同實現(xiàn)了網(wǎng)絡傳輸功能。為了將這部分功能暴露給用戶空間的應用程序使用,于是引入了socket層,同時將sock嵌入到文件系統(tǒng)的框架里,sock就變成了一個特殊的文件,用戶就可以在用戶空間使用文件句柄,也就是socket_fd來操作內核sock的網(wǎng)絡傳輸能力。

?服務端可以通過四元組來區(qū)分多個客戶端。

?內核通過c語言"結構體里的內存是連續(xù)的"這一特點實現(xiàn)了類似繼承的效果。







審核編輯:劉清

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

    關注

    1

    文章

    213

    瀏覽量

    36636
  • ICMP
    +關注

    關注

    0

    文章

    52

    瀏覽量

    15516
  • 網(wǎng)絡通信

    關注

    4

    文章

    829

    瀏覽量

    32387
  • TCP協(xié)議
    +關注

    關注

    1

    文章

    101

    瀏覽量

    12700

原文標題:如何/為何 使用socket實現(xiàn)網(wǎng)絡通信

文章出處:【微信號:談思實驗室,微信公眾號:談思實驗室】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    Socket 775是什么?Socket T介紹

    Socket 775是什么 Socket 775又稱為Socket T,目前采用此種插槽的有LGA775封裝的單核心的Pentium 4、Pentium 4 EE、Celeron D以及
    發(fā)表于 04-26 09:01 ?4777次閱讀

    Socket 604是什么

    Socket 604是什么 與Socket 603相仿,Socket 604仍然是應用于Intel平臺高端的服務器/工作站主板,但與Socket 603的最大區(qū)別是增加了對133MH
    發(fā)表于 04-26 09:03 ?2008次閱讀

    Socket 423插槽是什么

    Socket 423插槽是什么 Socket 423插槽是最初Pentium 4處理器的標準接口,Socket 423的外形和前幾種Socket類的插槽類似,對應的CPU針腳數(shù)為42
    發(fā)表于 04-26 09:06 ?1886次閱讀

    Socket 7插槽是什么

    Socket 7插槽是什么 Socket 7:Socket在英文里就是插槽的意思,Socket 7也被叫做Super 7。最初是英特爾公司為Pentium MMX系列CPU設計的插槽
    發(fā)表于 04-26 09:09 ?9810次閱讀

    Socket 604

    Socket 604            與Socket 603相仿,Socket 604仍然是
    發(fā)表于 12-24 13:46 ?871次閱讀

    socket是什么意思_socket編程是什么意思_socket詳解

    從編程語言的角度,socket是一個無符號整型變量,用來標識一個通信進程。兩個進程通信,總要知道這幾個信息:雙方的ip地址和端口號,通信所采用的協(xié)議棧。socket就是和這些東西綁定的,實現(xiàn)s
    發(fā)表于 12-28 17:21 ?2.4w次閱讀

    一切皆Socket!Socket是什么?

    socket函數(shù)對應于普通文件的打開操作。普通文件的打開操作返回一個文件描述字,而socket()用于創(chuàng)建一個socket描述符(socket descriptor),它唯一標識一個
    的頭像 發(fā)表于 03-30 13:59 ?5715次閱讀
    一切皆<b class='flag-5'>Socket</b>!<b class='flag-5'>Socket</b>是什么?

    如何使用Socket實現(xiàn)TCP和UDP的原理探索

    Socket是傳輸層提供的網(wǎng)絡進程通信接口。它封裝了通信協(xié)議族系的不同、同一族系傳輸層不同協(xié)議的差別。用戶可以為Socket 機制選取不同的參數(shù),使Socket機制支持不同族系的通信協(xié)議以及
    發(fā)表于 11-28 11:54 ?9次下載
    如何使用<b class='flag-5'>Socket</b><b class='flag-5'>實現(xiàn)</b>TCP和UDP的原理探索

    分析協(xié)議層注冊進內核以及socket的過程

    1. 前言 本文首先從宏觀上概述了數(shù)據(jù)包發(fā)送的流程,接著分析了協(xié)議層注冊進內核以及socket的過程,最后介紹了通過 socket 發(fā)送網(wǎng)絡數(shù)據(jù)的過程。 2. 數(shù)據(jù)包發(fā)送宏觀視角 從
    的頭像 發(fā)表于 08-04 16:13 ?1565次閱讀

    socket是什么以及socket的原理和內核實現(xiàn)

    我相信大家剛開始學socket的時候,都跟我一樣。
    的頭像 發(fā)表于 06-26 14:14 ?4148次閱讀
    <b class='flag-5'>socket</b>是什么<b class='flag-5'>以及</b><b class='flag-5'>socket</b>的原理和<b class='flag-5'>內核實現(xiàn)</b>

    socket、端口、進程的關系

    特定的TCP端口。 而 socket 呢,是網(wǎng)絡編程中的概念,對TCP/IP協(xié)議進行了抽象和實現(xiàn),并為應用層提供接口。這里的應用A,可以是FTP應用,它屬于用戶進程,通過socket內核
    的頭像 發(fā)表于 11-10 15:02 ?2160次閱讀
    <b class='flag-5'>socket</b>、端口、進程的關系

    如何理解socket編程接口

    不同計算機之間進行通信的方法。在網(wǎng)絡編程中,Socket被廣泛用于實現(xiàn)客戶端和服務器之間的通信。 1.2 Socket的分類 根據(jù)通信方式的不同,Socket可以分為兩大類:流式
    的頭像 發(fā)表于 08-16 10:48 ?1317次閱讀

    如何在Python中使用socket

    1. 基本概念 在開始使用socket之前,我們需要了解一些基本的網(wǎng)絡通信概念: IP地址 :用于標識網(wǎng)絡上的設備。 端口 :用于標識設備上的特定服務。 協(xié)議 :用于規(guī)定數(shù)據(jù)傳輸?shù)囊?guī)則,如TCP
    的頭像 發(fā)表于 11-01 16:10 ?1050次閱讀

    C語言中的socket編程基礎

    Socket編程簡介 Socket是一種通信機制,允許程序之間進行通信。在C語言中,socket編程是網(wǎng)絡編程的基礎。通過使用socket,程序可以發(fā)送和接收數(shù)據(jù),
    的頭像 發(fā)表于 11-01 16:51 ?1861次閱讀

    socket 與 RESTful API 的使用

    在現(xiàn)代網(wǎng)絡應用中,數(shù)據(jù)傳輸和通信是核心功能之一。為了實現(xiàn)這一功能,開發(fā)者通常會使用兩種主流的技術:Socket和RESTful API。 1. Socket的概念和特點 1.1 Socket
    的頭像 發(fā)表于 11-12 14:22 ?1381次閱讀