操作系统实战 45 讲
彭东
网名 LMOS,Intel 傲腾项目关键开发者
65203 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 60 讲
尝尝鲜:从一个Hello到另一个Hello (2讲)
特别放送 (1讲)
操作系统实战 45 讲
15
15
1.0x
00:00/00:00
登录|注册

39 | 瞧一瞧Linux:详解socket实现与网络编程接口

vfs_inode
socket
i_fop
ops
prot
protocol
type
list
struct sk_buff
数据包
socket_slloc
inode
skc_refcnt
skc_bind_node
skc_node
skc_bound_dev_if
skc_reuse
skc_state
skc_family
ops
type
wait
sk
file
fasync_list
flags
state
套接字与其他通信机制的不同
struct inet_protosw
sock_init()
Socket Buffer
VFS
struct sock
struct socket
struct socket结构
套接字是通信的抽象描述
思考题
地址族的值和协议交换表
套接字的初始化
套接字缓存
套接字与文件
数据结构
作用
套接字
Linux网络程序
瞧一瞧Linux:详解socket实现与网络编程接口
参考文章

该思维导图由 AI 生成,仅供参考

你好,我是 LMOS。
前面我们了解了网络的宏观架构,建立了网络模块知识的大局观,也进行了实际的组网实践。现在我们来瞧一瞧 Linux 的网络程序,不过想要入门 Linux 的网络编程,套接字也是一个绕不开的重要知识点,正是有了套接字,Linux 系统才拥有了网络通信的能力。而且网络协议的最底层也是套接字,有了这个基础,你再去看相关的网络协议的时候也会更加轻松。
我会通过两节课的内容带你了解套接字的原理和具体实现。这节课,我们先来了解套接字的作用、工作原理和关键数据结构。下一节课,我们再一起研究它在 Linux 内核中的设计与实现。
好,让我们开始今天的学习吧。

如何理解套接字

根据底层网络机制的差异,计算机网络世界中定义了不同协议族的套接字(socket),比如 DARPA Internet 地址(Internet 套接字)、本地节点的路径名(Unix 套接字)、CCITT X.25 地址(X.25 套接字)等。
我们会重点讲解跟网络子系统和 TCP/IP 协议栈息息相关的一种套接字——Internet 套接字。如果你对其他类型的套接字有兴趣,可以自行阅读这里的资料
Internet 套接字是 TCP/IP 协议栈中传输层协议的接口,也是传输层以上所有协议的实现。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入介绍了Linux套接字的实现与网络编程接口。首先,解释了套接字的作用和工作原理,以及不同协议族的套接字。重点讲解了Internet套接字在TCP/IP协议栈中的重要性,以及套接字在网络程序功能中的作用。接着,详细介绍了Linux操作系统下套接字的数据结构,包括struct socket和struct sock的定义和作用。此外,还讨论了套接字与文件的连接实现方式,以及套接字缓存的重要性和作用。文章通过深入浅出的方式,帮助读者了解了Linux套接字的原理和具体实现,为进一步学习网络编程奠定了基础。文章还强调了Linux的套接字体系结构独立于具体网络协议栈的套接字,可以同时支持多个网络协议栈的工作,并分析了套接字从创建的过程。整体而言,本文内容丰富,适合对Linux套接字感兴趣的读者深入学习。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《操作系统实战 45 讲》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(7)

  • 最新
  • 精选
  • 不及胜于过之
    置顶
    昨天一天撸完,体会很深,专门写了一个学习总结与linux的爬坡之路,https://mp.weixin.qq.com/s/XqXIvEfhNPXQ1RSs0XeFUQ 麻烦多指正,过去一直持续在学linux,这个时候看到您的文章对我是一个很好的沉淀与认知突破,巨感谢大佬

    作者回复: 6666

    2021-08-09
    2
  • 不及胜于过之
    今天一天看完了您的所有课程,收获非常非常大。尤其是:要实现一个功能模块,首先要设计出相应的数据结构(以及这些数据结构的管理数据结构,比如链表等),基于数据结构设计初始化函数以及该功能模块对应的业务函数。为学习操作系统模块或所有技术项目代码提供了思路,感谢东哥。

    作者回复: 哈哈 对的 基于数据结构才能解决问题

    2021-08-08
    2
    7
  • pedro
    进程间的通信方式有很多,比如说管道,共享内存,信号等,但这些通信方式都有一个很大的局限性,那就是无法跨物理机通信,只能与同一个机器上的其它进程通信,而套接字恰好打破了这个桎梏,只要你在线上(网络上),我就可以通过ip地址打你电话,和你说话!

    作者回复: 是的 铁汁

    2021-08-06
    6
  • 艾恩凝
    哎,说实话从本科开始就讨厌网络,现在依然如此

    作者回复: 为什么啊

    2022-05-16
    2
  • MacBao
    套接字可以跨主机,其他的不可以

    作者回复: 哈哈 铁汁牛逼

    2021-08-06
  • 摘桃慢
    好多新的名字出现,有些抽象,希望能够形象一些。不知道能不能举个例子?
    2023-07-16归属地:江苏
    1
  • Mike_Han
    老师,有个疑问,文中说到:“结合上面代码我们发现,内核使用 struct inet_protosw 数据结构实现的协议交换表,将应用程序通过 socketcall 系统调用指定的套接字操作,转换成对某个协议实例实现的套接字操作函数的调用。”为什么不直接调用 socket 中的 ops(ops 直接指向具体协议的操作)呢
    2021-10-21
收起评论
显示
设置
留言
7
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部