忘记密码   免费注册 查看新帖 | 论坛精华区

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT HPC论坛 徽章 文库 沙龙 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
查看: 991 | 回复: 4

[内核入门] 请问如何让 数据包 携带自定义固定的时间戳? [复制链接]

论坛徽章:
0
发表于 2017-04-19 10:37 |显示全部楼层
本帖最后由 flash78910 于 2017-04-19 10:42 编辑

时间戳是我自己获取的(struct timeval),在发送端获取时间戳,要在接收端提取出来另作用处。有那么几个想法:

1、sk_buff 中的 tstamp 成员。
     我在发端可以修改,但是根据 sk_buff 时间戳的更新原理,这个成员在收端接收时就会更新。也就是说无法固定,想要在路由或传输过程中不更新这个成员能做到吗?这个貌似是内核通过检查 netstamp_needed 来确定时间戳的更新(参考处:http://cxw06023273.iteye.com/blog/867159)。关于这个成员我还有些疑问,是否在 skb 的传输过程中,tstamp成员不占空间?因为这个成员不属于一个完整数据包的某个字段,例如IP包等。所以说,我用这个成员承载固定的时间戳是否可行?

2、利用IP报头的选项字段。
     本身IP固定报头的话20字节,在选项字段里添加时间戳,然后在收端提取。我也查阅过IP选项时间戳的一些资料,貌似还会记录路径IP,其实我用不了这么复杂,就只添加个发端时间戳就行,而且能在收端提取就行。

对于第二种想法,我不太想改动报头,但只要能实现,其他方法也可以。第一个方法我只是先用netfilter在发端试了下,收端的skb时间戳肯定会更新,这个在验证之前也料到了。我内核模块编程也是入门小白,请大家多多指教,谢谢大家!

打赏鼓励一下!

论坛徽章:
0
发表于 2017-04-20 15:04 |显示全部楼层
顶上去,虚心求教谢谢大家!

论坛徽章:
18
程序设计版块每日发帖之星
日期:2015-08-17 06:20:0015-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:56黑曼巴
日期:2016-12-26 16:00:32每日论坛发贴之星
日期:2016-07-18 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:51程序设计版块每日发帖之星
日期:2016-06-03 06:20:00程序设计版块每日发帖之星
日期:2016-06-02 06:20:00程序设计版块每日发帖之星
日期:2016-05-30 06:20:00
发表于 2017-04-25 18:06 |显示全部楼层
时间戳不是报文的一部分,只是接收方的meta data。

只能记在报文的payload里面,或者可选的ip option或者tcp opt,如果是局域网的话,还可以使用二层payload。
不过要注意收发两端的时钟不匹配的情况。

招聘 : c/c++研发
论坛徽章:
0
发表于 2017-04-28 14:49 |显示全部楼层
RFC 1323 TCP Timestamp option 或者加在自己的payload里面

论坛徽章:
0
发表于 2017-10-20 11:28 |显示全部楼层
回复 4# jerryhua_cu
感谢您的答复。请问如果我使用skb_put()对payload进行了扩展和插入,在接收端提取出插入的数据后,我想再删除插入数据该怎么操作?没找到关于skb_put()的反向操作资料。难道用memmove和skb_pull()配合实现?请不吝赐教,感谢!

您需要登录后才可以回帖 登录 | 注册

本版积分规则

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP