日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

2-5:套接字(Socket)编程之从内核角度深入理解套接字

發(fā)布時(shí)間:2025/3/15 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2-5:套接字(Socket)编程之从内核角度深入理解套接字 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄


以TCP通信為例,創(chuàng)建套接字時(shí)使用的接口是socket,監(jiān)聽(tīng)使用的listen,綁定使用的bind,不管怎樣,他們都是系統(tǒng)調(diào)用接口。在Linux內(nèi)核代碼中,是通過(guò)call來(lái)區(qū)分的

其實(shí),創(chuàng)建套接字的時(shí)候,在底層會(huì)首先創(chuàng)建一個(gè)內(nèi)核結(jié)構(gòu),叫做struct socket

其中有兩個(gè)非常重要的struct,分別是file和sock。file與文件有關(guān),因?yàn)閟ocket本質(zhì)就是文件,而這是套接字,一定還要與網(wǎng)絡(luò)相關(guān),因此其內(nèi)部還會(huì)有一個(gè)結(jié)構(gòu)體是sock

如下是sock結(jié)構(gòu)體

當(dāng)然這里不止這么一種sock,還有很多種sock,例如tcp_sock,udp_sock,raw_sock

在sock中有兩個(gè)結(jié)構(gòu)體:

struct sk_buff_head sk_receive_queue;//接受的數(shù)據(jù)放入接受隊(duì)列 struct sk_buff_head sk_write_queue;//用戶(hù)層寫(xiě)入的數(shù)據(jù)放入該隊(duì)列

當(dāng)然如果你使用的是tcp,那么使用的sock就是tcp_sock

如果你使用的是udp,那么使用的sock就是udp_sock

大家可以看到無(wú)論是udp_sock還是tcp_sock,都必須保證“inet_sock has to be the first member ”
同時(shí)inet_sock里的第一個(gè)字段正是sock

整個(gè)過(guò)程實(shí)際有點(diǎn)繞,但是總結(jié)到下面這張圖中就十分清晰了

結(jié)合前面說(shuō)過(guò)的task_struct,訪(fǎng)問(wèn)時(shí)只要強(qiáng)轉(zhuǎn),也就是進(jìn)行切片操作就可以完成任意結(jié)構(gòu)體的訪(fǎng)問(wèn)了

在創(chuàng)建套接字時(shí),會(huì)調(diào)用sock_map_fd,創(chuàng)建一個(gè)文件,然后分配文件描述符

然后再用sock_attach_fd,讓文件和套接字產(chǎn)生關(guān)聯(lián)

也就是下面這樣

文件與套接字關(guān)系如下

總結(jié)

以上是生活随笔為你收集整理的2-5:套接字(Socket)编程之从内核角度深入理解套接字的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。