应用程序连接服务器时,目的地套接字地址(端口号和IP地址)以参数形式传递给系统调用connect(tcp_v4_connect())。下面逐步介绍初始化该连接

  1. 检查内核路由表,查找给定目的地IP地址路由表。该路由包含传出设备信息,如果没有传出设备,则初始化APR特定信息,并缓冲以便后用。若没有找到则返回错误。
    /**
     * 特殊的路由查找函数,用于TCP。
     * 是对普通路由缓存查找函数的封装。
     */
    static inline int ip_route_connect(struct rtable **rp, u32 dst,
                       u32 src, u32 tos, int oif, u8 protocol,
                       u16 sport, u16 dport, struct sock *sk)
    {
        struct flowi fl = { .oif = oif,
                    .nl_u = { .ip4_u = { .daddr = dst,
                             .saddr = src,
                             .tos   = tos } },
                    .proto = protocol,
                    .uli_u = { .ports =
                           { .sport = sport,
                         .dport = dport } } };
    
        int err;
        if (!dst || !src) {
            err = __ip_route_output_key(rp, &fl);
            if (err)
                return err;
            fl.fl4_dst = (*rp)->rt_dst;
            fl.fl4_src = (*rp)->rt_src;
            ip_rt_put(*rp);
            *rp = NULL;
        }
        return ip_route_output_flow(rp, &fl, sk, 0);
    }
    查找路由

相关文章:

  • 2021-06-08
  • 2021-11-22
  • 2021-06-23
  • 2021-08-15
  • 2021-05-23
  • 2021-09-24
  • 2022-12-23
猜你喜欢
  • 2021-07-30
  • 2022-12-23
  • 2021-09-08
  • 2022-12-23
  • 2022-12-23
  • 2021-09-05
相关资源
相似解决方案