+ -
当前位置:首页 → 问答吧 → 急-TCP握手一个小问题

急-TCP握手一个小问题

时间:2010-07-15

来源:互联网

本帖最后由 peking_A_Liang 于 2010-07-16 13:32 编辑

请教下,现在有个任务,是需要记录TCP三次握手的时间问题,最近几天看了看三次握手的过程,大体有个了解,记录时间问题,我初步想到可以利用TCP的时间戳选项来解决,但时间戳选项里面的是unsigned int 类型,不是显示的是比如几点几分,请高手帮忙解决下此问题,非常感谢。
1,可以利用TCP_TIMESTAMPS数值差,然后最后通过什么转换,转换成时间。
2,然后可以通过与proc的结合呈现在/proc下的文件里。
谢谢。。
期待高手。谢谢。
[email protected]

作者: peking_A_Liang   发布时间: 2010-07-15

由于客户端到服务器发起请求这段时间不知道,而且他们的时钟频率也不一定相同,所以,只能考虑服务器收到syn包,然后发syn-ack,最后收ack的这段时间,谁能帮给下实例代码,请注意,同步问题。

作者: peking_A_Liang   发布时间: 2010-07-15

哪位朋友帮分析下呀,其实也就是RTT的计算。

作者: peking_A_Liang   发布时间: 2010-07-15

不启用tcp头部的时间戳选项。用另外的方法。可以在sock里加入timeval类型的变量,然后通过do_gettimeofday()来计算?
在线等答案。

作者: peking_A_Liang   发布时间: 2010-07-15

没人回答么,好心人帮帮忙啊

作者: peking_A_Liang   发布时间: 2010-07-15

自己写了写代码部分。不 知道对否,请路过的高人指点下。。。
c----->s     --------syn包                     1
c<----s      --------syn-ack包               2
c---->s      --------ack包                       3
计算1到3的这个过程的时间,即从服务器收到syn包,服务器给出syn-ack回应包,客户端给出ack包,这段时间。

1,数据结构更改 include/net/sock.h
struct sock{
    ......
    struct timeval begining_time;//增加这2个变量
    struct timeval ending_time;
    ......
}
然后在net/ipv4/tcp_input.c里修改如下
int tcp_rcv_state_process(struct sock *sock,struct sk_buff *skb,struct tcphdr *th,unsigned len)
{
    ......
    case TCP_LISTEN:
    {
        ......
        if(th->syn)
       {
            //增加这段
            if(likely(sysctl_tcp_do_compute_rtt))
            {
                memset(&sk->begining_time,0,sizeof(struct timeval));
                do_gettimeofday(&sk->begining_time);
            }
       }

        ......
    }
    ......
    case TCP_SYN_RECV:
    if(acceptable)
    {
          tp->copied_seq = tp->rcv_nxt;
          smp_mb();
          tcp_set_state(sk,TCP_ESTABLISHED);
          //增加部分
          if(likely(sysctl_tcp_do_compute_rtt))
          {
                memset(&sk->ending_time,0,sizeof(struct timeval));
                do_gettimeofday(&sk->ending_time);
           //然后这2个时间的差值,应该是我需要的东西把。
          }
    }
}

sysctl_tcp_do_compute,为增加的sysctl控制开关,最后ending_time和begining_time的差值应该是最后的结果吧,现在的情况,没考虑syn cookies,基本的功能,请高手指教下,有别的方法请帮貼出来,谢谢。。。

作者: peking_A_Liang   发布时间: 2010-07-16

有时间的朋友帮分析下,谢谢了。。。

作者: peking_A_Liang   发布时间: 2010-07-16

热门下载

更多