IP layer (ip_rcv) validates IP header, checks routing (finds local destination), determines L4 protocol (e.g., TCP), strips IP header.
TCP layer (tcp_v4_rcv) finds matching socket via 4-tuple lookup.
Processes TCP header (seq/ack numbers, flags). For DATA on ESTABLISHED: queues sk_buff data in socket receive queue (sk->sk_receive_queue). Schedules TCP ACK.
Kernel wakes up application process if it was sleeping in e.g., recv() waiting for data.
Application resumes in kernel mode (system call). Kernel copies data from sk_buff(s) in receive queue to app's user-space buffer.
Kernel frees processed sk_buff(s). System call returns number of bytes copied.
Application execution returns to user space with data in its buffer.