2-5:套接字(Socket)编程之从内核角度深入理解套接字
2021/6/7 14:21:28
本文主要是介绍2-5:套接字(Socket)编程之从内核角度深入理解套接字,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
文章目录
以TCP通信为例,创建套接字时使用的接口是
socket
,监听使用的
listen
,绑定使用的
bind
,不管怎样,
他们都是系统调用接口。在Linux内核代码中,是通过call来区分的
其实,创建套接字的时候,在底层会首先创建一个内核结构,叫做
struct socket
其中有两个非常重要的struct,分别是
file
和
sock
。
file
与文件有关,因为socket本质就是文件,而这是套接字,一定还要与网络相关,因此其内部还会有一个结构体是
sock
如下是sock结构体
当然这里不止这么一种
sock
,还有很多种
sock
,例如
tcp_sock
,
udp_sock
,
raw_sock
在sock中有两个结构体:
struct sk_buff_head sk_receive_queue;//接受的数据放入接受队列 struct sk_buff_head sk_write_queue;//用户层写入的数据放入该队列
当然如果你使用的是tcp,那么使用的sock就是tcp_sock
如果你使用的是udp,那么使用的sock就是udp_sock
大家可以看到无论是udp_sock
还是tcp_sock
,都必须保证“inet_sock has to be the first member ”
同时inet_sock
里的第一个字段正是sock
整个过程实际有点绕,但是总结到下面这张图中就十分清晰了
结合前面说过的task_struct
,访问时只要强转,也就是进行切片操作就可以完成任意结构体的访问了
在创建套接字时,会调用sock_map_fd
,创建一个文件,然后分配文件描述符
然后再用sock_attach_fd
,让文件和套接字产生关联
也就是下面这样
文件与套接字关系如下
这篇关于2-5:套接字(Socket)编程之从内核角度深入理解套接字的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-30uniAPP 实现全屏左右滚动滚动的效果-icode9专业技术文章分享
- 2024-06-30如何在本地使用授权或插件-icode9专业技术文章分享
- 2024-06-30伪静态规则配置方法汇总-icode9专业技术文章分享
- 2024-06-29易优CMS安装常见问题汇总-icode9专业技术文章分享
- 2024-06-28易优新手必读安装教程-icode9专业技术文章分享
- 2024-06-28忘记eyoucms后台密码怎么办?-icode9专业技术文章分享
- 2024-06-26终极指南:Scrum中如何设置需求优先级
- 2024-06-26AI大模型企业应用实战(25)-为Langchain Agent添加记忆功能
- 2024-06-26小白家庭 nas 搭建方案-icode9专业技术文章分享
- 2024-06-23AI大模型企业应用实战(14)-langchain的Embedding