首页 > 解决方案 > Linux内核中的tcp_disconnect函数是做什么的,在什么情况下会被调用?

问题描述

我正在尝试在 Linux 内核模块中实现 ULP,并且一直在查看全局变量中的函数指针struct proto tcp_prot,以便了解哪些函数指针字段要复制到我自己的struct proto字段中,以及哪些字段要覆盖我的自己的实现。的字段之一struct protodisconnect设置为核函数tcp_disconnect。但是,我似乎找不到此功能的用户空间类似物,而且 Google 也没有提供任何有用的东西。那么这样做的目的是tcp_disconnect什么?它做什么以及何时调用它?

标签: clinuxtcpkernel

解决方案


像大多数协议栈一样,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


推荐阅读