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 標志的數據包&