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

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主处理函数。

相关文章:

  • 手写tomcat:基本功能实现(3)
  • Java IO流进阶实战详解(含文件读写、拷贝、加密、字符集)
  • R语言空间数据处理入门教程
  • BC 范式与 4NF
  • AI日报 - 2024年5月17日
  • 【React中虚拟DOM与Diff算法详解】
  • 日期数据渲染转换问题
  • Animaster:一次由 CodeBuddy 主导的 CSS 动画编辑器诞生记
  • C++高级应用(1)-类型擦除(Type Erasure)和模板特化(Template Specialization)详解
  • aksharetools:大模型智能体框架agno可直接获取A股金融数据
  • [Mac] 开发环境部署工具ServBay 1.12.2
  • React Hooks 必须在组件最顶层调用的原因解析
  • 【机器人】复现 WMNav 具身导航 | 将VLM集成到世界模型中
  • Spring Boot 项目的计算机专业论文参考文献
  • 创建react工程并集成tailwindcss
  • React中useState中更新是同步的还是异步的?
  • 文件读取漏洞路径与防御总结
  • c++重要知识点汇总(不定期更新)
  • 机器学习 day04
  • leetcode 239. 滑动窗口最大值
  • 芬兰直升机相撞坠毁事故中五名人员全部遇难
  • 竞彩湃|足总杯决赛或有冷门,德甲欧冠资格之争谁笑到最后
  • 在美国,为什么夏季出生的孩子更容易得流感?
  • 俄乌谈判开始
  • A股三大股指低收:汽车股领涨,大金融走弱,两市成交近1.1万亿元
  • 上交所五方面落实募资新规:强化关键少数责任和股东权利保障