c - Linux内核中的tcp_disconnect函数是做什么的,在什么情况下会被调用?
问题描述
我正在尝试在 Linux 内核模块中实现 ULP,并且一直在查看全局变量中的函数指针struct proto tcp_prot
,以便了解哪些函数指针字段要复制到我自己的struct proto
字段中,以及哪些字段要覆盖我的自己的实现。的字段之一struct proto
是disconnect
设置为核函数tcp_disconnect
。但是,我似乎找不到此功能的用户空间类似物,而且 Google 也没有提供任何有用的东西。那么这样做的目的是tcp_disconnect
什么?它做什么以及何时调用它?
解决方案
像大多数协议栈一样,Linux 内核中的 TCP/IP 栈被实现为状态机,即在https://wiki.aalto.fi/download/attachments/70789052/linux-tcp-review.pdf第 5 页中. 所以 TCP 协议并没有完全导出到用户空间,而是机器之间存在“隐藏通信”。
linux内核中TCP状态机的源代码tcp_disconnect()
在https://elixir.bootlin.com/linux/v4.6/source/net/ipv4/tcp.c#L2191
http://www.tcpipguide.com/free/t_TCPOperationalOverviewandtheTCPFiniteStateMachineF-2.htm