linux 套接口文件_花5分钟了解一下linux套接口层

当初我学习linux套接口编程的时候,就有个疑问,要想编写一个socket程序,首先得先调用socket函数,返回一个socket描述符,紧接着还有绑定端口和ip等,于是,我抽出时间,阅读linux内核中的套接口的源码,才明白是怎么回事,今天就把我学的东西与大家进行分享,当然一篇文章不能介绍所有的内容,我就一篇一篇的写,给大家进行介绍,文章的更新,得看我的自由时间了,好了,开始吧。

现如今,套接口已经成为通用的网络编程的接口,大家所熟悉的操作系统,基本都支持套接口的网络编程,套接口之所以受到广大的应用,是因为套接口它的设计,它帮我们屏蔽了底层的具体细节,应用程序无需关心底层的具体实现,而是借助套接口层将应用程序的请求映射到具体的协议上,见下图所示:

509f0e62298a5de906d014e7d8596226.png

图1

从上图我们知道,应用程序通过系统调用切换到内核空间,在内核空间调用套接口函数去处理应用程序的请求,具体调用TCP的接口还是UDP的接口,取决于套接口中的proto_ops中的函数。proto_ops的赋值取决于family。后续代码分析的时候会讲到。

接下来我们看一看套接口层最核心的数据结构,socket:

3943eb634bc9e76d48f95ec5adc04a25.png

图2

socket_state state:

这个变量用于表示套接口所处于的状态,这些状态仅仅对TCP有用。

11ba4e1ef96370e02df561b0761a7d80.png

图2

const struct proto_ops*ops:

指定了套接口对应的传输层类型的调用接口,用来将套接口映射到对应的传输层的实现,主要的类型如下:

f273726268ef14eac27f746e96152316.png

图3

struct file*file:

存储了与该套接口绑定的文件结构,具体后续章节会讲到。

从上述的介绍我们知道,struct proto_ops*ops这个数据结构是socket的核心的结构,因为通过它可以调用传输层的真正的实现。

而这种设计,恰恰是我们可以学习的,也是linux内核比较优秀的设计思想,这种屏蔽底层细节的设计,在未来的项目中,我们可以用到。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值