握手2

我们看一看服务器端的接收代码:

依次调用 tcp_v4_rcv,判断下面函数

struct sock *sk2 = inet_lookup_listener(dev_net(skb->dev),
                            &tcp_hashinfo,
                            iph->saddr, th->source,
                            iph->daddr, th->dest,
                            inet_iif(skb));

寻找处于 TCP_LISTEN状态的sock ,再看一下下面函数

static inline struct sock *inet_lookup_listener(struct net *net,
        struct inet_hashinfo *hashinfo,
        __be32 saddr, __be16 sport,
        __be32 daddr, __be16 dport, int dif)
{
    return __inet_lookup_listener(net, hashinfo, saddr, sport,
                      daddr, ntohs(dport), dif);
}

ntohs(dport) 也就是服务器的本地端口。

猜你喜欢

转载自www.cnblogs.com/guoyu1024/p/10591147.html