+ -
当前位置:首页 → 问答吧 → tcp问题-请教

tcp问题-请教

时间:2010-08-27

来源:互联网

我已经在内核中完成了从三次握手建立完成到连接请求被accept的这段时间差的统计。
我用什么测试方法,能够确保,我代码中统计出来的时间是正确的,有说服力的?

作者: peking_A_Liang   发布时间: 2010-08-27



QUOTE:
我已经在内核中完成了从三次握手建立完成到连接请求被accept的这段时间差的统计。


三次握手完成,就相当于服务器 accept了,你所指的这个时间差是什么?



QUOTE:
我用什么测试方法,能够确保,我代码中统计出来的时间是正确的,有说服力的?


你走到各个环节的时间都打印出来,应该就可以了。

作者: Godbach   发布时间: 2010-08-27

三次握手完成,和accept应该不是一回事吧。三次握手完成的代码在net/ipv4/tcp_input.c中下面这段,
/* step 5: check the ACK field */
        if (th->ack) {
                int acceptable = tcp_ack(sk, skb, FLAG_SLOWPATH) > 0;

                switch (sk->sk_state) {
                case TCP_SYN_RECV:
                        if (acceptable) {
                                tp->copied_seq = tp->rcv_nxt;
                                smp_mb();
                                tcp_set_state(sk, TCP_ESTABLISHED);
                                sk->sk_state_change(sk);

而accept对应的是系统调用sys_accept,最终会调用到inet_csk_accept,然后在inet_csk_accept中,如果客户端的接收队列不为空,那么服务器就会调用 newsk = reqsk_queue_get_child(&icsk->icsk_accept_queue, sk);,然后建立一个新的sock,我主要是想统计出这段时间差,可以确定的是先建立连接,然后再accept,所以时间差是正数。

作者: peking_A_Liang   发布时间: 2010-08-27