tcp_connect()
--> tcp_transmit_skb() # tcp_output.c
--> icsk->icsk_af_ops->queue_xmit # kernel/net/ipv4/tcp_output.c ( .queue_xmit = ip_queue_xmit )
--> ip_queue_xmit() # kernel/net/ipv4/ip_output.c
* --> ip_local_out() # kernel/net/ipv4/ip_output.c
--> __ip_local_out() # kernel/net/ipv4/ip_output.c
--> nf_hook() # kernel/include/linux/netfilter.h
--> nf_hook_thresh() # kernel/include/linux/netfilter.h \
Returns 1 if the hook has allowed the packet to pass.
ip_forward --> dst_output() # kernel/include/net/dst.h
--> skb_dst(skb)->output(net, sk, skb) # kernel/include/net/dst.h
* --> ip_output() # kernel/net/ipv4/ip_output.c
--> ip_finish_output() # kernel/net/ipv4/ip_output.c
* --> ip_finish_output2() # kernel/net/ipv4/ip_output.c
* --> dst_neigh_output() # kernel/include/net/dst.h
--> neigh_hh_output() # kernel/include/net/neighbour.h
--> dev_queue_xmit() # kernel/net/core/dev.c
--> n->output() #
* --> neigh_resolve_output() # kernel/net/core/neighbour.c
--> neigh_event_send() # kernel/include/net/neighbour.h
--> __neigh_event_send() # kernel/net/core/neighbour.c
* --> neigh_probe() # kernel/net/core/neighbour.c
--> neigh->ops->solicit # 实际调用 arp_solicit 函数,该函数会发送 arp 请求
* --> arp_solicit() # kernel/net/ipv4/arp.c
* --> arp_send_dst() # kernel/net/ipv4/arp.c
* --> arp_create() # kernel/net/ipv4/arp.c
* --> arp_xmit() # kernel/net/ipv4/arp.c
* --> arp_xmit_finish() # kernel/net/ipv4/arp.c
* --> dev_queue_xmit() # kernel/net/core/dev.c
--> __dev_queue_xmit() # kernel/net/core/dev.c
--> dev_queue_xmit() # kernel/net/core/dev.c
* --> __dev_queue_xmit() # kernel/net/core/dev.c
* --> __dev_xmit_skb() # kernel/net/core/dev.c
--> neigh_update() # kernel/net/core/neighbour.c
--> neigh_connect(neigh); # 修改output函数为neigh_connected_output
--> n1->output(n1, skb); # 调用neigh的output函数,此时已经改成connect函数
--> neigh_connected_output() # kernel/net/core/neighbour.c
--> dev_queue_xmit() # kernel/net/core/dev.c
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通