In the Linux kernel, TCP data (under HTTP or any other protocol) is processed in the network stack. The network stack is a set of kernel functions and data structures responsible for handling network communication. When data is received from the network interface, it goes through various layers of the network stack, including the TCP/IP layer, before being delivered to the appropriate application.
The specific location in the Linux kernel where TCP data (including HTTP data) is processed depends on the kernel version and the networking subsystem being used. However, some common files and directories in the Linux kernel source code tree related to TCP data processing are as follows:
net/ipv4/tcp.c: This file contains the core implementation of the TCP protocol for IPv4. It includes functions for handling TCP segments, connection setup, data transmission, and other TCP-related operations.
net/ipv4/tcp_input.c: This file handles the incoming TCP segments and processes them based on their sequence numbers, window sizes, and other TCP-related parameters.
net/ipv4/tcp_output.c: This file deals with the generation of outgoing TCP segments, including sending data to remote peers.
net/ipv4/tcp_timer.c: TCP uses various timers to manage retransmission, connection timeouts, and other timing-related tasks. This file contains the implementation of TCP timers.
include/net/tcp.h: This header file contains the TCP-related data structures, macros, and function prototypes used by various TCP-related modules.
include/net/tcp_states.h: This header file defines the different states of a TCP connection, such as ESTABLISHED, SYN_SENT, FIN_WAIT1, etc.
Keep in mind that the Linux kernel is constantly evolving, and the specific code locations may change across different kernel versions. Therefore, it's essential to refer to the specific version of the Linux kernel you are working with.
You can find the Linux kernel source code at the official Linux kernel repository: https://github.com/torvalds/linux
To browse the kernel source code or search for specific files, you can use the repository's web interface or clone the repository locally and explore it using any text editor or IDE.