码迷,mamicode.com
首页 > 其他好文 > 详细

tcp timestamps

时间:2014-08-13 22:14:17      阅读:350      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   io   ar   2014   art   

最近讨论到net.ipv4.tcp_timestamps这个系统配置是否能够开启,RFC文档上说道该值必须为单调递增,否则接受到的包可能会被丢掉

于是查看下tcp协议栈中是根据什么来生成这个timestamps的,是否会受时间改变而改变?

tcp协议栈代码如下:

static unsigned tcp_syn_options(struct sock *sk, struct sk_buff *skb,
	struct tcp_out_options *opts,
        struct tcp_md5sig_key **md5) {
        //...
        if (likely(sysctl_tcp_timestamps && *md5 == NULL)) {
	        opts->options |= OPTION_TS;
	        opts->tsval = TCP_SKB_CB(skb)->when;
	        opts->tsecr = tp->rx_opt.ts_recent;
	        size += TCPOLEN_TSTAMP_ALIGNED;
        }  
        //...
}

然后搜索到:

TCP_SKB_CB(skb)->when = tcp_time_stamp;

接着

#define tcp_time_stamp ((__u32)(jiffies))

google得知:

jiffies变量记录了系统启动以来,系统定时器已经触发的次数。内核每秒钟将jiffies变量增加HZ次。因此,对于HZ值为100的系统,1个jiffy等于10ms,而对于HZ为1000的系统,1个jiffy仅为1ms。 

测试环境抓包验证:

1、系统HZ(250)

bubuko.com,布布扣

2、开启timestamps选项后进行抓包

bubuko.com,布布扣

计算1s钟后Tsval理论上应该=1040600478 + 250 = 1040600728

实际抓包如下:

bubuko.com,布布扣

与计算值刚好相符合。

因此,这里可以判断tcp中的timestamps取的就是系统启动滴答声jiffies(若将Tsval/HZ可以看到与系统启动时间是一致的)

结论:

1、tcp_timestamps不受系统墙上时间和RTC时间修改的影响;

2、具体jiffies是否能够被修改(担心会被ntp服务修改),后续接着查询资料。

 

tcp timestamps,布布扣,bubuko.com

tcp timestamps

标签:style   blog   http   color   io   ar   2014   art   

原文地址:http://www.cnblogs.com/good90/p/3911110.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!