目录

文章目录

  • 目录
  • Socket 框架
  • Netlink Socket

Socket 框架


Socket 的类型

  • IP Socket

    • tcp
    • udp
    • icmp
    • raw
  • Packet Socket
  • Netlink Socket

Socket 框架提供了以下功能:

  • Socket 的 System Calls

    • socket()
    • bind()
    • listen()
    • accept()
    • send()
    • recv()
    • etc.
  • BSD Socket API

  • Sock Layer 抽象适配层

Netlink Socket

Netlink Socket 是用于实现用户进程与内核进程通信的一种特殊的进程间通信(IPC,Inter Process Commumicate)机制,支持双向数据传输,是网络应用程序与内核通信的最常用的接口。注意,Netlink 也能用于用户空间的两个进程间通信,只是一般会选择使用 Unix Socket,而不会选择使用 Netlink。

通常的,Userspace 与 Kernel 间通信的方式有 4 种,而前 3 种都是单向的,由用户态主动发起向内核态的通信,内核无法主动发起通信。而 Netlink 可以实现双工通信,是一种异步全双工的通信方式。内核为 Netlink 通信提供了一组特殊的 API,用户态则基于标准的 Socket API,内核发送的数据会保存在接收进程 Socket 的接收缓存中,由用户态接收进程处理。

  1. /proc
  2. ioctl
  3. sysfs
  4. Netlink

Netlink 协议基于 BSD Socket 和 AF_NETLINK 地址簇(address family),使用 32bit 的端口号寻址(以前称作 PID),每个 Netlink 协议(或称作总线,man 手册中则称之为 netlink family),通常与一个或一组内核服务/组件相关联。

在 Linux 中,使用 netlink 进行 Userspace 与 Kernel 间通信的 Application 有很多,如:

  1. 路由 Daemon(NETLINK_ROUTE):用于获取、设置路由与链路信息。
  2. 转发信息表查询 (NETLINK_FIB_LOOKUP)
  3. iSCSI 子系统(NETLINK_ISCSI)
  4. IPSec 安全策略(NETLINK_XFRM)
  5. 用户态 Socket 协议(NETLINK_USERSOCK)
  6. 防火墙(NETLINK_FIREWALL)
  7. netfilter 子系统(NETLINK_NETFILTER)
  8. 内核事件向用户态通知(NETLINK_KOBJECT_UEVENT):用于 Kernel 向 Userspace 的 udev 进程发送通知。
  9. 通用 Netlink(NETLINK_GENERIC):是一个 Netlink 复用器,便于用户自行扩展子协议类型。

使用 Netlink 都要指定一个协议,可以使用内核预留的 NETLINK_GENERIC,定义在 include/uapi/linux/netlink.h 中。也可以使用自定义的协议,即:构造一个自定义的包头,在不超过最大 32 种类型的基础之上自行添加,其实就是定义一个内核还没有占用的数字。自定义协议不一定非要添加到 netlink.h 中,只要 Userspace 和 Kernel 的代码都能找到该定义即可。

内核 Netlink 子系统的初始化在系统启动阶段完成。

