当前位置: 首页 > backend >正文

linux网络内核的核心函数作用和简介

linux网络内核中包含大量关键函数,涉及网络协议栈的各个层面(数据链路层、网络层、传输层、套接字层等)。linux网络内核的核心函数作用和简介:

socket套接字层

提供用户空间与内核网络协议栈的接口。

常见函数:

  • sock_create(): 创建 socket。

  • sock_sendmsg() / sock_recvmsg(): 发送/接收消息。

  • sock_release(): 释放socket。

  • sys_socket(), sys_bind(), sys_connect(), sys_listen(), sys_accept(), sys_sendto() 等:系统调用入口。

TCP/UDP传输层

处理端口、连接、流控制、拥塞控制等。

TCP关键函数:

  • tcp_v4_connect(): 建立TCP连接。

  • tcp_sendmsg(): 发送数据。

  • tcp_recvmsg(): 接收数据。

  • tcp_v4_rcv(): 处理收到的TCP包。

  • tcp_input.c: 包含TCP接收状态机,如tcp_rcv_established()tcp_rcv_synsent_state_process() 等。

UDP关键函数:

  • udp_sendmsg()

  • udp_recvmsg()

  • udp_queue_rcv_skb(): 将数据包放入接收队列。

  • udp_rcv(): 处理UDP数据包。

IP网络层

负责IP分片、路由、ICMP等。

IPv4关键函数:

  • ip_rcv(): 接收并处理IP包,是IPv4的主入口。

  • ip_local_deliver(): 交给本机处理。

  • ip_forward(): 转发数据包。

  • ip_output(): 发送数据包。

  • ip_queue_xmit(): 发送数据前的封装函数。

数据链路层

负责网卡驱动交互和帧封装。

函数入口/出口:

  • netif_rx(): 接收方向的入口,数据包进入协议栈。

  • dev_queue_xmit(): 发送方向的接口,数据包从协议栈到驱动层。

  • eth_type_trans(): 确定帧的协议类型。

协议栈初始化

设置协议栈和注册协议。

  • inet_init(): 初始化INET协议族(TCP/IP)。

  • ip_init(), tcp_init(), udp_init(): 初始化各层协议。

  • register_netdevice(): 注册网络设备。

  • register_inetaddr_notifier(): 注册IP地址变更通知。

中断与软中断

处理收发中断和协议栈上下文切换。

  • net_rx_action(): 软中断接收数据。

  • netif_receive_skb(): 将skb交给协议栈处理。

  • napi_poll(): NAPI poll模式处理数据包。

skb核心操作

数据在协议栈中传递的核心结构。

  • alloc_skb(): 分配skb。

  • skb_put(), skb_push(), skb_pull(): 调整数据指针。

  • kfree_skb(): 释放skb。

路由子系统

负责查找目标地址的下一跳。

  • ip_route_input_noref(), ip_route_output_flow(): 路由查找。

  • fib_lookup(): FIB表查找函数。

  • dst_output(): 目标设备输出。

netfilter防火墙钩子机制

用于包过滤、NAT等。

  • nf_register_hook(): 注册netfilter钩子。

  • nf_hook_slow(): 处理钩子函数。

  • ipt_do_table(): iptables主处理函数。

http://www.xdnf.cn/news/6960.html

相关文章:

  • Vim编辑器命令模式操作指南
  • CodeBuddy 助力小程序开发,一款面试答题小程序诞生
  • C++中隐式的类类型转换知识详解和注意事项
  • Spring Boot- 2 (数万字入门教程 ):数据交互篇
  • 面试之 Java 新特性 一览表
  • 电池的充放电电流中C的含义
  • Windows系统信息收集指南
  • 多线程(4)——线程安全,锁
  • [Windows] 系统综合优化工具 RyTuneX 1.3.1
  • 安全性(二):数字签名
  • MoveIt Setup Assistant 在导入urdf文件的时候报错
  • 中国电力行业CCUS多目标优化模型分析
  • 数据结构与算法-线性表-循环链表(Circular Linked List)
  • 1.Hello Python!
  • Git 项目切换到新的远程仓库地址
  • STM32外设DA实战-DAC + DMA 输出正弦波
  • 文字溢出省略号显示
  • 一、电机篇
  • 降维,流行学习,度量学习
  • Redis的发布订阅模型是什么,有哪些缺点?
  • Doris bitmap原理
  • 阿里通义千问 Qwen3 系列模型正式发布,该模型有哪些技术亮点?
  • pytorch小记(二十一):PyTorch 中的 torch.randn 全面指南
  • WebAuthn开发常见问题及解决方案汇总:多语言支持、依赖管理与安全验证实践
  • Android同屏采集并推送RTMP和启动轻量级RTSP服务技术实践
  • QT之LayOut布局
  • SVGPlay:一次 CodeBuddy 主动构建的动画工具之旅
  • GO语言学习(三)
  • 项目管理学习-CSPM-4考试总结
  • VC++6.0分步执行常见问题及解决方案