tcp_rcv_synsent_state_process函数
tcp_rcv_synsent_state_process 是 Linux Kernel 中用于处理 TCP 连接在 SYN-SENT 状态下接收到报文的函数。这个函数在 TCP 三次握手阶段起到了至关重要的作用,处理了在客户端发送 SYN 请求之后收到服务器响应报文的各种情况。
以下是这个函数的解读和剖析:
int tcp_rcv_synsent_state_process(struct sock *sk, struct sk_buff *skb,
const struct tcphdr *th, unsigned int len)
{
struct tcp_sock *tp = tcp_sk(sk);
struct tcp_options_received tmp_opt;
struct tcp_fastopen_cookie foc = { .len = -1 };
bool fastopen_fail;
int saved_clamp;
saved_clamp = tp->rx_opt.mss_clamp;
tmp_opt.saw_tstamp = 0;
tmp_opt.rcv_tsecr = 0;
tmp_opt.user_mss = tp->rx_opt.user_mss;
tp->rx_opt.mss_clamp = saved_clamp;
if (th->ack) {
/* 如果收到带有 ACK 标志的数据包&