Linux Kernel TCP/IP Stack — Socket Layer相关推荐

  1. Linux Kernel TCP/IP Stack — Socket Layer — TCP/UDP Socket 网络编程

    目录 文章目录 目录 TCP/UDP Socket 逻辑架构 创建 Socket 绑定 Socket 请求建立 Socket 连接 监听 Socket 接受请求 关闭连接 数据的发送和接收 send ...

  2. Linux Kernel TCP/IP Stack — L3 Layer — netfilter 框架

    目录 文章目录 目录 netfilter 框架 netfilter 的组成模块 netfilter 的 Hook 机制实现 netfilter 的工作原理 规则(Rules) 链(Chains) 表( ...

  3. Linux Kernel TCP/IP Stack — L2 Layer — Linux Bridge(虚拟网桥)的基本操作

    目录 文章目录 目录 Linux bridge 的基本操作 创建 Bridge 将 veth pair 连上 Bridge 为 Bridge 配置 IP 地址 将物理网卡接口设备挂靠 Bridge L ...

  4. Linux Kernel TCP/IP Stack — L7 Layer — Application Socket I/O 接口类型

    目录 文章目录 目录 基本概念 同步与异步 阻塞与非阻塞 I/O 操作的执行流程 Socket I/O 接口类型 阻塞 IO 缺点 非阻塞 IO 缺点 阻塞 IO 与非阻塞 IO 的区别 IO 多路复 ...

  5. Linux Kernel TCP/IP Stack — L1 Layer — 多队列网卡

    目录 文章目录 目录 多队列网卡 Intel 82575 的多队列硬件实现 Intel 82575 的多队列软件驱动实现 多队列网卡识别 多队列网卡 多队列网卡,是一种用来解决网络 I/O QoS 问 ...

  6. Linux Kernel TCP/IP Stack — L3 Layer — netfilter 框架 — iptables NAPT 网络地址/端口转换

    目录 文章目录 目录 网络地址转换(NAT) SNAT DNAT 端口映射(PAT) 网络地址转换(NAT) IP 网络有公网与私网的区分,通常内网使用私网 IP,Internet 使用公网 IP,而 ...

  7. Linux Kernel TCP/IP Stack — L1 Layer — tcpdump 抓包

    目录 文章目录 目录 tcpdump CLI 关键字 常用指令选项 常规操作示例 查看哪些接口可用于捕获 过滤主机 过滤端口 过滤网络(网段) 过滤协议 复杂的逻辑表达式过滤条件 检查数据包内容 输出 ...

  8. Linux Kernel TCP/IP Stack — L2 Layer — Linux Bridge(虚拟网桥)

    目录 文章目录 目录 Linux bridge Linux bridge 的实现方式 Linux bridge 的代码逻辑 Linux bridge 在 Linux 的语境中,Bridge(网桥)和 ...

  9. Linux Kernel TCP/IP Stack — L3 Layer — 路由器子系统

    目录 文章目录 目录 Linux 作为一个路由器 路由表项的类型 route 指令 ip route 指令 添加默认路由 添加静态路由 删除静态路由 操作示例 Linux Kernel 路由子系统 路 ...

最新文章

  1. 科技边框_爱旭科技首创双面PERC电池PID FREE解决方案
  2. 上周热点回顾(6.20-6.26)
  3. 小白看Word2Vec的正确打开姿势|全部理解和应用
  4. Cpp / checked_delete 原理
  5. Netflix视频质量感知评价模型之路
  6. Android 使用jtds远程访问数据库
  7. JAVA面试题(126~170)《下》
  8. N点虚拟主机管理系统(For Windows2003/2008)功能及介绍
  9. php recordarray,php5.5新数组函数array-column使用实例
  10. pythonassert关键字_Python assert 关键字
  11. Spring JPA实现增删改查
  12. linux下重新分区、数据备份相关(parted、dd等命令)
  13. Mysql中,int(10)和int(11)的区别
  14. 服务器版操作系统驱动精灵,驱动精灵2008 Beta 3发布
  15. 鸿蒙系统只能从商城安装软件,鸿蒙系统安装不了第三方软件是为什么?鸿蒙系统怎么安装第三方app...
  16. 怎么把网页保存成pdf格式-最简单操作
  17. 两步完成druid数据库连接池的密文配置
  18. 【代码重构】拒绝继承的遗赠(Refused Bequest)--如何处理子类无需使用到父类中的某些方法和变量的情况?
  19. DPI(Deep packet inspection,深度报文解析)
  20. 解决latex图片浮动体过多的报错:Output loop---100 consecutive dead cycles和Too many unprocessed floats

热门文章

  1. iOS 11开发教程(十七)iOS11应用视图之使用按钮接收用户输入
  2. 通用数据库管理工具DBeaver
  3. python多线程同步与互斥_Python之多线程:线程互斥与线程同步
  4. jpa多表关联查询_JPA【关联查询篇】
  5. 全国计算机二级计基础题第十五套,计算机等级考试:二级VFP机试第15套
  6. mysql 前后代表什么_MySQL的锁
  7. fetch整个仓库 github_git fetch 的简单用法:更新远程代码到本地仓库
  8. 全球充电最快手机:5分钟回血50%;华为未发布新手机 | MWC 2022
  9. 小猫咪小狗狗也有智能「手表」了,可监测健康,识别情绪,还防乱跑|CES 2022...
  10. 用摩斯电码通关《黑暗之魂3》!up主自制奇葩手柄,连育碧都找上门合作