Linux内核网络协议栈深度解析:面向连接的INET套接字实现
深入剖析Linux内核中TCP连接管理的核心机制,揭示高效网络通信的实现奥秘。
一、源地址匹配:连接建立的第一道关卡
在TCP连接建立过程中,内核需要验证源地址是否匹配。inet_rcv_saddr_equal()
函数是实现这一功能的核心,它巧妙地处理了IPv4/IPv6双栈环境:
bool inet_rcv_saddr_equal(const struct sock *sk, const struct sock *sk2, bool match_wildcard) { #if IS_ENABLED(CONFIG_IPV6)if (sk->sk_family == AF_INET6)return ipv6_rcv_saddr_equal(&sk->sk_v6_rcv_saddr,inet6_rcv_saddr(sk2),sk->sk_rcv_saddr,sk2->sk_rcv_saddr,ipv6_only_sock(sk),ipv6_only_sock(sk2),match_wildcard); #endifreturn ipv4_rcv_saddr_equal(...); }
该函